- Kas yra PWM signalas?
- Kaip konvertuoti PWM signalą į analoginę įtampą?
- Grandinės schema:
- MSP programavimas PWM signalui:
- LED ryškumo valdymas naudojant PWM:
Ši pamoka yra „ MSP430G2 LaunchPad“ vadovėlių, kuriuose mokomės naudoti „ Texas Instruments“ MSP430G2 „LaunchPad“, dalis. Iki šiol mes sužinojome valdybos pagrindai ir apėmė, kaip skaityti analoginę įtampą, sąsajos LCD su MSP430G2 tt Dabar mes pereisime prie kito žingsnio mokymosi apie PWM į MSP430G2. Tai padarysime reguliuodami šviesos diodo ryškumą keisdami potenciometrą. Taigi potenciometras bus pritvirtintas prie MSP430 analoginio kaiščio, kad būtų galima nuskaityti jo analoginę įtampą, todėl prieš tęsiant rekomenduojama žinoti, kad reikia pereiti per ADC pamoką.
Kas yra PWM signalas?
Pulso pločio moduliacija (PWM) yra skaitmeninis signalas, kuris dažniausiai naudojamas valdymo grandinėse. Iš anksto nustatytu laiku ir greičiu šis signalas nustatomas aukštas (3,3 V) ir mažas (0 V). Laikas, per kurį signalas išlieka aukštas, vadinamas „įjungimo laiku“, o laikas, per kurį signalas lieka žemas, vadinamas „išjungimo laiku“. Yra du svarbūs PWM parametrai, kaip aptarta toliau:
PWM darbo ciklas:
Laiko procentas, per kurį PWM signalas lieka AUKŠTAS (laiku), vadinamas darbo ciklu. Jei signalas visada įjungtas, jis yra 100% darbo ciklo, o jei jis visada išjungtas, jis yra 0%.
Darbo ciklas = Įjungti laiką / (Įjungti laiką + Išjungti laiką)
PWM dažnis:
PWM signalo dažnis lemia, kaip greitai PWM užbaigia vieną periodą. Vienas periodas yra PWM signalo įjungimas ir išjungimas, kaip parodyta aukščiau pateiktame paveikslėlyje. Mūsų pamokoje dažnis turi būti 500 Hz, nes tai yra numatytoji „Energia IDE“ nustatyta vertė.
Yra daugybė programų, skirtų PWM signalams realiuoju laiku, tačiau norint suteikti jums idėją, PWM signalą galima naudoti valdant variklius su servo varikliais ir jis taip pat gali būti konvertuojamas į analoginę įtampą, kuri gali valdyti šviesos diodo ryškumą. Sužinokime šiek tiek apie tai, kaip tai būtų galima padaryti.
Čia yra keletas PWM pavyzdžių su kitais mikrovaldikliais:
- PWM generavimas naudojant PIC mikrovaldiklį su MPLAB ir XC8
- Servo variklio valdymas su „Raspberry Pi“
- „Arduino“ pagrindu veikiantis LED reguliatorius naudojant PWM
Čia patikrinkite visus su PWM susijusius projektus.
Kaip konvertuoti PWM signalą į analoginę įtampą?
Norėdami PWM signalus į analoginę įtampą galime naudoti grandinę, vadinamą RC filtru. Tai yra paprasta ir dažniausiai naudojama grandinė šiam tikslui. Grandinėje yra tik nuosekliai rezistorius ir kondensatorius, kaip parodyta žemiau esančioje grandinėje.
Taigi, kas iš esmės atsitinka, yra tai, kad kai PWM signalas yra aukštas, kondensatorius įkraunamas per rezistorių, o kai PWM signalas yra žemas, kondensatorius išsikrauna per saugomą įkrovą. Tokiu būdu išėjime visada bus pastovi įtampa, kuri bus proporcinga PWM darbo ciklui.
Aukščiau pateiktame grafike geltonos spalvos yra PWM signalas, o mėlynos spalvos - išėjimo analoginė įtampa. Kaip matote, išėjimo banga nebus gryna nuolatinės srovės banga, tačiau ji turėtų labai gerai veikti mūsų programoje. Jei jums reikia grynosios nuolatinės srovės bangos kitoms reikmėms, turėtumėte suprojektuoti perjungimo grandinę.
Grandinės schema:
Grandinės schema yra gana paprasta; jis tiesiog turi potenciometrą, rezistorių ir kondensatorių, kad suformuotų RC grandinę ir patį Led. Potenciometras naudojamas siekiant suteikti analoginę įtampą, kuria remiantis galima valdyti PWM signalo darbo ciklą. Puodo išėjimas yra prijungtas prie kaiščio P1.0, kuris gali nuskaityti analoginę įtampą. Tada mes turime sukurti PWM signalą, kurį galima padaryti naudojant kaištį P1.2, tada šis PWM signalas siunčiamas į RC filtro grandinę, kad PWM signalas būtų paverstas analogine įtampa, kuri tada suteikiama šviesos diodui.
Labai svarbu suprasti, kad ne visi MSP plokštės kaiščiai gali nuskaityti analoginę įtampą arba gali generuoti PWM kaiščius. Konkretūs kaiščiai, galintys atlikti konkrečias užduotis, parodyti paveikslėlyje žemiau. Visada naudokite tai kaip rekomendaciją, norėdami pasirinkti savo kaiščius programavimui.
Surinkite visą grandinę, kaip parodyta aukščiau, galite naudoti skydą ir keletą trumpiklių laidų ir lengvai atlikti jungtis. Kai sujungimai bus atlikti, mano lenta atrodė taip, kaip parodyta žemiau.
MSP programavimas PWM signalui:
Kai aparatinė įranga bus paruošta, galime pradėti nuo savo programavimo. Pirmas dalykas programoje yra deklaruoti kaiščius, kuriuos ketiname naudoti. Čia kaip išvesties kaištį naudosime kaiščio numerį 4 (P1.2), nes jis turi galimybę generuoti PWM. Taigi mes sukuriame kintamąjį ir priskiriame smeigtuko pavadinimą, kad vėliau būtų lengva jį nurodyti programoje. Pabaigoje pateikiama visa programa.
int PWMpin = 4; // Mes naudojame 4-ąjį kaištį MSP modulyje kaip PWM kaištį
Toliau mes einame į sąrankos funkciją. Nepriklausomai nuo to, koks kodas čia parašytas, jis bus vykdomas tik vieną kartą, čia mes pareiškiame, kad mes naudojame šį 4 -ąjį kaištį kaip išvesties kaištį, nes PWM yra išvesties funkcionalumas. Atkreipkite dėmesį, kad čia naudojome kintamąjį PWMpin, o ne skaičių 4, kad kodas atrodytų prasmingesnis
negaliojanti sąranka () { pinMode (PWMpin, OUTPUT); // PEMpin yra nustatytas kaip Outptut }
Galiausiai mes pateksime į ciklo funkciją. Kad ir ką čia parašytume, vykdoma vėl ir vėl. Šioje programoje turime nuskaityti analoginę įtampą ir atitinkamai generuoti PWM signalą, ir tai turi atsitikti vėl ir vėl. Taigi pirmiausia pradėkime nuo analoginės įtampos nuskaitymo iš kaiščio A0, nes prie jo prijungėme potenciometrą.
Čia mes skaitome vertę naudodami „ AanalogRead“ funkciją, ši funkcija grąžins vertę nuo 0-1024, atsižvelgiant į įtampą, pritaikytą kaiščiui. Tada mes išsaugome šią vertę kintamajam, vadinamam „val“, kaip parodyta žemiau
int val = analogasRead (A0); // nuskaitykite ADC vertę iš kaiščio A0
Turime konvertuoti vertes nuo 0 iki 1024 iš ADC į vertes nuo 0 iki 255, kad suteiktume ją funkcijai PWM. Kodėl turėtume tai konvertuoti? Aš netrukus pasakysiu, bet kol kas nepamirškite, kad turime atsivertti. Norėdami konvertuoti vieną reikšmių rinkinį į kitą reikšmių rinkinį, „Energia“ turi žemėlapio funkciją, panašią į „Arduino“. Taigi konvertuojame 0-1204 reikšmes į 0-255 ir išsaugome atgal į kintamąjį "val".
val = žemėlapis (val , 0, 1023, 0, 255); // ADC suteiks reikšmę 0–1023, paverskite ją 0–255
Dabar mes turime kintamą reikšmę 0–255, atsižvelgiant į potenciometro padėtį. Viskas, ką turime padaryti, tai naudoti šią vertę PWM kaiščiu. Tai galima padaryti naudojant šią eilutę.
analogWrite (PWMpin, val); // Parašykite tą vertę į PWM kaištį.
Grįžkime prie klausimo, kodėl į PWM kaištį rašoma 0–255. Ši reikšmė 0–255 nustato PWM signalo darbo ciklą. Pvz., Jei signalo vertė yra 0, tai reiškia, kad darbo ciklas yra 0% 127, tai yra 50%, o 255 - 100%, kaip tai, kas parodyta ir paaiškinta šio straipsnio viršuje.
LED ryškumo valdymas naudojant PWM:
Kai suprasite aparatinę įrangą ir kodą, atėjo laikas smagiai praleisti laiką veikiant grandinei. Įkelkite kodą į MSP430G2 plokštę ir pasukite potenciometro rankenėlę. Pasukus rankenėlę, kaiščio 2 įtampa skirsis, kurią nuskaitys mikrovaldiklis, o pagal įtampą PWM signalai bus generuojami ant 4 kaiščio. Kuo didesnė įtampa, tuo didesnis bus darbo ciklas ir atvirkščiai.
Tada šis PWM signalas konvertuojamas į analoginę įtampą, kad švytėtų šviesos diodas. Iš LED ryškumas yra tiesiogiai proporcingas PWM signalo ciklas. Be duonos lentos šviesos diodo, taip pat galite pastebėti smd šviesos diodą (raudoną spalvą), kuris keičia savo ryškumą, panašų į LED lentą. Tai yra LED taip pat prijungtas prie to paties kaiščio, tačiau jis neturi RC tinklo, todėl jis iš tikrųjų mirksi labai greitai. Galite papurtyti lentą tamsioje patalpoje, kad patikrintumėte jos mirgėjimą. Visą darbą taip pat galima pamatyti žemiau esančiame vaizdo įraše.
Tai viskas dabar žmonėms, mes išmokome naudoti PWM signalus MSP430G2 plokštėje, kitoje mūsų pamokoje sužinosime, kaip lengva valdyti servovariklį naudojant tuos pačius PWM signalus. Jei turite kokių nors abejonių, paskelbkite juos žemiau esančiame komentarų skyriuje arba techninės pagalbos forumuose.