Digitális technika (VIMIAA01)
Gyakorlat 11. hét
PWM elve, mikroszervó motor vezérlése MiniRISC processzoron F1. A mikroprocesszorok, mint digitális eszközök, ritkán rendelkeznek közvetlen analóg kimeneti jelet biztosító perifériával, tehát valódi, minőségi digitális-analóg konverterrel (DAC). Kis pontossági igények, illetve lassú kimeneti jelváltozási sebesség esetén a DAC kimeneti jele jól helyettesíthető egy digitális pulzussorozat átlagolásával megkapható analóg kimeneti jellel. Az átlagolást a legegyszerűbb RC simító/átlagoló szűrővel elvégezve, elfogadható minőségű kimeneti jelet kapunk. A digitális pulzussorozat egy rögzített periódusidejű, (TPWM), de változó pulzusszélességű (Tw
Az ideális átlagolás csak megközelíthető. A gyakorlatban LC (induktivitás-kapacitás) vagy RC (ellenálláskapacitás) alkatrészekből felépített alacsony frekvenciás szűrőket alkalmaznak. Amennyiben az átlagoló szűrő határfrekvenciája jóval az fPWM=1/TPWM érték alatt van, akkor az Uki analóg jel már egy elfogadhatóan kisimított DC átlagértéket reprezentál. Az ábrán a t=0 időpillanatban indított, kék színnel jelölt digitális PWM jelet 3 szűrőfokozaton vezetjük keresztül, melyek kimenetei sorrendben: RC1 lila, RC2 piros, RC3 zöld, mely kimenet bár lassan éri el, de egészen kis ingadozással kiadja a 3,75V kimeneti analóg jelszintet, a PWM jel 75%-os kitöltési tényezőjének megfelelően.
2015. november 24.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 11. hét
A változó pulzusszélességű kimeneti jel sokszor nem csak átlagolás után, hanem közvetlenül is felhasználható. Ilyen alkalmazás pl. a LED diódák fényerő vezérlése digitális PWM jellel, ahol a szükséges „simítást, átlagolást” a szemünk tehetetlensége végzi el. További alkalmazási terület pl. a mikroszervó motor vezérlése, ahol a pulzusszélesség, mint a szögelfordulás időskálára konvertált „lineáris kódja” szerepel és vezérli a mikroszervó motort a megfelelő pozícióba. (Emlékezzünk a félév elején tanult ofszet számábrázolási kódra!) A vezérlő jelet folyamatosan fenn kell tartanunk, mert a mikroszervó belső szabályozó áramkörei csak akkor tudják az adott pozíciót stabilan tartani. F1.a. Tervezzünk egy olyan digitális hardver egységet, ami legalább 0,5% pontossággal képes PWM pulzusszélesség modulált jelet előállítani. A Tw pulzusszélesség egy 8 bites bemeneti változóval adható meg (pl. a LOGSYS kártyán az SW kapcsolóval.) A T periódusidő legyen ms nagyságrendű. Adjuk meg az egység Verilog HDL kódját! Alkalmazzuk a kimenetet LED fényerő vezérlésére!
A LED PWM hardveres digitális megoldása a fenti paraméterek szerint 3 funkcionális elemet igényel. A LOGSYS kártya 16MHz-es órajelét egy 10 bites bináris számlálóval leosztjuk 64us-ra. Ezzel működtetjük a 8 bites PWM periódusidő mérőt, ami így 64us*256 = 16,384 ms idejű periódust állít be, ami kb. 61Hz frekvenciának felel meg. A kimeneti PWM jel előállítása egyszerű: A 8 bites SW kapcsoló értéket komparáljuk a PWM számláló értékéhez. Amíg az SW nagyobb, addig a kimeneti jel 1, ha már kisebb, akkor a kimeneti jel 0 lesz. A komparálási operátortól függően ( > vagy >= ) a PWM határok 0 – 99,6% vagy 0,39 – 100% tartományban használható, de biztosan jobb, mint 0,5% beállítási pontosság/felbontás mellett.
A PWM egység Verilog HDL kódja (csak a lényeges kódrészletek): 10 bites előosztó a 64us ütemező jelhez:
A PWM generátor egység, 8 bites számláló és komparátor: 2015. november 24.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 11. hét
F1.b Készítsünk egy PWM kimeneti jelet előállító programot, a processzor TIMER perifériáját használva a kimeneti jel vezérléséhez! A programban a fenti időzítéseket használhatjuk. A TIMER-t beállítjuk 64us-os, periódikus időzítésre.
Ennek ütemében működtetünk egy regiszter alapú 8 bites PWM számlálót (r1), amit komparálunk a kapcsoló perifériáról beolvasott értékkel (r2). Az induláskor bekapcsolt LED-eket addig hagyjuk bekapcsolva, amíg a PWM számláló értéke kisebb az SW kapcsolókon beállított értéknél. Amint a PWM számláló eléri az SW kapcsolókon beállított értéket, (tehát r1-r2 =0x00) a LED-eket kikapcsoljuk. A LEDek addig maradnak kikapcsolva, amíg a PWM számláló a 255 végértéket elérve át nem fordul és felveszi a 0x00 értéket.
2015. november 24.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 11. hét
F1.c A mikroszervó motorok vezérlése hasonló jelalakú pulzussorozattal történik, adott előírások betartása mellett. A motorok nem precíziós alkatrészek, elsősorban modellek, távirányításos játékok működtetésére szolgálnak, tehát a specifikáció csak közelítőleg, jellegére teljesül. A kívánt vezérlőjel jellemzően egy 1ms-2ms közötti pulzusszélességű jelsorozat, aminek frekvenciája 50-100 Hz közötti, azaz periódusideje 10-20ms.
Válasszunk egyszerűen kezelhető időzítési paramétereket a MiniRISC processzor paraméterihez alkalmazkodva! A mikroszervó motor vezérléséhez az 1ms – 2ms impulzus szélesség könnyű és megfelelő felbontású beállíthatósága a legfontosabb szempont. Ha a 8 bites értékkel szeretnénk átfogni a teljes változást jelentő 1ms időtartományt, ahhoz 1000/256 = 3,9us -> 4us alapütemezést érdemes választanunk. Ezzel az 1ms 1,024ms-ra adódik, ez a mikroszervó szempontjából nem okoz problémát. A teljes pulzusszélesség beállításához szükséges 1ms ofszet numerikus értéke 256. A teljes periódusidőt ~16ms-ra választva a 4us ütemezéssel egy 12 bites szoftver számlálót használhatunk a teljes periódus időzítéséhez.
2015. november 24.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01
Digitális technika (VIMIAA01)
Gyakorlat 11. hét
F1.d Készítsünk el egy olyan programot, amelyben a mikroszervó vezérlése megszakításos működéssel, az ISR megszakítás kiszolgáló szubrutinon belül történik! A TIMER ISR egy regiszterpárban kapja meg a kimeneten beállítandó impulzusszélesség időtartamát, 4us-os időkvantumot feltételezve. Ennek megfelelően a kapott érték 256 – 511 között változhat, a középérték 383. A 12 bites vezérlőjel periódust az (r11:r10) regiszterpárban realizált számláló méri. Ennek aktuális értékéhez hasonlítjuk az (r13:r12) regiszterpárban beállított pulzusszélességet. Az összehasonlítás 16 bites aritmetikát használva történik. Az eredményt jelző C flag értékét léptetési műveletekkel másoljuk a GPIO_C[1] kimenetként konfigurált portlábra.
2015. november 24.
http://www.mit.bme.hu/oktatas/targyak/vimiaa01