Làm cách nào tôi có thể điều khiển RC servo?


26

Tôi muốn điều khiển một RC servo nhỏ (5 V, 500 mA) từ các chân GPIO thông qua Python .

Phần cứng

  • Các kết nối điện cần thiết là gì?
  • Tôi có thể kết nối nhiều servo với Raspberry Pi không?
  • Có bất kỳ hạn chế hiện tại? Tôi có cần phải đệm pin đầu ra với một bóng bán dẫn?
  • Tôi có thể cấp nguồn cho servo trực tiếp từ Raspberry Pi hay tôi nên sử dụng nguồn điện bên ngoài? Tôi có cần một tụ điện để làm giảm khả năng giật điện của servo không?

Phần mềm

  • Tôi cần phần mềm / mã Python nào? Tôi biết tôi cần 20 ms xung, làm thế nào tôi có thể đạt được điều này?
  • Tôi có thể mong đợi loại tải CPU nào khi sử dụng Raspberry Pi theo cách này?

Đây là một câu hỏi tương tự có thể giúp bạn bắt đầu: raspberrypi.stackexchange.com/questions/27/ mẹo
Andrew Larsson

Câu trả lời:


9

Các kết nối điện cần thiết phụ thuộc vào servo bạn có. Các GPIO cung cấp 3,3 V và lên đến 16 mA , đó là không đủ để servo của bạn, vì vậy bạn sẽ cần phải đệm nó với một transistor.

8 chân GPIO trên tiêu đề mở rộng , mặc dù các chân khác có thể được cấu hình lại để cung cấp tối đa 17 chân GPIO. Nếu bạn cần nhiều hơn, bạn sẽ phải thêm một số loại ghép kênh.

Nhận tín hiệu được định thời chính xác sẽ rất khó khăn trên Raspberry Pi hoặc trên bất kỳ HĐH không thời gian thực nào, vì các ngắt và chuyển đổi tác vụ có thể xảy ra bất cứ lúc nào. Bạn có thể sẽ cần các thiết bị điện tử bên ngoài để cung cấp tín hiệu thời gian chính xác.

Andrew đã chỉ cho bạn một số phần mềm. Tải CPU sẽ phụ thuộc vào những gì bạn đang làm, nhưng bản thân GPIO không thêm bất kỳ tải nào.


2
Mặt khác - 20 ms là một khoảng thời gian dài, ngay cả đối với các điều khoản CPU của Raspberry Pi. Tôi sẽ không lo lắng quá nhiều về độ chính xác thời gian cho RC servo.

2
@Tibor: 20ms là khoảng thời gian của các xung servo, không phải chiều rộng en.wikipedia.org/wiki/Servo_control#Pulse_duration . Và yêu cầu độ phân giải còn tệ hơn thế nhiều - để có được 8 bit độ phân giải, bạn cần 256 bước trong 2 mili giây, vì vậy ~ 8us.
Martin Thompson

8

Nếu bạn đang chạy một hệ điều hành thời gian thực trên Raspberry Pi thì điều này thực sự có thể. Như những người khác đã nói, bạn sẽ cần một nguồn năng lượng bên ngoài cho các servo nhưng ngoại trừ việc bạn không cần bất kỳ phần cứng bổ sung nào khác.

Nếu bạn đang chạy Xenomai (bản vá thời gian thực cho Linux), bạn có thể chạy một hệ thống Linux hoàn toàn quen thuộc, nhưng có thêm khả năng thời gian thực.

Tôi đã viết một thư viện C nhỏ cho mục đích kiểm soát các servo từ Raspberry Pi. Tôi đã thử kiểm soát 3 servo cùng một lúc với nó, nhưng thực sự không có lý do gì nó không hoạt động với nhiều hơn.

Bạn có thể tìm thấy thư viện nhỏ của tôi ở đây: https://github.com/simonfi/pi-servo Thêm một trình bao bọc Python cho nó là chuyện nhỏ. Xenomai cho Raspberry Pi có thể được tìm thấy ở đây: http://powet.eu/2012/07/25/raspberry-pi-xenomai/

Việc tạo ra các tín hiệu cần thiết cho ba servo về cơ bản là tiêu thụ một lượng cpu không đáng kể. Tôi chưa thử nghiệm với hơn ba.


5

Nếu bạn không phiền khi sử dụng trình điều khiển Linux Kernel, thì có servoblaster hiển thị các servo như một thiết bị char.

https://github.com/richardghirst/PiBits

Tôi đã rẽ nhánh một phiên bản mới không tiêu thụ tất cả các chân gpio để sử dụng servo. Tôi hiện đang sử dụng như vậy trên một robot điều khiển servo nhỏ mà tôi đã xây dựng và thử nghiệm cho câu lạc bộ robot của chúng tôi bằng IPGamePad để điều khiển nó.

https://github.com/jronald/PiBits

Ngoài ra, bạn thực sự không muốn cung cấp năng lượng cho các servo thông qua RPI mà thay vào đó sử dụng một nguồn cung cấp năng lượng riêng biệt. Tất nhiên bạn cần phải buộc các căn cứ đó với nhau. Vì các đầu ra RPI tới servo, không cần phải thay đổi điện áp, nhưng bạn sẽ rất cẩn thận để không nối dây không chính xác.


fyi - repo richartghrist dường như đã được duy trì trong khi ngã ba jronald dường như đã lỗi thời và bị hỏng. Ngoài ra, tôi khuyên bạn nên đọc làm thế nào để bỏ qua tất cả nhưng trước tiên hai điều khiển servoCài đặt Servoblaster
cwd

3

Servos, nói chung, được điều khiển bằng cách sử dụng tín hiệu PWM; bạn nên tham khảo GPIO như đầu ra PWM .

Có hỗ trợ PWM trên chip, vì vậy chúng ta sẽ có thể sử dụng nó trong tương lai. Về cơ bản, tất cả các phần mềm làm là bảo phần cứng tạo ra các xung ở một tần số nhất định. Một số người đã thành công khi sử dụng bộ điều khiển PWM bên ngoài qua I2C.


3

Có một bảng mở rộng có sẵn cho pi mâm xôi được gọi là bảng gert được sử dụng để điều khiển các động cơ servo và các tải khác mà Pi không thể tự lái.


Tôi cũng nên nói thêm rằng do sự phổ biến của sản phẩm này, tôi tin rằng nó được bán ra tại hầu hết các trang web cung cấp pi mâm xôi và phụ kiện.
Brandon Bailey

3

Kiến thức về cách làm mọi thứ trên Pi đã được cải thiện khá nhiều trong những năm kể từ khi câu hỏi này được hỏi.

Có ít nhất bốn cách tạo xung PWM / Servo theo thời gian phần cứng trên các gpios của Pi mà không cần sử dụng phần cứng bên ngoài.

Việc sử dụng các mô-đun hạt nhân để làm điều này là không được chấp nhận, Các giải pháp người dùng sau đây có sẵn.

  • Pigpio của riêng tôi sẽ tạo ra xung Servo và xung PWM chung độc lập trên bất kỳ gpios 0-31 nào (C, Python, socket, pipe).
  • Servoblaster sẽ tạo ra xung Servo và xung PWM chung độc lập trên tối đa 21 gpios (đường ống).
  • RPIO sẽ tạo xung Servo và xung PWM chung độc lập trên bất kỳ gpios 0-31 (Python) nào.
  • pi-blaster có nguồn gốc từ Servoblaster (ống)

2

Tôi sẽ ngạc nhiên nếu bạn có thể điều chỉnh thời gian đầu ra đủ tốt trong khi chạy Linux để điều khiển chính xác một servo.

Xung phải được điều khiển trong phạm vi 2 mili giây. Ngay cả khi đánh dấu lịch trình có độ phân giải 100us (đang đẩy nó - thường là 10ms), đó chỉ là 20 bước bạn có thể giải quyết. Và đó không phải là xem xét các jitter được giới thiệu bởi chuyển đổi nhiệm vụ.

Nếu có sẵn một bộ đếm thời gian khác, bạn có khả năng có thể viết trình điều khiển mức rất thấp, có thể làm hỏng ngay cả HĐH để có được thời gian chính xác. Nghe có vẻ vui!


2

Tôi nghĩ rằng việc cố gắng chạy một servo trực tiếp từ cổng GPIO sẽ khó khăn và gây ra nhiều chi phí CPU nếu điều đó thậm chí có thể xảy ra. Tôi sử dụng bộ điều khiển servo USB và nó hoạt động rất tốt và hầu như không sử dụng CPU, mặc dù việc cài đặt hơi khó khăn. Kênh tôi có 24 kênh, nhưng họ tạo phiên bản 6 kênh. Tôi cũng đã thấy các bộ điều khiển 2 và 4 kênh từ các nhà cung cấp khác sử dụng nối tiếp sẽ dễ dàng hơn và rẻ hơn USB nếu bạn không cần phải điều khiển quá nhiều servo.


0

Có một dịch vụ web GPIO hoạt động đầy đủ mà bạn có thể viết các plugin của riêng mình. Nó dường như đã có hỗ trợ để kiểm soát bất kỳ số lượng servo. Xem thư mục "Nội dung" của họ để biết một loạt các hình ảnh cũng như cách bố trí bảng.

https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb

Có vẻ là trong C # đang chạy Mono trên Pi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.