Operácie

CADRS Cvičenie 10: Rozdiel medzi revíziami

Z SensorWiki

(Časovač T1)
 
(15 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
 
[[Obrázok:MexleBanner.png|center]]
 
[[Obrázok:MexleBanner.png|center]]
  
== 16-bitové počítadlo a časovač T1 s prerušením ==
+
== Generovanie PWM pomocou 16-bitového počítadla a časovača T1 ==
  
 
Literatúra:
 
Literatúra:
Riadok 8: Riadok 8:
 
* [http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=55347 The traps when using interrupts]
 
* [http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=55347 The traps when using interrupts]
 
* [http://www.kar.elf.stuba.sk/predmety/mmp/pdf/AVR-C-Timers.pdf Ako používať časovače v AVR C]
 
* [http://www.kar.elf.stuba.sk/predmety/mmp/pdf/AVR-C-Timers.pdf Ako používať časovače v AVR C]
 +
* [http://www.ermicro.com/blog/?p=224 PWM tutorial]
 
* [http://www.kar.elf.stuba.sk/predmety/mmp/pdf/PreruseniaAVR.pdf Prednáška o prerušeniach] (Ing. Chamraz)
 
* [http://www.kar.elf.stuba.sk/predmety/mmp/pdf/PreruseniaAVR.pdf Prednáška o prerušeniach] (Ing. Chamraz)
  
Riadok 14: Riadok 15:
  
 
Máte k dispozícii vývojovú dosku '''MiniMEXLE''' ([http://virtuallab.kar.elf.stuba.sk/robowiki/index.php?title=Mexle popis],[[Médiá:MiniMexleSchematic.jpg|schéma zapojenia]]) a s procesorom ATmega88 ([http://ap.urpi.fei.stuba.sk/mmp/ATmega88.pdf datasheet]) a prípadne aj testovací program [[Médiá:MexleTest2.hex|mexletest2.hex]].
 
Máte k dispozícii vývojovú dosku '''MiniMEXLE''' ([http://virtuallab.kar.elf.stuba.sk/robowiki/index.php?title=Mexle popis],[[Médiá:MiniMexleSchematic.jpg|schéma zapojenia]]) a s procesorom ATmega88 ([http://ap.urpi.fei.stuba.sk/mmp/ATmega88.pdf datasheet]) a prípadne aj testovací program [[Médiá:MexleTest2.hex|mexletest2.hex]].
 
  
 
V tejto úlohe sa predpokladá znalosť funkcie časovača T1 z prednášky (datasheet, str. 87 -- 115).  
 
V tejto úlohe sa predpokladá znalosť funkcie časovača T1 z prednášky (datasheet, str. 87 -- 115).  
 
Procesor je nakonfigurovaný na prácu s externým kryštálovým oscilátorom 18,432 MHz (fuses).
 
Procesor je nakonfigurovaný na prácu s externým kryštálovým oscilátorom 18,432 MHz (fuses).
Demonštračný program je tuto: [[Médiá:MexleTest9.hex|mexletest9.hex]]
+
Demonštračný program je tuto: [[Médiá:MexleTest2.hex|mexletest2.hex]]
 +
 
 +
=== PWM ===
 +
 
 +
V niektorých aplikáciach potrebujeme premenlivú šírku impulzu,
 +
v iných nás viac zaujíma stredná hodnota napätia, impulzy sa
 +
naopak snažíme vyfiltrovať. Dôležité sú dva parametre: frekvencia
 +
a tzv. plnenie (pozri obr.).
 +
 
 +
[[Obrázok:AVR_PWM_signal.gif]]
 +
 
 +
<math>T_{on}</math> je doba, počas ktorej je výstup v log. 1 a <math>T_{off}</math> je čas v log. nule. Celková perióda signálu je <math>T_{total}</math>.
 +
 
 +
 
 +
<math>
 +
T_{total} = T_{on} + T_{off}
 +
</math>
 +
 
 +
 
 +
Plnenie (duty cycle) je pre obdĺžnikový signál definované ako
 +
 
 +
 
 +
<math>
 +
D = \frac{T_{on}}{T_{total}} = \frac{T_{on}}{T_{on} + T_{off}}
 +
</math>
 +
 
 +
 
 +
A výstupné napätie
 +
 
 +
<math>
 +
V_{out} = D V_{in} = \frac{T_{on}}{T_{total}} V_{in}
 +
</math>
 +
 
 +
 
 +
Ako vidno, výstupné napätie môžeme meniť zmenou periódy <math>T_{on}</math>.
  
=== Časovač T1 ===
+
Ak je T_on 0, V_out je tiež 0, ak je T_on T_total, potom  V_out je maximalne.
  
Pozri [[AVR ExampleT1generatorPWM.c]]
 
  
  
Riadok 30: Riadok 63:
 
# Vyskúšajte na svojej doske.
 
# Vyskúšajte na svojej doske.
  
=== Prerušenia v AVR-GCC ===
+
=== T1: režim PWM ===
 +
 
 +
V režime PWM (Pulse Width Modulation) môžeme použiť T1 ako 8,9 alebo  10-bitový,
 +
voľnobežný PWM generátor. Timer/Counter 1 funguje ako počítadlo, ktoré ráta najprv
 +
smerom nahor od 0x0000 až po vybraný TOP (8bit -> 0x00FF, 9bit -> 0x01FF, 10bit -> 0x03FF),
 +
tam sa otočí a počíta zasa smerom nadol až po 0x0000 a toto sa opakuje stále dokola.
 +
 
 +
Keď sa hodnota počítadla zhoduje s obsahom porovnávacívch registrov (OCR1A, OCR1B), zmení sa
 +
aj hodnota na výstupných pinoch OCA1 a OCB1 nasledovne:
 +
 +
COM1X1 COM1X0  Čo urobí s OCX1
 +
 +
  0      0        nič
 +
  0      1        nič
 +
  1      0      smerom nahor: 0 pri zhode
 +
                smerom nadol: 1 pri zhode
 +
  1      1      smerom nahor: 1 pri zhode
 +
                smerom nadol: 0 pri zhode
 +
 
 +
 
 +
V registri TCCR1A musíme nastaviť:
 +
COM1A1 -> bit7
 +
COM1A0 -> bit6
 +
COM1B1 -> bit5
 +
COM1B0 -> bit4
 +
 
 +
To, ktorý režim PWM chceme používať sa nastavuje bitmi PWM10 (bit0 v TCCR1A) a PWM11 (bit1 v TCCR1A) takto:
 +
 +
PWM11  PWM10  Režim
 +
 +
  0      0      PWM zakázané
 +
  0      1      8-bit PWM
 +
  1      0      9-bit PWM
 +
  1      1      10-bit PWM
 +
 
 +
Príklad:
 +
 
 +
[[Obrázok:PWMscopeView.png]]
 +
 
 +
Na obrázku je priebeh PWM signálu s plnením 25% tak ako opúšťa procesor (červený) a po vyfiltrovaní RC členom R20 C16 (zelený).
 +
Perióda PWM je 3,56 ms (281,25 Hz), <math>T_{on}</math> je 0,9 ms, <math>T_{off}</math> je 2,65 ms.
 +
<math>T_{63}</math> (zelený priebeh) je 100 us. Osciloskop: 500us/d., 2.00V/d.
 +
Parametre: Timer0, mode 8-bit Fast PWM, Prescaler 1:256, OCR0A = 63.
  
PWM mode:
+
Príklad: [[AVR ExamplePWMgenerator.c]]
When the PWM (PulseWidthModulation) mode is selected the Timer/Counter 1 can
 
be used as an 8,9 or 10bit, free running PWM. Timer/Counter 1 acts as an
 
up/down counter that is counting up from 0x0000 to the selected top (8bit ->
 
0x00FF, 9bit -> 0x01FF, 10bit -> 0x03FF), where it turns and counts down to
 
0x0000 and repeats this cycle endlessly. When the counter value matches the
 
content of the compare register (OCR1A, OCR1B) it has an effect on the output
 
pins OCA1 and OCB1 as follows:
 
COM1X1 COM1X0 Effect on OCX1
 
0 0 no
 
0 1 no
 
1 0 cleared on compare match, up-counting,
 
set on compare match, down-counting
 
1 1 cleared on compare match, down-counting,
 
set on compare match, up-counting
 
These bits are set in the register TCCR1A:
 
(COM1A1 -> bit7, COM1A0 -> bit6, COM1B1 -> bit5, COM1B0 -> bit4)
 
The right PWM mode is selected bits PWM10 (bit0 of TCCR1A) and PWM11 (bit1 of
 
TCCR1A) as follows:
 
PWM11 PWM10 Description
 
0 0 PWM mode disabled
 
0 1 8bit PWM
 
1 0 9bit PWM
 
1 1 10bit PWM
 
Example:
 
  
  
 
'''Úloha'''
 
'''Úloha'''
  
# Doplňte program o vyhodnocovanie pretečenia časovača v prerušení.<BR>Pozri [[AVR ExampleT1int.c]]
+
# Vyhodnotením prechodového deja identifikujte veľkosť kondenzátora vo výstupnom filtri.
 +
# Navrhnite vhodnú frekvenciu PWM a demonštrujte.
  
  

Aktuálna revízia z 10:08, 1. október 2010

MexleBanner.png

Generovanie PWM pomocou 16-bitového počítadla a časovača T1

Literatúra:


Rekapitulácia

Máte k dispozícii vývojovú dosku MiniMEXLE (popis,schéma zapojenia) a s procesorom ATmega88 (datasheet) a prípadne aj testovací program mexletest2.hex.

V tejto úlohe sa predpokladá znalosť funkcie časovača T1 z prednášky (datasheet, str. 87 -- 115). Procesor je nakonfigurovaný na prácu s externým kryštálovým oscilátorom 18,432 MHz (fuses). Demonštračný program je tuto: mexletest2.hex

PWM

V niektorých aplikáciach potrebujeme premenlivú šírku impulzu, v iných nás viac zaujíma stredná hodnota napätia, impulzy sa naopak snažíme vyfiltrovať. Dôležité sú dva parametre: frekvencia a tzv. plnenie (pozri obr.).

AVR PWM signal.gif

T_{on} je doba, počas ktorej je výstup v log. 1 a T_{off} je čas v log. nule. Celková perióda signálu je T_{total}.



T_{total} = T_{on} + T_{off}


Plnenie (duty cycle) je pre obdĺžnikový signál definované ako



D = \frac{T_{on}}{T_{total}} = \frac{T_{on}}{T_{on} + T_{off}}


A výstupné napätie


V_{out} = D V_{in} = \frac{T_{on}}{T_{total}} V_{in}


Ako vidno, výstupné napätie môžeme meniť zmenou periódy T_{on}.

Ak je T_on 0, V_out je tiež 0, ak je T_on T_total, potom V_out je maximalne.


Úlohy

  1. Program doplňte podľa pokynov asistenta a odsimulujte.
    Pozn.: Treba vypnúť optimalizáciu! (Project/Project options Pozri obr.)
  2. Doplňte chýbajúce časti programu tak, aby LED blikala s frekvenciou 1 s.
  3. Vyskúšajte na svojej doske.

T1: režim PWM

V režime PWM (Pulse Width Modulation) môžeme použiť T1 ako 8,9 alebo 10-bitový, voľnobežný PWM generátor. Timer/Counter 1 funguje ako počítadlo, ktoré ráta najprv smerom nahor od 0x0000 až po vybraný TOP (8bit -> 0x00FF, 9bit -> 0x01FF, 10bit -> 0x03FF), tam sa otočí a počíta zasa smerom nadol až po 0x0000 a toto sa opakuje stále dokola.

Keď sa hodnota počítadla zhoduje s obsahom porovnávacívch registrov (OCR1A, OCR1B), zmení sa aj hodnota na výstupných pinoch OCA1 a OCB1 nasledovne:

COM1X1 COM1X0   Čo urobí s OCX1

  0      0        nič
  0      1        nič
  1      0      smerom nahor: 0 pri zhode
                smerom nadol: 1 pri zhode
  1      1      smerom nahor: 1 pri zhode
                smerom nadol: 0 pri zhode


V registri TCCR1A musíme nastaviť:

COM1A1 -> bit7 
COM1A0 -> bit6 
COM1B1 -> bit5 
COM1B0 -> bit4

To, ktorý režim PWM chceme používať sa nastavuje bitmi PWM10 (bit0 v TCCR1A) a PWM11 (bit1 v TCCR1A) takto:

PWM11  PWM10  Režim

 0      0       PWM zakázané
 0      1       8-bit PWM
 1      0       9-bit PWM
 1      1      10-bit PWM

Príklad:

PWMscopeView.png

Na obrázku je priebeh PWM signálu s plnením 25% tak ako opúšťa procesor (červený) a po vyfiltrovaní RC členom R20 C16 (zelený). Perióda PWM je 3,56 ms (281,25 Hz), T_{on} je 0,9 ms, T_{off} je 2,65 ms. T_{63} (zelený priebeh) je 100 us. Osciloskop: 500us/d., 2.00V/d. Parametre: Timer0, mode 8-bit Fast PWM, Prescaler 1:256, OCR0A = 63.

Príklad: AVR ExamplePWMgenerator.c


Úloha

  1. Vyhodnotením prechodového deja identifikujte veľkosť kondenzátora vo výstupnom filtri.
  2. Navrhnite vhodnú frekvenciu PWM a demonštrujte.


Návrat na zoznam cvičení...