Hướng dẫn chi tiết cách dùng code Arduino điều khiển động cơ bước thông qua thư viện AccelStepper để có thể điều khiển đồng thời nhiều stepper và driver điều khiển động cơ bước A4988 hoặc DRV8825.
Vấn đề điều khiển động cơ bước là một vấn đề kinh điển nhưng lại chưa có trên Cộng đồng.Nếu bạn đang thực hiện các dự án có sử dụng các động cơ để di chuyển theo tọa độ thì động cơ bước chính là thứ bạn đang cần. Đặc biệt bài viết hướng dẫn từng bước thực hiện dùng Arduino và A4988 driver. Trước tiên hãy cùng điểm qua một vài kiến thức cơ bản trước đã nhé!
Một số kiến thức cơ bản:
* A4988 là một trình điều khiển vi bước để điều khiển động cơ bước lưỡng cực có bộ dịch tích hợp để vận hành dễ dàng. Điều này có nghĩa là chúng ta có thể điều khiển động cơ bước chỉ với 2 chân từ bộ điều khiển của chúng ta hoặc một chân để điều khiển hướng quay và chân kia để điều khiển các bước.
* Động cơ bước: Là một loại động cơ mà ở đó bạn sẽ có thể quy định chính xác số góc quay và động cơ bước sẽ phải quay. Động cơ bước còn là tổng hợp của 2 loại động cơ một chiều không tiếp xúc và động cơ đồng bộ giảm tốc công suất nhỏ.
* DRV8825 : là bảng mạch điều khiển động cơ bước thông dụng nhất hiện nay.
Quay lại với bài viết dùng Arduino điều khiển động cơ bước, trước khi thực hiện chúng ta cần chuẩn bị các phần cứng sau:
1.Động cơ bước
2.Trình điều khiển A4988 Stepper Driver ( Hoặc DRV8825 )
3.Bộ chuyển đổi 12V/2A
4.Bộ nguồn
5.Board Arduino
6.Breadboard và dây dẫn
Chi tiết cách làm Arduino điều khiển động cơ bước
Bước 1: Vẽ sơ đồ mạch
Bước 2: Tính toán thông số kĩ thuật
Mỗi động cơ bước sẽ có một thống cứng quan trọng nhất mà khi bạn đi đâu và hỏi mua thì phải hỏi đầu tiên. Đó là, động cơ bước này có bao nhiêu step! Theo như mình biết thì động cơ bước trên thị trường Việt Nam mà giới DIY chúng ta hay dùng có số step là 200.
Ngoài ra, nó còn có các thông số khác mà mình sẽ kèm theo ví dụ cụ thể về loại mình dùng, bạn nên đọc kĩ phần này bởi nó rất quan trọng khi dùng Arduino điều khiển động cơ bước:
Rated Current/phase (dòng tiêu thụ tối đa mỗi p 2.0A
Phase Resistance (điện trở từn 1.4ohms
Voltage (hiệu điện thế) 2.8V
Trong đó, tham số Rated Current/phase thể hiện dòng điện tối đa mà mỗi pha có thể nhận được, nếu driver điều khiển nào có dòng điện mỗi pha cao hơn thì sẽ hỏng. Nên lựa loại driver cho dòng ra xấp xỉ 80 - 90% thông số này. Điện trở mỗi pha là hằng số (bạn xem trong datasheet của động cơ bước mà bạn mua). Còn con số voltage là hiệu điện thế tối ưu để làm stepper hoạt động ổ định (2.0 * 1.4 = 2.8V)
Bước 3: Nối động cơ bước và Arduino để điều khiển
Cái driver sẽ được gắn lên breadboard như hình 3, sau đó bạn nối dây vào như hình 2.Arduino điều khiển động cơ bước đến đây đã gần như hoàn chỉnh rồi đấy, tuy nhiên chúng ta vẫn cần phải nạp code cho Arduino nữa, hãy đến với bước 5 ngay sau đây!
Bước 5: Nạp code cho Arduino
Bạn nạp đoạn code sau:
// Run a A4998 Stepstick from an Arduino UNO. // Paul Hurley Aug 2015 - http://www.instructables.com/id/Drive-a-Stepper-Motor-with-an-Arduino-and-a-A4988-/ int x; #define BAUD (9600) void setup() { Serial.begin(BAUD); pinMode(6,OUTPUT); // Enable pin - chân khởi động - nối vào GND sẽ giúp ta bật động cơ bước, nối vô VCC động cơ bước được thả ra. Nôm na: GND = servo.attach, VCC = servo.detach pinMode(5,OUTPUT); // Step pin pinMode(4,OUTPUT); // Dir - pin digitalWrite(6,LOW); // Set Enable low } void loop() { digitalWrite(6,LOW); // Đặt Enable ở trạng thái LOW digitalWrite(4,HIGH); // Đặt Dir ở trạng thái HIGH Serial.println("Cho chay 200 steps (1 vong)"); for(x = 0; x < 200; x++) // Cho chay 1 vong { digitalWrite(5,HIGH); // Output high delay(10); // chờ digitalWrite(5,LOW); // Output low delay(100); // chờ } Serial.println("Pause"); delay(1000); // dừng 1 s rồi quay tiếp }
Nhớ gắn điện 12V vô nha
Arduino điều khiển nhiều động cơ bước với thư viện AccelStepper
Nếu là một người thích sự hoàn hảo thì khi bạn nhìn vào code trên thì sẽ thấy cần rất nhiều dòng code chỉ để làm 1 động cơ bước hoạt động, và với những dòng delay như vậy thì chắc hẳn, bạn sẽ hiểu rằng, chả có cách nào chạy những tiến trình khác khi động cơ bước đang chạy.
Arduino có hỗ trợ sẵn bộ thư viện stepper trong file example. Nhưng nếu bạn đã từng thử thì hẳn biết một điều là, thư viện đó cũng delay như code kia. Nghĩa là trong quá trình động cơ bước hoạt động thì cả chương trình sẽ phải dừng đợi nó hoạt động theo (cơ chế này gọi là cơ chế đồng bộ - sync).
Để điều khiển được nhiều động cơ bước thì chúng ta phải biết ngõ xử lý bất đồng bộ, nghĩa là sao? Nghĩa là phải biết thay hàm delay bằng cách khác, và đó chính là dùng timer, chính là dùng hàm millis(). Và ý tưởng đó đã được thể hiện trong thư viện AccelStepper, thư viện này đã ứng dụng nguyên lý xử lý bất đồng bộ (async) để làm nên nó - một thư viện cực kì hữu ích!
Để tài về thư viện này, các bạn hãy click vào đây (mirror).
Và đây là đoạn code mẫu của thư viện này.
Bạn nhớ nối Enable xuống GND nhé angel.
#include <AccelStepper.h>
AccelStepper stepper(1,5,4);// pin 5 step, pin 4 dir
void setup() {
Serial.begin(9600);
pinMode(6,OUTPUT); // Enable
digitalWrite(6,LOW); // Dặt Enable xuống low để khởi động động cơ
}
void loop() {
if (stepper.distanceToGo() == 0) //kiểm tra thử động cơ bước có còn đang chạy hay không, nếu không còn chạy thì...
{
delay(1000);
stepper.moveTo(rand() % 400); //chuyển đến tọa độ 0 - 399 (Random)
stepper.setMaxSpeed((rand() % 400) + 200); //chỉnh tốc độ.
stepper.setAcceleration((rand() % 200) + 100); //chỉnh gia tốc.
//kiến thức về tốc độ và gia tốc là kiến thức cơ bản vật lý lớp 10, vì vậy, các bạn lớp 9 trở xuống muốn dùng động cơ bước thì nhớ tìm hiểu khái niệm này nhé. hehe
}
Serial.println(stepper.distanceToGo());
stepper.run(); // phải có hàm này ở hàm loop với mỗi biến stepper thì nói mới chạy được
}
Vậy là chúng ta đã cùng nhau trải qua bài viết hướng dẫn dùng Arduino điều khiển động cơ bước một cách hoàn chỉnh, nếu gặp khó khăn trong quá trình thực hiện, hãy để lại comment phía dưới để nhận được trợ giúp các bạn nhé!
Nhận xét
Đăng nhận xét