Bogusław Kempny

PWM, modulacja szerokości impulsów

×
Autor English
Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura Brama GPIO PWM SG90 RFID Grafolog RCP Shutdown Temperatura ....











Teraz programujemy okres naszego sygnału:

pwmSetRange (unsigned int range) ;

Parametr range to właśnie okres naszego sygnału, czyli czas jaki upływa pomiędzy kolejnymi impulsami. Nie jest to po prostu czas, to liczba taktów zegara przypadająca na jeden okres. Jeśli zaprogramujemy zegar na 10 kHz, jeden takt potrwa 0,1 ms, więc aby uzyskać okres 10 ms jako range podać musimy 100.

Teraz jeszcze musimy ustawić pin GPIO na którym chcemy mieć sygnał pwm w odpowiednim trybie:

void pinMode (int pin, int mode) ;

Jako mode podajemy PWM_OUTPUT. Inne tryby to INPUT i OUTPUT, jeśli ich użyjemy, to na pinie nie pojawi się sygnał pwm. Pozostanie jednak zaprogramowany, możemy to wykorzystać do okresowego wyłączania pwm, co zostanie zilustrowane przykładem w dalszej części opisu.

Teraz ostatnia funkcja, pozwoli nam ustawić czas trwania jedynki logicznej i wystawi sygnał pwm na wybrany pin:

void pwmWrite (int pin, int value) ; Na pinie pin pojawi się sygnał pwm o czasie trwania jedynki logicznej value.

Pamiętajmy, ze tylko na czterech pinach łączówki GPIO Raspberry możemy ustawić wyjście sygnału pwm.

Podobnie jak dla funkcji pwmSetRange, wartość parametru value podajemy jako liczbę taktów zegara pwm, wiec jeśli chcemy uzyskać impuls 2 ms, a zegar zaprogramowaliśmy na 10 kHz, podajemy wartość 20.

Od tej chwili na naszym pinie GPIO mamy sygnał. W każdej chwili możemy zmienić jego wypełnienie poprzez kolejne pwmWrite z inną wartością value.

A jak go wyłączyć? Po prostu ustawić pinMode na OUTPUT lub INPUT.