LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
SoM / SBC

Pierwsze kroki z Raspberry Pi: zdalne (WiFi) sterowanie PWM na przykładzie serwomechanizmu i LED

 

 

 

PWM – co to jest?

Systemy cyfrowe z założenia posługują się tylko określoną liczbą dyskretnych stanów, we współczesnych komputerach praktycznie zawsze dwóch – jedynką i zerem. Przynosi to wiele korzyści, ale ma też pewne wady, bo co zrobić w sytuacji gdy chcemy za pomocą linii cyfrowej np. zaświecić diodę z połową jej mocy lub sterować płynnie ramieniem serwa? Tu z pomocą przychodzi nam PWM, czyli sygnał o zmiennej szerokości impulsu. Aby najprościej opisać działanie PWM najlepiej zacząć od ilustracji kilku przykładowych przebiegów (rysunek 1).

 

Rys. 1. Przykładowe przebiegi sygnału PWM

 

Jak widać na rysunku sygnał PWM jest okresowy, a każdy jego cykl w pewnej części wypełniony jest sygnałem o stanie wysokim, czyli potocznie mówiąc – jedynką, stosunek długości trwania tej jedynki do długości cyklu nazywamy wypełnieniem. Na rysunku 1 wypełnienie podane w procentach znajduje się na lewo od odpowiadającego przebiegu. Chcąc zaświecić diodę z niepełną mocą możemy sygnałem PWM zapalać ją na pewien czas i gasić na pewien czas, w zależności od proporcji między tymi czasami dioda będzie świecić słabiej lub mocniej, należy tylko robić to na tyle szybko, żeby ludzkie oko nie było w stanie zauważyć migania.

UWAGA! Zakładam, że czytelnik dysponuje komputerem Raspberry Pi z zainstalowanym systemem Raspbian.

 

Jak to zrobić z Raspberry Pi

Największą popularność wśród użytkowników Raspberry Pi chcących wykorzystać jego linie GPIO zdobył pakiet wiringPi. Jest dość łatwy w użyciu i ma wiele ciekawych możliwości (m.in. obsługa interfejsów SPI i I2C). Ma jednak słaby punkt – udostępnia tylko jedną linię PWM, a to może stać się problemem jeśli chcemy sterować np. kilkoma serwami. Można próbować obejść to ograniczenie tworząc programowy PWM, ale jest prostsze rozwiązanie – pakiet pigpio, który umożliwia generowanie sygnału PWM na wszystkich liniach GPIO (oprócz tego oczywiście możliwe jest standardowe sterowanie stanami linii).

 

Instalacja pigpio

Najpierw należy pobrać archiwum zawierające pliki pakietu pigpio. Można to zrobić np. poleceniem:

  wget abyz.co.uk/rpi/pigpio/pigpio.tar

Następnie rozpakowujemy plik tar:

  tar –xvf pigpio.tar

Teraz wchodzimy do katalogu PIGPIO

  cd PIGPIO

W zależności od tego czy mamy wersję Raspbiana hard-float czy znacznie rzadziej używaną soft-float wykonujemy polecenie

  cp libpigpio.a-hard libpigpio.a

lub

cp libpigpio.a-soft libpigpio.a

W tej chwili możemy już instalować pakiet poleceniami:

  make
  make install

Przed skorzystaniem z pakietu musimy jeszcze uruchomić program pigpiod.

  sudo pigpiod

W tej chwili możemy już korzystać z szerokich możliwości pigpiod.

Zakładam, że korzystamy z domyślnej konfiguracji pigpiod, ponieważ do wielu celów jest ona wystarczająca. Zainteresowanych pełnymi możliwościami odsyłam do dokumentacji polecenia pigpiod.

 

Sposób dołączenia diody i serwa

Dalej pokażę dwa przykłady: sterowanie serwem oraz sterowanie jasnością diody LED. Przed uruchomieniem przykładów należy dołączyć ww. elementy do Raspberry, sposób dołączenia widać na rysunku 2.

rys2

Rys. 2. Sposób dołączenia serwa i diody LED do Raspberry Pi

 

Sterowanie serwem

Teraz spróbujemy wykorzystać Raspberry do sterowania małym serwem modelarskim, konieczne jest do tego wygenerowanie sygnału PWM, ale spełniającego pewne warunki:

  • impuls jest wysyłany 50 razy na sekundę,
  • długość impulsu powinna zawierać się w przedziale od 0,5 do 2,5 ms.

Są to najbardziej typowe parametry sygnału sterującego serwami. Dzięki temu, że autor pigpio zechciał ułatwić nam życie do sterowania serwem nie musimy w ogóle konfigurować parametrów sygnału PWM, wystarczy, że wydamy np. polecenie:

  pigs s 14 500

Drugi parametr polecenia określa numer linii GPIO do której dołączyliśmy linię sygnałową serwa. Trzeci parametr to długoś impulsu w mikrosekundach, wartość musi zawierać się w zakresie od 500 do 2500.