This is an old revision of the document!


Pokročilá funkce digitálních výstupů: PWM

Zkratka PWM skrývá slova Pulse-Width Modulation, v překladu “pulzně-šířková modulace”. Tato funkce slouží pro generování obdélníkového signálu dané frekvence a střídy na digitálním výstupu. Typicky se PWM používá pro regulaci komponent napájených stejnosměrným proudem způsobem, který by u analogové regulace nebyl možný.

Jako příklad použijeme 24V DC elektromotor. Aby motor dosáhl plných otáček, vyžaduje napětí 24 V. Pro 10 % otáček mu bude logicky postačovat pouze 2,4V napětí. Při takto nízkém napětí by se ale motor nerozběhl kvůli vlivu tření a zátěže. Pokud by se pak přeci jen rozběhl, měl by jen velmi nízký točivý moment. Jde o jednu ze slabin analogové regulace.

PWM lze použít pouze na digitálních výstupech, které mohou generovat pouze 0V nebo 24V napětí. Pro možnost regulace proto PWM generuje dvouhodnotový obdélníkový signál o dané frekvenci, čehož dosahuje periodickým přepínáním výstupu mezi ON a OFF. Parametrem regulace je střída signálu, tj. délka ON a OFF signálů v rámci jedné periody. Pokud je střída signálu reprezentována procenty a její hodnota je 50%, výstupní signál stráví 50% časového úseku ve stavu ON a zbytek ve stavu OFF. Při střídě 66% bude poměr 66% ON a 34% OFF apod.

Jedním z parametrů, který je třeba nastavit, je frekvence PWM, která musí odpovídat Vašemu regulovanému systému. Čím pomalejší Váš systém je, tím nižší musí frekvence být a opačně. Vysvětleno na příkladu bojleru - ohřev velké nádrže s vodou na požadovanou teplotu zabere dlouhý časový úsek, vysoká frekvence regulace proto není potřeba. Zde budou stačit pouhé desetiny či setiny hertzu. Pro regulace LED diody ale budeme potřebovat frekvenci alespoň 100 Hz, nižší frekvence by totiž nebyly pouhým okem viditelné.

Dalším parametrem ke zvážení je prvek, který je mezi stavy ON a OFF přepínán. Pokud jde o mechanické relé, vysoká frekvence by jej mohla zničit. U SSR relé, MOSFETu či IGBT tranzistoru lze naopak použít kilohertzové až megahertzové frekvence (nezapomeňte důkladně prostudovat technické parametry dané komponenty).

U produktů Unipi je frekvence určována nastavením rozlišení. Viz níže.

Druhým parametrem PWM je rozlišení. Tato hodnota indikuje, na kolik kroků chceme regulaci rozdělit. Pokud je rozlišení 3, můžeme nastavit tři hodnoty střídy - 0%, 50% a 100%. U rozlišení 11 pak můžeme střídu v rozsahu 0-100% nastavovat po 10% krocích.

Maximální možné rozlišení u kontrolérů Unipi činí 65536 kroků.

Střída signálu, jak bylo řečeno výše, reprezentuje samotnou hodnotu regulace. Nejčastěji se setkáte se střídou vyjádřenou v procentech času ON v souvislosti s jeho periodou. V Mervisu je ale střída signálu vyjádřena hodnotou rozlišení. Ukážeme si, jak tuto hodnotu vypočítat.

                     rozliseni - 1
strida [mervis] = ------------------- * strida [%]
                         100

strida [mervis] může nabývat pouze hodnot v rozsahu 0 až -1. Tyto hodnoty nastavíte v programu.

Příklad 1

rozlišení = 101 kroků (0 - 100% po 1% krocích)

střída [%] = 34

                     rozliseni - 1                         101 - 1
strida [mervis] = ------------------- * strida [%] = ------------------- * 34 = 34
                         100                                 100 

Pro rozlišení 101 kroků a žádanou střídu 34% je třeba v Mervisu nastavit střídu na hodnotu 34. To bylo poměrně jednoduché, nyní proto zkusíme něco složitějšího.

Příklad 2

rozliseni = 6 steps (0 - 100% po 20% krocích)

strida [%] = 40%

                     rozliseni - 1                       6 - 1
strida [mervis] = ------------------- * strida [%] = -------------- * 40 = 2
                          100                             100 

Pro rozlišení 6 kroků a žádanou střídu 40% je třeba v Mervisu nastavit hodnotu střídy na 2.

Frekvenci a rozlišení nelze nastavit přímo v Mervisu. Proměnné pro konfiguraci PWM v Mervisu jsou označeny jako PWM_Cycle a PWM_Prescale, a jejich hodnoty je třeba vypočítat podle žádaného rozlišení a frekvence.

PWM_Cycle = resolution - 2

                          4.8 * 10^7
PWM_Prescale = ------------------------------- - 1
                 frekvence * ( rozlišení - 1)     

Proměnné PWM_Cycle a PWM_Prescale jsou vyjádřené 16-bitovými slovy, nastavit lze proto pouze integerové hodnoty 0 - 65535. Pokud je výsledkem Vašeho výpočtu reálné číslo, je třeba jej buď zaokrouhlit nebo změnit parametry frekvence či rozlišení.

Alternativně je možné hodnoty rozlišení a frekvence získat z hodnot PWM_Cycle a PWM_Prescale pomocí následujících rovnic:

rozlišení = PWM_Cycle + 2

                         4.8 * 10^7
frekvence = ---------------------------------------- 
             ( PWM_Cycle + 1) * (PWM_Prescale + 1)     

Příklad 1

Rozlišení = 11 (střída signálu 0 - 100% s 10% kroky)

Frekvence = 4kHz

PWM_Cycle = rozlišení - 2 = 11 - 2 = 9

                          4.8 * 10^7                      4.8 * 10^7
PWM_Prescale = ------------------------------- - 1 = --------------------- - 1 = 1199
                 frekvence * ( rozlišení - 1)          4000 * ( 11 - 1 ) 

Příklad 2

Rozlišení = 41 (krok 2,5%)

Frekvence = 0.1Hz

PWM_Cycle = rozlišení - 2 = 41 - 2 = 39

                          4.8 * 10^7                      4.8 * 10^7
PWM_Prescale = ------------------------------- - 1 = ------------------- - 1 = 119999999
                 frekvence * ( rozlišení - 1)           0.1 * (41 - 1 ) 

Jak můžete vidět, při daném rozlišení a frekvenci je hodnota PWM_Prescale větší než možné maximum 65535. Musíme proto zvětšit hodnotu frekvence, rozlišení či oboje.

Příklad 3

Rozlišení = 10001 (krok 0,01%)

Frekvence = 0.1Hz

PWM_Cycle = rozlišení - 2 = 10001 - 2 = 9999

                          4.8 * 10^7                        4.8 * 10^7
PWM_Prescale = ------------------------------- - 1 = ------------------------- - 1 = 47999
                frekvence * ( rozlišení - 1)             0.1 * (10001 - 1 ) 

Při zvýšeném rozlišení získáme nižší frekvenci a obráceně. Pro vysokofrekvenční PWM musíme obětovat část rozlišení.

PWM_Cycle a PWM_Prescale jsou konfigurační proměnné modulu Unipi a nelze je změnit zevnitř programu. V levém panelu vyberte Unipi modul. V jeho vlastnostech můžete vidět proměnné PWM_Cycle a PWM_Prescale. Nastavte je podle výsledku svých výpočtů - pro účely tohoto tutoriálu nastavíme PWM_Cycle = 99 a PWM_Prescale = 119. Tím nastavíme frekvenci na 4 kHz při rozlišení 101.

Provedli jsme změnu v prototypu zařízení, což znamená, že jde o změnu konfigurace modulu PLC. Postup nahrání konfigurace naleznete v tutoriálu Konfigurace modulu Unipi.

Nyní zapněte Mód ladění a ve sloupci Hodnota PLC uvidíte současnou hodnotu PWM pro digitální výstupy 1.01 - 1.04. Pokud jste ji již dříve nezměnili, uvidíte zde nuly. Změňte hodnotu PWM_1.01 na 50 a potvrďte kliknutím na V či stisknutím klávesy ENTER.

Pro ověření můžeme k DO 1.01 připojit osciloskop a zkontrolovat podobu signálu.

Jak ukazuje osciloskop, frekvence je 4 kHz při střídě signálu 50%.

Při výpočtech hodnoty PWM_Prescale využíváme konstantu In calculations of the PWM_Prescale, we use constant 4,8 * 10^7. Konstanta představuje 48MHz zdroj pro interní časovače/čítače, které se společně s PWM_Prescale a PWM_Count starají o nastavení požadované frekvence.