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: 61071, Oldal olvasási idő: kb. 4 perc
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.
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:
Komparátor kimeneti módok (Compare Output Mode)
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).
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! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |