Trong bài viết này, chúng ta sẽ học cách giao tiếp module điều khiển động cơ L298 với Arduino Uno. Bạn có thể đang nghĩ tại sao chúng ta cần module L298N để điều khiển động cơ. Câu trả lời rất đơn giản, board Arduino hoặc các chân IO của một vi điều khiển không có đủ khả năng điều khiển dòng điện/điện áp để điều khiển động cơ. Để điều khiển động cơ quay theo cả hai chiều (theo chiều kim đồng hồ và ngược chiều kim đồng hồ), chúng ta cần sử dụng mạch cầu H. Module L298N là một mạch tích hợp nguyên khối với hai mạch cầu H. Nó có thể được sử dụng để đảo chiều quay của động cơ theo cả hai chiều và điều khiển tốc độ của động cơ bằng kỹ thuật điều chế độ rộng xung PWM (Pulse Width Modulation).
Xem thêm bài viết: Điều khiển động cơ DC dùng IC L293D và Arduino
Linh kiện cần thiết
STT | Tên linh kiện | Số lượng |
1 | Arduino Uno | 1 |
2 | Module điều khiển động cơ L298N | 1 |
3 | Pin 9V | 1 |
4 | Động cơ DC 12V | 2 |
5 | Dây cắm |
Module điều khiển động cơ L298
Module điều khiển động cơ L298 là bộ điều khiển sử dụng mạch cầu H để dễ dàng điều khiển chiều quay và tốc độ của tối đa 2 động cơ DC.
Module này dễ sử dụng, chi phí thấp, dễ lắp đặt. Module L298N được dùng để chế tạo xe điều khiển, xe dò đường, các thiết bị sử dụng động cơ DC hoặc động cơ bước … sử dụng kết hợp với vi điều khiển.
Thông số kỹ thuật
- IC chính: L298N
- Điện áp điều khiển: +5 V ~ +35 V
- Dòng tối đa cho mỗi cầu H: 2A
- Điện áp tín hiệu điều khiển: +5 V ~ +7 V
- Dòng tín hiệu điều khiển: 0 ~ 36mA
- Công suất hao phí: 20W (khi nhiệt độ t = 75℃)
- Nhiệt độ làm việc: -25 ℃ ~ +130 ℃
Chức năng của các chân
Bốn chân INPUT: IN1, IN2, IN3, IN4 được nối lần lượt với các chân 5, 7, 10, 12 của IC L298N. Đây là các chân nhận tín hiệu điều khiển.
Bốn chân OUTUT: OUT1, OUT2, OUT3, OUT4 (tương ứng với các chân INPUT) được nối với các chân 2, 3, 13, 14 của IC L298N. Các chân này sẽ được nối với động cơ DC hoặc động cơ bước.
Hai chân cho phép ENA và ENB dùng để điều khiển mạch cầu H trong IC L298N. Nếu ở mức logic “1” (nối với nguồn 5V) cho phép mạch cầu H hoạt động, nếu ở mức logic “0” thì mạch cầu H không hoạt động. Các chân này cũng được dùng để điều khiển tốc độ của động cơ.
+ Khi ENA = 0: Động cơ không quay với mọi đầu vào.
+ Khi ENA = 1:
+ IN1 = 1; IN2 = 0: Động cơ quay thuận.
+ IN1 = 0; IN2 = 1: Động cơ quay nghịch.
+ IN1 = IN2: Động cơ dừng ngay lập tức.
Với ENB cũng tương tự với IN3, IN4.
Sơ đồ mạch điện
- Như đã đề cập ở trên module L298N gồm có hai ngõ ra. Mỗi ngõ ra được kết nối với một động cơ DC.
- Cực dương của pin được kết nối với đầu vào nguồn của module L298N và cực âm được kết nối với GND.
- Chân 5V của module điều khiển động cơ L298 được kết nối với chân Vin của Arduino để cấp nguồn cho board Arduino.
- Chân input 1 và input 2 dùng để điều khiển chiều quay của động cơ 1 lần lượt nối với các chân 8 và 7 của Arduino.
- Chân input 3 và input 4 dùng để điều khiển chiều quay của động cơ 2 lần lượt nối với các chân 5 và chân 4 của Arduino.
- Chân Enable A và Enable B được kết nối với chân 9 và chân 3 của Arduino. Các chân này được dùng để điều khiển tốc độ của động cơ dùng kỹ thuật điều chế độ rộng xung PWM.
Chương trình
// Kết nối động cơ A
int enA = 9;
int in1 = 8;
int in2 = 7;
// Kết nối động cơ B
int enB = 3;
int in3 = 5;
int in4 = 4;
void setup() {
// Thiết lập lập các chân điều khiển động cơ là OUTPUT
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Tắt 2 động cơ – Trạng thái ban đầu
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop() {
directionControl();
delay(1000);
speedControl();
delay(1000);
}
// Hàm này dùng để điều khiển chiều quay của động cơ
void directionControl() {
// Cho các động cơ quay tốc độ tối đa
analogWrite(enA, 255);
analogWrite(enB, 255);
// Cho phép động cơ A & B quay
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(2000);
// Thay đổi chiều quay của động cơ
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// Tắt 2 động cơ
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// Hàm này dùng để điều khiển tốc độ của động cơ
void speedControl() {
// Cho phép động cơ quay
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Tăng tốc từ 0 đến tốc độ tối đa
for (int i = 0; i < 256; i++) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Giảm tốc độ từ tốc độ tối đa về 0
for (int i = 255; i >= 0; –i) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Tắt động cơ
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
Giải thích
- Trong phần setup, tất cả các chân điều khiển động cơ được khai báo là OUTPUT và được cho LOW để làm cho cả hai động cơ TẮT theo mặc định.
- Trong hàm loop, hai hàm directionControl() và speedControl() được gọi trong khoảng thời gian delay một giây.
- Hàm directionControl() để quay cả hai động cơ theo chiều kim đồng hồ, ngược chiều kim đồng hồ và dừng 2 giây cho mỗi động cơ.
- Hàm speedControl() để thay đổi tốc độ của động cơ bằng cách thay đổi độ rộng xung từ từ 0 đến 100% (0 – 255) của chu kỳ làm việc.
Kết luận
Module điều khiển động cơ L298 là một module rất hữu ích, phổ biến với chức năng thông dụng và giá thành cực kỳ rẻ là lựa chọn của các bạn học sinh, sinh viên. Module này có thể điều khiển được 2 động cơ DC. Ứng dụng rất nhiều vào các đề tài: điều khiển xe robot, điều khiển cánh tay robot, giao tiếp với Arduino để điều khiển động cơ …