Ebben a projektben az ATmega32A egyik funkcióját használjuk az 1 Wattos LED fényerejének beállítására. A LED sebességének beállítására használt módszer a PWM (Pulse Width Modulation). Ez az AVR mikrokontroller PWM oktatóanyag részletesen elmagyarázza a PWM koncepcióját és a PWM generálását (ellenőrizheti ezt az egyszerű PWM generátor áramkört is). Vegyünk egy egyszerű áramkört az ábra szerint.
Ha a fenti ábra kapcsolója egy ideig folyamatosan zárva van, akkor az izzó folyamatosan bekapcsol. Ha a kapcsoló 8 ms-ig zárva és 2 ms-ig nyitva van 10 ms-os ciklus alatt, akkor az izzó csak 8 ms-os idő múlva lesz BE. Most az átlagos terminál 10 ms alatt = bekapcsolási idő / (bekapcsolási idő + kikapcsolási idő), ezt hívják munkakörnek és 80% -os (8 / (8 + 2)), tehát az átlag a kimeneti feszültség az akkumulátor feszültségének 80% -a lesz.
A második esetben a kapcsolót 5 ms-ig zárták és 5 ms-ra nyitották 10 ms időtartam alatt, így a kimeneten az átlagos kapocsfeszültség az akkumulátor feszültségének 50% -a lesz. Mondja el, ha az akkumulátor feszültsége 5 V, és az üzemi ciklus 50%, és így az átlagos kapocsfeszültség 2,5 V lesz.
A harmadik esetben az üzemi ciklus 20%, az átlagos kapocsfeszültség pedig az akkumulátor feszültségének 20% -a.
Az ATMEGA32A-ban négy PWM csatornánk van, nevezetesen OC0, OC1A, OC1B és OC2. Itt fogunk használni OC0 PWM csatorna, hogy változik a LED fényereje.
Szükséges alkatrészek
Hardver:
ATmega32 mikrovezérlő
Tápegység (5v)
AVR-ISP programozó
100uF kondenzátor, 1Wattos LED
TIP127 tranzisztor
Gombok (2 db)
100nF (104) kondenzátor (2 db), 100Ω és 1kΩ ellenállások (2 db).
Szoftver:
Atmel stúdió 6.1
Progisp vagy flash varázslat
Áramköri ábra és működési magyarázat
A fenti ábra bemutatja az AVR mikrokontrollerrel ellátott LED-es dimmer kapcsolási rajzát (ezt az egyszerű LED-es dimmer áramkört is ellenőrizheti).
Az ATmegában négy PWM csatorna számára négy csapot jelöltünk ki. Csak ezeken a csapokon vehetünk PWM kimenetet. Mivel mi használ PWM0 kell vennünk PWM jelet OC0 csap (PORTB 3 rd PIN). Amint az ábrán látható, a tranzisztor alapját összekötjük az OC0 tűvel a tápfeszültség LED vezérléséhez. Itt egy másik dolog négy PWM csatornán van, kettő 8 bites PWM csatorna. Itt egy 8 bites PWM csatornát fogunk használni.
Az egyes gombokhoz kondenzátor van csatlakoztatva a pattogás elkerülése érdekében. Amikor egy gombot megnyomnak, némi zaj hallható a csapnál. Bár ez a zaj milliszekundumban stabilizálódik. Vezérlő számára a stabilizálás előtti éles csúcsok kiváltó tényezők. Ezt a hatást szoftveresen vagy hardveresen lehet kiküszöbölni, hogy a program egyszerű legyen. Hardveres módszert használunk a visszavonó kondenzátor hozzáadásával.
A kondenzátorok semmissé teszik a gombok visszapattanásának hatását.
Az ATMEGA-ban kétféle módon lehet PWM- et létrehozni:
1. Fázis helyes PWM
2. Gyors PWM
Itt mindent egyszerűnek fogunk tartani, tehát FAST PWM módszert fogunk használni a PWM jel előállításához.
Először válassza ki a PWM frekvenciáját. Ez általában az alkalmazástól függ, egy LED esetén bármely 50Hz-nél nagyobb frekvencia megtörténne. Ezért az 1MHZ ellenórát választjuk. Tehát nem választunk preskalárt. Az előskála egy olyan szám, amelyet úgy választottak ki, hogy kisebb ellenórát kapjon. Például, ha az oszcillátor órája 8Mhz, akkor választhatunk egy „8” előskálát, hogy 1MHz-es órát kapjunk számlálóhoz. Az előskálát a frekvencia alapján választják ki. Ha több időperiódusú impulzust akarunk, akkor magasabb preskalárt kell választanunk.
Most, hogy az 50Hz-es óra GYORS PWM-jét kihozzuk az ATMEGA-ból, engedélyeznünk kell a megfelelő biteket a „ TCCR0 ” regiszterben. Ez az egyetlen regisztráció, amelyet zavarnunk kell a 8 bites FAST PWM megszerzéséhez.
Itt, 1. CS00, CS01, CS02 (SÁRGA) - válassza ki az előskálát az órajel kiválasztásához. A megfelelő preskalar táblázata az alábbi táblázatban látható. Tehát az egyik előkalkulálásához (oszcillátor óra = számláló óra).
tehát CS00 = 1, a másik két bit nulla.
2. A WGM01 és a WGM00 módosításával a gyors PWM-hez az alábbi táblázat alapján hullámforma-generációs módokat választanak. WGM00 = 1 és WGM01 = 1;
3. Most már tudjuk, hogy a PWM egy jel, amelynek eltérő a teljesítményaránya vagy eltérő bekapcsolási kikapcsolási ideje. Eddig a PWM gyakoriságát és típusát választottuk. A projekt fő témája ebben a részben található. A különböző terhelési arányok eléréséhez 0 és 255 közötti értéket választunk (2 ^ 8 a 8 bit miatt). Tegyük fel, hogy 180 értéket választunk, mivel a számláló 0-tól kezd számolni és eléri a 180 értéket, a kimeneti válasz kiváltható. Ez az indító lehet invertáló vagy nem invertáló. Ez azt mondhatja, hogy a kimenetet fel kell húzni, amikor eléri a számlálást, vagy mondhatjuk, hogy húzzuk le, amikor elérjük a számot.
Ezt a felfelé vagy lefelé húzás kiválasztását a CM00 és CM01 bitek választják.
Amint a táblázat mutatja, a kimenet magasra kerül az összehasonlításkor, és a kimenet magas marad a maximális értékig (amint azt az alsó ábra mutatja). Ehhez invertáló módot kell választanunk, tehát COM00 = 1; COM01 = 1.
Amint az az alábbi ábrán látható, az OCR0 (Output Compare Register 0) az a bájt, amely a felhasználó által választott értéket tárolja. Tehát, ha megváltoztatjuk az OCR0 = 180 értéket, a vezérlő kiváltja a változást (magas), amikor a számláló 0-tól eléri a 180 értéket.
Most fényerejének változtatásával LED meg kell változtatni a kitöltési tényezőt a PWM jelet. A vámtétel megváltoztatásához meg kell változtatnunk az OCR0 értéket. Amikor megváltoztatjuk az OCR0 ezen értékét, a számlálónak más időre van szüksége az OCR0 eléréséhez. Tehát a vezérlő különböző időpontokban magasra húzza a kimenetet.
Tehát a különböző munkaciklusú PWM esetén meg kell változtatnunk az OCR0 értéket.
Az áramkörben két gombunk van. Az egyik gomb az OCR0 érték és így a PWM jel DUTY RATIO növelésére szolgál, a másik az OCR0 érték és így a PWM jel DUTY RATIO értékének csökkentésére szolgál.