Bài đăng kỹ thuật
Triển khai và phân tích hệ thống
Xây dựng mô hình điều khiển động cơ DC bằng Arduino Uno và L298N, cho phép quay hai chiều, dừng và thay đổi tốc độ bằng PWM

Trong các mô hình xe robot và băng tải mini, động cơ DC thường cần quay theo hai chiều với tốc độ có thể thay đổi. Arduino tạo tín hiệu điều khiển, còn module L298N nhận nguồn riêng để cấp điện cho động cơ.
Bài thực hành này sử dụng một động cơ DC để làm rõ ba thao tác cơ bản: chọn chiều quay, điều chỉnh tốc độ và dừng động cơ.
1. Dẫn dắt thực tế
Khi xây dựng một mô hình chuyển động, người học cần điều khiển động cơ mà không cấp điện trực tiếp từ chân tín hiệu Arduino. L298N đóng vai trò trung gian giữa bộ điều khiển và động cơ: Arduino gửi lệnh, module thực hiện việc đóng cắt nguồn cho tải.
2. Mục tiêu dự án
- Điều khiển động cơ DC quay theo hai chiều.
- Thay đổi mức tốc độ bằng tín hiệu PWM.
- Cho động cơ dừng trước khi đảo chiều.
- Đấu nguồn động cơ riêng và nối chung GND với Arduino.
Chương trình mẫu chạy một chu kỳ tự động để quan sát các chức năng trên. Mô hình chưa sử dụng encoder nên chưa đo hoặc giữ ổn định tốc độ theo RPM.
3. Lý thuyết nền tảng
L298N chứa hai mạch cầu H; mỗi mạch có thể điều khiển một động cơ DC. Với kênh A, hai chân IN1 và IN2 quyết định chiều quay, còn ENA cho phép kênh hoạt động. Đảo trạng thái IN1 và IN2 sẽ đảo chiều dòng điện qua động cơ. Xem tài liệu L298 của STMicroelectronics.
Arduino Uno tạo tín hiệu PWM trên chân D9 bằng lệnh analogWrite().
Giá trị từ 0 đến 255 điều chỉnh mức công suất cấp
cho động cơ; đây không phải giá trị RPM thực tế.
Xem
| ENA | IN1 | IN2 | Trạng thái kênh A |
|---|---|---|---|
| Tắt | Bất kỳ | Bất kỳ | Ngừng cấp điện cho động cơ |
| Bật | HIGH | LOW | Quay một chiều |
| Bật | LOW | HIGH | Quay chiều ngược lại |
L298N có sụt áp trên mạch công suất. Vì vậy, điện áp thực tế đến động cơ có thể thấp hơn điện áp nguồn, đặc biệt khi tải tăng. Cần chọn nguồn và động cơ phù hợp với dòng tải của module.

4. Kiến trúc giải pháp

Mô hình gồm Arduino Uno, module L298N, một động cơ DC và nguồn ngoài cho động cơ. Arduino được cấp điện qua USB; trong ví dụ này, module nhận nguồn 12 V DC phù hợp với động cơ sử dụng.
Luồng điều khiển: Arduino D7/D8 chọn chiều quay, D9 phát PWM → L298N → động cơ DC. GND của Arduino và GND của nguồn động cơ phải được nối chung để module nhận đúng tín hiệu điều khiển.
5. Nội dung triển khai dự án
Đấu nối kênh A của L298N theo bảng sau:
| Arduino hoặc thiết bị | Chân L298N | Chức năng |
|---|---|---|
| D9 | ENA | Điều chỉnh mức tốc độ bằng PWM |
| D8 | IN1 | Chọn chiều quay |
| D7 | IN2 | Chọn chiều quay |
| GND Arduino | GND | Nối chung điểm 0 V |
| Hai dây động cơ | OUT1, OUT2 | Kết nối động cơ |
| Cực dương nguồn ngoài | 12V/VS | Cấp nguồn cho động cơ |
| Cực âm nguồn ngoài | GND | Hoàn thành mạch nguồn |
Tháo jumper ENA để Arduino điều khiển chân này bằng PWM. Với module có bộ ổn áp và jumper 5V-EN, hãy kiểm tra hướng dẫn của đúng phiên bản module trước khi cấp nguồn. Trong cách lắp này, không nối chân 5V của module sang Arduino. Tham khảo hướng dẫn module L298N.
Nạp chương trình sau vào Arduino Uno:
const byte ENA = 9;
const byte IN1 = 8;
const byte IN2 = 7;
void dungDongCo() {
analogWrite(ENA, 0);
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
}
void chayDongCo(bool chieuThuan, byte mucPWM) {
analogWrite(ENA, 0);
digitalWrite(IN1, chieuThuan ? HIGH : LOW);
digitalWrite(IN2, chieuThuan ? LOW : HIGH);
analogWrite(ENA, mucPWM);
}
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
dungDongCo();
}
void loop() {
chayDongCo(true, 120);
delay(2000);
chayDongCo(true, 200);
delay(2000);
dungDongCo();
delay(500);
chayDongCo(false, 120);
delay(2000);
chayDongCo(false, 200);
delay(2000);
dungDongCo();
delay(2000);
}
Nếu động cơ không quay ở mức PWM 120, tăng dần giá trị để
tìm mức đủ khởi động dưới tải. Nếu chiều quay thực tế ngược với cách gọi
“thuận” trong bài, có thể đổi chỗ hai dây ở OUT1 và OUT2.
6. Kết quả đầu ra
Khi đấu nối đúng và nạp chương trình, trình tự dự kiến là: động cơ quay một chiều ở mức PWM 120, tăng lên 200, dừng, rồi lặp lại hai mức đó theo chiều ngược lại. Chu kỳ tiếp tục lặp để dễ quan sát.
Sản phẩm của bài thực hành gồm bảng nối chân, chương trình điều khiển và mô hình chạy thử. Các giá trị PWM là lệnh điều khiển, không phải số đo tốc độ. Muốn báo cáo RPM cần bổ sung encoder hoặc thiết bị đo phù hợp.


7. Hướng mở rộng
Có thể thêm biến trở để chỉnh PWM trực tiếp, nút nhấn để chọn chiều quay, hoặc dùng kênh B của L298N để điều khiển động cơ thứ hai cho xe robot hai bánh. Ở bước nâng cao, encoder và thuật toán PID giúp đo tốc độ thực tế và điều chỉnh động cơ theo giá trị đặt.