PWM - Pulse-width modulation - modulacja szerokości impulsu. Jest to jedna z metod regulacji sygnału prądowego lub napięciowego, polegająca na zmianie szerokości impulsów sygnału o stałej amplitudzie generowanego przez układ sterujący.

Metodę sterowanie sygnałem PWM bardzo często stosuje się do regulacji  mocy grzejników, jasności oświetlenia czy regulacji prędkości obrotowej  silników prądu stałego. Tą metodę możemy zastosować wszędzie tam gdzie  kształt przebiegu                                      nie ma większego znaczenia np. gdy  zwykłą żarówkę z włóknem żarowym zasilimy przebiegiem prostokątnym o  zmiennym wypełnieniu nie zaszkodzi to jej a jasność świecenia będzie  wprost proporcjonalna od stosunku czasu trwania impulsu do czasu  wyłączenia.
 
 Przy częstotliwości sygnału w  okolicach 1.000 Hz (bo często stosuje się właśnie taką częstotliwość)  żarówka nie zdąży przygasnąć w chwilach, gdy prąd nie płynie i żadne  migotanie nie będzie widoczne. Podobnie sprawa się ma z regulacją mocy  grzejników czy regulacji prędkości obrotowej silników.                                      Rzeczywista moc pobierana przez tego typu odbiorniki jest wartością średnią sygnału i możemy powiedzieć, że jeśli ustawimy wypełnienie na 10 % to odbiornik będzie zasilany mocą ok 10 % swojej nominalnej wartości.
 
 Sygnału PWM na pewno nie  będziemy mogli zastosować do regulacji mocy urządzeń, które zasilane  muszą być albo prądem stałym bez żadnych pulsacji albo sinusoidalnym  przebiegiem jak np. silniki prądu przemiennego czy energooszczędne  żarówki jarzeniowe.
 O właściwościach i  zastosowaniach sygnału PWM jeszcze w dalszej części materiału powiem a  teraz zajmę się sposobem generowania takiego sygnału z zastosowaniem  mikrokontrolera Attiny2313. Zdjęcie powyżej przedstawia środowisko  testowe składające się z zasilacza, płytki uruchomieniowej z  mikrokontrolerem, płytki prototypowej ze zmontowanym układem wykonawczym  oraz oscyloskopu na którym będziemy obserwować przebieg. 
 
 Procesor Attiny2313 jest  wyposażony w dwa liczniki/timery pracujące niezależnie od programu. Te  dwa sprzętowe liczniki zwiększające swój stan bez pomocy procesora i  programu. Do generowania sygnału PWM zastosujemy 16-bitowy licznik/timer TC1, który w dodatku ma komparator cyfrowy, za pomocą którego na bieżąco możemy porównywać stan licznika z liczbą wpisaną do rejestru porównania. Każde zrównanie się stanu licznika TC1 z liczbą wpisaną do rejestru porównania OCR1 (w bascomie oznaczone jako: Compare1a lub Pwm1a)                                      może być źródłem przerwania  programowego jak i może powodować reakcję dodatkowego wyjścia procesora OC1, którym w naszym procesorze jest nóżka Nr. 15 (Pb.3) Ponadto w momencie zrównania stanu licznika ze stanem rejestru  porównania, licznik może zostać skasowany i liczyć od nowa.
Nie zagłębiając się zanadto w zasadę pracy licznika TC1 i komparatora porównującego możemy go po prostu ustawić w tryb PWM,  bo twórcy mikrokontrolera                                      stworzyli taką właśnie możliwość co  znacznie ułatwi nam prace i zmniejszy stopień komplikacji programu do  minimum. W trybie PWM licznik zachowuje się trochę inaczej niż w  normalnych trybach liczenia czy odmierzania czasu.                                      Przede wszystkim na przemian liczy w  górę i w dół, co przypomina "schodkowy" przebieg trójkątny. Ponadto  licznik w tym trybie nie jest już 16-bitowy, możemy ustawić go jako: 8- 9- lub 10-bitowy, czyli np. dla ustawienia 8-bitowego będzie zliczał od 0 do 255 i z powrotem. Z tego wniosek, że okres sygnału na wyjściu będzie stały - w zależności od ustawienia będziemy mieć stałą częstotliwość, na którą współczynnik wypełnienia nie będzie miał wpływu.
 Teraz, gdy nasz licznik liczy  sobie w górę i w dół od 0 do 255 i z powrotem, wpiszemy do rejestru  porównania dowolną liczbę z zakresu (oczywiście cały czas mowa o trybie  8-bitowym) 0-255 to na wyjściu OC1 (nóżka nr. 15) otrzymamy  przebieg o stałej częstotliwości ale wypełnieniu całkowicie zależnym od  liczby wpisanej do rejestru porównania OCR1 (Compare1a lub Pwm1a).
 Pora zabrać się do testów. Na  poprzedniej stronie umieściłem schemat układu z mikrokontrolerem, do  wyjścia OC1 możemy bezpośrednio podłączyć małą diodę LED i  obserwować intensywność jej świecenia lub zastosować tranzystorowy  układ wzmacniający by podłączyć np. żarówkę zasilaną napięciem 12 V  (można oczywiście zastosować duży tranzystor i sterować piecykiem).
 
 Napisałem program, który za pomocą przycisków S1 i S2 umożliwi nam płynną zmianę stanu licznika porównania od 0 do 255 a tym  samym płynną zmianę współczynnika wypełnienia od 0 do 100 %. Program  możecie pobrać poniżej:
 POBIERZ PROGRAM: Sterownik_pwm.bas
Ponadto program wyświetla aktualny stan rejestru porównania na wyświetlaczu LCD, można oczywiście kazać mu też obliczać wypełnienie.
 
 Na początek w rejestrze  ustawiłem małą liczbę 12, na oscyloskopie widzimy, że nasza żaróweczka  zasilana jest dosłownie szpilkami ale przy tak dużej częstotliwości  czasy trwania tych szpilek są malutkie i żarówka słabo się żarzy.  Pobierana moc średnia jest bardzo mała. 
 
 Liczba jest już większa, na  oscyloskopie widzimy, że przebieg ma wypełnienie równe 50 %, żarówka  świeci już całkiem jasno.
 
 Teraz już liczba w rejestrze  porównania jest bliska maksimum dla trybu 8-bitowego. Na oscyloskopie  widzimy, że napięcie zasilające jest praktycznie stałe, przerywane na  bardzo krótkie odcinki czasu, które jednak wystarczą by obniżyć moc  średnią o kilka %. Zapraszam do obejrzenia filmu przedstawiającego  zmianę wypełnienia sygnału:
Małe zbliżenie płytki prototypowej.
 
 A tutaj powiększony oscylogram ilustrujący przebieg napięcia na drenie tranzystora.
 
 Przeprowadzony eksperyment  miał na celu jedynie pokazać zasadę sterowania mocą urządzeń z  zastosowaniem sygnału PWM, już niedługo opublikuję kompletny projekt  regulatora mocy do laboratoryjnych płaszczów grzejnych. Jako element  wykonawczy zastosuję w nim tyrystor oddzielony galwanicznie od  mikrokontrolera transoptorem.
 Jako ciekawostkę dodam, że  sygnał PWM może być także modulowany w czasie, tzn. szerokość impulsu w  każdej chwili jest inna i można w ten sposób wymusić w układzie przebieg  prądu sinusoidalnego.
 
 Sygnał PWM możemy także podać  na filtr dolnoprzepustowy i na wyjściu otrzymać napięcie otrzymując  najprawdziwszy przetwornik cyfrowo-analogowy o całkiem niezłych parametrach.