I det här projektet ska vi använda en av funktionerna i ATmega32A för att justera ljusstyrkan på 1 W LED. Metoden som används för att justera LED-hastigheten är PWM (Pulse Width Modulation). Denna AVR Microcontroller PWM-handledning förklarar PWM-konceptet och genereringen av PWM i detalj (Du kan också kontrollera denna enkla PWM-generatorkrets). Tänk på en enkel krets som visas i figuren.
Om strömbrytaren i ovanstående bild nu stängs kontinuerligt under en tidsperiod kommer lampan att tändas kontinuerligt under den tiden. Om strömbrytaren är stängd i 8 ms och öppnas i 2 ms under en cykel på 10 ms, kommer lampan att vara PÅ endast under 8 ms-tiden. Nu är den genomsnittliga terminalen över en period på 10 ms = Turn ON time / (Turn ON time + Turn OFF time), detta kallas arbetscykel och är 80% (8 / (8 + 2)), så genomsnittet utspänningen kommer att vara 80% av batterispänningen.
I det andra fallet är omkopplaren stängd i 5 ms och öppnas i 5 ms under en period av 10 ms, så den genomsnittliga polspänningen vid utgången blir 50% av batterispänningen. Säg om batterispänningen är 5V och arbetscykeln är 50% och så blir den genomsnittliga polspänningen 2,5V.
I det tredje fallet är arbetscykeln 20% och den genomsnittliga polspänningen är 20% av batterispänningen.
I ATMEGA32A har vi fyra PWM-kanaler, nämligen OC0, OC1A, OC1B och OC2. Här ska vi använda OC0 PWM-kanalen för att variera ljusstyrkan på lysdioden.
Komponenter krävs
Hårdvara:
ATmega32 mikrokontroller
Strömförsörjning (5v)
AVR-ISP Programmerare
100uF kondensator, 1W LED
TIP127 transistor
Knappar (2 delar)
100nF (104) kondensator (2 delar), 100Ω och 1kΩ motstånd (2 delar).
Programvara:
Atmel studio 6.1
Progisp eller flash magi
Kretsschema och arbetsförklaring
Ovanstående figur visar kretsschemat för LED-dimmer med AVR Microcontroller (Du kan också kontrollera denna enkla LED-dimmerkrets).
I ATmega, för fyra PWM-kanaler, har vi utsett fyra stift. Vi kan bara ta PWM-utdata endast på dessa stift. Eftersom vi använder PWM0 bör vi ta PWM signal vid OC0 stift (PORTB 3 rd PIN). Som visas i figuren ansluter vi transistorns bas till OC0-stift för att driva strömlampan. Här är en annan sak över fyra PWM-kanaler, två är 8-bitars PWM-kanaler. Vi ska använda en 8-bitars PWM-kanal här.
En kondensator är ansluten till var och en av knapparna för att undvika studsande. Varje gång du trycker på en knapp kommer det att vara något ljud vid stiftet. Även om detta ljud stabiliseras på millisekunder. För en styrenhet fungerar de skarpa topparna före stabilisering som utlösare. Denna effekt kan elimineras antingen med programvara eller hårdvara för att programmet ska vara enkelt. Vi använder hårdvarumetoden genom att lägga till avstängningskondensator.
Kondensatorerna upphäver effekten av att studsa knappar.
I ATMEGA finns det några sätt att generera PWM, de är:
1. Faskorrekt PWM
2. Snabb PWM
Här kommer vi att hålla allt enkelt, så vi kommer att använda FAST PWM-metoden för att generera PWM-signalen.
Först för att välja frekvensen för PWM. Detta beror vanligtvis på applikation, för en lysdiod vilken frekvens som helst större än 50Hz skulle göra. Av denna anledning väljer vi motklockan 1MHZ. Så vi väljer ingen prescalar. En prescalar är ett tal som är så valt att få en mindre motklocka. Till exempel om oscillatorklockan är 8Mhz, kan vi välja en förskalare på '8' för att få en 1MHz klocka för räknare. Prescalar väljs baserat på frekvens. Om vi vill ha fler tidsperioder måste vi välja högre prescalar.
För att få ut FAST PWM på 50Hz ur ATMEGA måste vi aktivera lämpliga bitar i " TCCR0 " -registret. Det här är det enda registret vi behöver bry oss för att få 8bit FAST PWM.
Här, 1. CS00, CS01, CS02 (GUL) - välj prescalar för att välja motklocka. Tabellen för lämplig prescalar visas i nedanstående tabell. Så för förskalning av en (oscillatorklocka = motklocka).
så CS00 = 1, andra två bitar är noll.
2. WGM01och WGM00 ändras för att välja vågformgenereringslägen, baserat på tabellen nedan, för snabb PWM. Vi har WGM00 = 1 och WGM01 = 1;
3. Nu vet vi att PWM är en signal med olika arbetsförhållanden eller olika avstängningstider för PÅ. Hittills har vi valt frekvens och typ av PWM. Projektets huvudtema ligger i detta avsnitt. För att få olika arbetsförhållanden ska vi välja ett värde mellan 0 och 255 (2 ^ 8 på grund av 8 bitar). Säg att vi väljer ett värde 180, eftersom räknaren börjar räkna från 0 och når värdet 180, kan utgångssvaret utlösas. Denna utlösare kan vara inverterande eller icke inverterande. Det vill säga att utgången kan sägas dras upp när man når räkningen, eller det kan sägas att man drar ner när den når räkningen.
Detta val av att dra upp eller ner väljs av CM00- och CM01-bitar.
Som visas i tabellen, för att utgången ska bli hög vid jämförelse och utgången förblir hög tills maxvärdet (som visas i figuren längst ner). Vi måste välja inverteringsläge för att göra det, så COM00 = 1; COM01 = 1.
Som visas i figuren nedan är OCR0 (Output Compare Register 0) den byte som lagrar det användarvalda värdet. Så om vi ändrar OCR0 = 180 utlöser styrenheten ändringen (hög) när räknaren når 180 från 0.
Nu för att variera ljusstyrkan på LED måste vi ändra DUTY RATIO för PWM-signal. För att ändra tullkvoten måste vi ändra OCR0-värdet. När vi ändrar detta värde på OCR0 tar räknaren annan tid att nå OCR0. Så styrenheten drar utgången högt vid olika tidpunkter.
Så för PWM med olika arbetscykler måste vi ändra OCR0-värdet.
I kretsen har vi två knappar. En knapp är för att öka OCR0-värdet och så DUTY RATIO för PWM-signal, den andra är för att minska OCR0-värdet och så DUTY RATIO för PWM-signal.