Raspberry Pi posiada jeden sprzętowy port PWM, za pomocą którego możemy sterować serwami czy silnikami. Problemem staje się, gdy chcemy podpiąć już dwa serwa lub silniki przez sterownik. Na szczęście istnieją biblioteki, dzięki którym możemy stworzyć dodatkowe programowe porty PWM. Obecnie dostępne są dwie biblioteki: WiringPi oraz pigpio, które pozwalają na programowe ustawienie pinów GPIO jako PWM na Raspberry Pi.
Działanie skryptu pokazane jest na filmiku:
Przedstawię bibliotekę pigpio, gdyż jest łatwiejsza w obsłudze oraz nie obciąża zbytnio procesora jak ma to miejsce w WiringPi.
Instalacja biblioteki pigpio w Raspbian
Pobieramy archiwum biblioteki za pomocą polecenia
[bash]wget abyz.co.uk/rpi/pigpio/pigpio.tar[/bash]
następnie rozpakowujemy archiwum
[bash]tar -xvf pigpio.tar[/bash]
przechodzimy do rozpakowanego katalogu
[bash]cd PIGPIO[/bash]
następnie wykonujemy polecenie
[bash]cp libpigpio.a-hard libpigpio.a[/bash]
a następnie budujemy i instalujemy bibliotekę
[bash]make & make install[/bash]
na koniec uruchamiamy program pigpiod, który domyślnie nasłuchuje na porcie 8888 i możliwa jest komunikacja z nim poprzez sieć (więcej na stronie). Program musi być uruchamiany po każdym uruchomieniu systemu. Jeśli ktoś zamierza korzystać z niego na stałe warto dodać go do programów domyślnie uruchamianych z systemem.
[bash]sudo pigpiod[/bash]
Schemat testowego układu
Zbudujemy teraz układ przedstawiony poniżej. Do pinu 17 podłączamy pierwsze serwo, zaś do pinu 21 drugie. Zasilanie w naszym układzie zapewniają 4 baterie AAA dające prąd 4.8V wystarczający do sterowania naszymi serwami. Do naszego przykładu użyjemy dwa mikro-serwa Redox S90, którymi będziemy sterować za pomocą RPi.
Sterowanie serwami z poziomu konsoli
Z biblioteka pigpio dostarczone są dodatkowe programy i usługi m.in. proste narzędzie do sterowania portami IO pigs. Za pomocą tego narzędzia można ustawiać długość impulsów PWM pigs s [długość] (gdzie zakres musi być od 0,5ms do 2,5ms. czyli w naszym przypadku od 500 do 2500). Sama aplikacja wysyła domyślnie 50 impulsów na sekundę. Można również użyć pigs p np do zwiększania obrotów silników lub do sterowania napięciem zasilania diody od 0 do 255. Np. aby dioda świeciła z 50% mocy wystarczy wydać polecenie pigs p [nrpinu] 128
Ustawiamy obydwa serwa pierwsze na maksymalnym obrocie, drugie na początkowym położeniu
[bash]
pigs s 17 500
pigs s 21 2500
[/bash]
następnie na odwrót:
[bash]
pigs s 17 2500
pigs s 21 500
[/bash]
następnie ma środkowe położenie:
[bash]
pigs s 17 1250
pigs s 21 1250
[/bash]
Polecamy przetestować samemu z innymi wartościami z zakresu 500-2500.
Wykonamy teraz prosty skrypt który obracać będzie serwami w obu kierunkach. Tworzymy plik:
[bash]nano serwa.sh[/bash]
piszemy program:
[bash]
#!/bin/bash
for ((;;)); do
x=500
while [ $x -le 2500 ]; do
pigs s 17 $x
pigs s 21 $x
sleep 0.05
x=$[x + 50]
done
y=2500
while [ $y -gt 500 ]; do
pigs s 17 $y
pigs s 21 $y
sleep 0.05
y=$[y – 50]
done
done
[/bash]
zapisujemy [CTRL+o] i wychodzimy [CTRL+x]. Następnie ustawiamy nasz skrypt, jako wykonywalny:
[bash]chmod +x serwa.sh[/bash]
i uruchamiamy:
[bash]./serwa.sh[/bash]
Aby zakończyć program wciskamy [CTRL+c]
Sterowanie PWM za pomocą biblioteki pigpio.h
Istnieje również możliwość użycia biblioteki do języka C pigpio.h za pomocą, której możliwe jest sterowanie portami gpio w RPi. Przykładowe aplikacje dostępne są na stronie z przykładami. Opis funkcji oraz więcej informacji na stronie projektu.
Dodatkowe porty PWM w Raspberry Pi – Raspberry pi, XBMC, ODROID-X :: Portal osworld.pl http://t.co/IfeoSe1a3M via @Picoboardpl
[…] Dodatkowe porty PWM w Raspberry Pi […]