Trang chủ • Dự án • DỰ ÁN ARDUINO

Arduino Uno điều khiển động cơ DC bằng module L298N

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

DỰ ÁN ARDUINO ~5 phút đọc Cập nhật 22/09/2026

Nội dung bài đăng

  • Phân tích mục tiêu hệ thống và yêu cầu điều khiển.
  • Mô tả thuật toán PLC/HMI và cấu trúc truyền thông.
  • Tổng hợp thông số, lưu ý triển khai và mở rộng thực tế.

Bài đăng kỹ thuật

Triển khai và phân tích hệ thống

Arduino Uno điều khiển động cơ DC bằng module L298N

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.