PROMO

Kurs ESP8266 #4: Obsługa PWM

Cześć, w dzisiejszej części pokażemy jak obsługiwać PWM w środowisku Lua. Do dzieła ! ;)

Spis treści:

  1. Co to jest PWM ?
  2. Podstawowe funkcje dla PWM  w Lua
  3. Pierwszy program: Ustawiamy PWM
  4. Drugi program sterujemy wartością PWM

 

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

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 ESP8266 jest regulowana w zakresie od 1Hz do 1000Hz, czyli to oznacza, że ESP8266 jest w stanie włączać i wyłączać 1000 razy na sekundę. Zatem okres wynosi 1 milisekundy.
  • Czas trwania impulsu to czas trwania stanu wysokiego w jednym okresie. Czyli 1/1000Hz = 0.001s

Tyle części teoretycznej. Czas teraz przejść do wykorzystania PWM w ESP8266.

Rejestr przetwarzający sygnał PWM w ESP8266 jest 10-bitowy. Oznacza to, że mamy 1024 poziomów regulowania. Skąd ta liczba ? już pokazuję:

pwm 10bit

Każdy bit posiada swoją wagę idąc od prawej do lewej strony, waga bitu wzrasta dwukrotnie. Po zsumowaniu tych wszystkich wag otrzymamy 1023 poziomów kwantyzacji od 1 do 1023. Natomiast PWM posiada 1024 poziomów kwantyzacji. Ten 1024. poziom to zero. Więc regulacja naszego PWM odbywa się w zakresie 0 – 1023 co w efekcie daje nam 1024 poziomów kwantyzacji. Im rejestr większy, tzn. „ma więcej bitów” tym mamy więcej poziomów = większa dokładność zapisu.

Nie mniej jednak musimy pamiętać, że piny w ESP8266 są wyzwalane stanem niskim więc poziom zerowy będzie oznaczać 100% wypełnienie, a poziom 1023, wypełnienie 0%

2.Podstawowe funkcje dla PWM  w Lua

Pierwsza funkcja, która powinna nam się nasuwać to taka, przy pomocy, której ustawimy parametry PWM. Funkcja ta nazwa się pwm.setup()

Przy tej funkcji należy zapamiętać, że poziom wypełnienia zero oznacza 100% wypełnienia, a 1023 0% wypełnienia. W jednym programie możemy wykorzystać maksymalnie 6 pinów dla PWM

Po ustawieniu parametrów PWM, należy je uruchomić. W tym celu posłużymy się funkcją pwm.start()

W modułach ESP fajne jest to, że częstotliwość PWM nie jest stała i można ją w zależności od potrzeb zmieniać w wybranym przez nas momencie programu. by tego dokonać, wywołujemy funkcję pwm.setclock():

Wadą tej funkcji jest to, że automatycznie zmienia częstotliwości, dla pozostałych pinów PWM.

Co by to było za PWM, gdzie jego wartość byłaby wpisana raz na sztywno do programu bez możliwości zmian w trakcie wykonywania programu. Do zmiany wypełnienia sygnału używamy funkcji pwm.setduty():

ESP8266 pozwala nam jeszcze na wstrzymanie sygnału PWM przy pomocy funkcji pwm.pause();

Możemy również kompletnie wyłączyć tryb PWM na danym pinie:

Pozostały nam jeszcze dwie funkcje, które zwracają wartości wypełnienia i częstotliwości i są to odpowiednio:

 

3. Pierwszy program: Ustawiamy PWM

Jak można się domyśleć to pierwszy program nie będzie trudny i będzie się składać z paru linijek:

Schemat:

1.1

Program:

Program jest bardzo prosty, ale przypomnę. W funkcji pwm.setup() ustawiamy kolejno: pin, częstotliwość, wypełnienie. Następnie przy pomocy funkcji pwm.start() uruchamiamy PWM na wybranych pinach. Po wgraniu programu powinniśmy uzyskać taki efekt:

DSCN1842

Idąc od lewej do prawej strony to mamy 100%, 75%, 50%, 25%. Program jak widać jest bardzo prosty i nie ma większej potrzeby jego dalszego tłumaczenia :)

4.Drugi program sterujemy wartością PWM

Drugi program będzie „o wiele” trudniejszy w porównaniu do pierwszego. Poniższy program będzie działać następująco: Jeżeli przycisk nie będzie wciśnięty to wypełnienie PWM będzie się zwiększać o 50 jednostek, a jak przycisk zostanie wciśnięty to PWM będzie się zwiększać co 100 jednostek (dwa razy szybciej).

Schemat:

2.1

Program:

Po wgraniu programu powinniśmy uzyskać taki efekt:

Podsumowanie

Po tej części kursu powinieneś umieć:

  • podstawowe funkcje dla obsługi PWM
  • ustawić wypełnienie sygnału PWM
  • płynnie zmieniać wartość wypełnienia sygnału PWM w trakcie wykonywania programu

Zobacz pozostałe części kursu [ TUTAJ ]

Jeżeli chcesz być informowany na bieżąco o nowych częściach kursu to kliknij „Lubię to!” bądź subskrybuj naszą stronę, aby otrzymywać na adres e-mail nowości ze strony. Jeżeli masz jakieś pytania to śmiało zadawaj je na forum ; )