V tomto projektu použijeme jednu z funkcí ATmega32A k nastavení jasu 1 W LED. Metoda, která se používá k nastavení rychlosti LED, je PWM (Pulse Width Modulation). Tento výukový program PWM mikrokontroléru AVR podrobně vysvětluje koncept PWM a generování PWM (můžete také zkontrolovat tento jednoduchý obvod generátoru PWM). Zvažte jednoduchý obvod, jak je znázorněno na obrázku.
Pokud je nyní spínač na výše uvedeném obrázku trvale sepnut po určitou dobu, bude žárovka během této doby nepřetržitě svítit. Pokud je spínač sepnut na 8ms a rozepnut na 2ms po dobu 10ms, pak bude žárovka ZAPNUTA pouze po dobu 8ms. Nyní je průměrná svorka po dobu 10 ms = doba zapnutí / doba zapnutí + doba vypnutí, toto se nazývá pracovní cyklus a je 80% (8 / (8 + 2)), takže průměr výstupní napětí bude 80% napětí baterie.
V druhém případě je spínač sepnut na 5ms a rozepnut na 5ms po dobu 10ms, takže průměrné svorkové napětí na výstupu bude 50% napětí baterie. Řekněme, že pokud je napětí baterie 5 V a pracovní cyklus 50%, takže průměrné napětí na svorce bude 2,5 V.
Ve třetím případě je pracovní cyklus 20% a průměrné svorkové napětí je 20% napětí baterie.
V ATMEGA32A máme čtyři PWM kanály, jmenovitě OC0, OC1A, OC1B a OC2. Zde použijeme kanál OC0 PWM ke změně jasu LED.
Požadované komponenty
Hardware:
Mikrokontrolér ATmega32
Napájení (5 V)
Programátor AVR-ISP
100uF kondenzátor, 1W LED
Tranzistor TIP127
Knoflíky (2 kusy)
100nF (104) kondenzátor (2 kusy), 100Ω a 1kΩ rezistory (2 kusy).
Software:
Atmel studio 6.1
Progisp nebo flash magie
Schéma zapojení a pracovní vysvětlení
Výše uvedený obrázek ukazuje schéma zapojení stmívače LED s mikrokontrolérem AVR (můžete také zkontrolovat tento jednoduchý obvod stmívače LED).
V ATmega jsme pro čtyři kanály PWM určili čtyři piny. Výstup PWM můžeme přijímat pouze na těchto pinech. Vzhledem k tomu jsme pomocí PWM0 bychom měli vzít PWM signál při OC0 pin (PORTB 3 rd PIN). Jak je znázorněno na obrázku, připojujeme základnu tranzistoru k kolíku OC0, abychom poháněli LED napájení. Tady je další věc přes čtyři PWM kanály, dva jsou 8bitové PWM kanály. Zde použijeme 8bitový PWM kanál.
Ke každému z tlačítek je připojen kondenzátor, aby nedocházelo k odskakování. Kdykoli stisknete tlačítko, na kolíku bude nějaký hluk. I když se tento šum stabilizuje v milisekundách. Pro řadič působí ostré vrcholy před stabilizací jako spouštěč. Tento efekt lze eliminovat buď softwarem, nebo hardwarem, aby byl program jednoduchý. Používáme hardwarovou metodu přidáním odskakovacího kondenzátoru.
Kondenzátory ruší účinek poskakování tlačítek.
V ATMEGA existuje několik způsobů, jak generovat PWM, jsou to:
1. Fázově správné PWM
2. Rychlé PWM
Zde budeme udržovat vše jednoduché, takže použijeme metodu FAST PWM ke generování signálu PWM.
Nejprve si vyberte frekvenci PWM. Závisí to obvykle na aplikaci, pro LED by byla jakákoli frekvence větší než 50 Hz. Z tohoto důvodu volíme počítadlo hodin 1MHZ. Takže nevybíráme žádný prescalar. Prescalar je číslo, které je vybráno tak, aby získalo menší počitadlo hodin. Například pokud jsou hodiny oscilátoru 8Mhz, můžeme zvolit prescalar '8', abychom získali 1MHz hodiny pro čítač. Prescalar je vybrán na základě frekvence. Pokud chceme více pulzů časového období, musíme zvolit vyšší prescalar.
Nyní, abychom z ATMEGA dostali FAST PWM 50Hz hodin, musíme povolit příslušné bity v registru „ TCCR0 “. Toto je jediný registr, který musíme obtěžovat, abychom získali 8bit FAST PWM.
Tady, 1. CS00, CS01, CS02 (ŽLUTÁ) - vyberte předkallar pro výběr počítadel. Tabulka pro příslušný předškolní systém je uvedena v následující tabulce. Takže pro přednastavení jednoho (hodiny oscilátoru = počítadlo hodin).
takže CS00 = 1, další dva bity jsou nulové.
2. Modely WGM01 a WGM00 jsou změněny tak, aby pro rychlý PWM zvolily režimy generování křivek na základě níže uvedené tabulky. Máme WGM00 = 1 a WGM01 = 1;
3. Nyní víme, že PWM je signál s různým poměrem zátěže nebo různými časy zapnutí a vypnutí. Dosud jsme zvolili frekvenci a typ PWM. Hlavní téma tohoto projektu spočívá v této části. Pro získání jiného pracovního poměru vybereme hodnotu mezi 0 a 255 (2 ^ 8 kvůli 8 bitům). Řekněme, že zvolíme hodnotu 180, protože počitadlo začne počítat od 0 a dosáhne hodnoty 180, může být spuštěna výstupní odezva. Tato spoušť může být invertující nebo neinvertující. To znamená, že výstup lze říci, že se dosáhne po dosažení počtu, nebo se dá říci, že se dosáhne po dosažení počtu.
Tuto volbu tahání nahoru nebo dolů volí bity CM00 a CM01.
Jak je uvedeno v tabulce, výstup bude při porovnání vysoký a výstup zůstane vysoký až do maximální hodnoty (jak je znázorněno na obrázku dole). K tomu musíme zvolit invertující režim, takže COM00 = 1; COM01 = 1.
Jak je znázorněno na následujícím obrázku, OCR0 (Output Compare Register 0) je bajt, který ukládá uživatelem zvolenou hodnotu. Takže pokud změníme OCR0 = 180, ovladač spustí změnu (vysokou), když čítač dosáhne 180 od 0.
Nyní pro změnu jasu LED musíme změnit DUTY RATIO signálu PWM. Abychom mohli změnit poměr plnění, musíme změnit hodnotu OCR0. Když změníme tuto hodnotu OCR0, počítadlo trvá jinou dobu, než dosáhne OCR0. Regulátor tedy vytáhne výstup vysoko v různých časech.
Takže pro PWM různých pracovních cyklů musíme změnit hodnotu OCR0.
V obvodu máme dvě tlačítka. Jedno tlačítko slouží ke zvýšení hodnoty OCR0 a tedy POMĚRNÉHO POMĚRU signálu PWM, druhé slouží ke snížení hodnoty OCR0 a tedy POMĚRNÉHO POMĚRU signálu PWM.