Gdy już wiemy „co w Arduino piszczy” to możemy zabrać się za coś ambitniejszego czym jest PWM. W tej części mam zamiar przedstawić co to jest PWM oraz zrealizować parę przykładów w opraciu o PWM. Zapraszam
Spis treści:
- Co to jest PWM ?
- Przykład wykorzystania funkcji analogRead()
- Przykład wykorzystania funkcji analogWrite()
- Program podsumowujący
1.Co to jest PWM ?
PWM, czyli Pulse Width Modulation to Modulacja szerokości impulsu, wykorzystywana jest w większości urządzeń, które używasz na co dzień lecz co to jest ? Już wyjaśniam. Załóżmy, że mamy zwykłą lampkę z przełącznikiem. W momencie zamknięcia obwodu przyciskiem, do lampki dostarczana jest maksymalna moc z sieci jaką może pobrać ta lampka, natomiast, gdybyśmy ten przyciski w równych odstępach czasu włączali i wyłączali z dostatecznie dużą częstotliwością, to byśmy zauważyli, że nasza lampka świeci słabiej, niż przy stale włączonym przycisku. W zależności od częstotliwości przełączania przycisku moglibyśmy otrzymać różne poziomy świecenia się lampki. W taki właśnie sposób działa PWM, gdzie ten impuls jest stanem „włączenia” (w tym przypadku lampki), a szerokość to jest właśnie ten regulowany czas, czy też częstotliwość. Animacją poniżej postaram się zilustrować jak to wygląda w praktyce. Dla ułatwienia zrozumienia tej część, wszelkie wartości będą dostosowane do AVR:
Podstawowe parametry dla PWM:
- Wypełnienie (Duty Cycle): jest to wartość wyrażona procentowo, która określa czas występowania stanu wysokiego podczas jednego okresu
- Częstotliwość, a tak właściwie to szybkość działania, jest parametrem oznaczającym częstotliwość pracy PWM. Dla Arduino jest to około 500Hz (dokładnie to 490Hz), czyli to oznacza, że Arduino jest w stanie włączać i wyłączać 500 razy na sekundę. Zatem okres wynosi 2 milisekundy.
- Czas trwania impulsu to czas trwania stanu wysokiego w jednym okresie. Czyli 1/500Hz = 0.002s => zakładając, że wypełnienie danego sygnału wynosi 50% to czas trwania impulsu wynosi 1ms.
Tyle części teoretycznej. Czas teraz przejść do wykorzystania PWM w Arduino.
Rejestr przetwarzający sygnał PWM w Ardunio jest 8-bitowy. Oznacza to, że mamy 256 poziomów regulowania. Skąd ta liczba ? już pokazuję:
Każdy bit posiada swoją wagę idąc od prawej do lewej strony, waga bitu wzrasta dwukrotnie. Po zsumowaniu tych wszystkich wag otrzymamy 255 „poziomów” od 1 do 255. Natomiast PWM posiada 256 poziomów. Ten 256. poziom to zero. Więc regulacja naszego PWM odbywa się w zakresie 0 – 255 co w efekcie daje nam 256 poziomów. Im rejestr większy, tzn. „ma więcej bitów” tym mamy więcej poziomów = większa dokładność zapisu.
Zanim na dobre zaczniemy tą część to chciałbym wstawić listę potrzebnych elementów na dzisiaj:
- 1x Arduino
- 5x dioda LED
- 5x rezystor 220 ohm
- 1x potencjometr 10k ohm
- 1x zestaw przewodów połączeniowych
Zadanie domowe:
- 1x dioda RGB ze wspólną katodą (-)
- 2x potencjometr 10khm (opcjonalnie joystick analogowy)