PWM là gì trong điều khiển động cơ?

Hiểu rõ nguyên lý của PWM và cách điều chỉnh tốc độ động cơ DC hiệu quả. Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết và ứng dụng thực tế trong robot.
PWM là gì trong điều khiển động cơ?
PWM — Pulse Width Modulation
PWM (Điều chế độ rộng xung) là kỹ thuật tạo tín hiệu analog từ digital bằng cách thay đổi tỉ lệ thời gian HIGH/LOW của xung.
Duty Cycle = (Thời gian HIGH / Chu kỳ) × 100%
Duty 25%: |██░░░░░░|██░░░░░░| → tốc độ thấp
Duty 50%: |████░░░░|████░░░░| → tốc độ trung bình
Duty 75%: |██████░░|██████░░| → tốc độ cao
Duty 100%:|████████|████████| → tốc độ tối đaTần số PWM
Arduino Uno PWM mặc định:
- Pin 5, 6: 980 Hz
- Pin 3, 9, 10, 11: 490 Hz
Motor DC hoạt động tốt ở 1–20 kHz. 490Hz đủ dùng cho robot cơ bản.
Code điều chỉnh tốc độ motor với PWM
const int ENA = 9; // Enable A — kết nối L298N ENA
const int IN1 = 7; // Direction 1
const int IN2 = 8; // Direction 2
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
}
void setMotorSpeed(int speed) {
// speed: -255 (lùi tối đa) đến +255 (tiến tối đa), 0 = dừng
if (speed > 0) {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, speed);
} else if (speed < 0) {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, -speed);
} else {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(ENA, 0);
}
}
void loop() {
// Tăng tốc từ 0 đến tối đa
for (int s = 0; s <= 255; s += 5) {
setMotorSpeed(s);
delay(50);
}
delay(1000);
// Giảm tốc
for (int s = 255; s >= 0; s -= 5) {
setMotorSpeed(s);
delay(50);
}
delay(500);
// Chạy ngược
for (int s = 0; s >= -255; s -= 5) {
setMotorSpeed(s);
delay(50);
}
delay(1000);
}LED Dimming với PWM
const int LED = 9;
void setup() { pinMode(LED, OUTPUT); }
void loop() {
// Fade in
for (int b = 0; b <= 255; b++) {
analogWrite(LED, b);
delay(5);
}
// Fade out
for (int b = 255; b >= 0; b--) {
analogWrite(LED, b);
delay(5);
}
}Tại sao không dùng điện trở để giảm tốc motor?
Điện trở tiêu hao điện năng dưới dạng nhiệt. PWM chuyển mạch nhanh giữa ON/OFF — motor nhận đúng điện áp lúc ON, không tốn điện lúc OFF. Hiệu suất PWM: 85–95%, điện trở: 30–50%.
Gợi ý dùng bài viết trong lớp học
Câu hỏi khởi động
- Linh kiện/kỹ thuật trong bài giải quyết vấn đề gì trong robot thật?
- Nếu nối sai nguồn hoặc đọc sai tín hiệu, robot sẽ biểu hiện như thế nào?
- Có cách nào đo hoặc quan sát hiện tượng thay vì đoán lỗi không?
Hoạt động thực hành nhanh
- Giáo viên cho học viên xem linh kiện hoặc sơ đồ liên quan đến chủ đề PWM là gì trong điều khiển động cơ?.
- Học viên dự đoán chân nguồn, chân tín hiệu và dữ liệu đầu ra.
- Chạy code mẫu ở cấu hình an toàn, sau đó thay đổi một tham số.
- Mỗi nhóm ghi nhận lỗi gặp phải và cách kiểm tra theo thứ tự nguồn, GND, tín hiệu, code.
Checklist kỹ thuật
- Luôn kiểm tra điện áp hoạt động trước khi nối với board điều khiển.
- In dữ liệu ra Serial Monitor khi làm việc với cảm biến hoặc thuật toán.
- Với motor/servo, cấp nguồn tải riêng và nối chung GND với board.
- Ghi lại thông số đã calibration để lần sau không phải chỉnh lại từ đầu.
Câu hỏi ôn tập
- Thông số nào quan trọng nhất khi chọn linh kiện này cho robot?
- Lỗi nào dễ xảy ra nhất trong lớp học và cách phát hiện nhanh nhất là gì?
- Có thể mở rộng kiến thức này thành dự án robot nào?
Tài nguyên tải về
Tải bản PDF của bài viết để in giáo án hoặc gửi trước cho học viên.