(Khóa học: Lập trình & Điều khiển Động Cơ từ Cơ Bản tới Nâng Cao)
📘 Giới thiệu
Trong bài học trước, bạn đã học cách bật/tắt động cơ DC bằng ESP32.
Ở bài này, chúng ta sẽ tiến thêm một bước quan trọng — điều khiển tốc độ quay của động cơ bằng tín hiệu PWM (Pulse Width Modulation).
PWM là kỹ thuật điều chỉnh tốc độ hoặc độ sáng mà không cần thay đổi điện áp nguồn, giúp tiết kiệm năng lượng và bảo vệ linh kiện.
⚡ 1. PWM là gì?
PWM (Pulse Width Modulation) là phương pháp điều chế độ rộng xung.
Thay vì thay đổi điện áp, ta thay đổi thời gian bật/tắt của tín hiệu điều khiển trong mỗi chu kỳ.
- Khi xung HIGH nhiều hơn (Duty Cycle lớn) → động cơ quay nhanh hơn.
- Khi xung LOW nhiều hơn (Duty Cycle nhỏ) → động cơ quay chậm hơn.
Ví dụ:
- 100% Duty Cycle → cấp điện liên tục → motor quay tối đa.
- 50% Duty Cycle → chỉ cấp điện nửa thời gian → motor quay chậm lại.
🔌 2. Sơ đồ mạch

Ta sử dụng cùng sơ đồ như Bài 1, chỉ khác phần lập trình PWM.
| ESP32 Pin | Kết nối | Ghi chú |
|---|---|---|
| GPIO5 | Chân B transistor (qua điện trở 1kΩ) | PWM output |
| GND | Mass chung | GND ESP32 và nguồn motor nối chung |
| Chân C transistor | Một đầu motor | |
| +5V | Đầu còn lại motor | Nguồn cấp động cơ |
💡 ESP32 hỗ trợ 16 kênh PWM (LEDC), giúp ta dễ dàng điều chỉnh tốc độ nhiều động cơ cùng lúc.
💻 3. Code mẫu: Điều khiển tốc độ bằng PWM
/*
* Bài 2 - IoTLabs Motor Course
* Điều khiển tốc độ động cơ DC bằng PWM (ESP32)
*/
#define MOTOR_PIN 5 // GPIO5 xuất tín hiệu PWM
#define PWM_CHANNEL 0 // Kênh PWM 0
#define PWM_FREQ 5000 // Tần số PWM: 5kHz
#define PWM_RES 8 // Độ phân giải: 8 bit (0-255)
void setup() {
ledcSetup(PWM_CHANNEL, PWM_FREQ, PWM_RES);
ledcAttachPin(MOTOR_PIN, PWM_CHANNEL);
}
void loop() {
for (int speed = 0; speed <= 255; speed += 5) {
ledcWrite(PWM_CHANNEL, speed);
delay(20);
}
for (int speed = 255; speed >= 0; speed -= 5) {
ledcWrite(PWM_CHANNEL, speed);
delay(20);
}
}
✅ Kết quả: Động cơ tăng tốc từ chậm → nhanh → rồi giảm dần, tạo hiệu ứng mượt như tăng ga.
🧠 4. Giải thích
ledcSetup()dùng để cấu hình tần số và độ phân giải PWM.ledcAttachPin()gắn chân GPIO với kênh PWM.ledcWrite(channel, value)điều chỉnh tốc độ quay (0–255).
🎯 5. Mục tiêu học tập
- Hiểu nguyên lý điều khiển tốc độ bằng PWM.
- Lập trình điều chỉnh tốc độ quay motor bằng ESP32.
- Tạo hiệu ứng chuyển động mượt mà trong các ứng dụng robot.
🧩 6. Hoạt động mở rộng
- Thêm nút nhấn hoặc biến trở để thay đổi tốc độ bằng tay.
- Kết hợp hai động cơ DC để điều khiển xe robot chạy tiến–lùi với tốc độ khác nhau.
- Dùng Serial Monitor để in giá trị tốc độ motor.
📦 7. Linh kiện cần thiết
| Linh kiện | Số lượng | Ghi chú |
|---|---|---|
| ESP32 DevKit 38 Pin | 1 | Board điều khiển |
| Motor DC mini 3–6V | 1 | |
| Transistor 2N2222 | 1 | Khuếch dòng |
| Điện trở 1kΩ | 1 | Cho chân base transistor |
| Breadboard + dây nối | – | |
| Nguồn 5V | 1 | Adapter hoặc pin |
🚀 8. Kết luận
PWM là kỹ thuật quan trọng giúp điều khiển tốc độ động cơ DC mượt mà, chính xác và tiết kiệm năng lượng.
Khi nắm vững PWM, bạn có thể mở rộng sang điều khiển servo, LED RGB, hoặc robot tự hành.
Trong bài tiếp theo, chúng ta sẽ tìm hiểu cách đảo chiều quay của động cơ DC để robot có thể chạy tiến – lùi – rẽ trái – rẽ phải.


Để lại một bình luận