Atmega16 - PWM használatával t

A dokumentum ismerteti indítási módszerek és alkotó PWM (impulzusszélesség-modulációval, vagy PWM oroszul) AVR mikrovezérlő a beépített időzítő / számláló T / C0, T / C1 és T / C2. PWM széles körben alkalmazzák a digitális-analóg átalakítás, a generációs tetszőleges hullámformák, szabályozás.







1. T / C0 8-nyolc-bites, a számláló maga a TCNT0 regiszter. Amikor túlfolyó (átmeneti 0xFF-> 0x00) lehet előállítani megszakítás TIMER0_OVF (Timer / Counter0 túlcsordulás, TOV0 zászló). Ez a megszakítás tiltott (maszkírozott) bit TOIE0 (bit 0 TIMSK nyilvántartás). TOV0 zászló automatikusan törlődik, ha a megszakítás eljárást.

2. TCNT0 számláló 3 külön definiált érték, amely bizonyos események fordulhatnak elő:

ALSÓ == 0x00
MAX == 0xFF
TOP == MAX vagy OCR0

3. TCNT0 feltételezhetjük mind felfelé (növekmény) és lefelé (csökkentjük). Ezt úgy határozzuk meg a kiválasztott üzemmódtól.

4. TCNT0 órajel forrás és frekvencia kiválasztott biteket CS02: 0 (bitek 0..2 TCCR0 nyilvántartás). Akkor is teljesen ki TCNT0 munka (az írás a CS02: 0 mind nullák).

5. Vannak 8 bites regiszter OCR0 - regisztrálja digitális komparátor. Amikor a véletlen székhelye TCNT0 == OCR0 Output összehasonlítása Flag (OCF0) és egy megszakítás lehet előállítani TIMER0_COMP (Timer / Counter0 összehasonlítása egyezés). OCF0 zászló, mint mindig, automatikusan törlődik, ha a megszakítás eljárást. TIMER0_COMP megszakítás tiltott (maszkírozott) bit OCIE0 (1 TIMSK bites regiszter). Ezen túlmenően, ez az esemény lehet generálni hardveres PWM-jel a kimeneti OC0 processzor (pin 4 DIP40 ház, PB3 port). Signal Timer / Counter0 összehasonlítása Match használt PWM generátort.

6. PWM típusú kiválasztott biteket hullámforma generálás Mode - WGM01: 0 (bitek 3 és 6 TCCR0 regiszter -kal). Ők is érinti, ha a jelző Az időzítő / számláló túlcsordulás (TOV0). Ez a zászló generálhat megszakítást TIMER0_OVF. Jelenleg 4 mód:

Szerelési OC0 össze meccset az esetben, ha a szám felfelé, lefelé vissza, ha a pontszám (PWM inverzió).

Mode különbözik fele gyakorisága PWM, de van egy jobb minőségű a jel, amíg határértékek OCR0 (0x00 és 0xFF). Mode kiválóan alkalmas szabályozására a motorokat. Ebben az üzemmódban az első TCNT0 számít fel, eléri 0xFF, majd megkezdi a visszaszámlálást eléri 0x00, elkezd számolni, és a folyamat ismétlődik. Timer / Counter túlcsordulás Flag (TOV0) beállítása minden egyes alkalommal TCNT0 eléri ALSÓ (0x00). Az általános képlet a PWM-frekvenciát:

fOC0PWM = fclk_IO / n * 510, ahol az N a szétválás faktor (prescale faktor 1, 8, 64, 256, vagy 1024).

14. A működés során a belső óra 1 MHz frekvenciájú (alapbeállítás) a maximális kapcsolási frekvencia gyors PWM módban lesz egyenlő
1000000/256 = 3906,25 Hz.

Ez a frekvencia alkalmas lassan változó folyamatokat. Ha emelni az órajel 8 MHz (erre szükség van, hogy éget biztosítékok CKSEL3..0 érték 0100), a kapcsolási frekvencia
8000000/256 = 31250 Hz

Az ilyen gyakorisága nem hallható az emberi fül számára, és fel lehet használni, hogy generálni hangokat.

15. PWM beállítás például gyors PWM mód:

Miután az ilyen beállítása a kimeneti frekvencia a PWM 3906,25 Hz, 50% kitöltési tényezőjű jel.

1. Counter T / C1 jelentősen eltér a T / C0 legalább az a tény, hogy egy 16-bites, és két nyilvántartások és egy digitális komparátor OCR1A OCR1B és 2 hardver kimeneti PWM - OC1A és OC1B. 2, és a vezérlő regiszter és TCCR1A TCCR1B.

2. TCNT1 számláló 3 külön definiált érték, amely bizonyos események fordulhatnak elő:

ALSÓ == 0x0000






MAX == 0xFFFF
TOP == 0x00FF, 0x01FF, 0x03FF vagy OCR1A vagy ICR1

3. 16 bites regiszterek (TCNT1, OCR1A, OCR1B és ICR1) különleges bánásmódot igényel technikákat olvasni és írni a két nyolc-bites rendszert érintő átmeneti 8 bites regiszter (ez közös minden 16 bites regiszterek a timer). Ezzel közbenső regiszter értéke átkerül a felső bájt, fellebbezést a fiatalabb (külön minden egyes 16 bites regiszter) elindít egy 16 bites működés. Nem minden 16 bites regiszterek használt ideiglenes regiszter nagy byte-os és OCR1A például OCR1B.

Itt ugyanaz a példa a megszakítás tilalom:

Ha felvett több 16 bites regiszter ugyanolyan magas byte, nagy byte lehet írni csak egyszer.

4. Mivel a T / C0, szakítsa zászlók (ICF1, OCF1A, OCF1B, TOV1) vannak nyilvántartásban időzítő megszakítás Flag Register (TIFR). Mint T / C0, minden megszakítás elfedheti egy időzítő megszakítás maszk regiszter (TIMSK), maszkolás bit TICIE1. OCIE1A. OCIE1B. TOIE1.

5. Időzítés T / C1 megegyezik, hogy a T / C0. ciklusok regisztrációhoz forrás van kiválasztva Timer / Counter Control Register B (TCCR1B).

Szinte mindent írt korábban a T / C0 igaz T / C2. mivel ezek különböznek csak, hogy a T / C2 részletesebb előosztó az órajel (kicsit másképpen működnek vezérlő biteket előosztó CS22: 0 - Bit 2..3 TCCR2 regiszter), és ha a T / C0 lehetne órajele egy külső jel T0, láb 1, PB0 port, a T / C2 lehet órajele további kvarcoszcillátor, úgynevezett külső 32 kHz Watch Crystal. független a fő órát (nincs XTAL2 lábát következtetéseket. 12. és XTAL1 következtetéseket. 13 és a kikötőből TOSC2 PC7 láb 29 láb és PC6 TOSC1 port 28).

Tegyük fel, hogy azt szeretnénk, hogy létrehoz egy négyszögjel frekvenciája több tíz kilohertzet generálására negatív tápfeszültség műveleti erősítő. A frekvencia nem kritikus, meg kell tartományban 20..200 kHz. Nem kell megszakítás kezelő, a formáció a kanyargó tisztán hardveresen, részvétele nélkül a processzor kell történnie. Itt vannak a lépéseket kell végrehajtani:

1. lépés az időzítő órajel-frekvencia. Meg kell találni az értéket egy kicsit előosztóval órát. Ez bitek CS12, CS11, CS10, TCCR1B azok nyilvántartásba. A választás alapján készült a mikrokontroller órajel-frekvencia és a kívánt frekvencia által generált PWM kimenet. E. Ezek a bitek kell durván válassza az órajel az időzítőt. Itt van egy táblázat értékeinek ezen bitek és előosztóval osztály arányokat.

Timer1 ciklusokban fogja használni a külső jel a combra T1. A számláló fronton jelentkezzen. szintje (átmenetek 0-1).

A mi esetünkben illeszkednek az órajel 2 MHz-es, így a tábla beállításához kicsit kiválaszthatja a harmadik sorban. Meg kell határozni egy kicsit CS11, CS12 és CS10 bitek és be kell állítani.

Megjegyzés: A kiválasztás órajelen történik az asztalnál, figyelembe véve a gyakoriság, amellyel az időzítő túlcsordul. Frekvencia timer overflow kivéve időmérő gyakorisága is függ a kiválasztott felső határértéke a számlákat, és elszámoló mód.

2. lépés, a fiók tartományban. Válassza ki a fiókot tartományban, t. E. milyen mértékben fogja vizsgálni a számlálót. Válasszunk a 32 számláló érték megállapítására száma határérték ICR1 nyilvántartásba. Ebben az esetben, az időzítő számolni 0-31, és ezek a ciklusok meg kell ismételni a túlfolyó 2 MHz-es / 32 = 62,5 kHz. Ha kiválasztja a PWM módban a megfelelő fázis (PWM Phase Correct, erről később), akkor a kimeneti frekvencia OC1A 31,25 kHz, ami kiválóan alkalmas.

Megjegyzés: többet keretein Timer1 beszámolóját [3], az "alul, MAX, TOP: számla határértékeket.".

3. lépés, a telepítés figyelembe küszöböt. Írt a nyilvántartásban OCR1A küszöbértéket, amely a számláló meg fog változni szinten OC1A kimenet. Mert négyszögjelet kell lennie száma 16:

4. lépés az, hogy váltson OC1A kimenet. Viselkedés OC1A PWM kimenet függ PWM módban, és az állam kicsit összehasonlítása Output Mode. Ez COM1A1 bitek és COM1A0 a TCCR1A nyilvántartásba. Az alábbi táblázat mutatja a bitek értékének a Összehasonlítás Output Mode rezsimek módok Phase Correct PWM és fázis és frekvencia helyes PWM.

Megjegyzés (1): bit nevek és CTCn PWMn1: 0 elavult. Ehelyett használja WGMn2 nevek: 0. Azonban, a funkcionalitás és elhelyezése ezen bitek kompatibilis a korábbi verziót az időzítőt.

A mi esetünkben, úgy döntünk, fázis és frekvencia helyes módot (A táblázat soraiban megfelelő üzemmód 8), az ár-érték Bit WGM1n == 1000b. Ehhez a módhoz kell telepíteni TCCR1B WGM13 bites regiszter (bit marad WGM12 eldobjuk) és WGM10 WGM11 bitek nyilvántartásban TCCR1A maradnak lerakásra.

6. lépés, egy kimeneti port kimeneti PWM. OC1A hogy a kimenő jel jelent meg a kimenete a mikrokontroller lábak, akkor be kell állítani port PD5 mint a kimeneti (alapértelmezés szerint úgy működik, mint a bemeneti):

Itt van a teljes eljárást kódot C, ami végrehajtja ezeket a lépéseket:

Megjegyzés: a maszk, amely megjelölve a nyilvántartásban, létrehoz egy balra léptetés állandó bites szám. Mivel a biteket szétszórva különböző nyilvántartások Legyen óvatos megbízás nyilvántartásba maszk működését. Az első feladat kell elvégezni = művelet, ez a művelet törli az összes regiszter bitek, amelyek nincsenek telepítve a maszkot. Későbbi beállítása bitek ebben a nyilvántartásban maszk műveletet kell tenni olvasás-működés, ebben az esetben | = (olvasd el - VAGY művelet - felvétel). Légy óvatos!




Kapcsolódó cikkek