Šiame projekte mes naudosime vieną iš „ATmega32A“ funkcijų 1 vato šviesos diodų ryškumui reguliuoti. LED greičio reguliavimo metodas yra PWM (pulso pločio moduliacija). Ši AVR mikrovaldiklio PWM mokymo programa išsamiai paaiškina PWM koncepciją ir PWM generavimą (taip pat galite patikrinti šią paprastą PWM generatoriaus grandinę). Apsvarstykite paprastą grandinę, kaip parodyta paveiksle.
Dabar, jei aukščiau pateiktame paveikslėlyje esantis jungiklis yra uždarytas tam tikrą laiką, lemputė per tą laiką nuolat įsijungs. Jei jungiklis bus uždarytas 8ms ir atidarytas 2ms per 10ms ciklą, lemputė bus įjungta tik po 8ms laiko. Dabar vidutinis terminalas per 10 ms = įjungimo laikas / (įjungimo laikas + išjungimo laikas), tai vadinama darbo ciklu ir yra 80% (8 / (8 + 2)), taigi vidurkis išėjimo įtampa bus 80% akumuliatoriaus įtampos.
Antruoju atveju jungiklis uždaromas 5 ms ir atidaromas 5 ms per 10 ms, taigi vidutinė gnybto įtampa išėjime bus 50% akumuliatoriaus įtampos. Tarkime, jei akumuliatoriaus įtampa yra 5 V, o darbo ciklas yra 50%, taigi vidutinė gnybto įtampa bus 2,5 V.
Trečiuoju atveju darbo ciklas yra 20%, o vidutinė gnybto įtampa yra 20% akumuliatoriaus įtampos.
ATMEGA32A turime keturis PWM kanalus, būtent OC0, OC1A, OC1B ir OC2. Čia mes ketiname naudoti OC0 PWM kanalą į skirtis su LED šviesumo.
Būtini komponentai
Techninė įranga:
Mikrovaldiklis „ATmega32“
Maitinimo šaltinis (5v)
AVR-ISP programuotojas
100uF kondensatorius, 1 vatų šviesos diodas
TIP127 tranzistorius
Mygtukai (2 vnt.)
100nF (104) kondensatorius (2 vnt.), 100Ω ir 1kΩ rezistoriai (2 vnt.).
Programinė įranga:
„Atmel“ studija 6.1
„Progisp“ arba „flash magic“
Grandinės schema ir darbo paaiškinimas
Aukščiau pateiktame paveikslėlyje parodyta LED reguliatoriaus su AVR mikrovaldikliu schema (taip pat galite patikrinti šią paprastą LED reguliatoriaus grandinę).
Keturiuose PWM kanaluose „ATmega“ paskyrėme keturis kaiščius. PWM išvestį galime priimti tik šiuose kaiščiuose. Kadangi mes naudojame PWM0, mes turėtume paimti PWM signalą ties OC0 kaiščiu (PORTB 3 -asis PIN kodas). Kaip parodyta paveikslėlyje, mes jungiame tranzistoriaus pagrindą su OC0 kaiščiu, kad galėtume valdyti šviesos diodą. Kitas dalykas yra per keturis PWM kanalus, du yra 8 bitų PWM kanalai. Čia ketiname naudoti 8 bitų PWM kanalą.
Kondensatorius yra prijungtas prie kiekvieno mygtuko, kad nebūtų šokinėjama. Kai tik paspausite mygtuką, prie kaiščio atsiras triukšmas. Nors šis triukšmas stabilizuojasi milisekundėmis. Valdikliui aštrios smailės prieš stabilizavimą veikia kaip sukėlėjai. Šį efektą galima pašalinti programine arba aparatine įranga, kad programa būtų paprasta. Mes naudojame aparatūros metodą, pridedant išmontuojantį kondensatorių.
Kondensatoriai panaikina mygtukų atšokimo efektą.
ATMEGA yra keli būdai generuoti PWM:
1. Fazinis teisingas PWM
2. Greitas PWM
Čia mes laikysimės visko paprasto, todėl PWM signalui generuoti naudosime FAST PWM metodą.
Pirmiausia reikia pasirinkti PWM dažnį. Paprastai tai priklauso nuo taikymo, jei šviesos diodui tinka bet kuris didesnis nei 50Hz dažnis. Dėl šios priežasties mes pasirenkame skaitiklį 1MHZ. Taigi mes nesirenkame jokio išankstinio skalės. Išankstinis skalė yra skaičius, kuris taip parenkamas norint gauti mažesnį skaitiklį. Pvz., Jei osciliatoriaus laikrodis yra 8Mhz, galime pasirinkti išankstinį skalę „8“, kad gautume 1MHz laikrodį skaitikliui. Išankstinis skalė parenkama pagal dažnį. Jei norime daugiau laiko periodo impulsų, turime pasirinkti didesnį preskalarą.
Norėdami iš „ATMEGA“ išgauti FAST PWM 50Hz laikrodį, „ TCCR0 “ registre turime įgalinti atitinkamus bitus. Tai yra vienintelis registras, kurį turime varginti, norėdami gauti 8 bitų FAST PWM.
Čia
1. CS00, CS01, CS02 (GELTONA) - pasirinkite išankstinį skalę skaitiklio laikrodžiui pasirinkti. Tinkamo preskalaro lentelė parodyta žemiau esančioje lentelėje. Taigi, norint iš anksto kalkinti vieną (osciliatoriaus laikrodis = skaitiklio laikrodis).
taigi CS00 = 1, kiti du bitai yra lygūs nuliui.
2. WGM01 ir WGM00 yra pakeistos, kad būtų galima pasirinkti bangos formos generavimo režimus, remiantis žemiau esančia lentele, norint greitai PWM. Mes turime WGM00 = 1 ir WGM01 = 1;
3. Dabar mes žinome, kad PWM yra signalas, turintis skirtingą darbo santykį arba skirtingą įjungimo išjungimo laiką. Iki šiol mes pasirinkome PWM dažnį ir tipą. Pagrindinė šio projekto tema yra šiame skyriuje. Norėdami gauti skirtingą darbo santykį, mes pasirinksime vertę nuo 0 iki 255 (2 ^ 8 dėl 8 bitų). Tarkime, kad mes pasirenkame 180 reikšmę, nes skaitiklis pradeda skaičiuoti nuo 0 ir pasiekia 180 vertę, gali būti suaktyvintas išvesties atsakas. Šis aktyviklis gali būti atvirkštinis arba ne. Tai yra rezultatas, kurį galima pasakyti, kad jis turi būti ištrauktas pasiekus skaičių, arba gali būti pasakyta, kad jis turi būti sumažintas pasiekus skaičių.
Šį traukimo aukštyn arba žemyn variantą pasirenka CM00 ir CM01 bitai.
Kaip parodyta lentelėje, norint palyginti aukštą išvestį, produkcija išliks aukšta iki didžiausios vertės (kaip parodyta paveiksle apačioje). Tam turime pasirinkti invertuojantį režimą, taigi COM00 = 1; COM01 = 1.
Kaip parodyta žemiau esančiame paveikslėlyje, OCR0 (produkcijos palyginimo registras 0) yra baitas, kuriame saugoma vartotojo pasirinkta vertė. Taigi, jei pakeisime OCR0 = 180, valdiklis suaktyvina pokytį (aukštą), kai skaitiklis pasiekia 180 nuo 0.
Dabar, norėdami keisti šviesos diodų ryškumą, turime pakeisti PWM signalo PAREIGOS RATIO. Norėdami pakeisti darbo santykį, turime pakeisti OCR0 vertę. Kai mes pakeisime šią OCR0 vertę, skaitiklis užtrunka skirtingai, kad pasiektų OCR0. Taigi valdiklis skirtingu metu išleidžia aukštą išvestį.
Taigi skirtingo darbo ciklo PWM atveju turime pakeisti OCR0 vertę.
Grandinėje turime du mygtukus. Vienas mygtukas skirtas padidinti OCR0 vertę, taigi PWM signalo DUTY RATIO, kitas - sumažinti OCR0 vertę, taigi ir PWM signalo DUTY RATIO.