- Ce este un semnal PWM?
- Cum se convertește semnalul PWM în tensiune analogică?
- Diagrama circuitului:
- Programarea MSP pentru semnalul PWM:
- Controlul luminozității LED-urilor cu PWM:
Acest tutorial face parte din seria de tutoriale MSP430G2 LaunchPad în care învățăm să folosim MSP430G2 LaunchPad de la Texas Instruments. Până acum am învățat elementele de bază ale plăcii și am analizat cum să citim tensiunea analogică, interfața LCD cu MSP430G2 etc. Acum continuăm cu următorul pas de învățare despre PWM în MSP430G2. Vom face acest lucru controlând luminozitatea unui LED prin variația potențiometrului. Deci, potențiometrul va fi atașat la un pin analogic al MSP430 pentru a citi tensiunea sa analogică, de aceea este recomandat să știți să treceți prin tutorialul ADC înainte de a continua.
Ce este un semnal PWM?
Modularea lățimii pulsului (PWM) este un semnal digital care este cel mai frecvent utilizat în circuitele de control. Acest semnal este setat ridicat (3,3v) și scăzut (0v) într-un timp și viteză predefiniți. Timpul în care semnalul rămâne ridicat se numește „timp activ”, iar timpul în care semnalul rămâne scăzut se numește „timp oprit”. Există doi parametri importanți pentru un PWM, așa cum este discutat mai jos:
Ciclul de funcționare al PWM:
Procentul de timp în care semnalul PWM rămâne HIGH (la timp) este numit ciclu de funcționare. Dacă semnalul este întotdeauna PORNIT, este în ciclu de funcționare 100% și dacă este întotdeauna oprit, este ciclu de funcționare de 0%.
Ciclul de funcționare = Timp de pornire / (Timp de pornire + Timp de oprire)
Frecvența unui PWM:
Frecvența unui semnal PWM determină cât de rapid un PWM finalizează o perioadă. O perioadă este completă PORNIT și OPRIT un semnal PWM așa cum se arată în figura de mai sus. În tutorialul nostru, frecvența este de 500Hz, deoarece este valoarea implicită setată de IDE Energia.
Există o mulțime de aplicații pentru semnale PWM în timp real, dar pentru a vă face o idee, semnalul PWM poate fi utilizat pentru a controla servo-motoare și poate fi, de asemenea, convertit la tensiune analogică, care poate controla luminozitatea luminozității unui LED. Să învățăm puțin despre cum s-ar putea face acest lucru.
Iată câteva exemple PWM cu alt microcontroler:
- Generarea PWM utilizând microcontrolerul PIC cu MPLAB și XC8
- Servomotor Control cu Raspberry Pi
- Dimmer cu LED bazat pe Arduino folosind PWM
Verificați aici toate proiectele legate de PWM.
Cum se convertește semnalul PWM în tensiune analogică?
Pentru semnalele PWM la tensiunea analogică putem folosi un circuit numit filtru RC. Acesta este un circuit simplu și cel mai frecvent utilizat în acest scop. Circuitul include doar un rezistor și un condensator în serie, așa cum se arată în circuitul de mai jos.
Deci, ceea ce se întâmplă practic aici este că atunci când semnalul PWM este ridicat, condensatorul se încarcă de la rezistor și când semnalul PWM scade, condensatorul se descarcă prin încărcarea stocată. Astfel vom avea întotdeauna o tensiune constantă la ieșire, care va fi proporțională cu ciclul de funcționare PWM.
În graficul de mai sus, cel de culoare galben este semnalul PWM, iar cel de culoare albastră este tensiunea analogică de ieșire. După cum puteți vedea, unda de ieșire nu va fi o undă pură de curent continuu, dar ar trebui să funcționeze foarte bine pentru aplicația noastră. Dacă aveți nevoie de unda CC pură pentru alt tip de aplicație, ar trebui să proiectați un circuit de comutare.
Diagrama circuitului:
Diagrama circuitului este destul de simplă; are doar un potențiometru și un rezistor și un condensator pentru a forma un circuit RC și ledul în sine. Potențiometrul este utilizat pentru a furniza o tensiune analogică pe baza căreia ciclul de funcționare a semnalului PWM poate fi controlat. Ieșirea potului este conectată la pinul P1.0, care poate citi tensiuni analogice. Apoi trebuie să producem un semnal PWM, care poate fi realizat folosind pinul P1.2, acest semnal PWM este apoi trimis la circuitul de filtrare RC pentru a converti semnalul PWM în tensiune analogică care este apoi dată LED-ului.
Este foarte important să înțelegem că nu toți pinii de pe placa MSP pot citi tensiunea analogică sau pot genera pinii PWM. Pinii specifici care pot îndeplini sarcinile specifice sunt afișați în figura de mai jos. Utilizați întotdeauna acest lucru ca ghid pentru a selecta pinii pentru programare.
Asamblați circuitul complet așa cum se arată mai sus, puteți utiliza o placă de testare și câteva fire jumper și puteți face cu ușurință conexiunile. Odată ce conexiunile sunt terminate, placa mea arăta așa cum se arată mai jos.
Programarea MSP pentru semnalul PWM:
Odată ce hardware-ul este gata, putem începe cu programarea noastră. Primul lucru dintr-un program este să declarăm pinii pe care îi vom folosi. Aici vom folosi pinul 4 (P1.2) ca pin de ieșire, deoarece are capacitatea de a genera PWM. Deci, creăm o variabilă și atribuim numele pinului, astfel încât să fie ușor să o consultați mai târziu în program. Programul complet este dat la sfârșit.
int PWMpin = 4; // Folosim cel de-al patrulea pin de pe modulul MSP ca pin PWM
Apoi intrăm în funcția de configurare . Indiferent de cod este scris aici va fi executat doar o singură dată, aici declarăm că ne folosim 4 - lea PIN - ul ca un pin de ieșire, deoarece PWM este funcționalitatea de ieșire. Rețineți că am folosit variabila PWMpin aici în locul numărului 4, astfel încât codul să arate mai semnificativ
void setup () { pinMode (PWMpin, OUTPUT); // PEMpin este setat ca Outptut }
În cele din urmă, intrăm în funcția de buclă . Orice scrieți aici se execută din nou și din nou. În acest program trebuie să citim tensiunea analogică și să generăm un semnal PWM în consecință și acest lucru trebuie să se întâmple din nou și din nou. Deci, mai întâi să începem citind tensiunea analogică de la pinul A0, deoarece ne-am conectat la potențiometru la acesta.
Aici citim valoarea folosind funcția AanalogRead , această funcție va returna o valoare de la 0-1024 pe baza valorii tensiunii aplicate pinului. Apoi stocăm această valoare unei variabile numite „val” așa cum se arată mai jos
int val = analogRead (A0); // citiți valoarea ADC din pinul A0
Trebuie să convertim valorile de la 0 la 1024 din ADC în valori de la 0 la 255 pentru a o da funcției PWM. De ce ar trebui să convertim acest lucru? Voi spune asta în scurt timp, dar deocamdată nu uitați că trebuie să ne convertim. Pentru a converti un set de valori la un alt set de valori, Energia are o funcție de hartă similară cu Arduino. Deci, convertim valorile 0-1204 la 0-255 și le salvăm înapoi în variabila „val”.
val = hartă (val , 0, 1023, 0, 255); // ADC va da o valoare de 0-1023, transformându-l în 0-255
Acum avem o valoare variabilă de 0-255 pe baza poziției potențiometrului. Tot ce trebuie să facem este să folosiți această valoare pe pinul PWM, acest lucru se poate face folosind următoarea linie.
analogWrite (PWMpin, val); // Scrieți acea valoare în pinul PWM.
Să revenim la întrebarea de ce este scris 0-255 în pinul PWM. Această valoare 0-255 decide ciclul de funcționare al semnalului PWM. De exemplu, dacă valoarea semnalului este 0, atunci ciclul de funcționare este de 0% pentru 127 este de 50% și pentru 255 este de 100% la fel ca ceea ce este prezentat și explicat în partea de sus a acestui articol.
Controlul luminozității LED-urilor cu PWM:
Odată ce ați înțeles hardware-ul și codul, este timpul să vă distrați cu funcționarea circuitului. Încărcați codul pe placa MSP430G2 și rotiți butonul potențiometrului. Pe măsură ce rotiți butonul, tensiunea de pe pinul 2 va varia, care va fi citită de microcontroler și în funcție de tensiune, semnalele PWM vor fi generate pe pinul 4. Cu cât tensiunea este mai mare, cu atât va fi mai mare ciclul de funcționare și invers.
Acest semnal PWM este apoi transformat în tensiune analogică pentru a aprinde un LED. Luminozitatea LED - urilor este direct proporțională cu ciclul de funcționare a semnalului PWM. În afară de LED-ul de pe panou, puteți observa, de asemenea, LED-ul smd (culoare roșie) care variază luminozitatea sa, similar cu ledul pentru panou. Acest LED este, de asemenea, conectat la același pin, dar nu are o rețea RC, deci pâlpâie foarte repede. Puteți scutura placa într-o cameră întunecată pentru a verifica natura pâlpâitoare. Lucrarea completă poate fi văzută și în videoclipul de mai jos.
Asta este tot deocamdată oameni buni, am învățat cum să folosim semnalele PWM pe placa MSP430G2, în următorul nostru tutorial vom afla cât de ușor este de a controla un servomotor folosind aceleași semnale PWM. Dacă aveți nelămuriri, postați-le în secțiunea de comentarii de mai jos sau pe forumuri pentru ajutor tehnic.