Pengendali Stepper Motor dengan STM32H743, TMC5160, dan Layar Sentuh TouchGFX

Ringkasan penelitian pengendali gerakan stepper motor berbasis STM32H743 dengan driver TMC5160, FreeRTOS, dan antarmuka layar sentuh 7 inci TouchGFX yang berjalan 30 fps.

Daftar isi
  1. Apa yang ingin dicapai
  2. Dasar teori singkat: bagaimana stepper motor dikendalikan
  3. Perangkat keras
  4. Perangkat lunak
  5. Alat bantu
  6. Tiga task FreeRTOS
  7. Pola Model–View–Presenter
  8. Komunikasi SPI dengan TMC5160
  9. Antarmuka pengguna
  10. Hasil pengujian
  11. 1. Fungsi perangkat keras dan lunak
  12. 2. Kesesuaian tampilan dengan posisi motor
  13. 3. Frame rate
  14. 4. Penggunaan memori
  15. Kesimpulan
  16. Saran pengembangan
  17. Pelajaran praktis

Mesin CNC, pencetak 3D, pemotong laser, dan robot lengan sama-sama bergantung pada gerakan yang presisi, dan stepper motor adalah aktuator yang paling sering dipakai untuk itu. Biasanya motor ini dikendalikan oleh kontroler atau komputer terpisah. Pada penelitian ini kami mencoba pendekatan lain: satu papan mikrokontroler STM32 yang sekaligus menjadi pengendali motor dan layar sentuh pengguna, tanpa PC tambahan.

Tulisan ini meringkas paper berikut. Detail lengkap, tabel pengujian, dan daftar acuan ada di sana.

Arifianto, M. J. & Suprapto, H. (2023). Perancangan Pengendali Gerakan Stepper Motor menggunakan Mikrokontroler STM32 dengan Tampilan Grafis TouchGFX. Jurnal Fokus Elektroda, 8(1), 13–20. DOI: 10.33772/jfe.v8i1.14

Apa yang ingin dicapai

Tujuannya membuat purwarupa pengendali stepper motor berbasis mikrokontroler dengan antarmuka LCD layar sentuh dan konsep multi-tasking. Tampilannya dirancang modern seperti layar ponsel atau tablet. Kriteria perancangannya mengacu pada kebutuhan kendali posisi di mesin CNC:

  • Pengaturan dilakukan lewat layar sentuh LCD.
  • Besaran yang diatur: posisi (sudut), kecepatan, arah putar, dan microstep.
  • Layar menampilkan posisi aktual secara real-time.
  • Posisi dapat diatur tunggal (satu nilai) atau berdasarkan tabel target yang dibuat pengguna.

Dasar teori singkat: bagaimana stepper motor dikendalikan

Stepper motor bergerak diskret, langkah demi langkah. Motor bipolar dengan sudut langkah 1,8° membutuhkan 200 langkah untuk satu putaran penuh.

Driver motor menerima dua sinyal dari mikrokontroler:

  • Step (pulsa): jumlah pulsa menentukan sudut putar, frekuensi pulsa menentukan kecepatan.
  • Direction: menentukan arah putar.

Frekuensi pulsa dinaikkan bertahap dari 0 Hz untuk percepatan dan diturunkan bertahap menuju 0 Hz untuk perlambatan. Gerakan menjadi halus dan tidak menghentak.

Driver dengan fitur microstepping mengatur arus koil sehingga rotor dapat berhenti di antara posisi full step. Contohnya, 1,8° dengan faktor ¼ menghasilkan langkah 0,45°. Pengaturan full step memberikan torsi terbesar.

Perangkat keras

Sistem terdiri dari lima bagian:

Komponen Peran Spesifikasi utama
Papan CoreH743I / OpenH743-C (Waveshare) Pengendali utama STM32H743, Arm Cortex-M7, clock 480 MHz, SDRAM 64 Mbit (IC42S16400J)
LCD TFT layar sentuh kapasitif Antarmuka pengguna 7 inci, 1024×600 piksel, RGB 24-bit, sentuh via I2C (GT911)
TMC5160 breakout board Driver dan pengendali gerakan 9…36 V, 2,8 A RMS per fasa, microstep 1…256, komunikasi SPI
Stepper motor 17HS4401 Aktuator NEMA 17, 12 V, 1,5 A, 1,8°
Catu daya Daya 5 V DC untuk mikrokontroler, 12 V DC untuk motor

Satu hal yang membuat STM32H743 cocok adalah adanya LCD controller (LTDC) di dalam chip. Layar dapat dihubungkan langsung lewat kabel FFC 40 pin tanpa pengendali layar terpisah.

Blok diagram sistem sederhana: STM32H743 terhubung ke LCD melalui bus RGB dan I2C, lalu ke TMC5160 melalui bus SPI (SCK, MOSI, MISO, dan satu pin chip select per driver). Diagram blok pada paper menggambarkan dua driver TMC5160 dengan jalur chip select terpisah (SS1 dan SS2), sehingga satu bus SPI dapat melayani lebih dari satu driver.

Koneksi dengan TMC5160 hanya memakai empat pin:

Pin STM32 Sinyal TMC5160
PA4 CSN
PA5 SCK
PA6 MISO
PA7 MOSI

Perangkat lunak

Alat bantu

  • STM32CubeMX 6.5 untuk konfigurasi pin dan clock, serta menghasilkan kode awal (firmware STM32Cube FW_H7 V1.10.0).
  • TouchGFX Designer 4.18 untuk menyusun tampilan (tombol, slider, teks, indikator) secara visual.
  • STM32CubeIDE 1.9.0 untuk menulis, mengompilasi, dan men-debug program.
  • STM32CubeProgrammer untuk memasukkan berkas HEX ke mikrokontroler.

Karena catu daya memakai adaptor AC-DC, bukan baterai, clock diatur setinggi mungkin: CPU 400 MHz, FMC 200 MHz, LTDC 22,5 MHz, serta SPI dan UART 100 MHz.

Tiga task FreeRTOS

Setelah semua periferal diinisialisasi (GPIO, UART, FMC, LTDC, DMA2D, SPI, I2C, Timer, CRC, TouchGFX), program mendefinisikan tiga thread lalu menjalankan scheduler dengan osKernelStart:

  1. TouchGFX_Process menjalankan aplikasi GUI.
  2. LED_Blinking membuat LED berkedip sebagai penanda bahwa RTOS berjalan independen.
  3. Stepper_Motor menginisialisasi motor: konfigurasi chopper, PWM, batas arus, batas kecepatan, dan percepatan.

Main loop tidak mengerjakan apa pun selain berputar tanpa henti.

Pola Model–View–Presenter

TouchGFX menghasilkan kerangka program dengan pola MVP, dengan pembagian tugas berikut:

  • Model berhubungan dengan backend. Di sinilah perintah ke TMC5160 dikirim (posisi target, kecepatan target) dan data aktual dibaca (posisi, kecepatan, apakah posisi sudah tercapai).
  • View menampilkan data ke layar dan meneruskan sentuhan pengguna, misalnya tombol Start Motor dan slider posisi atau kecepatan.
  • Presenter menjadi penghubung: mengambil data dari Model, memformatnya untuk View, dan sebaliknya.

Komunikasi SPI dengan TMC5160

TMC5160 memakai datagram SPI 40 bit: 8 bit pertama berisi 1 bit baca/tulis dan 7 bit alamat register, diikuti 4×8 bit data. Perintah dipakai untuk konfigurasi, mengatur posisi dan kecepatan, membaca posisi dan kecepatan, memulai gerakan, dan mengatur microstep.

Penulis membuat library kecil agar kode tetap rapi. Fungsi utamanya menulis dan membaca 5 byte ke/dari TMC5160 dengan tiga langkah:

  1. Turunkan pin CSN menjadi 0 dengan HAL_GPIO_WritePin().
  2. Kirim dan terima data SPI dengan fungsi HAL SPI transmit-receive. Byte pertama adalah perintah; menurut paper, 0x21 untuk membaca posisi dan 0x22 untuk membaca kecepatan.
  3. Naikkan kembali pin CSN menjadi 1.

Library ini kemudian di-include ke model.cpp pada proyek TouchGFX.

Antarmuka pengguna

Layar pertama menyediakan:

  • slider dan nilai Set Target Position serta Set Target Velocity,
  • tombol Start Motor untuk menjalankan motor,
  • pilihan microstep (Full step, 2, 4, 8, 16, 32, 64, dan seterusnya),
  • tampilan Actual Position dan Actual Velocity,
  • teks debug berisi perintah SPI ke TMC5160 dalam bilangan heksadesimal, serta counter penanda bahwa multi-tasking berjalan.

Layar kedua memungkinkan pengaturan multi-target secara berurutan (sequential), dengan indikator posisi berbentuk jarum.

Hasil pengujian

1. Fungsi perangkat keras dan lunak

Tampilan layar 7 inci sesuai rancangan TouchGFX. Layar sentuh merespons tombol dan slider, perpindahan antar-screen berhasil, posisi dan kecepatan motor dapat diatur, dan microstep dapat dipilih lewat tombol.

2. Kesesuaian tampilan dengan posisi motor

Pengujian dilakukan tanpa beban. Perbandingan dilakukan secara visual memakai kamera video 120 fps untuk membandingkan angka pada LCD dengan penunjuk di motor. Tiga kecepatan diuji, dan selisih posisi antar-pembacaan tampak konsisten pada tiap kecepatan:

Kecepatan Selisih posisi antar-pembacaan
88 step/s 2 step
1.075 step/s 25 step
2.350 step/s 54–55 step

3. Frame rate

Satu pin GPIO ditandai setiap TouchGFX me-render layar dan diukur dengan osiloskop. Periode render sekitar 33 ms. Pada rentang itu, posisi dan kecepatan aktual dibaca dari TMC5160, sehingga angka di layar diperbarui sekitar 1000 ms / 33 ms ≈ 30 kali per detik (30 fps).

4. Penggunaan memori

Dari panel Build Analyzer di STM32CubeIDE, aplikasi menggunakan RAM 16,26% dan Flash 24,14% dari kapasitas total (Flash terpakai sekitar 494 KB dari 2 MB). Artinya masih banyak ruang untuk pengembangan.

Kesimpulan

  • Pengendali stepper motor dengan STM32H743 yang terintegrasi dengan LCD-TFT kapasitif 7 inci berhasil dibuat. Posisi dan kecepatan motor dapat dikendalikan, dan nilai aktualnya dapat dibaca serta ditampilkan.
  • Aplikasi GUI dengan konsep multi-tasking berjalan pada 30 fps, sementara motor tetap dapat digerakkan pada task lain.

Saran pengembangan

Karena memori masih longgar, penulis mengusulkan:

  1. Interpolasi beberapa motor dihitung langsung di mikrokontroler.
  2. Penyimpanan eksternal lewat SDMMC, misalnya untuk menyimpan program CNC berformat G-Code.
  3. Pengembangan UX pada antarmuka agar lebih sesuai dengan kebutuhan pengguna.

Pelajaran praktis

Beberapa hal dari penelitian ini dapat langsung dicoba:

  • Gunakan driver yang memiliki pengendali gerakan sendiri. Dengan TMC5160, mikrokontroler cukup mengirim posisi target, kecepatan target, dan pengaturan percepatan lewat SPI, lalu membaca posisi dan kecepatan aktual. Beban CPU untuk motor menjadi ringan, sehingga waktunya bisa dipakai untuk menggambar layar.
  • Pisahkan pekerjaan dengan RTOS. Rendering GUI, kendali motor, dan indikator hidup masing-masing berjalan sebagai task sendiri.
  • Pakai pola MVP dari TouchGFX. Perintah hardware ditaruh di Model, sehingga tampilan bisa diubah tanpa mengusik kode motor.
  • Ukur, jangan menebak. Pin GPIO yang di-toggle saat render dan osiloskop sudah cukup untuk membuktikan frame rate, dan Build Analyzer menunjukkan sisa memori.

Paper lengkap dapat dibaca di laman jurnal.

Artikel terkait

MikrokontrolerRobotika & Sensor

Motion

Dengan menggunakan sebuah PC minimun Pentium 3 atau yang setara, kita dapat membuat sebuah sistem kendali gerakan untuk beberapa axis. Untuk keperluan ini…

2007 2 menit baca 9.832x dibaca
Mikrokontroler

LCD Grafik

This is a project for interfacing microcontroller PIC16F877 to a Graphics LCD using PicBasic Compiler.

2006 4 menit baca 17.837x dibaca