BÀI 42 – ĐIỀU KHIỂN SERVO BẰNG TIMER PWM TRÊN STM32F103
Từ PSC + ARR + CCR đến điều khiển servo 0°–180°
Đây là bài rất hay vì chúng ta sẽ không dùng thư viện Servo.
Chúng ta sẽ tự làm hoàn toàn bằng:
RCC
GPIO
TIM2
PSC
ARR
CCR
PWM
Mục tiêu cuối bài:
STM32F103
│
│ PWM
▼
PA0 ─────────► Servo
│
┌────┴────┐
│ │
0° 180°
1. Servo khác motor DC như thế nào?
Đầu tiên phải phân biệt.
Motor DC
Ta thường điều khiển:
PWM → tốc độ
DIR → chiều
Servo RC
Ta gửi:
PWM pulse width → vị trí
Ví dụ:
1.0 ms → khoảng 0°
1.5 ms → khoảng 90°
2.0 ms → khoảng 180°
Vì vậy:
Servo không quan tâm đơn giản đến Duty % như LED hoặc motor DC; nó chủ yếu giải mã độ rộng của từng xung điều khiển.
2. Tín hiệu servo trông như thế nào?
Một tín hiệu servo điển hình:
Ton
┌────────┐
│ │
──────────┘ └────────────────────────
<-------->
1 ms
<------------- 20 ms -------------->
Một xung được lặp lại khoảng:
20 ms
tương đương:
[
f \approx 50Hz
]
3. Ba thông số cần nhớ
Đối với servo RC loại phổ biến:
Chu kỳ ≈ 20 ms
Tần số ≈ 50 Hz
Độ rộng xung quyết định vị trí:
≈ 1 ms → 0°
≈ 1.5 ms → 90°
≈ 2 ms → 180°
Lưu ý: đây là giá trị điển hình, không phải mọi servo đều giống hệt nhau. Một số servo có thể dùng khoảng xung khác