- Kaj je signal PWM?
- Kako pretvoriti signal PWM v analogno napetost?
- Shema vezja:
- Programiranje MSP za signal PWM:
- Nadzor svetlosti LED s PWM:
Ta vadnica je del serije vaj MSP430G2 LaunchPad, v katerih se učimo uporabljati MSP430G2 LaunchPad podjetja Texas Instruments. Doslej smo se naučili osnov plošče in obravnavali branje analogne napetosti, povezavo LCD-ja z MSP430G2 itd. Zdaj nadaljujemo z naslednjim korakom učenja PWM v MSP430G2. To bomo storili z nadzorom svetlosti LED s spreminjanjem potenciometra. Torej bo potenciometer pritrjen na analogni zatič MSP430 za odčitavanje njegove analogne napetosti, zato je priporočljivo, da pred nadaljevanjem preberete navodila za ADC.
Kaj je signal PWM?
Modulacija širine impulza (PWM) je digitalni signal, ki se najpogosteje uporablja v krmilnih vezjih. Ta signal je nastavljen na visoko (3,3 v) in nizko (0 v) v vnaprej določenem času in hitrosti. Čas, v katerem signal ostane visok, se imenuje "on time", čas, v katerem signal ostane nizek, pa "off time". Kot sta opisana spodaj, obstajata dva pomembna parametra za PWM:
Delovni cikel PWM:
Odstotek časa, v katerem signal PWM ostane VISOK (pravočasno), se imenuje delovni cikel. Če je signal vedno vklopljen, je v 100% obratovalnem ciklu in če je vedno izklopljen, je 0% obratovalni cikel.
Delovni cikel = čas vklopa / (čas vklopa + čas izklopa)
Pogostost PWM:
Pogostost signala PWM določa, kako hitro PWM zaključi eno obdobje. Eno obdobje je končano VKLOP in IZKLOP signala PWM, kot je prikazano na zgornji sliki. V naši vadnici mora biti frekvenca 500Hz, saj je to privzeta vrednost, ki jo določi Energia IDE.
Obstaja veliko aplikacij za PWM signale v realnem času, toda, da dobite idejo, se signal PWM lahko uporablja za nadzor servo motorjev in se lahko pretvori v analogno napetost, ki lahko nadzoruje svetlost svetlosti LED. Naučimo se malo o tem, kako bi to lahko storili.
Tu je nekaj primerov PWM z drugim mikrokrmilnikom:
- Ustvarjanje PWM z uporabo mikrokrmilnika PIC z MPLAB in XC8
- Krmiljenje servo motorja z Raspberry Pi
- LED zatemnilnik na osnovi Arduina z uporabo PWM
Tukaj preverite vse projekte, povezane s PWM.
Kako pretvoriti signal PWM v analogno napetost?
Za PWM signale na analogno napetost lahko uporabimo vezje, imenovano RC filter. To je preprosto in najpogosteje uporabljeno vezje v ta namen. Vezje vključuje samo upor in kondenzator v seriji, kot je prikazano v spodnjem vezju.
Tu se v bistvu zgodi, da ko se ko je signal PWM visok, se kondenzator napolni, čeprav se upor upočasni in ko PWM signal pade, se kondenzator izprazni skozi shranjeni naboj. Tako bomo na izhodu vedno imeli konstantno napetost, ki bo sorazmerna z delovnim ciklom PWM.
V zgornjem grafu je rumeno obarvan signal PWM, modro barvni pa izhodna analogna napetost. Kot lahko vidite, izhodni val ne bo čisto enosmerni val, vendar bi moral zelo dobro delovati za našo aplikacijo. Če potrebujete čisti enosmerni val za druge vrste uporabe, morate oblikovati preklopno vezje.
Shema vezja:
Shema vezij je precej preprosta; ima samo potenciometer in upor ter kondenzator, da tvori RC vezje in sam Led. Potenciometer se uporablja za zagotavljanje analogne napetosti, na podlagi katere je mogoče nadzorovati delovni cikel signala PWM. Izhod lonca je povezan na pin P1.0, ki lahko bere analogne napetosti. Nato moramo proizvesti signal PWM, kar lahko storimo z uporabo zatiča P1.2, ta signal PWM se nato pošlje v vezje RC filtra za pretvorbo signala PWM v analogno napetost, ki se nato odda LED.
Zelo pomembno je razumeti, da ne morejo vsi zatiči na plošči MSP prebrati analogne napetosti ali generirati PWM nožic. Specifični zatiči, ki lahko opravljajo določene naloge, so prikazani na spodnji sliki. To vedno uporabite kot vodilo pri izbiri nožic za programiranje.
Sestavite celotno vezje, kot je prikazano zgoraj, lahko uporabite ploščo in nekaj žic za premostitev ter enostavno vzpostavite povezave. Ko so povezave končane, je moja plošča izgledala, kot je prikazano spodaj.
Programiranje MSP za signal PWM:
Ko je strojna oprema pripravljena, lahko začnemo z našim programiranjem. Prva stvar v programu je razglasiti zatiče, ki jih bomo uporabili. Tu bomo uporabili zatič številka 4 (P1.2) kot naš izhodni zatič, saj ima sposobnost generiranja PWM. Tako ustvarimo spremenljivko in dodelimo ime zatiča, tako da se je kasneje v programu lahko sklicevati nanjo. Celoten program je podan na koncu.
int PWMpin = 4; // 4. pin na modulu MSP uporabljamo kot PWM zatič
Nato pridemo do nastavitvene funkcije. Karkoli koda je napisano tukaj, se bodo izvajale le enkrat, tukaj izjavljamo, da smo z uporabo te 4 th pin kot izhodni pin, saj PWM je izhod funkcionalnost. Upoštevajte, da smo tukaj uporabili spremenljivko PWMpin namesto številke 4, tako da je koda videti bolj smiselna
void setup () { pinMode (PWMpin, IZHOD); // PEMpin je nastavljen kot Outptut }
Končno pridemo do funkcije zanke . Karkoli napišemo tukaj, se vedno znova izvrši. V tem programu moramo prebrati analogno napetost in ustrezno generirati signal PWM, kar se mora dogajati znova in znova. Najprej začnimo z branjem analogne napetosti z zatiča A0, saj smo nanj priključili potenciometer.
Tu beremo vrednost s pomočjo funkcije AanalogRead , ta funkcija bo vrnila vrednost od 0-1024 glede na vrednost napetosti, ki je bila uporabljena na zatiču. Nato to vrednost shranimo v spremenljivko, imenovano "val", kot je prikazano spodaj
int val = analogRead (A0); // preberemo vrednost ADC iz zatiča A0
Moramo spremeniti vrednosti 0 do 1024 iz ADC na vrednosti 0 do 255, da bi ga na funkcijo PWM. Zakaj bi morali to pretvoriti? To bom povedal v kratkem, a za zdaj se samo spomnite, da moramo spreobrniti. Za pretvorbo enega nabora vrednosti v drug nabor vrednosti ima Energia funkcijo zemljevida, podobno kot Arduino. Torej pretvorimo vrednosti 0-1204 v 0-255 in jo shranimo nazaj v spremenljivko "val".
val = zemljevid (val , 0, 1023, 0, 255); // ADC bo dal vrednost 0-1023 in jo pretvoril v 0-255
Zdaj imamo spremenljivo vrednost 0-255 glede na položaj potenciometra. Vse, kar moramo storiti, je, da to vrednost uporabimo na zatiču PWM, kar lahko storimo v naslednji vrstici.
analogWrite (PWMpin, val); // To vrednost zapišite v zatič PWM.
Vrnimo se k vprašanju, zakaj je na pin PWM zapisano 0-255. Ta vrednost 0-255 določa delovni cikel signala PWM. Na primer, če je vrednost signala 0, to pomeni, da je delovni cikel 0%, za 127 je 50%, za 255 pa 100%, tako kot je prikazano in razloženo na vrhu tega članka.
Nadzor svetlosti LED s PWM:
Ko ste razumeli strojno opremo in kodo, je čas, da se zabavate z delovanjem vezja. Naložite kodo na ploščo MSP430G2 in zavrtite gumb potenciometra. Ko vrtite gumb, se bo napetost na zatiču 2 spreminjala, kar bo prebral mikrokrmilnik, in glede na napetost se bodo signali PWM generirali na zatiču 4. Večja kot je napetost, večji bo delovni cikel in obratno.
Ta signal PWM se nato pretvori v analogno napetost, da zasveti LED. Svetlost LED je neposredno sorazmerna s ciklom PWM signala. Poleg LED na plošči lahko opazite tudi smd LED (rdeča barva), ki spreminja svojo svetlost podobno kot led na plošči. To je tudi LED, ki je povezan z istim zatičem, vendar nima RC omrežja, zato dejansko utripa zelo hitro. Desko lahko stresete v temni sobi, da preverite njeno utripajočo naravo. Celotno delo si lahko ogledate tudi v spodnjem videu.
To je za zdaj vse, naučili smo se, kako uporabljati PWM signale na plošči MSP430G2, v naslednji vadnici pa se bomo naučili, kako enostavno je upravljati servo motor z enakimi PWM signali. Če dvomite, jih objavite v spodnjem oddelku za komentarje ali na forumih za tehnično pomoč.