Mengontrol Posisi dan Kecepatan Motor Stepper (Secara Open-Loop)
Motor stepper bekerja berdasarkan dua sinyal input: STEP dan DIR. Sinyal STEP menyatakan jumlah step yang harus ditempuh ketika berputar. Besaran sudut untuk setiap step tergantung pada spesifikasi motor (yakni jumlah step per satu putaran motor). Adapun sinyal DIR menyatakan arah putaran motor.
Motor stepper umumnya memiliki empat buah kabel, yang biasa disebut sebagai A+, A-, B+, dan B-. Melalui empat kabel inilah motor mendapatkan supply tenaga dari driver.
Motor stepper memerlukan driver yang biasa disebut sebagai microstepping driver. Sebagaimana namanya, driver ini mampu mendefinisikan “microsteps” diantara setiap step yang menjadi spesifikasi motor. Biasanya driver bisa di-set untuk beberapa besaran microstepping tertentu. Misalnya, jika spesifikasi motor adalah 200 step per putaran maka artinya setiap step adalah sebesar 360/200 = 1.8 derajat. Jika driver di-set pada microstepping 1/16 maka setiap step motor kini berubah menjadi 1.8/16 = 0.1125 derajat. Inilah hebatnya microstepping driver.
Karena cara kerja yang seperti ini, posisi motor stepper bisa dikontrol secara “open-loop”, yakni tanpa umpan balik (feedback). Hanya saja, jika motor digunakan dengan beban melebihi rated torque-nya maka bisa terjadi slip, yang berarti terjadi ketidakakuratan posisi. Karena itu, biasa dikatakan bahwa motor stepper tidak akan slip selama ia digunakan dengan beban yang sesuai (tidak berlebihan), kecepatan putar (RPM) yang tidak berlebihan, dan arus listrik yang tidak berkekurangan. Inilah mengapa motor memiliki akurasi yang tinggi dengan harga yang relatif rendah. Dan karena sebab inilah, motor stepper banyak sekali digunakan untuk berbagai peralatan seperti mesin CNC dan lain-lain.
Kali ini kita saya akan menjelaskan bagaimana mengontrol posisi motor stepper tipe bipolar secara “open-loop” dengan menggunakan microstepping driver Big Easy Driver (dari SparkFun) dan controller Arduino Uno. Komponen-komponen yang diperlukan adalah:
- Motor stepper tipe bipolar
- Big Easy Driver
- Arduino Uno
- Power supply
- Kabel
Komponen-komponen diatas kemudian dirakit seperti berikut:

PERHATIAN: Jangan menyambungkan atau memutus sambungan motor ketika Big Easy Driver sedang ON. Artinya, pastikan sistem sedang OFF ketika menyambungkan atau memutus sambungan motor!
Penjelasan diagram:
Arduino Uno bisa di-supply dengan USB yang terhubung ke sebuah komputer atau dengan external power supply. Ini tidak dimasukkan dalam gambar diatas.
Big Easy Driver memerlukan power supply dari baterai. Ini dilakukan dengan menghubungkan baterai ke terminal M+ dan GND pada Big Easy Driver. Kisaran voltase yang bisa diterima oleh Big Easy Driver adalah 8VDC sampai 35 VDC. Makin tinggi voltase yang diberikan, makin besar torsi yang dihasilkan oleh motor pada kecepatan tinggi. Big Easy Driver bisa memberikan arus sampai 2A kepada motor. Oleh karena itu, hendaknya power supply juga harus bisa menyediakan paling tidak 2A.
Terminal A+, A-, B+, dan B- pada Big Easy Driver dihubungkan ke empat buah kabel motor stepper.
Besaran microstepping bisa diset berdasarkan kombinasi nilai sinyal MS1, MS2, dan MS3. Masing-masing sinyal ini adalah sinyal digital yang bisa bernilai LOW atau HIGH. Berikut ini besaran microstepping berdasarkan berbagai kombinasi yang berbeda:

Big Easy Driver kemudian disambungkan ke beberapa pin digital Arduino Uno, sebagai berikut:
- Enable: digunakan untuk mengaktifkan atau menonaktifkan motor.
- MS1, MS2, dan MS3: digunakan untuk men-set besaran microstepping sebagaimana dijelaskan diatas.
- STEP: digunakan untuk menyatakan jumlah step yang perlu ditempuh oleh motor.
- DIR: digunakan untuk menyatakan arah putaran motor.
- GND: sebagai sambungan ground.
Detail lebih jauh mengenai Big Easy Driver dan contoh kode Arduino yang bisa digunakan ada di: https://learn.sparkfun.com/tutorials/big-easy-driver-hookup-guide#hardware-hookup
Bagaimana mengontrol posisi dan kecepatan motor stepper?
Motor stepper bergerak karena di-trigger oleh “pulse” yang diberikan oleh controller. Pulse ini berupa sinyal HIGH dan LOW yang terus menerus dikirim oleh controller ke drive secara terus menerus sampai jumlah step yang diperintahkan terpenuhi. Kesimpulannya, sinyal yang diberikan oleh controller harus bergantian antara HIGH dan LOW. Sinyal HIGH men-trigger satu step putaran motor, kemudian sesudah itu sinyal dibuat LOW agar sesudah itu diubah menjadi HIGH lagi (ketika itulah sinyal HIGH yang kedua akan men-trigger satu step putaran motor berikutnya). Dengan demikian, dengan Arduino fungsi untuk memutar motor bisa ditulis sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 |
int timeSpan = 1 // time interval in millisecond which dictates the motor speed void StepForward() { digitalWrite(dir, LOW); //Pull DIR pin "LOW" to move "forward" for(x= 0; x<1000; x++) //Iterate the forward stepping until 1000 microsteps { digitalWrite(step,HIGH); //Trigger one step forward delay(timeSpan); // pulse width digitalWrite(step,LOW); //Pull step pin low so it can be triggered again delay(timeSpan); // off-time } } |
Dengan mengatur timeSpan pada kode diatas, kita bisa mengatur kecepatan putaran motor. Semakin sebentar interval waktu yang kita berikan, yang berarti makin tinggi frekuensi pulse, semakin cepat pula putaran motor. Demikia pula sebaliknya.
Pada banyak driver, pernyataan “pulse width” bisa dihilangkan (opsional) karena “digitalWrite” pada Arduino cukup lambat. Sebagai alternatif ada kode Arduino berikut:
1 2 3 4 5 6 7 8 9 10 11 |
int timeSpan = 1 // time interval in millisecond which dictates the motor speed void StepForward() { digitalWrite(dir, LOW); //Pull DIR pin "LOW" to move "forward" for(x= 0; x<1000; x++) //Iterate the forward stepping until 1000 microsteps { digitalWrite(step,LOW); //Pull step pin low before it is being triggered digitalWrite(step,HIGH); //Trigger one step forward delay(timeSpan); // off-time } } |
Selain menggunakan perintah “delay” yang dinyatakan dalam millisecond, kita bisa juga menggunakan perintah “delayMicrosecond” yang dinyatakan dalam microsecond. Misalnya:
1 |
delayMicroseconds(500); // delay in 500 microseconds |
Cara lain untuk mengatur kecepatan putaran motor stepper adalah dengan menggunakan library “Stepper” untuk Arduino. Silakan dilihat disini: https://www.arduino.cc/en/Reference/Stepper. Contoh pemakaian library ini untuk pengaturan kecepatan motor stepper bisa dibaca di: https://www.arduino.cc/en/Tutorial/StepperSpeedControl.
Bagaimana mengubah arah putaran motor stepper?
Arah putaran motor stepper bisa diubah dengan mengubah nilai sinyal DIR yang keluar dari controller dan dimasukkan ke driver. Dengan Arduino, ini bisa dilakukan seperti dibawah ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
void moveTwoDirections() { int i; digitalWrite(dirpin, LOW); // Set the direction delay(100); for (i = 0; i<4000; i++) // Iterate for 4000 microsteps. { digitalWrite(steppin, LOW); digitalWrite(steppin, HIGH); . delayMicroseconds(500); } digitalWrite(dirpin, HIGH); // Change direction delay(100); for (i = 0; i<4000; i++) // Iterate for 4000 microsteps { digitalWrite(steppin, LOW); digitalWrite(steppin, HIGH); delayMicroseconds(500); } } |