Možná jste se už někdy setkali s pojmem “PWM” a nevěděli jste, o co jde. PWM (Pulse Width Modulation) je metoda, kterou lze pomocí dvoustavového signálu (log. 0 a log. 1) regulovat např. jas LED diody nebo otáčky elektromotoru, nebo také lze touto metodou získat spojitý analogový signál např. se může jednat o audio signál.
Jak již bylo řečeno, PWM signál nabývá pouze dvou hodnot log 0. (LED dioda je zhasnuta) a log 1. (LED dioda je rozsvícená). Další důležité parametry, které určují vlastnosti PWM regulace jsou frekvence a střída. Frekvence PWM je konstantní a určuje, jak rychle bude docházet ke změně stavu, a střída určuje poměr mezi stavem log. 1 a celou periodou, viz:
Kde D označuje střídu, ton je čas v aktivním stavu a T je perioda signálu. Pwm signál se střídou 25% lze vidět na Obr. 1.
Střední hodnotu PWM signálu v procentech pro několik hodnot střídy lze vidět na Obr. 2.
Asi nejjednodušší bude vysvětlení principu regulace pomocí PWM na nastavení jasu LED diody. Pokud ke generování PWM využíváte mikrokontrolér ATmega(16/32), tak si zkusíme jednoduchý kód, kterým vygenerujeme PWM signál pro připojenou LED diodu s vhodným předřadným odporem, která je umístěna na PORTA mikrokontroléru ATmega(16/32), viz níže.
002: #define F_CPU 16000000UL
003: #include <util/delay.h>
004:
005: uint8_t switchState;// změna stavu
006: uint8_t endPeriod; // konec periody
007:
008: int main(void)
009: {
010: DDRA = 0xFF// nastavení PORTA jako výstupní
011: PORTA = 0xFF;
012:
013: switchState = 5;// nastavení střídy 1:1
014: endPeriod = 10; // nastavení 10 úrovní rozlišení
015:
016:
017: while(1)
018: {
019: for (int i = 0; i < endPeriod; i++)
020: {
021: if (i == switchState)
022: {
023: PORTA = 0x00;// Změnit stav PORTA na log. 0
024: }
025:
026: _delay_ms(100);
027: }
028:
029: PORTA = 0xFF;// Změnit stav PORTA na log. 1
030: }
031: }
Ve zdrojovém kódu lze vidět, že pro generování PWM jsou použity dvě proměnné “switchState” a “endPeriod”. První proměnná “switchState” určuje stav, kdy má dojít ke změně z log. 1 a log. 0, zatímco druhá proměnná “endPeriod” určuje délku periody a tím i rozlišení PWM modulace. Ve vytvořeném kódu lze vidět, že ke změně stavu dojde po 500 ms a k ukončení celé periody PWM signálu dojde po 1 s, tzn. že jsme zvolili frekvenci 1 Hz. Pokud jste si tento kód zkusili, tak jste zjistili akorát, že LED dioda bliká a rozhodně nedochází k žádné regulaci jasu a máte taky pravdu. Ale co když teď zvýšíme frekvenci např. na 100 Hz? Změnu frekvence PWM provedeme změnou nastavení z _delay_ms(100) na _delay_ms(1). Teď vidíte, že LED dioda svítí, ale rozhodně ne na maximum, stejně tak, jako kdybychom nastavili na trvalo stav log. 1 na pinu mikrokontroléru. Celý trik spočívá v tom, že jsme využili nedokonalosti lidského zraku, který není schopný vnímat rychlé změny blikání LED diody, a proto se nám zdá, že LED dioda svítí trvale. A čím tedy lze řídit jas LED diody? Právě nastaveným poměrem mezi stavy log. 1 a log. 0. Čím déle bude LED dioda ve stavu log. 1, tím více bude svítit a obráceně. Ve vzorovém zdrojovém kódu můžeme určit nastavení jasu v 10 krocích (“switchState” 0 – 9), ale běžně se používá např. 255ti stavová regulace. Výsledný generovaný PWM signál na PORTA, ukazuje Obr. 3.
Samozřejmě většina mikrokontrolérů má již speciální jednotku, která generuje signál PWM, takže uvedený zdrojový kód slouží pouze pro demonstraci funkce. Jak pracovat s Čítačem/Časovačem, kterým lze generovat PWM na mikrokontroléru ATmega(16/32) lze nalézt ZDE. Samozřejmě lze generovat PWM signál i bez mikrokontroléru, ale tím se tady zabývat nebudeme.
Pokud byste chtěli PWM modulaci použít k vytvoření spojitého analogového signálu, např. pro generování audio signálu, nebo z jiného důvodu, potřebujete analogový signál, který je úměrný střídě PWM, tak je nutné ještě za výstup mikrokontroléru, který generuje PWM, zařadit integrační článek, tzn. dolní propust. Může se jednat např. o jednoduchou RC dolní propust, viz. Obr. 4.
Mezní kmitočet RC dolní propusti se vypočítá dle vztahu:
Tato dolní propust vytvoří z dvoustavového signálu signál analogový, který bude mít tvar odvozený od vstupního napětí, použité střídy a použité dolní propusti. Pro jednoduchou RC dolní propust R=10 kΩ a C = 100nF (fmez = 159,2 Hz) ukazuje Obr. 5, jak vypadá výstupní signál Vout při použití vstupního obdélníkového signálu 1 kHz. Z obrázku je patrné, že jsme nedosáhli konstantní úrovně napětí 2,5 V, jak by jsme očekávali, ale výstupní napětí je zvlněné díky volbě použité dolní propusti.
Pokud zvýšíme frekvenci vstupního signálu např. na 10 kHz, tak lze vidět, že výstupní napětí Vout je daleko více stabilní díky většímu odstupu mezního kmitočtu RC dolní propusti a frekvence vstupního signálu.
Následující: Vytvoření virtuálního spojení dvou sériových linek pomocí com0com
Předchozí: Základy řízení sedmisegmentových displejů – Řízení pomocí obvodu SAA1064
AUTOŘI NEBEROU ŽÁDNOU ODPOVĚDNOST ZA PŘÍPADNÉ ÚJMY NA ZDRAVÍ ČI MAJETKU.
Komentáře