Tässä projektissa aiomme käyttää yhtä ATmega32A: n ominaisuuksista säätääksesi 1 watin LED: n kirkkautta. Menetelmä, jota käytetään LED-nopeuden säätämiseen, on PWM (Pulse Width Modulation). Tämä AVR-mikrokontrollerin PWM-opetusohjelma kuvaa PWM-konseptin ja PWM: n luomisen yksityiskohtaisesti (Voit myös tarkistaa tämän yksinkertaisen PWM-generaattoripiirin). Tarkastellaan yksinkertaista piiriä kuvan osoittamalla tavalla.
Jos yllä olevan kuvan kytkin on suljettu jatkuvasti tietyn ajanjakson ajan, polttimo syttyy jatkuvasti tuona aikana. Jos kytkin on suljettu 8 ms: n ajan ja avattu 2 ms: ksi 10 ms: n jakson aikana, polttimo on päällä vain 8 ms: n kuluttua. Nyt keskimääräinen pääte yli 10 ms: n ajan = Käynnistysaika / (Käynnistysaika + Sammutusaika), tätä kutsutaan työjaksoksi ja se on 80% (8 / (8 + 2)), joten keskiarvo lähtöjännite on 80% akun jännitteestä.
Toisessa tapauksessa kytkin on suljettu 5 ms: n ajan ja 5 ms ajan 10 ms: n jakson ajan, joten keskimääräinen lähtöjännite lähdössä on 50% akun jännitteestä. Sano, jos akun jännite on 5 V ja käyttöjakso on 50%, joten keskimääräinen napajännite on 2,5 V.
Kolmannessa tapauksessa käyttöjakso on 20% ja keskimääräinen napajännite on 20% akun jännitteestä.
ATMEGA32A: ssa meillä on neljä PWM-kanavaa, nimittäin OC0, OC1A, OC1B ja OC2. Tässä aiomme käyttää OC0 PWM kanava on vaihdella kirkkautta LED.
Tarvittavat komponentit
Laitteisto:
ATmega32-mikrokontrolleri
Virtalähde (5v)
AVR-ISP-ohjelmoija
100uF kondensaattori, 1 watin LED
TIP127-transistori
Napit (2 kpl)
100nF (104) kondensaattori (2 kpl), 100Ω- ja 1kΩ-vastukset (2 kpl).
Ohjelmisto:
Atmel-studio 6.1
Progisp tai salamaagia
Piirikaavio ja selitys työstä
Yllä olevassa kuvassa on LED-himmentimen kytkentäkaavio AVR-mikrokontrollerilla (Voit myös tarkistaa tämän yksinkertaisen LED-himmentimen piirin).
ATmegassa neljälle PWM-kanavalle olemme määrittäneet neljä nastaa. Voimme ottaa PWM-lähdön vain näille nastoille. Koska käytämme PWM0 meidän pitäisi ottaa PWM-signaalin OC0 tappi (PORTB 3 rd PIN). Kuten kuvassa on esitetty, yhdistämme transistorin pohjan OC0-nastaan virran LED: n ajamiseksi. Tässä toinen asia on yli neljä PWM-kanavaa, kaksi on 8-bittisiä PWM-kanavia. Aiomme käyttää täällä 8-bittistä PWM-kanavaa.
Kuhunkin painikkeeseen on kytketty kondensaattori, jotta vältetään pomppiminen. Aina kun painiketta painetaan, tapissa on kohinaa. Vaikka tämä melu vakiintuu millisekunneissa. Ohjaimelle terävät huiput ennen vakauttamista toimivat laukaisijoina. Tämä vaikutus voidaan poistaa joko ohjelmistolla tai laitteistolla, jotta ohjelma olisi yksinkertainen. Käytämme laitteistomenetelmää lisäämällä poistokondensaattori.
Kondensaattorit mitätöivät painikkeiden pomppimisen vaikutuksen.
ATMEGA: ssa on pari tapaa luoda PWM, ne ovat:
1. Vaihe oikea PWM
2. Nopea PWM
Täällä pidämme kaiken yksinkertaisena, joten aiomme käyttää FAST PWM -menetelmää PWM-signaalin luomiseen.
Ensin valitaan PWM-taajuus, Tämä riippuu sovelluksesta yleensä, LEDille mikä tahansa yli 50 Hz: n taajuus. Tästä syystä valitsemme laskurin 1MHZ. Joten emme valitse mitään esiasteikkoa. Esipalkka on luku, joka on valittu niin, että saadaan pienempi laskuri. Esimerkiksi, jos oskillaattorin kello on 8 MHz, voimme valita esiasteen '8' saadaksemme 1 MHz: n kellon laskurille. Esiasteikko valitaan taajuuden perusteella. Jos haluamme enemmän ajanjaksopulsseja, meidän on valittava korkeampi preskalaari.
Nyt saadaksesi 50 Hz: n kellon NOPEA PWM pois ATMEGA: sta, meidän on sallittava asianmukaiset bitit “ TCCR0 ” -rekisterissä. Tämä on ainoa rekisteri, jota meidän täytyy vaivata saadaksemme 8-bittisen FAST PWM: n.
Tässä, 1. CS00, CS01, CS02 (KELTAINEN) - valitse esikalaari laskurin valitsemiseksi. Taulukko sopivasta esikcalarista on esitetty alla olevassa taulukossa. Joten esilajittamiseen yksi (oskillaattorin kello = laskuri).
joten CS00 = 1, muut kaksi bittiä ovat nolla.
2. WGM01 ja WGM00 muutetaan aaltomuotojen muodostustilojen valitsemiseksi alla olevan taulukon perusteella nopeaa PWM: ää varten. Meillä on WGM00 = 1 ja WGM01 = 1;
3. Nyt tiedämme, että PWM on signaali, jolla on erilainen käyttösuhde tai erilaiset käynnistyskytkennät. Tähän asti olemme valinneet PWM: n taajuuden ja tyypin. Tämän projektin pääteema on tässä osiossa. Eri käyttöasteiden saamiseksi aiomme valita arvon välillä 0 ja 255 (2 ^ 8 8 bitin takia). Oletetaan, että valitsemme arvon 180, koska laskuri alkaa laskea 0: sta ja saavuttaa arvon 180, lähtövaste voidaan laukaista. Tämä liipaisin voi olla käänteinen tai ei käänteinen. Toisin sanoen tuotoksen voidaan kertoa vetävän ylöspäin, kun laskenta on saavutettu, tai sen voidaan kertoa vetävän alaspäin, kun laskenta saavutetaan.
Tämä ylös- tai alaspäin vedon valinta valitaan CM00- ja CM01-biteillä.
Kuten taulukossa on esitetty, tuotos nousee korkealle vertailussa ja lähtö pysyy korkealla maksimiarvoon asti (kuten kuvassa alhaalla). Meidän on valittava käänteinen tila tätä varten, joten COM00 = 1; COM01 = 1.
Kuten alla olevassa kuvassa näkyy, OCR0 (Output Compare Register 0) on tavu, joka tallentaa käyttäjän valitseman arvon. Joten jos muutamme OCR0 = 180, ohjain laukaisee muutoksen (korkea), kun laskuri saavuttaa 180 0: sta.
Nyt vaihtelemalla LEDien kirkkauden meidän täytyy muuttaa pulssisuhdetta PWM-signaalin. Toimintasuhteen muuttamiseksi meidän on muutettava OCR0-arvoa. Kun muutamme tätä OCR0-arvoa, laskuri vie eri ajan OCR0: n saavuttamiseksi. Joten ohjain vetää lähdön korkeaksi eri aikoina.
Joten eri käyttöjaksojen PWM: n osalta meidän on muutettava OCR0-arvoa.
Piirissä meillä on kaksi painiketta. Yksi painike on OCR0-arvon ja siten PWM-signaalin DUTY RATIO kasvattamiseen, toinen OCR0-arvon ja PWM-signaalin DUTY RATIO pienentämiseen.