środa, 21 października 2015

Raspberry Pi 2 & Windows 10 IoT Core - odc.6: PWM (servo)

Przyszła pora na PWM. Skrótowo rzecz ujmując jest to wysyłanie przebiegów prostokątnych na pinie/nach o stałym okresie, zróżnicowanych pod względem wypełnienia (stosunek czasu stanu wysokiego do niskiego). To zróżnicowanie wypełnienia pozwala nam sterować np. kątem obrotu serwa lub jasnością świecenia diody LED (ludzkie oko nie wychwyci mrugania, małe wypełnienie przebiegu - świeci ciemniej, duże - świeci jaśniej) czy też jej kolorem (w przypadku diody RGB). Trzeba może jeszcze tylko krótko wyjaśnić, co to jest serwo. Otóż jest to silnik wzbogacony o ograniczniki oraz odpowiednią elektronikę, które pozwalają mu się ustawiać w ustalonych pozycjach. Dziś właśnie udało mi się z poziomu Windows 10 IoT Core nieco pokręcić popularnym (np. w modelarstwie) servem Tower Pro SG90.

Przyjrzyjmy się sprzętowi. Aby nie obciążać zbytnio poborem prądu Raspberry Pi czy też po prostu nie ryzykować jego uszkodzenia, używam niezależnego modułu zasilającego MB102 dającego na wyjściu + 5V, tutaj wyprowadzonego na dolną szynę płytki stykowej. Moduł ten podłączyłem do zasilacza uniwersalnego 3-12V z…  dawnych czasów liceum. Przypomniałem sobie teraz o nim, nie pamiętam do czego go dokładnie używałem i czemu onegdaj okleiłem go taśmą, grunt że zadziałał na potrzeby tego eksperymentu ;)  Serwo ma kabelek czerwony (+5V), czarny (masa)  i pomarańczowy (sterowanie). Czerwony i czarny podłączamy do szyny zasilanej przez moduł zasilący, pomarańczowy zaś do pinu Raspberry Pi (u mnie 24), na którym będziemy generować PWM. Do szyny z masą podłączamy też masę z Raspberry Pi.

001

002

003

004

Co z oprogramowaniem?  W przypadku Windows 10 IoT Core wersja stabilna 10240 nie oferuje PWM, ale mamy dostęp także do wersji Preview, obecnie 10556, na której działają opublikowane na github źródła do BusProviders. Dodatkowo w najnowszym SDK do Windows 10, w Windows IoT Extension mamy takie właśnie klasy, przy czym SDK ma wersję 10563 i taka aplikacja nie wgra się na urządzenie z 10556. Poprzestałem więc na razie na źródłach w github, które nieco przerobiłem sobie.  Działam na częstotliwości 50Hz, podaję czasy wypełnienia:  0,5 ms (lewo),  1,5 ms (pozycja neutralna – środek), 2,5 ms (prawo). Te czasy w różnych materiałach są nieco różne, np. inne nieco w dokumentacji SG90, natomiast w artykule o Raspberry i PWM w “Młodym techniku” z  8/2015 autor podaje dla tego modelu ustalone w praktyce nieco inne wartości. Serwo toczy się w miarę w jedną bądź drugą stronę, nie skacze nagle o 180 stopni, na początek może wystarczy -:)

Tak naprawdę to tylko początek dość ciekawej tematyki. Softwarowy PWM z Raspberry Pi nie jest do końca stabilny, może być zakłócony przez inne procesy wykonujące się na systemie operacyjnym. Nie mamy gwarantowanej prezycji co do przebiegu sygnału, co w przypadku serwa może być istotne. Fani Linuksa mają dostęp także do oprogramowania, które jest w stanie wykorzystać układ ze sprzętowym PWM z samego Raspberry Pi. Oczywiście można też użyć zewnętrzny układ np. PCA9685 (płytki bazujące na nim mają nawet 16 niezależnych kanałów z PWM) . Windows 10 również zapewnia jego obsługę.

Brak komentarzy: