V tomto projekte použijeme jednu z funkcií ATmega32A na nastavenie jasu 1 W LED. Metóda, ktorá sa používa na nastavenie rýchlosti LED, je PWM (Pulse Width Modulation). Tento výukový program PWM pre mikrokontrolér AVR podrobne vysvetľuje koncept PWM a generovanie PWM (môžete tiež skontrolovať tento jednoduchý obvod generátora PWM). Zvážte jednoduchý obvod, ako je znázornené na obrázku.
Ak je teraz spínač na vyššie uvedenom obrázku nepretržite zapnutý po určitú dobu, žiarovka sa po túto dobu nepretržite rozsvieti. Ak je spínač v polohe 8 ms a v rozpätí 2 ms v cykle 10ms, žiarovka bude zapnutá iba v čase 8ms. Teraz je priemerný terminál v priebehu 10 ms = čas zapnutia / (čas zapnutia + čas vypnutia), toto sa nazýva pracovný cyklus a je 80% (8 / (8 + 2)), takže priemer výstupné napätie bude 80% napätia batérie.
V druhom prípade je spínač zatvorený na 5 ms a otvorený na 5ms po dobu 10ms, takže priemerné svorkové napätie na výstupe bude 50% napätia batérie. Povedzte, či je napätie batérie 5 V a pracovný cyklus 50%, takže priemerné napätie na svorke bude 2,5 V.
V treťom prípade je pracovný cyklus 20% a priemerné svorkové napätie je 20% napätia batérie.
V ATMEGA32A máme štyri PWM kanály, a to OC0, OC1A, OC1B a OC2. Tu použijeme kanál OC0 PWM na zmenu jasu LED.
Súčasti sú povinné
Hardvér:
Mikrokontrolér ATmega32
Napájanie (5v)
Programátor AVR-ISP
100uF kondenzátor, 1 W LED
Tranzistor TIP127
Gombíky (2 kusy)
100nF (104) kondenzátor (2 kusy), 100Ω a 1kΩ rezistory (2 kusy).
Softvér:
Štúdio Atmel 6.1
Progisp alebo flash mágia
Schéma zapojenia a pracovné vysvetlenie
Vyššie uvedený obrázok zobrazuje schému zapojenia stmievača LED s mikrokontrolérom AVR (môžete tiež skontrolovať tento jednoduchý obvod stmievača LED).
V ATmega sme pre štyri kanály PWM určili štyri piny. Výstup PWM môžeme brať iba na tieto piny. Pretože používame PWM0, mali by sme vziať PWM signál na pin OC0 (PORTB 3. PIN). Ako je znázornené na obrázku, pripájame základňu tranzistora k kolíku OC0, aby sme napájali LED napájania. Tu je ďalšia vec viac ako štyri PWM kanály, dva sú 8-bitové PWM kanály. Tu použijeme 8-bitový PWM kanál.
Ku každému z tlačidiel je pripojený kondenzátor, aby sa zabránilo odrazu. Pri každom stlačení tlačidla bude na kolíku znieť nejaký zvuk. Aj keď sa tento šum stabilizuje za milisekundy. Pre ovládač ostré vrcholy pred stabilizáciou fungujú ako spúšťače. Tento efekt je možné eliminovať softvérom alebo hardvérom, aby bol program jednoduchý. Používame hardvérovú metódu pridaním odskakovacieho kondenzátora.
Kondenzátory rušia efekt odrážania tlačidiel.
V ATMEGA existuje niekoľko spôsobov, ako generovať PWM, sú to:
1. Fázovo správne PWM
2. Rýchle PWM
Tu budeme všetko udržiavať jednoduché, takže na generovanie signálu PWM použijeme metódu FAST PWM.
Najprv si vyberte frekvenciu PWM. Závisí to zvyčajne od aplikácie, pre LED by fungovala akákoľvek frekvencia vyššia ako 50 Hz. Z tohto dôvodu sme vybrali počítadlo hodín 1MHZ. Takže nevyberáme žiadny prescalar. Prescalar je číslo, ktoré je vybrané tak, aby získalo menšie počítadlo hodín. Napríklad ak sú hodiny oscilátora 8Mhz, môžeme zvoliť prescalar '8', aby sme dostali 1MHz hodiny pre počítadlo. Prescalar sa vyberá na základe frekvencie. Ak chceme viac impulzov časového obdobia, musíme zvoliť vyššiu preskalárnu.
Teraz, aby sme z ATMEGA dostali FAST PWM s frekvenciou 50 Hz, musíme povoliť príslušné bity v registri „ TCCR0 “. Toto je jediný register, ktorý musíme obťažovať, kvôli získaniu 8bitového FAST PWM.
Tu, 1. CS00, CS01, CS02 (ŽLTÁ) - vyberte predkalár pre výber počítadla hodín. Tabuľka pre príslušný predkallar je uvedená v nasledujúcej tabuľke. Takže na prednastavenie jednej (hodiny oscilátora = počítadlo hodín).
takže CS00 = 1, ďalšie dva bity sú nulové.
2. Modely WGM01 a WGM00 sú zmenené tak, aby si vybrali režimy generovania kriviek pre rýchlu PWM na základe nasledujúcej tabuľky. Máme WGM00 = 1 a WGM01 = 1;
3. Teraz vieme, že PWM je signál s rôznym pracovným pomerom alebo rôznymi časmi zapnutia a vypnutia. Doteraz sme volili frekvenciu a typ PWM. Hlavná téma tohto projektu spočíva v tejto časti. Pre získanie iného pracovného pomeru vyberieme hodnotu medzi 0 a 255 (2 ^ 8 kvôli 8 bitom). Povedzme, že zvolíme hodnotu 180, pretože počítadlo začne počítať od 0 a dosiahne hodnotu 180, môže sa spustiť výstupná odozva. Tento spúšťač môže byť invertujúci alebo neinvertujúci. To znamená, že pri dosiahnutí počtu je možné povedať, že výstup sa vytiahne, alebo keď sa pri dosiahnutí počtu dá povedať, že sa vytiahne dole.
Tento výber ťahania nahor alebo nadol je vybraný bitmi CM00 a CM01.
Ako je uvedené v tabuľke, pri porovnaní ide o vysoký výstup, ktorý zostane vysoký až do maximálnej hodnoty (ako je znázornené na obrázku dole). Aby sme to dosiahli, musíme zvoliť invertujúci režim, takže COM00 = 1; COM01 = 1.
Ako je znázornené na nasledujúcom obrázku, OCR0 (Output Compare Register 0) je bajt, ktorý ukladá hodnotu zvolenú používateľom. Takže ak zmeníme OCR0 = 180, regulátor spustí zmenu (vysokú), keď počítadlo dosiahne 180 od 0.
Teraz pre zmenu jasu LED musíme zmeniť POMEROVÝ POMER signálu PWM. Aby sme mohli zmeniť pracovný pomer, musíme zmeniť hodnotu OCR0. Keď zmeníme túto hodnotu OCR0, počítadlu trvá iný čas, kým sa dostaneme k OCR0. Regulátor teda vytiahne výstup vysoko v rôznych časoch.
Takže pre PWM rôznych pracovných cyklov musíme zmeniť hodnotu OCR0.
V obvode máme dve tlačidlá. Jedno tlačidlo slúži na zvýšenie hodnoty OCR0 a teda POMERU ZÁVITU signálu PWM, druhé slúži na zníženie hodnoty OCR0 a teda POMERU PÍSOM PWM signálu.