Tổng hợp 3 mạch điều khiển tốc độ và đảo chiều động cơ bước với Arduino cùng với các driver A4988, L298, TB6600. Thông số kỹ thuật và ưu nhược điểm của từng mạch.
1. Điều khiển tốc độ và đảo chiều động cơ bước bằng L298
1.1 Sơ đồ đấu dây với L298
Mạch bên dưới là mạch điều khiển tốc độ và đảo chiều động cơ bước dùng driver cầu H L298. Cầu H L298 được sử dụng để điều khiển chiều và tốc độ 2 động cơ DC. Nhưng cũng được sử dụng để điều khiển được 1 động cơ bước có 4 dây.
+ Ngõ ra OUT1 và OUT 2 của L298 được kết nối với mỗi cuộn dây của động cơ bước. Động cơ bước sẽ gồm 2 cuộn dây, và có thể được xác định bằng cách đo điện trở của các cuộn dây động cơ.
+ Kết nối các chân đầu vào (IN1, IN2, IN3, IN4) của L298 với các chân (10, 9, 7, 6) của Arduino.
+ Lưu ý cần kết nối GND của arduino với GND của L298 để tam chiếu điện áp. Nhiều bạn quên kết nối dây này dẫn đến mạch không hoạt động được.
Sơ đồ đấu dây Arduino với L298
1.2 Chương trình Arduino với L298
a. Điều khiển đảo chiều động cơ bước luân phiên
Chương trình sau đây điều khiển đảo chiều động cơ bước quay một vòng theo chiều thuận, sau đó dừng 2s và tiếp tục quay 1 vòng theo chiều ngược lại.
Chương trình trên Arduino sử dụng thư viện điều khiển động cơ bước nên phần chương trình rất đơn giản. Sử dụng hàm myStepper.setSpeed để điều khiển tốc độ và hàm myStepper.step để điều khiển số bước mà động cơ quay.
#include <Stepper.h>
const int stepsPerRevolution = 200; // độ phân giải của động cơ là 200
Stepper myStepper(stepsPerRevolution, 10, 9, 7, 6);//Khai báo các chân điều khiển là 6,7, 9, 10
void setup() {
myStepper.setSpeed(60); // cài đặt tốc độ động cơ là 60
}
void loop() {
myStepper.step(stepsPerRevolution);// Quay động cơ 1 vòng theo chiều thuận
delay(2000); // Dừng 2s sau khi quay xong 1 vòng
myStepper.step(-stepsPerRevolution);// Quay động cơ 1 vòng theo chiều nghịch
delay(2000);
}
b. Điều khiển tốc độ động cơ bước bằng L298
Một ví dụ tiếp theo sử dụng Arduino đọc giá trị biến trở, tham chiếu giá trị điện trở để điều chỉnh tốc độ của động cơ. Biến trở sẽ được cấp nguồn 5V và chân giữa biến trở nối với chân A0 của Arduino.
Chương trình điều khiển tốc độ động cơ bước:
#include <Stepper.h>
const int stepsPerRevolution = 200;// động cơ bước có độ phân giải 200 xung
Stepper myStepper(stepsPerRevolution, 10, 9, 7, 6);// Các chân kết nối với IN1, IN2, IN3, IN4 của L298
void setup() {
}
void loop() {
int sensorReading = analogRead(A0);// Đọc giá trị biến trở qua chân A0
int motorSpeed = map(sensorReading, 0, 1023, 0, 100); // chuyển đổi giá trị biến trở từ 0 – 1023 thành giá trị tốc tốc độ từ 0 – 100
if (motorSpeed > 0) {
myStepper.setSpeed(motorSpeed); // Thay đổi tốc độ của động cơ
myStepper.step(stepsPerRevolution / 100);//bước 1/100 theo độ phân giải của động cơ
}
}
2. Điều khiển động cơ bước thông qua driver A4988
2.1 Sơ đồ đấu dây với A4988
Sơ đồ mạch điều khiển động cơ bước được vẽ như hình bên dưới:
+ Cấp nguồn cho mạch động lực ở hai chân VMOT và GND. Cấp nguồn cho mạch điều khiển tại hai chân VDD và GND, ở đây ta sử dụng nguồn 5V từ Arduino.
+ Kết nối chân 1A và 1B kết nối với một cuộn dây động cơ, chân 2A và 2B kết nối với một cuộn dây còn lại.
+ Chân DIR của A4988 kết nối với chân số 2 Arduino điều khiển chiều quay động cơ.
+ Chân STEP của A4988 kết nối với chân số 3 Arduino điều khiển số bước quay.
+ Lưu ý chân RESET cần nối với chân SLEEP để đưa lên mức cao để cho phép chạy.
+ Dòng điện động cơ có thể được điều chinh thông qua biến trở trên board A4988.
Sơ đồ đấu dây mạch A4988 điều khiển động cơ bước
2.2 Chương trình Arduino với A4988
a. Điều khiển đảo chiều động cơ bước luân phiên
Giả sử động cơ có độ phân giải 200 xung/vòng, chương trình dưới đây điều khiển động cơ chạy 1 vòng theo chiều thuận, sau đó dừng 2s. Sau đó động quay theo chiều ngược lại và sau đó ngừng 2s trước khi quay theo chiều thuận trở lại.
const int stepPin = 2; //Chân số 2 kết nối với chân STEP của A4988
const int dirPin = 3; //Chân số 3 kết nối với chân DIR của A4988
void setup() {
pinMode(stepPin,OUTPUT); //Thiết lập 2 chân số 2,3 là ngõ ra
pinMode(dirPin,OUTPUT);
}
void loop() {
digitalWrite(dirPin,HIGH); // Cho động cơ quay theo một chiều xác định
for(int x = 0; x < 200; x++) { // Chương trình tạo ra 200 xung vuông, độ rộng xung 0,5ms
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(2000); // Dừng 2 giây sau khi quay
digitalWrite(dirPin,LOW); //Thay đổi chiều động cơ ngược lại
for(int x = 0; x < 400; x++) { // Chương trình tạo ra 400 xung để động cơ quay 2 vòng
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
delay(2000);
}
b. Chương trình điều khiển tốc độ động cơ bước bằng A4988
Tốc độ động cơ được thay đổi bằng các thay đôi tần số của xung điều khiển từ Arduino. Chương trình dưới đây sẽ đọc giá trị biến trở tại chân A0, giá trị đọc được sẽ từ 0 – 1023.
Sau đó chuyển giá trị này về từ 0,3 – 4ms, có thể hiệu chỉnh giá trị này phù hợp với động cơ. Vì nếu tần số động cơ quá thấp động cơ không đủ moment quay, tần số quá cao động cơ không thể đáp ứng được.
const int stepPin = 2; //Chân số 2 điều khiển bước động cơ
const int dirPin = 3; //Chân số 3 điều khiển chiều quay động cơ
int potentionmeter,delaytime;
void setup() {
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
digitalWrite(dirPin,HIGH); //Cho phép động cơ động cơ quay theo chiều xác định
}
void loop() {
potentionmeter = analogRead(A0); // Đọc giá trị biến trở
delaytime = map(potentionmeter, 0, 1023, 300,4000); //chuyển giá trị biến trở từ 0-1023 về 300-4000
// Tạo xung điều khiển, với độ rộng xung có giá trị tham chiếu từ biến trở
digitalWrite(stepPin, HIGH);
delayMicroseconds(delaytime); // Thời gian delay từ 0,3ms – 4ms
digitalWrite(stepPin, LOW);
delayMicroseconds(delaytime);
}
3. Điều khiển tốc độ và đảo chiều động cơ bước bằng driver TB6600
3.1 Sơ đồ đấu dây với driver TB6600
Mạch bên dưới là sơ đồ đấu dây giữa Arduino với driver Tb6600 và động cơ bước:
+ Nguồn cấp từ 9 – 42V tùy theo điện áp định mức của động cơ.
+ 2 cuộn dây động cơ ra 4 đầu dây kết nối tương ứng với các chân A+, A- và B+, B-
+ Các chân tín hiệu
ENA+: 5V Arduino
DIR-: Pin 9 Arduino
DIR+: 5V Arduino
PUL-: Pin 8 Arduino
PUL+: +5V
Sơ đồ đấu dây Arduino với TB6600 điều khiển động cơ bước
3.2 Chương trình trên Arduino
Ví dụ sao đây sẽ điều khiển được đảo chiều quay và tốc độ của động cơ bước. Theo chu kỳ như sau:
+ Động cơ quay 1 vòng theo chiều thuận với xung điều khiển có chu kỳ 4ms
+ Động cơ quay 1 vòng theo chiều ngược lại với xung điều khiển có chu kỳ 2ms. Động cơ quay nhanh hơn.
+ Động cơ quay 4 vòng theo chiều thuận, với chu kỳ xung 1ms nên động cơ quay nhanh
+ Động cơ quay 4 vòng theo chiều ngược, với chu kỳ xung 1ms nên động cơ quay nhanh
Chương trình Arduino viết trên phần mềm IDE cụ thể như sau:
#define dirPin 9
#define stepPin 8
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop() {
/////Điều khiển động cơ quay chiều thuận, với tốc độ thấp
digitalWrite(dirPin, HIGH); // Động cơ chạy thuận
for (int i = 0; i < 200; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(2000); //Độ rộng xung điều khiển là 2ms
digitalWrite(stepPin, LOW);
delayMicroseconds(2000);
}
delay(3000);//Sau khi quay 1 vòng thì dừng 3s
/////Điều khiển khiển động cơ quay 1 vòng theo chiều ngược lại với tốc độ nhanh hơn
digitalWrite(dirPin, LOW); // Động cơ chạy ngược
for (int i = 0; i < 200; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);// Độ rộng xung điều khiển là 1ms, do đó động cơ quay nhanh hơn
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(3000);
// Điều khiển động cơ quay 4 vòng theo chiều thuận, với tốc độ nhanh
digitalWrite(dirPin, HIGH); // Động cơ chạy thuận
for (int i = 0; i < 4 * 200; i++) { // Vòng lặp 4 lần, mỗi lần phát 200 xung
digitalWrite(stepPin, HIGH);
delayMicroseconds(500); // Độ rộng xung điều khiển 0,5ms
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
delay(3000);
// Điều khiển động cơ quay 4 vòng theo chiều ngược tốc độ nhanh
digitalWrite(dirPin, LOW); // Động cơ chạy ngược
for (int i = 0; i < 4 * 200; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500); // Độ rộng xung điều khiển 0,5ms
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
delay(3000);
}
4. So sánh ưu và nhược điểm giữa các module
4.1 Module L298
+ Điện áp đầu vào 5 – 32VDC
+ Công suất tối đa 25W và dòng tối đa là 2A cho mỗi cầu H.
+ Kích thước mạch: 43x43x27
+ Giá bán module L298 chỉ từ 27.000đ
+ Ưu điểm là giá thành rẻ, mạch nhỏ gọn, điều khiển được một động cơ bước hoặc 2 động cơ một chiều độc lập.
+ Nhược điểm là không có mạch bảo vệ, công suất module thấp.
Giá bán các module L298 ở Shopee
4.2 Module A4988
+ Điện áp hoạt động 8 – 35VDC
+ Dòng điện liên tục mỗi pha 1A – 2A
+ Kích thước 15 x 20 x 6
+ Có thể điều chỉnh dòng điện cho phép hoạt động bằng biến trở.
+ Có bảo vệ sự cố quá nhiệt, quá áp, quá dòng, ngắn mạch
+ Có 5 chế độ điều khiển: Full step, 1/2, 1/4, 1/8, 1/16
+ Giá bán module A4988 chỉ từ 17.000đ
+ Ưu điểm là kích thước mạch rất nhỏ, giá rẻ nhất trong các loại driver, có chức năng bảo vệ và có 5 chế độ điều khiển góc bước.
+ Nhược điểm: công suất thấp, không có các terminal kết nối dây nên chỉ thích hợp sử dụng test board hoặc làm mạch.
Giá bán các module A4988 ở Shopee
4.3 Module TB6600
+ Điện áp từ 9 – 42VDC
+ Dòng cấp tối đa là 4A
+ Kích thước: 96 x 71 x 37mm.
+ 6 độ phân giải: Full step, 1/2, 1/4, 1/8, 1/16, 1/32
+ Bảo vệ quá dòng, quá áp, bảo vệ nhiệt
+ Giá bán module TB6600 chỉ từ 119.000đ
+ Ưu điểm là công suất đủ đáp ứng cho hầu hết các loại động cơ bước, độ phân giải góc bước lên đến 1/32, có các chức năng bảo vệ.
+ Nhược điểm: giá thành cao hơn so với các driver còn lại.
Giá bán các module A4988 ở Shopee
>>> Xem thêm:
6 mạch điều khiển đảo chiều động cơ 3 pha – ưu và nhược điểm từng mạch
4 sơ đồ nguyên lý mạch điều khiển đảo chiều động cơ DC
Phân tích 3 sơ đồ mạch đảo chiều sao tam giác dùng timer, PLC