Bài 12: Điều khiển Servo Motor

Servo là một loại động cơ điện có cơ chế điều khiển chính xác góc quay, thường được sử dụng trong robot, mô hình RC (radio control), cánh tay máy và các thiết bị tự động hóa. Dưới đây là cách hoạt động cơ bản của servo:

Cấu tạo chính của servo

Một servo điển hình gồm 3 phần chính:

  • Động cơ DC nhỏ: tạo ra chuyển động quay.

  • Hệ thống bánh răng: giảm tốc và tăng mô-men xoắn cho động cơ.

  • Mạch điều khiển + cảm biến vị trí (potentiometer): giúp xác định và điều khiển góc quay.

Nguyên lý hoạt động

Điều khiển bằng xung PWM

Servo hoạt động nhờ tín hiệu điều khiển dạng PWM (Pulse Width Modulation) — tín hiệu xung vuông có chu kỳ cố định (~20 ms) nhưng độ rộng xung thay đổi.

  • Độ rộng xung quyết định góc quay của servo.

Ví dụ:

  • Xung 1ms → Góc quay 0°
  • Xung 1.5ms → Góc quay 90°
  • Xung 2ms → Góc quay 180°

Tùy loại servo, góc quay tối đa có thể là 90°, 180° hoặc hơn (loại servo quay liên tục có thể quay 360° trở lên).

Cơ chế phản hồi (feedback loop)

  1. Mạch điều khiển nhận tín hiệu PWM.

  2. So sánh tín hiệu với vị trí hiện tại (từ cảm biến).

  3. Nếu chưa đạt đúng góc mong muốn, nó sẽ quay động cơ cho đến khi vị trí khớp.

Ví dụ đơn giản

Khi bạn gửi tín hiệu PWM 1.5ms đến servo:

  • Mạch điện tử hiểu bạn muốn quay trục servo tới 90°.

  • Nếu trục đang ở 0°, động cơ sẽ quay đến khi đạt 90° rồi dừng lại.

Phân loại servo

  • Servo góc cố định (standard): quay từ 0–180°.

  • Servo quay liên tục (continuous rotation): không kiểm soát góc mà điều khiển tốc độ/quay liên tục như động cơ bình thường.

  • Servo công nghiệp: chính xác cao, mô-men xoắn lớn, dùng trong máy CNC, robot công nghiệp.

Phần cứng cần có

  • Arduino Uno/Nano
  • Servo Motor loại SG90 hoặc MG996R
  • Dây nối
  • Nguồn 5V ổn định (ưu tiên cấp nguồn ngoài nếu servo mạnh)

Kết nối Servo Motor

  • GND → GND Arduino
  • VCC → 5V Arduino (hoặc nguồn ngoài nếu cần lực mạnh)
  • Signal (tín hiệu) → Chân số 3

Cài thư viện

Thư viện Servo.h đã tích hợp sẵn trong Arduino IDE. Không cần cài đặt thêm.

Code mẫu: Quay Servo liên tục

#include <Servo.h>

Servo myServo;         // Tạo đối tượng servo
int angle = 0;         // Biến góc quay

void setup() {
  myServo.attach(3);   // Gắn servo vào chân số 3
}

void loop() {
  for (angle = 0; angle <= 180; angle += 1) {
    myServo.write(angle);    // Quay đến góc 'angle'
    delay(15);               // Chờ servo quay xong
  }
  for (angle = 180; angle >= 0; angle -= 1) {
    myServo.write(angle);
    delay(15);
  }
}

Demo

Góc: 0°, Xung: 1.00ms

Giải thích

  • #include <Servo.h>: Thêm thư viện hỗ trợ servo.
  • Servo myServo;: Tạo đối tượng servo để điều khiển.
  • myServo.attach(pin);: Kết nối servo với chân Arduino.
  • myServo.write(angle);: Ra lệnh quay servo tới góc mong muốn (0° – 180°).
  • delay(ms);: Tạm dừng chương trình để chờ servo hoàn thành chuyển động.

Cách hoạt động cơ bản

Servo motor hoạt động dựa trên độ rộng của xung PWM được gửi từ chân Arduino. Thư viện Servo.h sẽ:

  • Tự động tạo xung PWM đúng chu kỳ (~20ms),

  • Điều chỉnh độ rộng xung (thường từ 1ms đến 2ms) tương ứng với các góc quay từ 0 đến 180 độ.

Một số hàm quan trọng trong Servo.h

Hàm Mô tả
attach(pin) Gắn servo vào chân digital
detach() Ngắt kết nối servo khỏi chân
write(angle) Gửi góc quay (0–180 độ)
writeMicroseconds(us) Gửi xung PWM cụ thể theo micro giây
read() Đọc lại góc hiện tại
attached() Trả về true nếu servo đang được kết nối

Ứng dụng thực tế

  • Tay gắp robot: Điều khiển nhiều servo tạo chuyển động gắp vật.
  • Quạt tự xoay: Servo quay qua lại theo thời gian tạo hiệu ứng quạt tự động.
  • Camera tracking: Gắn camera lên servo để quay theo đối tượng.
✅ Bạn có thể kết hợp servo với cảm biến (như ánh sáng, siêu âm) để tự động điều chỉnh vị trí.
⚠️ Lưu ý: Servo có thể làm Arduino reset nếu cấp nguồn không đủ. Nên dùng nguồn ngoài và nối GND chung với Arduino.

Nhận xét

Mới hơn Cũ hơn