- PWM-nastat AVR-mikrokontrollerissa Atmega16
- Mikä on PWM-signaali?
- Tarvittavat komponentit
- Piirikaavio
- Atmega16: n ohjelmointi PWM: lle
PWM (Pulse Width Modulation) on tehokas tekniikka, jossa pulssin leveyttä muutetaan pitämällä taajuus vakiona. Tekniikkaa käytetään nykyään monissa ohjausjärjestelmissä. PWM: n käyttöä ei ole rajoitettu, ja sitä käytetään monissa sovelluksissa, kuten moottorin nopeuden säätö, mittaus, tehonsäätö ja tiedonsiirto jne. PWM-tekniikassa voidaan helposti tuottaa analoginen lähtösignaali digitaalisilla signaaleilla. Tämä opetusohjelma auttaa sinua ymmärtämään PWM: n, sen terminologiat ja kuinka voimme toteuttaa sen mikro-ohjaimen avulla. Tässä opetusohjelmassa esittelemme PWM: ää AVR Atmega16 -mikrokontrollerilla vaihtelemalla LEDin voimakkuutta.
Jos haluat ymmärtää PWM: n perusteet yksityiskohtaisesti, siirry edellisiin PWM-oppaisiimme useilla mikrokontrollereilla:
- ARM7-LPC2148 PWM -opetusohjelma: LED-valon kirkkauden säätö
- Pulssinleveyden modulointi (PWM) MSP430G2: lla: LED-valon kirkkauden säätö
- PWM: n tuottaminen PIC-mikrokontrollerilla MPLAB: n ja XC8: n kanssa
- Pulssileveyden modulointi (PWM) STM32F103C8: DC-tuulettimen nopeuden säätö
- PWM-signaalien tuottaminen PIC-mikrokontrollerin GPIO-nastoille
- Vadelma Pi PWM -opastus
PWM-nastat AVR-mikrokontrollerissa Atmega16
Atmega16: lla on neljä erillistä PWM-nastaa. Nämä tapit ovat PB3 (OC0), PD4 (OC1B), PD5 (OC1A), PD7 (OC2).
Myös Atmega16: lla on kaksi 8-bittistä ajastinta ja yksi 16-bittinen ajastin. Ajastin0 ja Ajastin2 ovat 8-bittisiä ajastimia, kun taas Ajastin1 on 16-bittinen ajastin. PWM: n luomiseksi meillä on oltava yleiskuva ajastimista, koska ajastimia käytetään PWM: n luomiseen. Kuten tiedämme, että taajuus on jaksojen määrä sekunnissa, jolla ajastin toimii. Joten korkeampi taajuus antaa meille nopeamman ajastimen. Luotettaessa PWM: ää nopeampi PWM-taajuus antaa tarkemman hallinnan lähdölle, koska se voi reagoida nopeammin uusiin PWM-työjaksoihin.
Tässä Atmega16 PWM -oppaassa käytämme Timer2: ta. Voit valita minkä tahansa käyttöjakson. Jos et tiedä mikä on työjakso PWM: ssä, keskustellaan sitten lyhyesti.
Mikä on PWM-signaali?
Pulssileveyden modulaatio (PWM) on digitaalinen signaali, jota käytetään yleisimmin ohjauspiireissä. Aikaa, jonka aikana signaali pysyy korkealla, kutsutaan “päälläoloaikaksi” ja aikaa, jonka aikana signaali pysyy matalana, ”sammutusajaksi”. PWM: llä on kaksi tärkeää parametria, kuten alla käsitellään:
PWM: n toimintajakso
Prosenttiaikaa, jonka aikana PWM-signaali pysyy KORKEAna (ajallaan), kutsutaan työjaksoksi.
Kuten 100 ms pulssisignaalissa, jos signaali on HIGH 50 ms ja LOW 50 ms, se tarkoittaa, että pulssi oli puoli kertaa HIGH ja puoli aika LOW. Joten voimme sanoa, että käyttöjakso on 50%. Vastaavasti, jos pulssi on 25 ms HIGH-tilassa ja 75 ms LOW-tilassa 100 ms: sta, niin työjakso olisi 25%. Huomaa, että laskemme vain HIGH-tilan keston. Voit käyttää alla olevaa kuvaa visuaalisen ymmärtämisen takaamiseksi. Tällöin kaavan käyttöjakso on
Käyttösykli (%) = Päällä / (Päällä + Pois)
Joten muuttamalla käyttöjaksoa voimme muuttaa PWM: n leveyttä, mikä johtaa LED-kirkkauden muutokseen. Meillä on demo erilaisten käyttöjaksojen käytöstä LED-valon kirkkauden säätämisessä. Tarkista esittelyvideo tämän opetusohjelman lopussa.
Käyttösyklin valitsemisen jälkeen seuraava askel olisi valita PWM-tila. PWM-tila määrittää, miten haluat PWM: n toimivan. PWM-moodeja on pääasiassa 3 tyyppiä. Nämä ovat seuraavat:
- Nopea PWM
- Vaihe Oikea PWM
- Vaihe ja taajuus Oikea PWM
Nopeaa PWM: ää käytetään siellä, missä vaihemuutoksella ei ole merkitystä. Nopean PWM: n avulla voimme tuottaa PWM-arvot nopeasti. Nopeaa PWM: ää ei voida käyttää, jos vaihemuutos vaikuttaa toimintaan, kuten moottorin ohjaukseen, joten tällaisessa sovelluksessa käytetään muita PWM-tiloja. Koska ohjaamme LED-valon kirkkautta, jossa vaihemuutos ei vaikuta paljoakaan, käytämme siis nopeaa PWM-tilaa.
Nyt PWM: n luomiseksi ohjaamme sisäistä ajastinta laskemaan ja asettamaan sitten takaisin nollaan tietyllä laskennalla, joten ajastin laskee ja asetetaan sitten takaisin nollaan uudestaan ja uudestaan. Tämä asettaa ajanjakson. Meillä on nyt mahdollisuus ohjata pulssia, kytkeä pulssi PÄÄLLE tietyllä ajastimen ajastimella, kun se nousee. Kun laskuri palaa 0: een, sammuta pulssi. Tässä on paljon joustavuutta, koska voit aina käyttää ajastimen määrää ja tarjota erilaisia pulsseja yhdellä ajastimella. Tämä on hienoa, kun haluat ohjata useita LED-valoja kerralla. Aloitetaan nyt yhden LEDin liittäminen PWM: n Atmega16: een.
Tarkista kaikki PWM: ään liittyvät projektit täältä.
Tarvittavat komponentit
- Atmega16 AVR-mikrokontrolleri IC
- 16MHz kristalloskillaattori
- Kaksi 100nF-kondensaattoria
- Kaksi 22pF-kondensaattoria
- Paina nappia
- Neulalangat
- Leipälauta
- USBASP v2.0
- 2 Led (kaikki värit)
Piirikaavio
Käytämme OC2: ta PWM: lle eli Pin21: lle (PD7). Liitä siis yksi LED Atmega16: n PD7-napaan.
Atmega16: n ohjelmointi PWM: lle
Täydellinen ohjelma on annettu alla. Polta ohjelma Atmega16: ssa JTAG: n ja Atmel-studion avulla ja näe PWM-vaikutus LEDillä. Sen kirkkaus kasvaa ja laskee hitaasti PWM: n vaihtelevan käyttöjakson vuoksi. Tarkista lopussa annettu video.
Aloita Atmega16: n ohjelmointi asettamalla Timer2 Register. Ajastin2-rekisteribitit ovat seuraavat ja voimme asettaa tai nollata bitit vastaavasti.
Nyt keskustelemme kaikista Timer2-biteistä, jotta voimme saada halutun PWM: n käyttämällä kirjoitettua ohjelmaa.
Timer2-rekisterissä on pääasiassa neljä osaa:
FOC2 (Force Output Compare for Timer2): FOC2-bitti asetetaan, kun WGM-bitit määrittelevät muun kuin PWM-tilan.
WGM2 (aaltogeneraattoritila ajastimelle 2): Nämä bitit ohjaavat laskurin laskusekvenssiä, maksimilaskurin (TOP) lähdettä ja sitä, minkä tyyppistä aaltomuodon muodostusta käytetään.
COM2 (Vertaa lähtöajaa ajastimelle 2): Nämä bitit ohjaavat lähtökäyttäytymistä. Koko bittikuvaus selitetään alla.
TCCR2 - = (1 <
Määritä WGM20- ja WGM21-bitteiksi HIGH, jotta PWM Fast Mode aktivoidaan. WGM tarkoittaa aaltomuodon muodostustilaa. Valintabitit ovat alla.
WGM00 |
WGM01 |
Ajastin2-tilan käyttö |
0 |
0 |
Normaalitila |
0 |
1 |
CTC (Tyhjennä ajastin vertaamalla ottelua) |
1 |
0 |
PWM, vaihe oikea |
1 |
1 |
Nopea PWM-tila |
Lisätietoja aaltomuodon muodostustilasta on Atmega16: n virallisessa lomakkeessa.
TCCR2 - = (1 <
Emme myöskään ole käyttäneet mitään esivahvistusta, joten olemme asettaneet Kellon lähderekisteriksi 001.
Kellon valintabitit ovat seuraavat:
CS22 |
CS21 |
CS20 |
Kuvaus |
0 |
0 |
0 |
Ei kellolähdettä (ajastin / laskuri pysäytetty) |
0 |
0 |
1 |
clk T2S / (ei esierotusta) |
0 |
1 |
0 |
Clk T2S / 8 (Prescalerista) |
0 |
1 |
1 |
Clk T2S / 32 (Prescalerista) |
1 |
0 |
0 |
Clk T2S / 64 (Prescalerista) |
1 |
0 |
1 |
Clk T2S / 128 (esihiomakoneelta) |
1 |
1 |
0 |
Clk T2S / 256 (Prescalerista) |
1 |
1 |
1 |
Clk T2S / 1024 (Prescalerista) |
Myös OC2 tyhjennetään vertailtavasta ottelusta asettamalla COM21-bitti '1' ja COM20 '0'.
Vertaa lähtötilaa (COM) -vaihtoehdot nopealle PWM-tilalle on annettu alla:
COM21 |
COM21 |
Kuvaus |
0 |
0 |
Normaali porttitoiminto, OC2 irrotettu. |
0 |
1 |
Varattu |
1 |
0 |
Tyhjennä OC2 vertailussa, aseta OC2 huipulle |
1 |
1 |
Aseta OC2 vertailtavaan otteluun, poista OC2 yläosasta |
Lisää käyttöjaksoa 0 prosentista 100 prosenttiin, jotta kirkkaus kasvaa ajan myötä. Ota arvo välillä 0-255 ja lähetä se OCR2-nastalle.
for ( työ = 0; työ <255; työ ++) // 0 - maks. käyttöjakso { OCR2 = työ; // lisää LED-kirkkautta hitaasti _viive_ms (10); }
Vähennä vastaavasti käyttöjaksoa 100%: sta 0%: iin vähitellen vähentämään LED: n kirkkautta.
for (työ = 0; työ> 255; työ -) // maks. 0 käyttöjakso { OCR2 = työ; // pienennä hitaasti LED-kirkkautta _viive_ms (10); }
Tämä viimeistelee opetusohjelman PWM: n käytöstä Atmega16 / 32: ssa.