Cara Mengontrol Motor Stepper dengan Driver A4988 dan Arduino
Pada Tutorial Arduino kali ini kita akan mempelajari cara mengontrol Motor Stepper menggunakan Driver Stepper A4988. Anda dapat menonton video berikut atau membaca tutorial tertulis di bawah ini.
Ringkasan
A4988 adalah driver microstepping untuk mengendalikan motor stepper bipolar yang memiliki penerjemah bawaan untuk pengoperasian yang mudah. Artinya, kita dapat mengontrol motor stepper hanya dengan 2 pin dari pengontrol kita, atau satu untuk mengontrol arah putaran dan satu lagi untuk mengontrol langkah.
Driver menyediakan lima resolusi langkah yang berbeda:langkah penuh, langkah haft, langkah seperempat, langkah delapan dan langkah keenam belas. Selain itu, ia memiliki potensiometer untuk menyesuaikan keluaran saat ini, penghentian termal suhu berlebih, dan perlindungan arus silang.
Tegangan logikanya adalah dari 3 hingga 5,5 V dan arus maksimum per fase adalah 2A jika pendinginan tambahan yang baik disediakan atau arus kontinu 1A per fase tanpa pendingin atau pendingin.
Pinout Driver Stepper A4988
Sekarang mari kita lihat dari dekat pinout driver dan menghubungkannya dengan motor stepper dan controller. Jadi kita akan mulai dengan 2 pin di sisi kanan tombol untuk menyalakan driver, pin VDD dan Ground yang kita perlukan untuk menghubungkannya ke catu daya 3 hingga 5,5 V dan dalam kasus kita yang akan menjadi pengontrol kita, Arduino Papan yang akan memberikan 5 V. 4 pin berikut adalah untuk menghubungkan motor. Pin 1A dan 1B akan dihubungkan ke salah satu kumparan motor dan pin 2A dan 2B ke kumparan motor lainnya. Untuk menyalakan motor kami menggunakan 2 pin berikutnya, Ground dan VMOT yang kami perlukan untuk menghubungkannya ke Power Supply dari 8 hingga 35 V dan juga kami perlu menggunakan kapasitor decoupling dengan setidaknya 47 F untuk melindungi papan driver dari lonjakan tegangan.
Dua 2 pin berikutnya, Step dan Direction adalah pin yang sebenarnya kita gunakan untuk mengontrol pergerakan motor. Pin Arah mengontrol arah putaran motor dan kita perlu menghubungkannya ke salah satu pin digital pada mikrokontroler kita, atau dalam kasus kita, saya akan menghubungkannya ke pin nomor 4 dari Papan Arduino saya.
Dengan pin Langkah kami mengontrol langkah-langkah mikro motor dan dengan setiap pulsa yang dikirim ke pin ini motor bergerak satu langkah. Jadi itu berarti kita tidak memerlukan pemrograman yang rumit, tabel urutan fase, jalur kontrol frekuensi, dan sebagainya, karena penerjemah bawaan dari Driver A4988 menangani semuanya. Di sini kami juga perlu menyebutkan bahwa 2 pin ini tidak ditarik ke tegangan apa pun secara internal, jadi kami tidak boleh membiarkannya mengambang di program kami.
Berikutnya adalah Pin SLEEP dan logika rendah menempatkan papan dalam mode tidur untuk meminimalkan konsumsi daya saat motor tidak digunakan.
Selanjutnya, pin RESET mengatur penerjemah ke status Home yang telah ditentukan sebelumnya. Home state atau Home Microstep Position ini dapat dilihat dari Angka-angka ini dari Datasheet A4988. Jadi ini adalah posisi awal dari mana motor mulai dan mereka berbeda tergantung pada resolusi microstep. Jika status input ke pin ini adalah logika rendah, semua input LANGKAH akan diabaikan. Pin Reset adalah pin mengambang jadi jika kita tidak bermaksud untuk mengontrolnya dalam program kita, kita perlu menghubungkannya ke pin SLEEP untuk membuatnya tinggi dan mengaktifkan board.
3 pin berikutnya (MS1, MS2 dan MS3) adalah untuk memilih salah satu dari lima resolusi langkah sesuai dengan tabel kebenaran di atas. Pin ini memiliki resistor pull-down internal sehingga jika kita membiarkannya terputus, board akan beroperasi dalam mode langkah penuh.
Yang terakhir, pin ENABLE digunakan untuk menghidupkan atau mematikan output FET. Jadi logika tinggi akan membuat output dinonaktifkan.
Komponen yang dibutuhkan untuk Tutorial Arduino ini
Anda bisa mendapatkan komponen dari salah satu situs di bawah ini:
Motor Stepper (NEMA17)………..
A4988 Stepper Driver……………..
Adaptor 12V 2A……………………….
Jaket Listrik………………………………
Dewan Arduino …………………………
Breadboard dan Kabel Lompat …….
Skema Sirkuit
Berikut skema rangkaian lengkapnya. Saya akan menggunakan drive dalam Mode Langkah Penuh jadi saya akan membiarkan 3 pin MS terputus dan hanya menghubungkan Arah dan pin Langkah drive ke pin nomor 3 dan 4 di Papan Arduino dan juga Ground dan 5 V pin untuk memberi daya pada papan. Saya juga akan menggunakan kapasitor 100µF untuk decoupling dan adaptor 12V, 1.5A untuk menyalakan motor. Saya akan menggunakan Motor Stepper bipolar NEMA 17 dan kabelnya A dan C akan dihubungkan ke pin 1A dan 1B dan kabel B dan D ke pin 2A dan 2B.
Pembatasan Arus A4988
Sebelum kita menghubungkan motor kita harus mengatur batasan arus dari driver agar kita yakin bahwa arus berada dalam batasan arus motor. Kita dapat melakukannya dengan menyesuaikan tegangan referensi menggunakan potensiometer di papan dan mempertimbangkan persamaan ini:
Namun persamaan ini tidak selalu benar karena ada pabrikan papan driver A4988 yang berbeda. Berikut adalah demonstrasi kasus saya:Saya menyesuaikan potensiometer dan mengukur tegangan referensi 0.6V. Jadi batasan saat ini adalah nilai 0,6*2, sama dengan 1,2 A.
Sekarang karena saya menggunakan Driver dalam Mode Langkah Penuh dan menurut Lembar Data A4988 dalam mode ini arus belitan hanya dapat mencapai 70% dari batas arus, 1,2A*0,7 akan sama dengan 0,84A. Untuk memeriksa ini, saya mengunggah kode sederhana yang mengirimkan logika kontinu tinggi ke pin Langkah (sehingga kita dapat melihat arus dengan lebih baik) dan menghubungkan meteran saya secara seri dengan satu belitan motor dan menyalakannya. Yang saya dapatkan adalah 0,5A yang berarti persamaan itu tidak benar untuk kasus saya.
Kode Arduino dan A4988
Berikut adalah contoh kode. Pertama kita harus menentukan pin Step dan Direction. Dalam kasus kami, mereka adalah pin nomor 3 dan 4 di Papan Arduino dan mereka diberi nama stepPin dan dirPin dan bagian setup kita harus mendefinisikannya sebagai output.
/* Simple Stepper Motor Control Exaple Code
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
// defines pins numbers
const int stepPin = 3;
const int dirPin = 4;
void setup() {
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
}
void loop() {
digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
// Makes 200 pulses for making one full cycle rotation
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(1000); // One second delay
digitalWrite(dirPin,LOW); //Changes the rotations direction
// Makes 400 pulses for making two full cycle rotation
for(int x = 0; x < 400; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(1000);
}
Code language: Arduino (arduino)
Pada bagian loop pertama kita akan mengatur pin Direction pada keadaan high yang akan memungkinkan motor bergerak ke arah tertentu. Sekarang dengan menggunakan loop for ini kita akan membuat motor melakukan satu putaran putaran penuh. Karena driver diatur pada Mode Langkah Penuh dan Motor Stepper kami memiliki sudut langkah 1,8 derajat, atau 200 langkah, kami perlu mengirim 200 pulsa ke Pin Langkah untuk membuat satu putaran siklus penuh. Jadi loop for akan memiliki 200 iterasi dan setiap kali itu akan mengatur pin Langkah pada status tinggi dan kemudian rendah untuk membuat pulsa. Di antara setiap digitalWrite kita perlu menambahkan beberapa penundaan yang akan bergantung pada kecepatan motor.
Setelah putaran putaran penuh ini kita akan membuat penundaan satu detik, kemudian mengubah arah putaran dengan mengatur dirPin pada keadaan rendah dan sekarang membuat 2 putaran putaran penuh dengan putaran 400 iterasi ini. Pada akhirnya ada penundaan satu detik lagi. Sekarang mari unggah kode dan lihat cara kerjanya.
Saya membuat satu contoh lagi untuk tutorial ini, di mana saya mengontrol kecepatan motor menggunakan potensiometer. Berikut kode sumber dari contoh itu:
/* Simple Stepper Motor Control Exaple Code
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
*/
// Defines pins numbers
const int stepPin = 3;
const int dirPin = 4;
int customDelay,customDelayMapped; // Defines variables
void setup() {
// Sets the two pins as Outputs
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
digitalWrite(dirPin,HIGH); //Enables the motor to move in a particular direction
}
void loop() {
customDelayMapped = speedUp(); // Gets custom delay values from the custom speedUp function
// Makes pules with custom delay, depending on the Potentiometer, from which the speed of the motor depends
digitalWrite(stepPin, HIGH);
delayMicroseconds(customDelayMapped);
digitalWrite(stepPin, LOW);
delayMicroseconds(customDelayMapped);
}
// Function for reading the Potentiometer
int speedUp() {
int customDelay = analogRead(A0); // Reads the potentiometer
int newCustom = map(customDelay, 0, 1023, 300,4000); // Convrests the read values of the potentiometer from 0 to 1023 into desireded delay values (300 to 4000)
return newCustom;
}Code language: Arduino (arduino)