Jak mogę kontrolować serwo RC?

26

Chciałbym sterować małym serwomechanizmem RC (5 V, 500 mA) ze styków GPIO przez Python .

Sprzęt komputerowy

  • Jakie są wymagane połączenia elektryczne?
  • Czy mogę podłączyć wiele serwomechanizmów do Raspberry Pi?
  • Czy są jakieś obecne ograniczenia? Czy muszę buforować pin wyjściowy tranzystorem?
  • Czy mogę zasilać serwomechanizm bezpośrednio z Raspberry Pi, czy powinienem używać zewnętrznego zasilacza? Czy potrzebuję kondensatora, aby wygładzić gwałtowny pobór mocy serwomechanizmu?

Oprogramowanie

  • Jakiego oprogramowania / kodu Python potrzebuję? Wiem, że potrzebuję 20 ms impulsów, jak mogę to osiągnąć?
  • Jakiego obciążenia procesora mogę się spodziewać po użyciu Raspberry Pi w ten sposób?
Alex L.
źródło
To podobne pytanie może pomóc w rozpoczęciu pracy: raspberrypi.stackexchange.com/questions/27/…
Andrew Larsson,

Odpowiedzi:

9

Wymagane połączenia elektryczne zależą od posiadanego serwomechanizmu. GPIO zapewnia 3,3 V i pojemności do 16 mA , co jest niewystarczające dla serwomechanizmu, więc trzeba będzie buforować go z tranzystora.

W nagłówku rozszerzenia znajduje się 8 styków GPIO , ale inne styki można ponownie skonfigurować, aby uzyskać maksymalnie 17 styków GPIO. Jeśli potrzebujesz więcej, będziesz musiał dodać jakiś multiplekser.

Uzyskiwanie precyzyjnie określonych sygnałów będzie trudne na Raspberry Pi lub na dowolnym systemie operacyjnym działającym w czasie rzeczywistym, ponieważ przerwania i zmiany zadań mogą się zdarzyć w dowolnym momencie. Prawdopodobnie będziesz potrzebować zewnętrznej elektroniki, aby zapewnić dokładnie taktowane sygnały.

Andrew wskazał ci oprogramowanie. Obciążenie procesora będzie zależeć od tego, co robisz, ale sam GPIO nie dodaje żadnego obciążenia.

David Sykes
źródło
2
Z drugiej strony - 20 ms to DŁUGI czas, nawet dla warunków procesora Raspberry Pi. Nie martwiłbym się zbytnio precyzją czasu dla serwomechanizmów RC.
2
@ Tibor: 20ms to okres impulsów serwo, a nie szerokość en.wikipedia.org/wiki/Servo_control#Pulse_duration . A wymaganie rozdzielczości jest znacznie gorsze - aby uzyskać 8 bitów rozdzielczości, potrzebujesz 256 kroków w ciągu 2 milisekund, więc ~ 8us.
Martin Thompson
8

Jeśli korzystasz z systemu operacyjnego Raspberry Pi w czasie rzeczywistym, jest to rzeczywiście możliwe. Jak już powiedzieli inni, do serwomechanizmów potrzebujesz zewnętrznego źródła zasilania, ale poza tym nie potrzebujesz żadnego dodatkowego sprzętu.

Jeśli korzystasz z Xenomai (łatka czasu rzeczywistego dla systemu Linux), możesz uruchomić całkowicie znany system Linux, ale z dodatkowymi funkcjami w czasie rzeczywistym.

Napisałem małą bibliotekę C do kontrolowania serwomechanizmów z Raspberry Pi. Próbowałem jednocześnie kontrolować 3 serwomechanizmy, ale tak naprawdę nie ma powodu, dla którego nie powinno działać z większą liczbą.

Moją małą bibliotekę możesz znaleźć tutaj: https://github.com/simonfi/pi-servo Dodanie otoki Pythona powinno być trywialne. Xenomai dla Raspberry Pi można znaleźć tutaj: http://powet.eu/2012/07/25/raspberry-pi-xenomai/

Generowanie potrzebnych sygnałów dla trzech serwomechanizmów wymaga zasadniczo niewielkiej ilości procesora. Nie testowałem jeszcze z więcej niż trzema.

simonfi
źródło
5

Jeśli nie masz nic przeciwko użyciu sterownika jądra systemu Linux, istnieje serwoblaster, który udostępnia serwomechanizm jako urządzenie char.

https://github.com/richardghirst/PiBits

Rozwidliłem nową wersję, która nie wykorzystuje wszystkich pinów GPIO do użytku z serwami. Obecnie używam takiego małego robota napędzanego serwomechanizmem, który zbudowałem i zaprezentowałem dla naszego klubu robotów, używając IPGamePad do sterowania nim.

https://github.com/jronald/PiBits

Poza tym naprawdę nie chcesz zasilania z tych serwomechanizmów przez RPI, ale zamiast tego użyj osobnego zasilacza. Oczywiście musisz powiązać te podstawy. Ponieważ wyjścia RPI do serwomechanizmu nie są wymagane przesunięcie napięcia, ale trzeba bardzo uważać, aby nie podłączyć przewodów niepoprawnie.

James Ronald
źródło
fyi - wydaje się, że repozytorium richartghrista zostało utrzymane, podczas gdy widelec jronald wydaje się przestarzały i zepsuty. Polecam również przeczytać, jak zignorować wszystkie oprócz dwóch pierwszych kontrolek serwomechanizmu i zainstalować Servoblaster
cwd
3

Serwa są generalnie sterowane za pomocą sygnałów PWM; powinieneś odnosić się do GPIO jako wyjścia PWM .

Układ obsługuje PWM, więc powinniśmy móc z niego korzystać w przyszłości. Zasadniczo wszystko, co robi oprogramowanie, mówi sprzętowi, aby wytwarzał impulsy o określonej częstotliwości. Niektóre osoby odniosły sukces przy użyciu zewnętrznych kontrolerów PWM przez I2C.

Alex Chamberlain
źródło
3

Dla Raspberry Pi dostępna jest karta rozszerzeń zwana gertboard, która służy do kontrolowania serwomechanizmów i innych obciążeń, których Pi nie może samodzielnie prowadzić.

Brandon Bailey
źródło
Powinienem również dodać, że ze względu na popularność tego produktu uważam, że jest on wyprzedany w większości witryn oferujących malinowe pi i akcesoria.
Brandon Bailey
3

Wiedza o tym, jak robić rzeczy na Pi, znacznie się poprawiła przez lata, odkąd zadano to pytanie.

Istnieją co najmniej cztery sposoby generowania impulsów PWM / serwomechanizmów w czasie na gpiach Pi bez użycia zewnętrznego sprzętu.

Wykorzystanie modułów jądra do tego celu jest dość przestarzałe. Dostępne są następujące rozwiązania dla obszarów użytkownika.

  • Mój własny pigpio będzie generował impulsy serwo i ogólne PWM niezależnie na dowolnym gpios 0-31 (C, Python, gniazdo, rura).
  • Servoblaster będzie generował impulsy serwo i ogólne PWM niezależnie do 21 gpios (rura).
  • RPIO będzie generować impulsy serwo i ogólne PWM niezależnie na dowolnym gpios 0-31 (Python).
  • pi-blaster pochodzący z Servoblaster (rura)
joan
źródło
2

Byłbym zaskoczony, jeśli potrafisz wystarczająco dobrze wyregulować czas wyjściowy podczas pracy z Linuksem, aby dokładnie kontrolować serwo.

Impuls musi być kontrolowany w zakresie 2 milisekund. Nawet jeśli tik harmonogramu ma rozdzielczość 100us (która go popycha - zwykle 10ms), to tylko 20 kroków, które możesz rozwiązać. I to bez uwzględnienia jittera wprowadzanego przez przełączanie zadań.

Jeśli dostępny jest inny licznik czasu, możesz napisać sterownik bardzo niskiego poziomu, który może wyprzedzić nawet system operacyjny, aby uzyskać dokładny czas. Brzmi zabawnie!

Martin Thompson
źródło
2

Myślę, że próba uruchomienia serwomechanizmu bezpośrednio z portu GPIO byłaby trudna i spowodowałaby duże obciążenie procesora, jeśli to w ogóle możliwe. Używam serwo kontrolera USB i działa świetnie i prawie nie używa procesora, chociaż konfiguracja jest trochę trudna. Ten, który mam, to 24 kanały, ale robią wersję 6-kanałową. Widziałem także kontrolery 2 i 4 kanałowe innych dostawców, którzy używają szeregowego, co byłoby łatwiejsze i tańsze niż USB, jeśli nie trzeba kontrolować tak wielu serwomechanizmów.

Vic320
źródło
0

Istnieje w pełni działająca usługa internetowa GPIO, dla której możesz pisać własne wtyczki. Wygląda na to, że ma już obsługę kontrolowania dowolnej liczby serwomechanizmów. Zobacz ich katalog „Treść”, aby zobaczyć kilka zdjęć, a także układ planszy.

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

Wygląda na C # z uruchomionym Mono na Pi.

użytkownik2737646
źródło