Pulsilaiusmodulatsioon

Sissejuhatus

Pulsilaiusmodulatsioon on oma olemuselt väga sarnane jalgratta pedaalide sõtkumisega. Mäes üles sõites väntab jalgrattur praktiliselt kogu aeg, öeldakse ka et töötsükkel on 100%. Metsa vahel sõites võibolla nii palju ei pea väntama, saab ka mõned laugemad lõigud väiksema töötsükkliga läbida (nt 75%). Siledal asfaltteel peab veel vähem väntama (nt 50%), ülejäänud aja liigub rattur koos rattaga edasi inertsi jõul.

Elektroonikas tähendab pulsilaiusmodulatsioon elektritarbija ühendamist toiteahelasse ning lahtiühendamist kiirel sagedusel. Manipuleerides sisselülitatud ning väljalülitatud aja suhet, muutub ka keskmine tarbitud võimsus. Kasutades transistorit võimsa tarbija juhtimiseks eraldub pingelang transistoril soojusena. Väljalülitatud olekus on transistori takistus lõpmatu ning skeemis vool ei liigu. Sisselülitatud olekus transistori takistus läheneb 0 oomile ning kogu energia kulutab tarbija. Mõlemal juhul on skeemi efektiivsus väga kõrge.

Vahepealsete variantide saavutamiseks (nt tarbija käitamine 50% võimsusega) tüüritakse pingelangu transistoril, selleks et piirata tarbija elektriahelas tekkivat voolu. Sellisel juhul eraldub ülejäänud energia soojusena, mis tähendab ka seda, et skeem ei ole eriti efektiivne. Säärasel printsiibil toimivad näiteks A-klassi helivõimendid. Kasutades pulsilaiusmodulatsiooni tarbijasse jõudva energia juhtimiseks saavutatakse märgatavalt suurem efektiivsus. Pulsilaiusmodulatsiooni kasutatakse mitmesugustes rakendustes: impulsstoiteplokid, LED valgustite dimmer-id, D-klassi helivõimendid jms.

Tavalise alalisvoolumootori puhul on analoogia jalgrattaga ilmselge - töötsükkli ajal saab mootor toidet elektriallikast ning vahepeal liigub inertsi tõttu edasi. LED dimmer-ite puhul kasutatakse ära sama inimsilma omapära mis filmitööstuseski - vähemalt 24 kaadrit sekundis on tarvis selle jaoks, et silm ei tajuks kaadreid eraldiseivatena vaid sujuva liikumisena ning 60 Hz-ist ülespoole minnes ei taju silm enam ka LED-i sisse- ning väljalülitamist. Selleks, et dimmer-datud LED valgus ei põhjustaks analoogselt kineskoopkuvariga peavalu on soovitatav kasutada vähemalt 100 Hz pulsslaiusmodulatsiooni baassagedusena.

Tarkvaraline pulsilaiusmodulatsioon

Kõige lihtsamalt pulsilaiusmodulatsiooni saab realiseerida mikrokontrolleri digitaalväljundi sisse/välja lülitamisega ning ajavahemike manipuleerimisega. Seda nimetatakse ka tarkvaraliseks pulsilaiusmodulatsiooniks (software PWM; bit-banging PWM). Madalate sageduste puhul on selle kasutamine põhjendatud aga teatud sagedusest kõrgemale minnes muutub protsessori tsüklite kasutus märgtavaks.

Selliste parameetritega pulsilaiusmodulatsioonile vastaks järgnev signaalikuju (waveform):

Pinge →
Aeg →

Käesoleva signaalikuju saab Arduino-st välja võluda järgneva koodijupiga:

            

Riistvaraline pulsilaiusmodulatsioon

Riistvaraliseks pulsilaiusmodulatsiooniks nimetakse mikrokontrolleri võimekust realiseerida pulsilaiusmodulatsiooni raiskamata protsessori tsükleid. Arduino puhul on selleks tarbeks pakendatud analogWrite() funktsioon. Riistvaraline pulsilaiusmodulatsioon baseerub tavaliselt taimeril. Taimer mikrokontrolleri kontekstis on mikrokontrolleri võimekus loendada protsessori takte ning teatud taktide möödudes käivitada funktsioon. Pulsilaiusmodulatsiooni kontekstis oleks selleks funktsiooniks digitaalväljundi sisse- ning välja lülitamine.

Atmega mikrokontrolleri puhul saab seadistada nii 8-bitist kui 16-bitist taimerit ning loendamiseks kasutatavaid takte saab protsessori sageduse suhtes veel jagada 1x, 8x, 64x, 256x või 1024x korda väiksemaks. Taimerite ning pulsilaiusmodulatsiooni baassagedus 8-bitise taimeri puhul vastab järgnevale reeglile:

\begin{equation*} f_{OCnxPWM} = \begin{cases} \frac{f_{clk}}{N \times 255} & faasiparanduseta \\ \frac{f_{clk}}{2 \times N \times 255} & faasiparandusega \end{cases} \end{equation*}

Ilma faasiparanduseta loendatakse tsükkleid nullist kuni ühe perioodi täis saamiseni ning seejärel alustatakse uuesti nullist lugemist. Faasiparandusega (phase correction) loendatakse tsükkleid üles ning seejärel alla. Faasiparanduse puhul pikeneb periood kaks korda, kuna perioodi täis saamise korral hakatakse alla lugema kuni nullini ja nii edasi. Faasiparanduse korral iga teine periood on eelmise peegelpilt. Arduino puhul on pulsilaiusmodulatsiooni võimekusega pesad eelseadistatud faasiparandusega, 8x jagajaga (prescaler) ning Arduino puhul kasutatav kvartskristall on 16MHz-ne:

\begin{equation*} f_{OCnxPWM} = \frac{16 MHz}{2 \times 64 \times 255} = 490 Hz \\ T_{OCnxPWM} = \frac{1}{f_{OCnxPWM}} = \frac {1}{490 Hz} = 2040 µs \approx 2 ms \end{equation*}

Kuna Arduino ajastamise funktsioonid delay() ja millis() sõltuvad taimerite konfiguratsioonist, siis ei ole soovitatud taimeri jagajaid ümberseadistada. Arduino pakub analogWrite() funktsiooni, millega saab sisse lülitada ning muuta tööperioodi pesadel mis riistvaralist pulsimodulatsiooni toetavad. Arduino Uno puhul on nendeks pesad 3, 5, 6, 9, 10 ning 11. Arduino Mega 2560 puhul on riistvaraline pulsilaiusmodulatsioon toetatud pesadel 2 kuni 13.