- PWM tapas AVR mikrokontrollerī Atmega16
- Kas ir PWM signāls?
- Nepieciešamās sastāvdaļas
- Ķēdes shēma
- Atmega16 programmēšana PWM
Pulsa platuma modulācija (PWM) ir spēcīgs paņēmiens, kurā impulsa platums tiek mainīts, saglabājot nemainīgu frekvenci. Šo paņēmienu mūsdienās izmanto daudzās vadības sistēmās. PWM pielietojums nav ierobežots, un to izmanto plašā diapazonā, piemēram, motora ātruma kontrolē, mērījumos, jaudas kontrolē un sakaros utt. PWM tehnikā var viegli ģenerēt analogo izejas signālu, izmantojot digitālos signālus. Šī apmācība palīdzēs jums izprast PWM, tā terminoloģiju un to, kā mēs to varam ieviest, izmantojot mikrokontrolleru. Šajā apmācībā mēs demonstrēsim PWM ar AVR Atmega16 mikrokontrolleru, mainot gaismas diodes intensitāti.
Lai detalizēti izprastu PWM pamatus, lūdzu, apmeklējiet mūsu iepriekšējās apmācības par PWM ar dažādiem mikrokontrolleriem:
- ARM7-LPC2148 PWM apmācība: LED spilgtuma kontrolēšana
- Pulsa platuma modulācija (PWM), izmantojot MSP430G2: LED spilgtuma kontrole
- PWM ģenerēšana, izmantojot PIC mikrokontrolleru ar MPLAB un XC8
- Impulsa platuma modulācija (PWM) STM32F103C8: DC ventilatora ātruma kontrolēšana
- PWM signālu ģenerēšana uz PIC mikrokontrollera GPIO tapām
- Aveņu Pi PWM apmācība
PWM tapas AVR mikrokontrollerī Atmega16
Atmega16 ir četras īpašas PWM tapas. Šīs tapas ir PB3 (OC0), PD4 (OC1B), PD5 (OC1A), PD7 (OC2).
Arī Atmega16 ir divi 8 bitu taimeri un viens 16 bitu taimeris. Timer0 un Timer2 ir 8 bitu taimeri, savukārt Timer1 ir 16 bitu taimeri. Lai ģenerētu PWM, mums ir nepieciešams taimeru pārskats, jo PWM ģenerēšanai tiek izmantoti taimeri. Kā mēs zinām, ka frekvence ir ciklu skaits sekundē, ar kuru taimeris darbojas. Tātad augstāka frekvence dos mums ātrāku taimeri. Ģenerējot PWM, ātrāka PWM frekvence ļaus labāk kontrolēt izeju, jo tā var ātrāk reaģēt uz jauniem PWM darba cikliem.
Šajā Atmega16 PWM apmācībā mēs izmantosim Timer2. Jūs varat izvēlēties jebkuru darba ciklu. Ja jūs nezināt, kāds ir darba cikls PWM, tad apspriedīsim īsi.
Kas ir PWM signāls?
Pulsa platuma modulācija (PWM) ir ciparu signāls, ko visbiežāk izmanto vadības ķēdēs. Laiku, kurā signāls paliek augsts, sauc par “ieslēgšanas laiku” un laiku, kurā signāls paliek zems, - par izslēgšanas laiku. PWM ir divi svarīgi parametri, kas apspriesti turpmāk:
PWM darba cikls
Laika procentuālo daļu, kurā PWM signāls paliek AUGSTS (laikā), sauc par darba ciklu.
Tāpat kā 100 ms pulsa signālā, ja signāls ir HIGH 50 ms un LOW 50 ms, tas nozīmē, ka impulss bija puse laika HIGH un puse laika LOW. Tātad mēs varam teikt, ka darba cikls ir 50%. Līdzīgi, ja impulss ir 25 ms HIGH stāvoklī un 75 ms LOW stāvoklī no 100 ms, tad darba cikls būtu 25%. Ievērojiet, ka mēs aprēķinām tikai HIGH stāvokļa ilgumu. Lai vizuāli saprastu, varat izmantot atsauci uz zemāk redzamo attēlu. Tad darba cikla formula ir
Darba cikls (%) = Ieslēgšanas laiks / (Ieslēgšanas laiks + Izslēgšanas laiks)
Tātad, mainot darba ciklu, mēs varam mainīt PWM platumu, tādējādi mainot LED spilgtumu. Mums būs demonstrācija par dažādu darba ciklu izmantošanu, lai kontrolētu LED spilgtumu. Šīs apmācības beigās pārbaudiet demonstrācijas videoklipu.
Pēc darba cikla izvēles nākamais solis būtu PWM režīma izvēle. PWM režīms norāda, kā jūs vēlaties, lai PWM darbotos. Galvenokārt ir 3 veidu PWM režīmi. Tie ir šādi:
- Ātra PWM
- Pareiza fāzes PWM
- Pareiza fāzes un frekvences PWM
Ātrais PWM tiek izmantots, ja fāzes maiņai nav nozīmes. Izmantojot ātro PWM, mēs varam ātri izvadīt PWM vērtības. Ātro PWM nevar izmantot, ja fāzes maiņa ietekmē darbību, piemēram, motora vadību, tāpēc šādā lietojumā tiek izmantoti citi PWM režīmi. Tā kā mēs kontrolēsim LED spilgtumu, kur fāzes maiņa daudz neietekmēs, mēs izmantosim režīmu Fast PWM.
Tagad, lai ģenerētu PWM, mēs kontrolēsim, lai iekšējais taimeris saskaitītos un pēc tam atkal tiktu iestatīts uz nulli noteiktā skaitījumā, tāpēc taimeris skaitīs un pēc tam atkal un atkal iestatīs nulli. Tas nosaka periodu. Tagad mums ir iespēja kontrolēt impulsu, ieslēdzot impulsu ar noteiktu taimera skaitīšanu, kamēr tas iet uz augšu. Kad skaitītājs atgriežas uz 0, izslēdziet impulsu. Ar to ir daudz elastības, jo jūs vienmēr varat piekļūt taimera skaitam un nodrošināt dažādus impulsus ar vienu taimeri. Tas ir lieliski, ja vēlaties vienlaikus kontrolēt vairākas gaismas diodes. Tagad sāksim sasaistīt vienu LED ar Atmega16 PWM.
Pārbaudiet visus ar PWM saistītos projektus šeit.
Nepieciešamās sastāvdaļas
- Atmega16 AVR mikrokontrolleru IC
- 16Mhz kristāla oscilators
- Divi 100nF kondensatori
- Divi 22pF kondensatori
- Uzspied pogu
- Džemperu vadi
- Maizes dēlis
- USBASP v2.0
- 2 Led (jebkura krāsa)
Ķēdes shēma
PWM mēs izmantojam OC2, ti, Pin21 (PD7). Tāpēc pievienojiet vienu LED pie Atmega16 PD7 tapas.
Atmega16 programmēšana PWM
Pilna programma ir dota zemāk. Ierakstiet programmu Atmega16, izmantojot JTAG un Atmel studio, un redziet PWM efektu uz LED. Tā spilgtums lēnām palielināsies un samazināsies, jo mainās PWM darba cikls. Pārbaudiet beigās sniegto video.
Sāciet programmēt Atmega16 ar Timer2 reģistra iestatīšanu. Timer2 reģistra biti ir šādi, un mēs varam attiecīgi iestatīt vai atiestatīt bitus.
Tagad mēs apspriedīsim visus Timer2 bitus, lai mēs varētu iegūt vēlamo PWM, izmantojot rakstisku programmu.
Timer2 reģistrā galvenokārt ir četras daļas:
FOC2 (Force Output Compare Timer2): FOC2 bits tiek iestatīts, kad WGM biti norāda režīmu, kas nav PWM.
WGM2 (viļņu ģenerēšanas režīms taimerim 2): šie biti kontrolē skaitītāja skaitīšanas secību, maksimālās (TOP) skaitītāja vērtības avotu un to, kāda veida viļņu ģenerēšanu izmantot.
COM2 (Salīdzināt izejas režīmu taimerim2): šie biti kontrolē izejas darbību. Pilns bitu apraksts ir paskaidrots zemāk.
TCCR2 - = (1 <
Iestatiet WGM20 un WGM21 bitus kā HIGH, lai aktivizētu PWM Fast Mode. WGM nozīmē viļņu formas ģenerēšanas režīmu. Atlases biti ir šādi.
WGM00 |
WGM01 |
Taimera2 režīma darbība |
0 |
0 |
Normāls režīms |
0 |
1 |
CTC (notīrīt taimeri, salīdzinot spēli) |
1 |
0 |
PWM, fāze pareiza |
1 |
1 |
Ātrs PWM režīms |
Lai iegūtu sīkāku informāciju par viļņu formas ģenerēšanas režīmu, varat uzzināt oficiālo Atmega16 datu lapu.
TCCR2 - = (1 <
Arī mēs neesam izmantojuši iepriekšēju mērogošanu, tāpēc pulksteņa avota reģistru esam iestatījuši kā “001”.
Pulksteņa izvēles biti ir šādi:
CS22 |
CS21 |
CS20 |
Apraksts |
0 |
0 |
0 |
Nav pulksteņa avota (taimeris / skaitītājs ir apturēts) |
0 |
0 |
1 |
clk T2S / (bez priekšskalošanas) |
0 |
1 |
0 |
Clk T2S / 8 (no prescaler) |
0 |
1 |
1 |
Clk T2S / 32 (no prescaler) |
1 |
0 |
0 |
Clk T2S / 64 (no prescaler) |
1 |
0 |
1 |
Clk T2S / 128 (no prescaler) |
1 |
1 |
0 |
Clk T2S / 256 (no prescaler) |
1 |
1 |
1 |
Clk T2S / 1024 (no prescaler) |
Arī OC2 tiek notīrīts, salīdzinot spēli, iestatot COM21 bitu kā "1" un COM20 kā "0".
Ātrā PWM režīma izvēles iespējas Salīdzināt izejas režīmu (COM) ir norādītas zemāk:
COM21 |
COM21 |
Apraksts |
0 |
0 |
Normāla porta darbība, atvienots OC2. |
0 |
1 |
Rezervēts |
1 |
0 |
Notīriet OC2 salīdzinājumā ar spēli, iestatiet OC2 augšpusē |
1 |
1 |
Iestatiet OC2 salīdzināšanas mačā, notīriet OC2 augšpusē |
Palieliniet darba ciklu no 0% līdz 100%, tāpēc laika gaitā spilgtums palielināsies. Uzņemiet vērtību no 0 līdz 255 un nosūtiet to uz OCR2 tapu.
par (maksājums = 0; maksājums <255; maksājums ++) // 0 līdz maksimālais darba cikls { OCR2 = maksājums; // lēnām palieliniet LED spilgtumu _delay_ms (10); }
Līdzīgi samaziniet darba ciklu no 100% līdz 0%, lai pakāpeniski samazinātu LED spilgtumu.
par (maksājums = 0; maksājums> 255; maksājums -) // maks. līdz 0 darba cikls { OCR2 = darba laiks; // lēnām samaziniet LED spilgtumu _delay_ms (10); }
Ar to tiek pabeigta mūsu apmācība par PWM izmantošanu vietnē Atmega16 / 32.