In acest proiect vom folosi una dintre caracteristicile de ATmega32A pentru a regla luminozitatea de 1 Watt LED - uri. Metoda care este utilizată pentru a regla viteza LED-ului este PWM (Pulse Width Modulation). Acest tutorial AVR Microcontroller PWM explică în detaliu conceptul PWM și generația PWM (Puteți verifica, de asemenea, acest circuit simplu generator PWM). Luați în considerare un circuit simplu așa cum se arată în figură.
Acum, dacă comutatorul din figura de mai sus este închis continuu pe o perioadă de timp, atunci becul se va aprinde continuu în timpul respectiv. Dacă întrerupătorul este închis timp de 8 ms și deschis timp de 2 ms pe un ciclu de 10 ms, atunci becul va fi PORNIT doar în timp de 8 ms. Acum terminalul mediu peste o perioadă de 10 ms = Timp de pornire / (Timp de pornire + Timp de oprire), acesta se numește ciclu de funcționare și este de 80% (8 / (8 + 2)), deci media tensiunea de ieșire va fi de 80% din tensiunea bateriei.
În al doilea caz, comutatorul este închis timp de 5 ms și deschis timp de 5 ms pe o perioadă de 10 ms, astfel încât tensiunea terminală medie la ieșire va fi de 50% din tensiunea bateriei. Spuneți dacă tensiunea bateriei este de 5V și ciclul de funcționare este de 50% și deci tensiunea terminală medie va fi de 2,5V.
În al treilea caz, ciclul de funcționare este de 20%, iar tensiunea medie a terminalului este de 20% din tensiunea bateriei.
În ATMEGA32A avem patru canale PWM, și anume OC0, OC1A, OC1B și OC2. Aici vom folosi canalul OC0 PWM pentru a varia luminozitatea LED-ului.
Componente necesare
Hardware:
Microcontroler ATmega32
Alimentare (5v)
Programator AVR-ISP
Condensator 100uF, 1Watt LED
Tranzistor TIP127
Butoane (2 bucăți)
100nF (104) condensator (2 bucăți), Rezistențe de 100Ω și 1kΩ (2 bucăți).
Software:
Atmel studio 6.1
Progisp sau magie flash
Diagrama circuitului și explicația de lucru
Figura de mai sus prezintă schema de circuit a dimmerului LED cu microcontroler AVR (Puteți verifica, de asemenea, acest circuit dimmer simplu LED).
În ATmega, pentru patru canale PWM, am desemnat patru pini. Putem lua ieșire PWM numai pe acești pini. Deoarece folosim PWM0 ar trebui să luăm semnalul PWM la pinul OC0 (PORTB al 3- lea PIN). Așa cum se arată în figură, conectăm baza tranzistorului la pinul OC0 pentru a conduce LED-ul de alimentare. Aici un alt lucru este peste patru canale PWM, două sunt canale PWM pe 8 biți. Vom folosi un canal PWM pe 8 biți aici.
Un condensator este conectat la fiecare dintre butoane pentru a evita săriți. Ori de câte ori este apăsat un buton, va apărea un zgomot la pin. Deși acest zgomot se stabilizează în milisecunde. Pentru un controler, vârfurile ascuțite înainte de stabilizare acționează ca declanșatoare. Acest efect poate fi eliminat fie prin software, fie prin hardware, pentru ca programul să fie simplu. Folosim metoda hardware prin adăugarea unui condensator de reducere.
Condensatorii anulează efectul săriturilor butoanelor.
În ATMEGA există câteva modalități de a genera PWM, acestea sunt:
1. Faza corectă PWM
2. PWM rapid
Aici vom păstra totul simplu, deci vom folosi metoda FAST PWM pentru a genera semnalul PWM.
Mai întâi să alegeți frecvența PWM, aceasta depinde de aplicație, de obicei, pentru un LED orice frecvență mai mare de 50Hz ar face. Din acest motiv, alegem ceasul contor 1MHZ. Deci nu alegem prescalar. Un prescalar este un număr atât de selectat pentru a obține un contor mai mic. De exemplu, dacă ceasul oscilatorului este de 8Mhz, putem alege un prescalar de '8' pentru a obține un ceas de 1MHz pentru contor. Prescalarul este selectat pe baza frecvenței. Dacă dorim mai multe impulsuri de perioadă de timp, trebuie să alegem prescalar mai mare.
Acum, pentru a scoate din ATMEGA ceasul PWM RAPID de 50Hz, trebuie să activăm biții corespunzători în registrul „ TCCR0 ”. Acesta este singurul registru de care trebuie să ne deranjăm, pentru obținerea PWM FAST pe 8 biți.
Aici, 1. CS00, CS01, CS02 (GALBEN) - selectați prescalar pentru alegerea contorului. Tabelul pentru prescalar adecvat este prezentat în tabelul de mai jos. Deci pentru prescalarea unuia (ceasul oscilatorului = ceasul contorului).
deci CS00 = 1, alți doi biți sunt zero.
2. WGM01 și WGM00 sunt modificate pentru a alege modurile de generare a formelor de undă, pe baza tabelului de mai jos, pentru PWM rapid. Avem WGM00 = 1 și WGM01 = 1;
3. Acum știm că PWM este un semnal cu un raport de funcționare diferit sau timp de pornire diferit de pornire. Până acum am ales frecvența și tipul PWM. Tema principală a acestui proiect se află în această secțiune. Pentru a obține un raport de taxe diferit, vom alege o valoare între 0 și 255 (2 ^ 8 din cauza a 8 biți). Să presupunem că alegem o valoare 180, deoarece contorul începe să numere de la 0 și atinge valoarea 180, răspunsul de ieșire poate fi declanșat. Acest declanșator poate fi inversant sau neinversibil. Aceasta este ieșirea care se poate spune să fie ridicată la atingerea numărului sau se poate spune că este trasă în jos la atingerea numărării.
Această selecție de tragere în sus sau în jos este aleasă de biții CM00 și CM01.
Așa cum se arată în tabel, pentru ca ieșirea să se ridice la comparare și ieșirea va rămâne ridicată până la valoarea maximă (așa cum se arată în figura de jos). Trebuie să alegem modul de inversare pentru a face acest lucru, deci COM00 = 1; COM01 = 1.
Așa cum se arată în figura de mai jos, OCR0 (Output Compare Register 0) este octetul care stochează valoarea aleasă de utilizator. Deci, dacă schimbăm OCR0 = 180, controlerul declanșează schimbarea (ridicată) atunci când contorul atinge 180 de la 0.
Acum, pentru a varia luminozitatea LED-ului, trebuie să schimbăm RAPORTUL DEZVOLTARE al semnalului PWM. Pentru a modifica raportul taxelor, trebuie să schimbăm valoarea OCR0. Când schimbăm această valoare a OCR0, contorul necesită timp diferit, pentru a ajunge la OCR0. Deci, controlerul trage ieșirea la momente diferite.
Deci, pentru PWM de diferite cicluri de funcționare, trebuie să schimbăm valoarea OCR0.
În circuit avem două butoane. Un buton este pentru creșterea valorii OCR0 și deci RATIOAREA DATORIE a semnalului PWM, altul este pentru scăderea valorii OCR0 și deci RATIOAREA DATORIE a semnalului PWM.