- PWM igle u AVR mikrokontroleru Atmega16
- Što je PWM signal?
- Komponente potrebne
- Kružni dijagram
- Programiranje Atmega16 za PWM
Modulacija širine impulsa (PWM) snažna je tehnika kojom se širina impulsa mijenja održavanjem frekvencije konstantnom. Tehnika se danas koristi u mnogim sustavima upravljanja. Primjena PWM-a nije ograničena i koristi se u širokom spektru aplikacija kao što su kontrola brzine motora, mjerenje, upravljanje snagom i komunikacija itd. U PWM tehnici se lako može generirati analogni izlazni signal pomoću digitalnih signala. Ovaj vodič pomoći će vam u razumijevanju PWM-a, njegovih terminologija i kako ga možemo implementirati pomoću mikrokontrolera. U ovom uputstvu demonstrirat ćemo PWM s AVR Atmega16 mikrokontrolerom mijenjajući intenzitet LED-a.
Da biste detaljno razumjeli osnove PWM-a, posjetite naše prethodne vodiče o PWM-u s raznim mikrokontrolerima:
- Vodič za PWM za ARM7-LPC2148: Upravljanje svjetlinom LED-a
- Modulacija širine impulsa (PWM) pomoću MSP430G2: Upravljanje svjetlinom LED-a
- Generiranje PWM-a pomoću PIC mikrokontrolera s MPLAB-om i XC8
- Modulacija širine impulsa (PWM) u STM32F103C8: Kontrola brzine istosmjernog ventilatora
- Generiranje PWM signala na GPIO pinovima PIC mikrokontrolera
- Vodič za PWM za Raspberry Pi
PWM igle u AVR mikrokontroleru Atmega16
Atmega16 ima četiri namjenska PWM pina. To su pinovi PB3 (OC0), PD4 (OC1B), PD5 (OC1A), PD7 (OC2).

Također Atmega16 ima dva 8-bitna timera i jedan 16-bitni timer. Timer0 i Timer2 su 8-bitni timeri, dok je Timer1 16-bitni timer. Da bismo generirali PWM, moramo imati pregled tajmera jer se tajmeri koriste za generiranje PWM-a. Kao što znamo da je frekvencija broj ciklusa u sekundi na kojem tajmer radi. Tako će nam veća frekvencija dati brži mjerač vremena. U generiranju PWM-a, brža PWM frekvencija dat će finiju kontrolu nad izlazom, jer može brže reagirati na nove radne cikluse PWM-a.
U ovom tutorialu za PWM za Atmega16 koristit ćemo Timer2. Možete odabrati bilo koji radni ciklus. Ako ne znate što je radni ciklus u PWM -u, razgovarajmo ukratko.
Što je PWM signal?
Modulacija širine impulsa (PWM) digitalni je signal koji se najčešće koristi u upravljačkim krugovima. Vrijeme tijekom kojeg signal ostaje visok naziva se "on time", a vrijeme tijekom kojeg signal ostaje nizak "vrijeme isključenja". Postoje dva važna parametra za PWM o kojima se govori u nastavku:
Radni ciklus PWM
Postotak vremena u kojem PWM signal ostaje VISOK (na vrijeme) naziva se radnim ciklusom.
Kao u impulsnom signalu od 100 ms, ako je signal VISOK 50 ms i NISAK 50 ms, to znači da je puls bio napola VISOK, a napola NISAK. Tako možemo reći da je radni ciklus 50%. Slično tome, ako je puls u VISOKOM stanju od 25 ms, a od 100 ms u Niskom stanju od 75 ms, tada bi radni ciklus bio 25%. Primijetite da izračunavamo samo trajanje VISOKOG stanja. Za vizualno razumijevanje možete se pozvati na donju sliku. Formula radnog ciklusa je tada,
Radni ciklus (%) = vrijeme uključivanja / (vrijeme uključivanja + vrijeme isključenja)

Dakle, promjenom radnog ciklusa možemo promijeniti širinu PWM-a, što rezultira promjenom svjetline LED-a. Imat ćemo demonstraciju korištenja različitih radnih ciklusa u kontroli svjetline LED-a. Pogledajte demo video na kraju ovog vodiča.
Nakon odabira radnog ciklusa, sljedeći bi korak bio odabir PWM načina. Način PWM određuje kako želite da PWM radi. Postoje uglavnom 3 vrste PWM načina. To su kako slijedi:
- Brzi PWM
- Faza ispravna PWM
- Fazni i frekvencijski ispravni PWM
Brzi PWM koristi se tamo gdje promjena faze nije bitna. Korištenjem brzog PWM-a možemo brzo iznijeti vrijednosti PWM-a. Brzi PWM ne može se koristiti tamo gdje promjena faze utječe na rad poput upravljanja motorom, pa se u takvoj primjeni koriste drugi načini PWM-a. Budući da ćemo kontrolirati svjetlinu LED-a tamo gdje promjena faze neće puno utjecati, pa ćemo koristiti brz PWM način.
Sada ćemo za generiranje PWM-a kontrolirati odbrojavanje unutarnjeg odbrojavanja, a zatim ćemo se vratiti na nulu pri određenom odbrojavanju, tako da će odbrojavanje odbrojavati i vraćati se na nulu uvijek iznova. Ovo postavlja razdoblje. Sada imamo mogućnost upravljanja pulsom, UKLJUČIVANJE pulsa na određenom brojaču u tajmeru dok on raste. Kad se brojač vrati na 0, isključite puls. Puno je fleksibilnosti s tim, jer uvijek možete pristupiti brojaču odbrojavanja i pružiti različite impulse jednim odbrojavanjem. Ovo je sjajno kada želite kontrolirati više LED dioda odjednom. Počnimo sada povezivati jednu LED diodu s Atmega16 za PWM.
Ovdje provjerite sve projekte povezane s PWM-om.
Komponente potrebne
- Atmega16 AVR mikrokontroler IC
- Kristalni oscilator od 16 MHz
- Dva kondenzatora od 100 nF
- Dva kondenzatora od 22pF
- Pritisnite tipku
- Jumper žice
- Breadboard
- USBASP v2.0
- 2 LED (bilo koja boja)
Kružni dijagram

Za PWM koristimo OC2, odnosno Pin21 (PD7). Dakle, spojite jednu LED diodu na PD7 pinu Atmega16.

Programiranje Atmega16 za PWM
Kompletni program dan je u nastavku. Snimite program u Atmega16 pomoću JTAG-a i Atmel studija i pogledajte PWM efekt na LED-u. Njegova će se svjetlina polako povećavati i smanjivati zbog promjenjivog radnog ciklusa PWM-a. Pogledajte video na kraju.
Počnite programirati Atmega16 podešavanjem Registra Timer2. Bitovi registra Timer2 su sljedeći i bitove možemo postaviti ili resetirati u skladu s tim.

Sada ćemo razgovarati o svim bitovima Timer2 kako bismo mogli dobiti željeni PWM koristeći pisani program.
U registru Timer2 uglavnom se nalaze četiri dijela:
FOC2 (Usporedba izlaza snage za Timer2): Bit FOC2 postavlja se kada WGM bitovi određuju način koji nije PWM.
WGM2 (način generiranja valova za timer2): Ovi bitovi kontroliraju slijed brojanja brojača, izvor maksimalne (TOP) vrijednosti brojača i vrstu generiranja valnog oblika.
COM2 (Usporedite izlazni način za timer2): Ovi bitovi kontroliraju ponašanje izlaza. Cjelovit opis bita objašnjen je u nastavku.
TCCR2 - = (1 <
Postavite bitove WGM20 i WGM21 kao VISOKO da biste aktivirali PWM brzi način. WGM stoji za način generiranja valnih oblika. Izborni bitovi su kao u nastavku.
|
WGM00 |
WGM01 |
Rad Timer2 načina |
|
0 |
0 |
Normalni mod |
|
0 |
1 |
CTC (Clear Timer On Compare Match) |
|
1 |
0 |
PWM, faza ispravna |
|
1 |
1 |
Način brzog PWM-a |
Za više detalja o načinu generiranja valnih oblika možete pogledati službenu tablicu podataka Atmega16.
TCCR2 - = (1 <
Također nismo koristili nikakvo prethodno skaliranje pa smo postavili registar izvora sata na '001'.
Bitovi za odabir sata su sljedeći:
|
CS22 |
CS21 |
CS20 |
Opis |
|
0 |
0 |
0 |
Nema izvora sata (tajmer / brojač zaustavljen) |
|
0 |
0 |
1 |
clk T2S / (bez predkalciranja) |
|
0 |
1 |
0 |
Clk T2S / 8 (s uređaja za predskalivanje) |
|
0 |
1 |
1 |
Clk T2S / 32 (s uređaja za predskalivanje) |
|
1 |
0 |
0 |
Clk T2S / 64 (s uređaja za predskalivanje) |
|
1 |
0 |
1 |
Clk T2S / 128 (s uređaja za predskalivanje) |
|
1 |
1 |
0 |
Clk T2S / 256 (s uređaja za predskaliranje) |
|
1 |
1 |
1 |
Clk T2S / 1024 (s uređaja za predskalivanje) |
Također se OC2 briše u usporedbi podudaranjem postavljanjem COM21 bita kao '1' i COM20 kao '0'.
Opcije odabira načina uspoređivanja izlaza (COM) za brzi PWM način dane su u nastavku:
|
COM21 |
COM21 |
Opis |
|
0 |
0 |
Uobičajen rad luke, OC2 odspojen. |
|
0 |
1 |
Rezervirano |
|
1 |
0 |
Očistite OC2 na usporedbi, OC2 postavite na VRH |
|
1 |
1 |
Postavite OC2 na usporedbu, očistite OC2 na vrhu |
Povećajte radni ciklus s 0% na 100% tako da će se svjetlina s vremenom povećavati. Uzmite vrijednost od 0-255 i pošaljite je na OCR2 pin.
for (duty = 0; duty <255; duty ++) // 0 do maksimalnog radnog ciklusa { OCR2 = duty; // polako povećavajte svjetlinu LED-a _delay_ms (10); }
Slično tome smanjite radni ciklus sa 100% na 0% kako biste postupno smanjivali svjetlinu LED-a.
for (duty = 0; duty> 255; duty--) // maks. do 0 radni ciklus { OCR2 = duty; // polako smanjujemo svjetlinu LED-a _delay_ms (10); }
Ovim je završen naš vodič za upotrebu PWM-a u Atmega16 / 32.
