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?
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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ć.
źródło
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.
źródło
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!
źródło
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.
źródło
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.
źródło