Fórum témák

» Több friss téma
Cikkek » WILL-I - Robot, AVR mikrovezérlővel
WILL-I - Robot, AVR mikrovezérlővel
Szerző: Fizikus, idő: Dec 1, 2009, Olvasva: 60762, Oldal olvasási idő: kb. 4 perc
Lapozás: OK   8 / 12

 Motorvezérlés (PWM)

PWM jel előállítása olyan alapvető szükséglet, hogy minden modern mikrovezerlő hardveresen tartalmazza, nem kell szoftveresen előállítani, ezáltal tehermentesíti a processzort. A hardveres PWM esetén csak közöljük a hardverrel hogy milyen periódusidejű és kitöltési tényezőjű PWM jelre van szükségünk, és ezzel a CPU dolga véget is ért, dolgozhat tovább más feladaton, a PWM hardver pedig előállítja a kívánt jelet a hozzá tarozó kimeneti lábon. 

 

AVR mikrokontrollerek eséten a PWM jelet a timerek (számlálók) állítják elő. A timer általában lehet 8 vagy 16 bites. Az ATMega8-nak 3 timere van, 2 db 8 bites, és egy 16 bites. 

A timerek használatáról külön cikksorozatot lehetne írni, a rengetegféle működési módról stb. Én is csak azt részletezem ami a robot hajtásához kell. A PWM jel előállitását a Timer1-el, 8 bites módban működve mutatom be. (Az adatlapból kiderül, hogy a Timer1-nek 2 csatornája van (két összehasonlító egysége van), ezáltal két output compare regisztere is (OCR1A, OCR1B), ezért ideális lesz 2 motor vezérlésére.) 

A timer lényegében egy regiszter. De ennek e regiszternek van egy különleges tulajdonsága: működése a CPU-tól független, és az értéke automatikusan nő/csökken egy általunk megadott ütemben. Ezért pontos időmérésre, időzitésre használhatjuk.  

A mikrovezerlő 8 bites timere 0-tól számol felfelé egyesével folyamatosan, amíg el nem éri a 255-öt, amikor lenullázódik, majd 0-tól ismét újrakezdi a számolást. Ha ezt ábrázoljuk, egy farkasfog alakú jelet kapunk. A periódusidő az előosztás értékétől függ. Természetesen ezt a jelet nem tudjuk a mikrokontroller lábain kimenetként megjeleníteni, mert a mikrovezerlő csak alacsony/magas (0V/5V) jeleket tud megjeleníteni a lábain.  

Ebből a farkasfogra hasonlító timer jelből a komparátorok segítségével tudunk PWM jelet előállítani. A komparátor (összehasonlító) eldönti, hogy az output compare regiszterhez tartozó kimeneti láb alacsony/magas legyen-e. Az output compare regiszter értéke is 0 és 255 között lehet. Ha a felfelé történő számlálás közben a Timer (farkasfog) értéke az output compare regiszternél kisebb, akkor a kimenet magas lesz (5V), különben alacsony (0V). 

Ha a komparátor értéke 0-val egyezik meg, akkor a farkasfog érték soha nem lehet alacsonyabb mint a komparátor, tehát a kimenet mindig 0V lesz. Ugyanígy, ha a komparátor értéke 255-el egyezik meg, akkor a kimenet mindíg 5V lesz. Ha a komparátor 127-el egyezik meg, akkor a kimenet a periódusidő 50%-ban 5V, 50%-ban 0V lesz. Ha a komparátor 64-el egyezik meg, akkor a kimenet a periódusidő 33%-ban 5V, 66%-ban 0V lesz. Ha a komparátor 192-el egyezik meg, akkor a kimenet a periódusidő 66%-ban 5V, 33%-ban 0V lesz (lásd a lenti ábrán). 

A komparátor értékének módosításával változtathatjuk a magas (5V) állapot idejét 0% és 100% között.  

Az előbb vázolt működési mód az ún. gyors PWM mód, ami ezt a farkasfog mintát használja. Láthatjuk hogy minden impulzus egy időben ér véget, de a kitöltési tényezőtől függ, hogy mikor kezdődik. Emiatt a DC motorokhoz ez a mód nem a legmegfelelőbb. 

A timerekkel lehet egy ún. fázishelyes PWM jelet is előállítani, ami már jó lesz a motorok vezérlésére. A fő különbség a gyors PWM-mel összehasonlítva, hogy miután a számláló (Timer) elszámolt 0-től 255-ig, nem kezdi újra a számolást 0-tól, hanem lefelé kezd számolni amíg el nem éri a 0-t, majd újra felfelé kezd el számolni. Ez egy háromszög alakú mintázatot ad. Vegyük észre hogy ez esetben a PWM jel frekvenciája éppen fele akkora mint a gyors PWM mód esetén. A PWM jelek már nem az impulzus végénél esnek egybe, hanem a 255-ös értékre nézve szimmetrikusak. DC motorok hajtására ez lesz a megfelelő mód.  

Nézzük meg hogy melyik regiszterekkel lehet ezt a 2 fő működési módot beállítani. 

Minden timernek speciális regiszterei vannak, ami a beállításait tartalmazza. A Timer1 különböző PWM módjai beállításához, csak a TCCR1A és TCCR1B regisztereket kell használnunk (Timer Counter Control Register for Timer 1). Csak a regiszter különböző bitjeit kell beállítanunk a kívánt PWM jel előállításához. (A timereket sokkal több dologra lehet használni, nemcsak PWM jel előállítására, ezért nem fogom minden regiszter összes bitjének a feladatát elmagyarázni, csak azokat a biteket tárgyaljuk, amelyeket most használni fogok, a többi megtalálható az adatlapon.)  

Előosztó (CS Clock Select)

Az előosztás mértékének megadásával tudunk különböző bemenő órajelet előállítani a timernek a CPU órajeléből. Mint tudjuk a CPU-nak az oszcillátor szolgáltat órajelet (ez a gyári beállításoknál az 1MHz-es belső oszcillátor). De ez egy kicsit túl gyors lenne a mi céljainkra. Az előosztó az órajelfrekvenciát egy általunk megadott értékkel elosztja, ezáltal szabályozza a timer lépéseit, hogy milyen sebességgel számoljon 0 és 255 között (FCPU/1, FCPU/8, FCPU/64, FCPU/256, FCPU/1024).

Az előosztás mértékét a TCCR1B regiszteren belüli CS12, CS11 és CS10 bitekkel lehet beállítani.  

CS12

CS11

CS10

Előosztás mértéke

0

0

0

Összes csatorna kikapcsolva

0

0

1

1

0

1

0

8

0

1

1

64

1

0

0

256

1

0

1

1024

 

Timer működési módok:

Timer1 esetében 4 bit állitja be (WGM13, WGM12, WGM11 és WGM10), összesen 16 féle működési mód van, ezért 2 konfigurációs regiszterben (TCCR1A és TCCR1B) tárolják ezeket a biteket. Ezek közül sok mód nem kapcsolódik a PWM-ekhez, ezekkel most nem foglalkozom. Néhány PWM-et használó mód:  

Regiszter :

TCCR1B

TCCR1A

Bit :

WGM13

WGM12

WGM11

WGM10

PWM kikapcsolva

0

0

0

0

8 bites Fázishelyes PWM

0

0

0

1

8 bites Egyszerű PWM

0

1

0

1

  

Komparátor kimeneti módok (Compare Output Mode) 

  • PWM kikapcsolva
  • Invertált PWM : kimenet magas ha a timer értéke nagyobb, mint a komparátor értéke
  • Sima (nem-invertált) PWM : kimenet magas, ha a timer értéke kisebb mint a komparátor értéke

A nem invertált PWM a leglogikusabb, mert a komparátor értékének növelésével nő a PWM jel kitöltési tényezője (nő a motor sebessége). A komparátor kimeneti módjait csatornánként 2-2 bit állítja be a TCCR1A és TCCR1B regiszterekben (COM1A1, COM1A0 és COM1B1, COM1B0).  

Regiszter :

TCCR1A

TCCR1B

Bit :

COM1A1

COM1A0

COM1B1

COM1B0

PWM kikapcsolva

0

0

0

0

Nem invertált PWM

1

0

1

0

Invertált PWM

1

1

1

1

Nem lehet megadni, hogy a timer a PWM jelet melyik lábon jelenítse meg, a timer csak a hozzá tartozó lábra tud jelet adni. A Timer1-nek két csatornája van: OC1A és OC1B (15-ös (PB1) és 16-os láb (PB2)). Timer2-nek csak egy: OC2 (17-es láb (PB3)) Fontos! Ahhoz, hogy a PWM jel ténylegesen meg is jelenjen ezen a lábon, ahhoz a lábat előzőleg KIMENETNEK KELL MEGADNI! 

A számláló értéke az Output Compare Register-rel kerül összehasonlításra.  A kitöltési tényező változtatásához csak a Timer1 két csatornájához tartozó OCR1A és OCR1B regiszterek értékét kell változtatnunk. Pl., ha 0-át adunk értéknek, akkor 0%-os kitöltési tényezőjű PWM jelet állítunk elő (kikapcsolva – kimeneten konstans 0V), 128-as érték esetén 50%-os kitöltési tényezőjű PWM jel (2,5V-os átlagérték), míg 255-ös érték esetén 100%-os kitöltési tényezőjű PWM jelünk lesz (állandó 5V).


A cikk még nem ért véget, lapozz!
Következő: »»   8 / 12
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem