Daftar isi
- Apa yang ingin dicapai
- Dasar teori singkat: bagaimana stepper motor dikendalikan
- Perangkat keras
- Perangkat lunak
- Alat bantu
- Tiga task FreeRTOS
- Pola Model–View–Presenter
- Komunikasi SPI dengan TMC5160
- Antarmuka pengguna
- Hasil pengujian
- 1. Fungsi perangkat keras dan lunak
- 2. Kesesuaian tampilan dengan posisi motor
- 3. Frame rate
- 4. Penggunaan memori
- Kesimpulan
- Saran pengembangan
- 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:
- TouchGFX_Process menjalankan aplikasi GUI.
- LED_Blinking membuat LED berkedip sebagai penanda bahwa RTOS berjalan independen.
- 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:
- Turunkan pin CSN menjadi 0 dengan
HAL_GPIO_WritePin(). - 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.
- 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:
- Interpolasi beberapa motor dihitung langsung di mikrokontroler.
- Penyimpanan eksternal lewat SDMMC, misalnya untuk menyimpan program CNC berformat G-Code.
- 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.