Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Menguasai Motor Stepper dengan Arduino:Panduan Komprehensif

Dalam tutorial ini kita akan mempelajari semua yang perlu kita ketahui tentang mengendalikan motor stepper dengan Arduino. Kami akan membahas cara mengontrol motor stepper NEMA17 yang dikombinasikan dengan driver stepper A4988, DRV8825, dan TMC2208.

Kombinasi motor stepper dan driver ini digunakan dalam banyak aplikasi yang memerlukan kontrol posisi, seperti Printer 3D, Mesin CNC, Robotika, mesin Otomasi, dan sebagainya.

Saya sendiri sudah menggunakannya di banyak proyek Arduino saya, seperti berikut:

Saya akan menjelaskan secara detail cara kerjanya, cara menghubungkan motor stepper dengan Arduino, cara mengatur batas arus driver dan cara memprogramnya dengan atau tanpa perpustakaan Arduino. Selain itu, saya akan menunjukkan kepada Anda bagaimana kita dapat dengan mudah mengontrol beberapa motor stepper menggunakan pelindung Arduino CNC untuk semua jenis proyek Arduino. 

Jadi, kita punya cukup banyak hal untuk dibahas dalam tutorial ini. Anda dapat menonton video berikut atau membaca tutorial tertulis di bawah ini yang juga mencakup semua contoh kode dan diagram pengkabelan.

Apa itu Motor Stepper dan Cara Kerjanya?

Saya akan mulai dengan menjelaskan secara singkat apa itu motor stepper dan cara kerjanya, karena ini akan membantu kita lebih memahami segala hal lainnya dalam tutorial ini. 

Motor stepper adalah jenis motor DC tanpa sikat unik yang posisinya dapat dikontrol secara tepat bahkan tanpa umpan balik apa pun.

Prinsip kerja motor stepper didasarkan pada medan magnet. Ia memiliki dua komponen utama, stator dan rotor. Rotor biasanya berupa magnet permanen dan dikelilingi oleh beberapa kumparan pada stator.

Ketika kita memberi energi atau membiarkan arus mengalir melalui kumparan, medan magnet tertentu dihasilkan di stator yang menarik atau menolak rotor. Dengan mengaktifkan kumparan, selangkah demi selangkah, satu demi satu dalam urutan tertentu, kita dapat mencapai gerakan rotor yang berkelanjutan, namun juga, kita dapat menghentikannya di posisi mana pun.

Oleh karena itu, motor ini disebut motor stepper, yang bergerak dalam langkah-langkah diskrit. 

Dengan menambah jumlah kutub magnet pada rotor, kita dapat meningkatkan jumlah kemungkinan posisi berhenti, sehingga meningkatkan resolusi atau presisi motor. Harap dicatat bahwa ini hanyalah penjelasan dasar dan Anda dapat menemukan detail lebih lanjut di tutorial Cara Kerja Motor Stepper saya. 

Motor stepper pada umumnya, NEMA17 misalnya, memiliki 50 titik berhenti atau langkah pada rotornya. Di sisi lain, stator dapat memiliki beberapa kumparan yang disusun dalam dua fase yang memberikan empat orientasi atau posisi medan magnet berbeda.

Jadi, 50 langkah rotor dikalikan dengan 4 orientasi medan magnet yang berbeda, menghasilkan total 200 langkah untuk menyelesaikan satu putaran penuh. Atau jika kita membagi 360 derajat dengan 200 langkah, hasilnya adalah 1,8 derajat per langkah.

Saya sebutkan bahwa kumparan stator disusun dalam dua fase, dan kita juga dapat memperhatikannya jika kita melihat jumlah kabel motor stepper. Ini memiliki 4 empat kabel, dua untuk setiap fase. Empat orientasi medan magnet yang berbeda dimungkinkan karena kita dapat membiarkan arus mengalir melalui fase di kedua arah.

Ada juga motor stepper dengan 5, 6 atau bahkan 8 kabel, namun tetap bekerja pada dua fasa atau kita kendalikan hanya dengan empat terminal.

Masalahnya adalah mereka dapat memberikan karakteristik kinerja yang berbeda, seperti torsi yang lebih besar atau kecepatan yang lebih tinggi, bergantung pada bagaimana kita menghubungkan kabel ini pada empat terminal kontrol.

Namun dengan penjelasan singkat tersebut, sekarang kita memahami bahwa untuk menggerakkan motor stepper kita tidak bisa begitu saja menyambungkan listrik ke motor tersebut karena tidak akan terjadi apa-apa. Sebaliknya, kita harus memberi energi pada dua fase motorik di kedua arah, dan mengaktifkan atau mengirimkan pulsa ke fase tersebut dalam urutan tertentu, dalam urutan yang tepat waktu. Oleh karena itu diperlukan driver untuk mengendalikan motor stepper. 

Ada banyak jenis dan ukuran driver, sesuai dengan banyaknya jenis dan ukuran motor stepper. Namun, prinsip kerja dasar semuanya adalah memiliki dua Jembatan H yang memungkinkan pemberian energi fase motor di kedua arah.

Tentu saja, mereka memiliki banyak fungsi lain seperti loncatan mikro, pembatas arus, dan sebagainya yang memungkinkan kita mengontrol motor stepper dengan mudah, itulah tujuan keseluruhannya.

Cara Mengontrol Motor Stepper NEMA17 dengan Arduino dan Driver Stepper A4988

Baiklah, sekarang kita bisa melihat contoh pertama untuk tutorial kali ini, cara mengontrol motor stepper NEMA 17 dengan driver stepper A4988. 

Baiklah, sekarang kita bisa melihat contoh pertama untuk tutorial kali ini, cara mengontrol motor stepper NEMA 17 dengan stepper drive A4988.

NEMA17 adalah motor stepper paling populer di kalangan produsen, karena menawarkan performa luar biasa dan sekaligus harganya terjangkau. Ini juga dapat ditemukan di hampir semua printer 3D desktop dan pengukir laser. 

Secara umum, motor stepper NEMA17 memiliki 200 langkah, atau resolusi 1,8 derajat per langkah, tetapi ada juga model dengan 400 langkah dan resolusi 0,9 derajat per langkah. Perlu dicatat di sini bahwa sebutan NEMA17 sebenarnya hanya menggambarkan ukuran motor dalam kaitannya dengan ukuran pelat muka depan.

Angka tersebut menunjukkan ukuran pelat muka dalam inci jika dibagi 10, atau dalam hal ini 17 dibagi 10 sama dengan pelat muka 1,7 inci, atau pelat muka 2,3 inci untuk NEMA23.

Jadi, ukuran pelat muka tetap, namun panjang stepper NEMA17 dapat bervariasi dari 20mm hingga 60mm, dan dengan itu kebutuhan daya motor juga bervariasi. Kebutuhan daya biasanya ditentukan oleh berapa banyak arus yang boleh ditarik oleh motor, dan kisaran untuk motor stepper NEMA17 ini adalah dari 0,3A hingga 2,5A.

Sekarang, berdasarkan rating motor stepper saat ini, kita perlu memilih driver yang sesuai yang dapat menangani arus sebesar itu. Pengontrol driver paling populer untuk motor stepper NEMA17 adalah driver motor stepper A4988.

A4988 memiliki rating arus maksimum 2A per koil, tapi itu sebenarnya rating puncak. Disarankan untuk menjaga arus sekitar 1A, tetapi tentu saja, dimungkinkan juga untuk meningkatkan hingga 2A karena pendinginan yang baik diberikan ke IC. 

Fitur hebat yang dimiliki driver stepper A4988, sebenarnya dimiliki semua drive lain, adalah batasan saat ini. Dengan ini kita dapat dengan mudah mengatur berapa banyak arus yang akan diambil motor, berapa pun rating motornya. Misalnya, kita bahkan dapat menghubungkan motor stepper dengan nilai 2,5A, tetapi kita akan membatasi arus driver hingga 1,5A. Jadi, meski motor tidak bekerja maksimal, kita tetap bisa menggunakannya.

Di sisi lain, jika motor diberi nilai lebih rendah dari batas arus yang ditetapkan oleh pengemudi, motor akan menjadi terlalu panas. Tentu saja, selalu disarankan untuk mencoba mencocokkan rating motor saat ini dengan rating pengemudi saat ini.

Koneksi A4988 dan Arduino

Baiklah, sekarang mari kita lihat cara menghubungkan driver A4988 dengan motor stepper dan pengontrol Arduino.

Anda bisa mendapatkan komponen yang diperlukan untuk tutorial Arduino ini dari link di bawah:

Pengungkapan:Ini adalah tautan afiliasi. Sebagai Rekanan Amazon, saya memperoleh penghasilan dari pembelian yang memenuhi syarat.

Di sudut kanan atas driver kami memiliki pin VMOT dan GND dan di sini kami menghubungkan catu daya untuk motor yang berkisar antara 8 hingga 36V. Di sini juga disarankan untuk menggunakan kapasitor decoupling pada kedua pin ini untuk melindungi papan dari lonjakan tegangan. Kita harus menggunakan kapasitor elektrolitik besar dengan kapasitas minimal 47uF. 

Selanjutnya adalah empat pin tempat kita menghubungkan motor stepper. Satu fasa motor berjalan pada pin 1A dan 1B, dan fasa lainnya pada pin 2A dan 2B. 

Terkadang, agak sulit untuk mengenali dua kabel motor mana yang membentuk fase, tetapi ada beberapa cara untuk mengidentifikasinya. Cara paling sederhana adalah dengan memutar poros motor stepper dengan tangan, lalu menyambungkan dua kabel satu sama lain. Jika Anda menyambungkan dua kabel yang membentuk satu fasa, putaran poros akan sedikit lebih sulit.

Cara lainnya adalah dengan menggunakan multimeter dan memeriksa kontinuitas antara kedua kabel. Jika Anda menyambungkan dua kabel yang membentuk satu fasa, Anda akan mengalami korsleting dan multimeter akan mulai berbunyi bip.

Begitu kita menemukan sebuah fase, kita dapat menghubungkannya ke posisi mana pun dari dua posisi pada driver, urutannya tidak masalah. 

Selanjutnya kita memiliki IC atau pin catu daya logika, VDD dan GND, yang bisa dari 3V hingga 5V. Di sisi lain kita memiliki pin Langkah dan Arah, yang dapat dihubungkan ke pin mana pun di papan Arduino. Dengan pin Arah kita memilih arah putaran motor, dan dengan pin Langkah kita mengontrol langkah motor. Dengan setiap pulsa yang kita kirimkan ke pin Step, motor akan maju satu langkah ke arah yang dipilih. 

Tepat di atas pin ini, kami memiliki pin Tidur dan Reset yang digunakan, seperti namanya, mengalihkan driver ke mode tidur atau mengatur ulang. Perlu kita perhatikan bahwa kedua pin ini aktif rendah. Pin Tidur secara default adalah status HIGH, tetapi pin RST mengambang. Artinya, untuk mengaktifkan driver, cara termudah adalah dengan menghubungkan kedua pin ini satu sama lain, dengan asumsi kita tidak akan menggunakan fungsi pin tersebut. 

Pin Aktifkan juga aktif rendah, jadi kecuali kita menariknya TINGGI, driver akan diaktifkan. 

Tiga pin berikutnya, MS1, MS2 dan MS3, digunakan untuk memilih resolusi langkah motor. Kami telah mengatakan bahwa resolusi langkah tergantung pada konstruksi motor yang biasanya 200 langkah per putaran untuk motor stepper NEMA 17. Namun, semua driver stepper memiliki fitur yang disebut microstepping yang memungkinkan penggerak motor pada resolusi lebih tinggi. Hal ini dicapai dengan memberi energi pada kumparan pada tingkat arus menengah, yang menghasilkan lokasi langkah menengah.

Misalnya, jika kita memilih resolusi seperempat langkah, maka 200 langkah motor akan menjadi, 200 dikalikan 4 sama dengan 800 langkah mikro per putaran. Pengemudi akan menggunakan empat level arus berbeda pada kumparan untuk mencapai hal ini. 

Driver A4988 memiliki resolusi maksimum 16 langkah mikro, yang berarti motor NEMA17 200 langkah memiliki 3200 langkah per putaran, atau 0,1125 derajat per langkah. Ini merupakan presisi yang sangat mengesankan dan itulah sebabnya jenis motor stepper dan driver ini digunakan dalam banyak aplikasi. Sebenarnya, ada penggerak stepper yang memiliki 256 langkah mikro, atau setara dengan 51.200 langkah per putaran, atau 0,007 derajat per langkah.

Namun demikian, ketiga pin ini memiliki resistor pull-down, jadi jika kita membiarkannya terputus, driver akan bekerja dalam mode langkah penuh. Untuk memilih resolusi mircrostepping yang berbeda kita perlu menghubungkan 5V ke pin yang sesuai menurut tabel ini. 

Pembatasan Arus A4988

Baiklah, setelah kita mengetahui cara menghubungkan motor stepper dan drivernya ke papan Arduino, kita dapat melanjutkan dengan menjelaskan cara memprogram atau mengkode Arduino untuk mengendalikan stepper. Namun, sebelum kita melakukan itu, atau sebelum kita menghidupkan motor, ada satu hal lagi yang perlu kita lakukan, yaitu menyesuaikan batas arus pengemudi.

Seperti yang sudah kami jelaskan, kita perlu menyesuaikan batas arus pengemudi agar lebih rendah dari rating motor saat ini, atau motor akan terlalu panas.

Ada potensiometer pemangkas kecil pada driver A4988 yang dapat kita sesuaikan batas arusnya. Dengan memutar potensiometer searah jarum jam, batas arus bertambah, dan sebaliknya. Ada dua metode yang dapat digunakan untuk menentukan nilai sebenarnya dari batas arus. 

Metode pertama melibatkan pengukuran tegangan referensi pada potensiometer itu sendiri dan GND. Kita dapat mengukur tegangan referensi menggunakan multimeter, dan menggunakan nilai tersebut dalam rumus berikut untuk menghitung batas arus driver:

Batas Saat Ini =Vref / (8 x Rcs)

Rcs adalah resistansi penginderaan arus atau nilai resistor penginderaan arus yang terletak tepat di sebelah chip. Tergantung pada pabrikannya, nilai ini biasanya 0,05, 0,1 atau 0,2 ohm. Jadi, kita perlu mencermati nilai resistor tersebut agar dapat menghitung batas arus secara akurat dengan metode ini. Dalam kasus saya, resistor ini diberi label R100, yang berarti 0,1ohm.

Sebagai contoh, jika kita mengukur tegangan referensi 0,7V, dan kita memiliki resistor 0,1 ohm, batas arusnya adalah 0,875A. Atau jika kita ingin membatasi arus, misalkan 1A, kita harus menyesuaikan tegangan referensi menjadi 0,8V. 

Cara kedua untuk mengatur batas arus adalah dengan mengukur langsung arus yang melalui kumparan. Untuk itu kita perlu menghubungkan motor stepper dan driver seperti yang telah dijelaskan sebelumnya. Kita dapat melewatkan koneksi pengontrol, tetapi menghubungkan 5V ke pin Arah dan Langkah sehingga motor tetap aktif dan menahan satu posisi. Pin MS harus dibiarkan terputus sehingga driver dapat bekerja dalam mode langkah penuh. Kemudian kita dapat memutuskan satu saluran atau kumparan dari motor, dan menghubungkannya secara seri dengan amperemeter. Dengan cara ini, setelah kita memberi daya pada driver dengan tegangan logika, 5V, dan daya untuk motor 12V dalam kasus saya, kita dapat membaca berapa banyak arus yang mengalir melalui koil.

Meskipun demikian, perlu dicatat di sini bahwa ketika pengemudi bekerja dalam mode langkah penuh, arus dalam kumparan hanya dapat mencapai 70% dari batas arus sebenarnya. Jadi, ketika menggunakan driver dalam mode microstepping lainnya, pembacaan dari ammeter harus dikalikan dengan 1,3 untuk mendapatkan nilai sebenarnya dari batas driver saat ini. 

Saya mencoba kedua metode untuk mengatur batas driver saat ini dan hasilnya kurang lebih sama.

Motor Stepper dan Arduino – Kode Contoh

Namun demikian, sekarang kita dapat melanjutkan ke pemrograman Arduino, atau melihat beberapa contoh kode untuk mengendalikan motor stepper dengan papan Arduino.

Mari kita mulai dengan contoh kode yang sangat mendasar tentang cara mengontrol motor stepper tanpa menggunakan perpustakaan.

Contoh kode 1

/* 
 * Basic example code for controlling a stepper without library
 * 
 * by Dejan, https://howtomechatronics.com
 */
// defines pins
#define stepPin 2
#define dirPin 5 
 
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 < 800; x++) {
 digitalWrite(stepPin,HIGH); 
 delayMicroseconds(700); // by changing this time delay between the steps we can change the rotation speed
 digitalWrite(stepPin,LOW); 
 delayMicroseconds(700); 
 }
 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 < 1600; x++) {
 digitalWrite(stepPin,HIGH);
 delayMicroseconds(500);
 digitalWrite(stepPin,LOW);
 delayMicroseconds(500);
 }
 delay(1000);
}Code language: PHP (php)

Deskripsi kode:

Di sini yang harus kita lakukan adalah menentukan nomor pin mana yang menghubungkan pin STEP dan DIR dan mendefinisikannya sebagai output. Pada loop pertama kita atur arah putaran motor dengan membuat pin Direction berstatus HIGH. Kemudian dengan menggunakan loop “for” kita mengirimkan 200 pulsa ke pin STEP yang akan membuat motor berputar satu siklus penuh, mengingat ia bekerja dalam mode full-step. Pulsa dihasilkan hanya dengan mengubah status pin STEP HIGH ke LOW dengan beberapa waktu tunda di antara keduanya. Penundaan waktu ini sebenarnya menentukan kecepatan putaran. Jika kita turunkan maka kecepatan putarannya akan bertambah seiring dengan semakin cepatnya langkah yang dilakukan, begitu pula sebaliknya. 

Kemudian kita mengubah arah putaran, dan menggunakan loop “for” lainnya kita mengirimkan 400 pulsa yang akan membuat motor berputar dua siklus penuh. Namun, jika kita mengubah mode microstepping pengemudi, misalkan seperempat langkah, yang berarti motor sekarang memiliki 800 langkah, putaran pertama akan membuat motor hanya berputar 90 derajat, dan putaran kedua hanya setengah putaran.

Contoh kode 2

Berikut contoh sederhana lainnya, mengontrol kecepatan motor stepper menggunakan potensiometer.

Untuk itu, cukup sambungkan potensiometer ke Arduino dan baca nilainya menggunakan fungsi analogRead().

/*
 Basic example code for controlling a stepper without library
 by Dejan, https://howtomechatronics.com
*/
// defines pins
#define stepPin 2
#define dirPin 5
int customDelay, customDelayMapped;
void setup() {
 // Sets the two pins as Outputs
 pinMode(stepPin, OUTPUT);
 pinMode(dirPin, OUTPUT);
}
void loop() {
 speedControl();
 // 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);
}
// Custom function for reading the potentiometer and mapping its value from 300 to 3000, suitable for the custom delay value in microseconds
void speedControl() {
 customDelay = analogRead(A0); // Read the potentiometer value
 customDelayMapped = map(customDelay, 0, 1023, 300, 3000); // Convert the analog input from 0 to 1024, to 300 to 3000
}Code language: PHP (php)

Deskripsi kode:

Kita kemudian dapat memetakan atau mengkonversi nilai potensiometer dari 0 hingga 1023, ke nilai yang sesuai untuk waktu tunda dalam mikrodetik untuk pulsa Langkah. Saya menemukan nilai minimum penundaan antar langkah adalah sekitar 300 mikrodetik. Dengan menurunkannya maka motor stepper mulai melompati langkah. 

Secara keseluruhan, pengendalian motor stepper dengan metode ini mudah dan berhasil, tetapi hanya jika pengendalian yang diperlukan sederhana seperti yang ditunjukkan pada contoh. Jika kita memerlukan kontrol yang lebih kompleks, cara terbaik adalah menggunakan perpustakaan Arduino.

Mengendalikan Motor Stepper dengan Arduino dan AccelStepper Library – Contoh

Perpustakaan paling populer untuk mengendalikan motor stepper dengan Arduino adalah perpustakaan AccelStepper oleh Mike McCauley. Ini adalah perpustakaan yang sangat serbaguna yang menampilkan kontrol kecepatan, akselerasi dan deselerasi, menetapkan posisi target, mengendalikan beberapa motor stepper secara bersamaan, dan sebagainya.

Perpustakaan memiliki dokumentasi bagus yang menjelaskan cara kerja setiap fungsi. Saya telah menggunakan perpustakaan ini untuk beberapa proyek Arduino saya, untuk mengendalikan gerakan Slider Kamera DIY saya, mesin pembengkok kawat 3D, lengan robot SCARA dan beberapa lainnya. Jika Anda tertarik, ada detail dan penjelasan kode untuk setiap proyek di website. 

Sekarang mari kita lihat beberapa contoh kode yang menggunakan perpustakaan ini.

Contoh kode – Kontrol kecepatan motor stepper menggunakan potensiometer

Contoh pertama adalah mengontrol kecepatan motor menggunakan potensiometer.

/* 
 * Basic example code for controlling a stepper with the AccelStepper library
 * 
 * by Dejan, https://howtomechatronics.com
 */
#include <AccelStepper.h>
// Define the stepper motor and the pins that is connected to
AccelStepper stepper1(1, 2, 5); // (Type of driver: with 2 pins, STEP, DIR)
void setup() {
 // Set maximum speed value for the stepper
 stepper1.setMaxSpeed(1000);
}
void loop() {
 stepper1.setSpeed((analogRead(A0));
 // Step the motor with a constant speed previously set by setSpeed();
 stepper1.runSpeed();
}Code language: PHP (php)

Deskripsi kode:

Jadi, pertama-tama kita perlu menyertakan perpustakaan AccelStepper. Tentu saja, sebelum kita melakukan itu, kita perlu menginstal perpustakaan dan kita bisa melakukannya dari pengelola perpustakaan Arduino IDE. Kita hanya perlu mencari “AccelStepper” dan perpustakaan akan muncul dan kita dapat menginstalnya. 

Kemudian, kita perlu membuat instance kelas AccelStepper untuk motor kita. Parameter pertama disini adalah jenis driver, dalam hal ini untuk driver dengan dua pin kontrol nilainya adalah 1, dan dua parameter lainnya adalah nomor pin yang menghubungkan driver kita ke Arduino. Jika kita memiliki beberapa motor stepper, kita perlu mendefinisikan masing-masing motor seperti ini, dan kita dapat menamainya sesuka kita, dalam hal ini saya menamai motor saya stepper1. 

Pada bagian setup kita tinggal mengatur kecepatan maksimum motor yang didefinisikan sebagai langkah per detik. Nilai ini bisa mencapai 4000, namun dalam dokumentasi perpustakaan disebutkan bahwa nilai kecepatan lebih dari 1000 langkah per detik mungkin tidak dapat diandalkan. 

Pada bagian loop, dengan menggunakan fungsi setSpeed() kita mengatur kecepatan motor saat ini, dan dalam hal ini adalah input analog dari potensiometer yaitu dari 0 hingga 1023.

Agar motor dapat bergerak dan menerapkan kecepatan konstan tersebut, kita perlu memanggil fungsi runSpeed() setiap interval. Nilai negatif di sini, atau sekadar menyertakan tanda minus sebelum nilainya, akan membuat motor stepper berputar ke arah berlawanan.

Contoh kode – Mengontrol dua motor stepper dengan akselerasi dan deselerasi

Berikut contoh lain pengendalian dua motor stepper dengan penerapan akselerasi dan deselerasi menggunakan pustaka AccelStepper.

/*
 Controlling two stepper with the AccelStepper library
 by Dejan, https://howtomechatronics.com
*/
#include <AccelStepper.h>
// Define the stepper motor and the pins that is connected to
AccelStepper stepper1(1, 2, 5); // (Typeof driver: with 2 pins, STEP, DIR)
AccelStepper stepper2(1, 3, 6);
void setup() {
 stepper1.setMaxSpeed(1000); // Set maximum speed value for the stepper
 stepper1.setAcceleration(500); // Set acceleration value for the stepper
 stepper1.setCurrentPosition(0); // Set the current position to 0 steps
 stepper2.setMaxSpeed(1000);
 stepper2.setAcceleration(500);
 stepper2.setCurrentPosition(0);
}
void loop() {
 stepper1.moveTo(800); // Set desired move: 800 steps (in quater-step resolution that's one rotation)
 stepper1.runToPosition(); // Moves the motor to target position w/ acceleration/ deceleration and it blocks until is in position
 stepper2.moveTo(1600);
 stepper2.runToPosition();
 // Move back to position 0, using run() which is non-blocking - both motors will move at the same time
 stepper1.moveTo(0);
 stepper2.moveTo(0);
 while (stepper1.currentPosition() != 0 || stepper2.currentPosition() != 0) {
 stepper1.run(); // Move or step the motor implementing accelerations and decelerations to achieve the target position. Non-blocking function
 stepper2.run();
 //
 //
 }
}Code language: PHP (php)

Deskripsi kode:

Jadi, kita perlu mendefinisikan dua motor stepper, dan dalam pengaturannya, menggunakan fungsi setAcceleration(), atur nilai akselerasi untuk motor. Dengan menggunakan fungsi setCurrentPosition() kita mengatur posisi motor pada 0 langkah. 

Di bagian perulangan, kita mulai dengan fungsi moveTo() yang melaluinya kita memberi tahu motor ke posisi mana yang harus dituju atau berapa langkah yang harus dipindahkan. Dalam kasus resolusi seperempat langkah, 800 langkah berarti satu putaran penuh. Kemudian, fungsi runToPosition() menggerakkan motor ke posisi tersebut sambil menerapkan akselerasi dan deselerasi. Namun, ini adalah fungsi pemblokiran, sehingga eksekusi kode akan tetap di sana hingga motor stepper mencapai posisi tersebut. 

Dengan metode yang sama kita menggerakkan motor kedua 1600 langkah atau dua putaran penuh dengan resolusi seperempat langkah. 

Jika kita tidak ingin kode kita diblokir hingga motor mencapai posisi target, daripada menggunakan fungsi runToPosition(), kita sebaiknya menggunakan fungsi run(). Run() juga mengimplementasikan akselerasi dan deselerasi untuk mencapai posisi target, namun hanya membuat satu langkah per panggilan. Oleh karena itu, kita perlu menelponnya sesering mungkin. Oleh karena itu, di sini kita menempatkan fungsi run() untuk kedua motor dalam loop while ini, yang dijalankan hingga kedua stepper mencapai posisi 0. Sebelumnya kita atur kedua motor ke posisi 0 dengan fungsi moveTo(). 

Kita juga dapat menambahkan lebih banyak kode dalam loop “sementara” itu dan melakukan hal-hal lain juga sambil menjalankan motor. Sebenarnya ada banyak cara untuk menjalankan motor dan melakukan hal lainnya juga. Saya sarankan untuk membaca dokumentasi perpustakaan yang dijelaskan dengan baik sehingga Anda dapat memahami cara kerja setiap fungsi dan mengimplementasikannya sesuai kebutuhan Anda.

Contoh kode – Mengontrol beberapa motor stepper dengan pustaka AccelStepper

Saya ingin menunjukkan kepada Anda satu contoh lagi penggunaan perpustakaan AccelStepper dan itu mengendalikan beberapa motor stepper secara terkoordinasi. Artinya, kami dapat menetapkan posisi target untuk setiap anak tangga dan mereka dapat mencapai semua posisinya secara bersamaan, tidak peduli jarak yang harus mereka tempuh berbeda.

Hal ini dapat dilakukan dengan mudah menggunakan kelas MultiStepper yang disertakan dengan perpustakaan AccelStepper.

/*
 Controlling multiple steppers with the AccelStepper and MultiStepper library
 by Dejan, https://howtomechatronics.com
*/
#include <AccelStepper.h>
#include <MultiStepper.h>
// Define the stepper motor and the pins that is connected to
AccelStepper stepper1(1, 2, 5); // (Typeof driver: with 2 pins, STEP, DIR)
AccelStepper stepper2(1, 3, 6);
AccelStepper stepper3(1, 4, 7);
MultiStepper steppersControl; // Create instance of MultiStepper
long gotoposition[3]; // An array to store the target positions for each stepper motor
void setup() {
 stepper1.setMaxSpeed(1000); // Set maximum speed value for the stepper
 stepper2.setMaxSpeed(1000);
 stepper3.setMaxSpeed(1000);
 // Adding the 3 steppers to the steppersControl instance for multi stepper control
 steppersControl.addStepper(stepper1);
 steppersControl.addStepper(stepper2);
 steppersControl.addStepper(stepper3);
}
void loop() {
 // Store the target positions in the "gotopostion" array
 gotoposition[0] = 800; // 800 steps - full rotation with quater-step resolution
 gotoposition[1] = 1600;
 gotoposition[2] = 3200;
 steppersControl.moveTo(gotoposition); // Calculates the required speed for all motors
 steppersControl.runSpeedToPosition(); // Blocks until all steppers are in position
 delay(1000);
 gotoposition[0] = 0;
 gotoposition[1] = 0;
 gotoposition[2] = 0;
 steppersControl.moveTo(gotoposition);
 steppersControl.runSpeedToPosition();
 delay(1000);
}Code language: PHP (php)

Deskripsi kode:

Di sini kita juga perlu memasukkan kelas MultiStepper, dan membuat sebuah instance darinya. Kemudian kita perlu mendefinisikan sebuah array, ketik "long", yang akan digunakan untuk menyimpan posisi target motor kita. Di bagian pengaturan, kita perlu menentukan nilai kecepatan maksimum dari stepper dan menambahkan stepper ke instance MultiStepper yang dibuat sebelumnya, yang dalam kasus saya saya beri nama “steppersControl”. 

Pada bagian loop, kita mulai dengan menyimpan nilai posisi target pada array yang telah kita buat sebelumnya. Saya mengatur stepper pertama untuk bergerak satu putaran, yang kedua, dua putaran, dan yang ketiga, tiga putaran. Kemudian kita dapat menetapkan array ini ke fungsi moveTo() yang akan menghitung kecepatan yang diperlukan semua motor untuk mencapai posisi tersebut pada waktu yang sama. Selanjutnya kita tinggal memanggil fungsi runSpeedToPosition() yang akan menggerakkan motor ke posisinya. Meskipun kita harus mencatat bahwa fungsi ini memblokir kode hingga stepper mencapai posisi targetnya. Kita bisa menggunakan fungsi run() sebagai gantinya, jika kita tidak ingin memblokir kodenya. Kita juga harus mencatat bahwa kelas MultiStepper tidak mendukung akselerasi dan deselerasi. 

Namun demikian, jika Anda ingin mempelajari lebih lanjut, dari contoh lebih lanjut, Anda dapat memeriksa proyek Arduino saya yang telah saya sebutkan, semua detail dan kodenya ada di situs web.

Pelindung CNC untuk mengendalikan beberapa motor stepper untuk proyek Arduino apa pun

Masih membahas tentang mengendalikan beberapa motor stepper, ada baiknya menyebutkan dan melihat pelindung Arduino CNC.

Tujuan utama dari pelindung CNC Arduino adalah untuk mengendalikan mesin CNC 2 atau 3 sumbu, tetapi sebenarnya ini merupakan pilihan bagus untuk mengendalikan semua jenis proyek di mana kita perlu mengontrol beberapa motor stepper karena kompak dan menyediakan koneksi yang mudah untuk pengemudi dan motor. 

Pelindung ini dipasang di atas papan Arduino UNO, dan dapat mengontrol hingga 4 motor stepper individual, dan semua pin Arduino yang tersisa tersedia untuk digunakan. Saya menggunakan kombinasi papan Arduino UNO dan pelindung CNC untuk mengendalikan lengan robot SCARA 4 sumbu saya.

Saya akan segera memperbarui bagian artikel ini, cara menggunakan pelindung CNC dengan Arduino dengan detail lebih lanjut.

DRV8825 vs A4988

Baiklah, sekarang mari kita lanjutkan dan lihat bagaimana kita dapat mengontrol motor stepper menggunakan driver lain yang saya sebutkan di awal, DRV8825.

Sebenarnya semua yang kami jelaskan sejauh ini tentang pengendalian motor stepper dengan driver stepper A4988, juga berlaku untuk DRV8825. Prinsip kerja, koneksi dan codingnya hampir sama untuk kedua driver ini. Perbedaan di antara keduanya terletak pada karakteristik teknisnya dan sekarang kita akan melihat dan membandingkannya.

DRV8825 adalah driver stepper dari Texas Instruments yang dapat digunakan sebagai pengganti langsung driver Allegro A4988 karena koneksinya sama. Tiga perbedaan utama di antara keduanya adalah DR8825 dapat mengalirkan lebih banyak arus daripada A4988 tanpa pendinginan tambahan (1,5A vs 1A), memiliki tegangan suplai maksimum yang lebih tinggi (45V vs 35V), dan menawarkan resolusi microstepping yang lebih tinggi (32 vs 16 microsteps). 

Tentu saja, mereka juga memiliki beberapa perbedaan kecil lainnya. Misalnya, potensiometer batas arus memiliki lokasi yang berbeda dan hubungan antara pengaturan batas arus dan tegangan pin referensi juga berbeda. DRV8825 tidak memerlukan catu daya logika, dan lokasi pin tersebut digunakan sebagai output FAULT.

Namun, aman untuk menghubungkan pin FAULT langsung ke 5V, sehingga DRV8825 dapat digunakan sebagai pengganti langsung dalam sistem yang dirancang untuk driver A4988. 

Namun perlu dicatat, bahwa saat mengganti driver A4988 dengan DRV8825, sangat penting untuk memastikan orientasi driver sudah benar. Saya telah menyebutkan, potensiometernya berada di lokasi yang berbeda, pada A4988 berada di bawah chip, dan pada DRV8825 berada di atas chip, dan hal ini terkadang dapat menyebabkan kebingungan dan driver dapat dengan mudah ditempatkan di sisi yang salah. 

Untuk mengatur batas arus, kita dapat mengukur tegangan referensi dengan satu probe pada GND dan probe lainnya pada potensiometer itu sendiri.

Rumus perhitungan untuk stepper drive DRV8825 adalah sebagai berikut:

Batas saat ini =Vref x 2

Sedangkan untuk memilih resolusi microstepping, kita dapat menggunakan tabel berikut.

Secara keseluruhan, DRV8825 adalah driver stepper yang lebih baik daripada A4988, karena menawarkan peringkat arus dan tegangan yang lebih tinggi, serta resolusi microstepping yang lebih tinggi sehingga menghasilkan pengoperasian motor stepper yang lebih lancar dan senyap.

Pengemudi Stepper TMC2208

Berbicara tentang pengoperasian yang lebih lancar dan senyap, mari kita lihat driver stepper TMC2208. Chip TMC2208 dibuat oleh Trinamic, sebuah perusahaan berbasis di Jerman yang berspesialisasi dalam elektronik kontrol gerak. TMC2208 adalah driver motor stepper senyap yang juga dapat digunakan sebagai pengganti langsung dalam sistem yang dirancang untuk driver A4988 atau DRV8825. Ini banyak digunakan pada printer 3D desktop, pengukir laser, pemindai, dan sebagainya.

Apa yang membedakan driver ini dari dua driver lainnya adalah unit interpolasi terintegrasi yang menyediakan 256 subdivisi atau langkah mikro. Hal ini memungkinkan kontrol sinusoidal sempurna yang dihasilkan secara internal di dalam chip. Artinya driver akan mengeluarkan 256 microsteps ke motor stepper, berapapun resolusi microstep yang telah kita pilih melalui dua pin MS, 2, 4, 8 atau 16 microsteps. Hal ini memberikan pengoperasian yang lebih lancar dan mengurangi beban mikrokontroler secara signifikan.

Fitur pengemudi ini, dikombinasikan dengan teknologi kontrol arus tanpa suara StealthChop2, memberikan kontrol ultra-senyap pada motor stepper. Berikut perbandingan tingkat kebisingan ketiga pengemudi.

Tingkat kebisingan pengemudi stepper: A4988 sekitar 65dB, DRV8825 sekitar 67dB dan TMC2208 sekitar 41dB.

TMC2208 menggerakkan motor stepper sepenuhnya tanpa suara, yang sungguh mengesankan.

Peringkat TMC2208 saat ini sedikit lebih tinggi daripada driver A4988, atau 1,2A dengan arus puncak 2A. Untuk mengatur batasan driver saat ini, sekali lagi kita dapat menggunakan cara yang sama seperti yang dijelaskan untuk driver lainnya. Kita perlu mengukur tegangan referensi dengan satu probe di GND, dan probe lainnya secara keseluruhan tepat di sebelah pin Aktifkan.

Rumus untuk menghitung limit saat ini adalah sebagai berikut:

Batas saat ini =Vref x 0,71

Meski dapat digunakan sebagai pengganti langsung, driver TMC2208 memiliki pinout yang sedikit berbeda dibandingkan driver A4988. Di sini kita hanya memiliki dua pin untuk memilih resolusi microsteps dan untuk mengaktifkan driver kita perlu menghubungkan pin Enable ke GND.

Dari segi codingnya sama saja dengan dua driver lainnya. 

Driver TMC2208 juga memiliki beberapa fitur lain yang lebih canggih dibandingkan dengan dua driver lainnya, seperti misalnya antarmuka UART yang mudah digunakan yang menyediakan pengontrolan driver hanya dengan satu baris, bukan dua pin Step dan Dir. Selain itu saya menyediakan lebih banyak opsi penyetelan dan kontrol. 

Secara keseluruhan, TMC2208 adalah driver yang lebih baik dibandingkan A4988 dan DRV8825, tapi itu normal karena harganya lebih mahal. Namun, jika Anda tidak memerlukan fitur tambahan ini dan tingkat kebisingan tidak menjadi masalah bagi Anda, dua driver lainnya adalah pilihan yang tepat.

Kesimpulan

Jadi kita telah membahas hampir semua yang perlu kita ketahui tentang mengendalikan motor stepper dengan Arduino. NEMA17 dan tiga driver, A4988, DRV8825, dan TMC2208 sangat serbaguna dan dapat digunakan di banyak aplikasi yang memerlukan kontrol posisi. Anda selalu dapat mempelajari lebih lanjut dengan menjelajahi beberapa proyek Arduino saya.

Jika Anda tertarik mempelajari cara mengendalikan motor stepper yang lebih besar seperti NEMA23 atau NEMA34, saya juga akan memiliki tutorial khusus untuk itu. 

Saya harap Anda menikmati tutorial ini dan mempelajari sesuatu yang baru. Jangan lupa berlangganan dan jangan ragu untuk mengajukan pertanyaan apa pun di bagian komentar di bawah.


Proses manufaktur

  1. Proses Peleburan Elektroslag
  2. Dasar-dasar Hidrolik dan Sistem Hidrolik
  3. Transportasi Generasi dan Penggunaan Skala Pabrik
  4. Mesin Cetak Injeksi:Konstruksi, Pengerjaan, Aplikasi, Keuntungan dan Kerugian
  5. Detektor Kebohongan Arduino
  6. Adaptor Arduino Atari
  7. Cara Memotong Biaya Untuk Bagian Mesin Logam
  8. Busur dan Anak Panah
  9. Komunikasi Tanaman
  10. Pembuatan baja di Tungku Induksi