Có chứ bạn 👍 Và Bài 47 nên là bước tiếp theo rất tự nhiên sau Bài 46.
Mình đề xuất lộ trình như sau:
BÀI 47 – PID ĐIỀU KHIỂN TỐC ĐỘ MOTOR DC BẰNG STM32F103
Từ bộ điều khiển đơn giản ở Bài 46:
Target RPM
↓
So sánh RPM thực
↓
Sai số
↓
PWM
↓
Motor
↓
Encoder
↓
RPM thực
└───────────────┘
chúng ta nâng cấp thành:
┌─────────────────────┐
│ PID Controller │
│ │
Target RPM ──► (+) ── Error ──► PID ──► PWM
▲ │
│ ▼
│ Motor
│ │
│ Encoder
│ │
└────── Actual RPM ◄────┘
Trong Bài 47, mình sẽ giải thích thật kỹ:
- P – Proportional là gì?
- I – Integral là gì?
- D – Derivative là gì?
- Vì sao chỉ dùng P đôi khi motor không đạt đúng RPM?
- Vì sao thêm I sẽ loại bỏ sai số tĩnh?
- Vì sao D có thể gây nhiễu?
- Công thức PID trên STM32.
- Viết PID không dùng thư viện, bằng C thuần.
- Giới hạn PWM
0–100%. - Chống Integral Windup.
- Chu kỳ PID, ví dụ 10 ms hoặc 20 ms.
- Đọc encoder → tính RPM → PID → cập nhật PWM.
- Ví dụ motor:
Target = 100 RPM
Actual = 70 RPM
→ PID tăng PWM
- Khi tải motor tăng:
RPM giảm
↓
PID phát hiện
↓
PWM tăng
↓
RPM trở lại gần Target
- Cuối bài sẽ xây dựng một Speed Controller hoàn chỉnh cho STM32F103.
Và sau Bài 47, lộ trình rất hay sẽ là:
Bài 45
Encoder Mode
↓
Bài 46
PWM + Encoder
↓
Bài 47
PID tốc độ
↓
Bài 48
Điều khiển vị trí bằng Encoder
↓
Bài 49
PID vị trí
↓
Bài 50
Điều khiển 2 motor độc lập
↓
Bài 51
Robot đi thẳng bằng Encoder
↓
Bài 52
Robot quay đúng góc
↓
Bài 53
Odometry
↓
Bài 54
PID cân bằng 2 bánh
↓
Bài 55
Robot tránh vật cản + Encoder + PID
Bài 47 chính là bài nên học ngay bây giờ, vì nó sẽ giúp bạn hiểu tại sao một robot có PWM + encoder có thể tự điều chỉnh tốc độ thay vì chỉ “cấp PWM rồi hy vọng motor chạy đúng”.