Lập trình điều khiển servo SG90 trên PYNQ-Z2

Tóm tắt nhanh

  • SG90 chạy ổn với PWM 50 Hz, độ rộng xung ~1.0–2.0 ms (1.5 ms ≈ 90°).
  • PYNQ-Z2 xuất PWM qua chân PMOD (ví dụ JA1) để kéo servo.
  • Cần nguồn 5 V riêng cho servo và chung GND với PYNQ-Z2.
  • Hiệu chỉnh biên min/max để tránh kẹt cơ, giảm rung.

1. Servo SG90 hoạt động thế nào?

  • Tần số: 50 Hz (chu kỳ 20 ms).
  • Góc quay tỉ lệ với độ rộng xung:
    • ~1.0 ms → gần 0°
    • ~1.5 ms → khoảng 90°
    • ~2.0 ms → gần 180°
  • Mỗi chiếc SG90 có sai số cơ khí khác nhau, cần hiệu chuẩn biên min/max cho mẫu thực.

PYNQ-Z2 điều khiển servo SG90 với PWM, người dùng nhấn nút đổi góc.

2. Phần cứng & đấu nối chuẩn

  • Tín hiệu (cam/orange) → 1 chân PMOD (ví dụ JA1).
  • Vcc (đỏ)5 V (khuyến nghị nguồn rời ≥1 A).
  • GND (nâu) → GND nguồn servo, đồng thời nối chung GND với GND PYNQ-Z2.
  • Dùng dây ngắn, gọn; nếu kéo xa, thêm tụ lọc gần servo để giảm sụt áp.

Lưu ý quan trọng: Không cấp 5 V từ PYNQ-Z2 để nuôi servo; SG90 tải xung có thể gây reset hoặc nhiễu toàn hệ thống.


3. Các bước thiết lập (không cần mã)

  1. Chọn chân xuất PWM trên PMOD và định nghĩa trong file ràng buộc (XDC).
  2. Thiết lập tần số 50 Hz: chu kỳ 20 ms, duty biến thiên để đổi góc.
  3. Kiểm tra điện: nguồn 5 V riêng, mass chung với PYNQ-Z2.
  4. Hiệu chuẩn: đặt góc trung tính ~90°, quan sát độ rung; tăng/giảm nhẹ biên dưới/biên trên cho mượt.
  5. Kiểm thử tải: xoay chậm 0→180°→0 để phát hiện điểm kẹt, tiếng rít, quá dòng.
  6. Ghi log góc đặt vs. góc quan sát để tinh chỉnh tuyến tính 1.0–2.0 ms theo thực tế.

4. Mẹo vận hành mượt và bền servo

  • Nguồn đủ dòng (≥1 A cho 1 servo; nhiều servo ⇒ nguồn lớn hơn).
  • Giới hạn tốc độ thay đổi góc (ramp/step nhỏ) để tránh giật.
  • Cố định cơ khí: gắn servo chắc chắn, horn đúng rãnh, không ép quá hành trình.
  • Giảm nhiễu: xoắn đôi dây tín hiệu + mass, thêm tụ 100 µF–470 µF gần servo.
  • Debounce cho nút nhấn nếu điều khiển bằng phím.
  • Kẹp biên: không vượt <1.0 ms hoặc >2.0 ms nếu servo của bạn không hỗ trợ.

5. Chẩn đoán nhanh khi “không chạy”

  • Không quay: sai chân ra PWM hoặc chưa chung GND.
  • Rung/giật: nguồn yếu, dây dài, xung không ổn định; thử giảm biên, thêm tụ lọc.
  • Nóng nhanh: kẹt cơ/hành trình, duty vượt biên; hạ biên hoặc kiểm tra khớp nối.
  • Reset board: servo hút dòng → gây sụt áp chung; tách nguồn servo.

6. Ứng dụng gợi ý trên PYNQ-Z2

  • Cánh tay robot mini, gimbal camera, servo pan-tilt.
  • Cơ cấu đóng/mở van, cửa, chốt an ninh.
  • Kết hợp PYNQ (Python) hoặc AXI-Lite để đặt góc từ phần mềm; kết hợp IoT để điều khiển từ xa.

7. Kết luận

Điều khiển SG90 bằng PYNQ-Z2 khá thẳng: PWM 50 Hz, 1.0–2.0 ms, nguồn 5 V riêng + mass chung. Làm đúng 3 điểm này là bạn đã có nền tảng vững để mở rộng sang nhiều kênh, điều khiển qua UART/MQTT hay tích hợp thị giác máy.


Câu hỏi thường gặp (FAQ)

1) Có bắt buộc đúng 50 Hz không?
Nên dùng 50 Hz. Lệch nhẹ vẫn chạy, nhưng 50 Hz giúp servo ổn định và ít rung.

2) Tín hiệu 3.3 V từ PYNQ-Z2 có đủ không?
Đủ. SG90 nhận được mức logic 3.3 V ở chân tín hiệu (Vcc vẫn phải 5 V).

3) Vì sao servo rung ở 90°?
Do sai số biên thời gian hoặc nguồn yếu. Hiệu chỉnh dải 1.0–2.0 ms theo mẫu của bạn và tăng chất lượng nguồn.

4) Một nguồn 5 V có kéo được nhiều servo?
Được nếu đủ dòng. Tính ~1 A/servo khi tải nặng; tách đường cấp và giữ mass chung.

5) Dùng PMOD nào cũng được?
Được, miễn chân I/O là 3.3 V và bạn ràng buộc đúng trong XDC.

Gợi ý internal link cho dientu.vn

  • “Kết nối PYNQ-Z2 với laptop qua Ethernet”
  • “Hướng dẫn nguồn 5 V cho servo và quy tắc chung mass”
  • “Điều khiển nhiều servo đồng thời trên FPGA”
  • “Tối ưu chống nhiễu tín hiệu PWM trong mạch thực”
  • Lập trình điều khiển servo SG90 trên PYNQ-Z2

Link xem demo: https://www.facebook.com/reel/610090605391434