Kurs Arduino #5: PWM – obsługa funkcji analogRead() analogWrite()

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:

  1. Co to jest PWM ?
  2. Przykład wykorzystania funkcji analogRead()
  3. Przykład wykorzystania funkcji analogWrite()
  4. 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:

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ę:

bit

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)