Krmilnik DC motorja s sistemom HC11


Avtorja: Janez Štangelj, Zoran Bjelić


Krmilnik DC motorja je namenjen krmiljenju enosmernih kolektorskih motorjev z napetostjo 5 – 16 V in stalnim tokom do 10 A. Omogoča vrtenje motorja naprej in nazaj z nastavljivo hitrostjo in zaviranje motorja v obe smeri z nastavljivo hitrostjo. V tem sestavku bova na kratko obravnavala strojno in programsko opremo, izdelano v okiru tega projekta.

Projekt sva izvedla v dveh fazah. Prvi del projekta je obsegal krmilnik motorja z enostavnim programom za testiranje strojne opreme, v drugem delu pa sva s prilagoditvijo strojne in programske opreme napravo nadgradila v preprost regulator in omogočila vnos nastavitev preko serijskega terminala.


 

1) Krmilnik

Krmilnik je sestavljen iz registra z dekodirnikom, močnostnega mostička in zaščitne logike. Register z dekodirnikom priklopimo na razširitveni konektor sistema HC11; preko tega registra nato dostopamo do močnostne izhodne stopnje. Zaščitna logika za samo delovanje ni potrebna, je pa dobrodošla pri razvoju programske opreme, saj izključuje možnost kratkega stika na izhodni stopnji zaradi napake v programu. Sistem nadzoruje program PWM_Demo. Priklop posameznih sklopov je predstavljen na blok shemi:



Namesto na register bi lahko končno stopnjo priklopili tudi direktno na I/O konektor sistema HC11; register z dekodirnikom je bil izdelan zato, ker je bila ena od zahtev naloge tudi ta, da se omenjeni konektor pri izvedbi ne uporablja.



2) Regulator

Regulator je sestavljen iz močnostnega mostička, zaščitne logike in optičnega senzorja za štetje vrtljajev motorja. Do močnostne izhodne stopnje in optičnega senzorja dostopamo direktno preko I/O konektorja razvojnega sistema HC11. Sistem nadzoruje program PWM_Reg. Priklop posameznih sklopov je predstavljen na blok shemi:

 


 

3) Strojna oprema

Na zgornjih blok shemah je predstavljeno povezovanje posameznih sklopov strojne opreme; opis posameznih gradnikov je podan v tem odstavku.

3a) Močnostni mostiček in zaščitna logika

Močnostni del predstavljajo štirje močnostni mosfet tranzistorji, vezani v polni H mostiček. Tem je dodan krmlni del, ki omogoča krmiljenje tranzistorjev z napetostmi logičnih nivojev. Logična 1 (5V) na katerem od vhodov [A, B, C, D] vklopi pripadajoči tranzistor, logična 0 ga izklopi.

Krmiljenje hitrosti vrtenja in zaviranja je izvedeno s pulznoširinsko moduliranim signalom, ki vklaplja spodnja tranzistorja v mostičku in tako s svojim delovnim ciklom določa efektivno napetost na sponkah motorja.

Delovanje mostička je predstavljeno z naslednjo tabelo:

stanje št. vhodi krmilnika in pripadajoči tranzistorji motor
A (T1) B (T3) C (T2) D (T4)
1 0 0 0 0 izklop
2 1 0 0 C vrtenje naprej
3 0 C 1 0 vrtenje nazaj
4 0 C 0 1 zaviranje naprej
5 0 1 0 C zaviranje nazaj
6 1 1 X X kratek stik
7 X X 1 1


Legenda k tabeli:

0: 0V
1: 5V
X: 'dont care'
C: pulznoširinsko moduliran signal 0..5V, cikel 0..100%

Opis stanj mostička: 

  • 1 izklop: vsi štirje močnostni tranzistorji so izklopljeni, motor ni priklopljen na napajalno napetost.

  • 2 vrtenje naprej: stalno je vklopljen levi zgornji tranzistor (T1), spodnji desni (T4) pa je krmiljen s pulznoširinsko moduliranim signalom. Ostala dva tranzistorja (T2 in T3) sta stalno izklopljena. Mortor se vrti v referenčno smer naprej, hitrost pa je odvisna od delovnega cikla krmilnega signala.

  • 3 vrtenje nazaj: stalno je vklopljen desni zgornji tranzistor (T2), spodnji levi (T3) pa je krmiljen s pulznoširinsko moduliranim signalom. Ostala dva tranzistorja (T1 in T4) sta stalno izklopljena. Mortor se vrti v referenčno smer nazaj, hitrost pa je odvisna od delovnega cikla krmilnega signala.

  • 4 zaviranje naprej: stalno je vklopljen spodnji desni tranzistor (T4), spodnji levi (T3) pa je krmiljen s pulznoširinsko moduliranim signalom. Ostala dva tranzistorja (T1 in T2) sta stalno izklopljena. Motor glede na referenčno smer naprej zavira. Moč zaviranja je odvisna od delovnega cikla krmilnega signala.

  • 5 zaviranje nazaj: stalno je vklopljen spodnji levi tranzistor (T3), spodnji desni (T4) pa je krmiljen s pulznoširinsko moduliranim signalom. Ostala dva tranzistorja (T1 in T2) sta stalno izklopljena. Motor glede na referenčno smer nazaj zavira. Moč zaviranja je odvisna od delovnega cikla krmilnega signala.

  • 6 in 7 kratek stik: stalno sta vklopljena leva (T1 in T3) oz. desna (T2 in T4) tranzistorja. Napajalnik motorja je kratko sklenjen.

Stanji 6 in 7 privedeta do uničenja izhodnih močnostnih tranzistorjev, zato je krmilniku dodano zaščitno logično vezje, ki v primeru krmilnega signala za stanji 6 in 7 odklopi krmilni signal in zapre izhodne tranzistorje.

Še nekaj opomb k uporabljenim elementom: Tranzistorje je moč nadomestiti s podobnimi. Paziti je treba, da imajo integrirano reverzno diodo, ki omogoča varen razkroj toka, ki se inducira ob izklapljanju in zaviranju motorja. Tokovne konice, ki nastajajo ob vklapljanju tranzistorjev, dušita kondenzatorja C1 in C2. Prvi mora biti čim večji in čim bliže izhodnim tranzitorjem. Paziti je treba, da so žice do močnostnega napajalnika čim krajše oz. da imajo čim manjšo induktivnost.

Na mostiček je potrebno priključiti močnostni napajalnik za pogon motorja; dovoljeno napetostno območje je 5 - 16 V enosmerne napetosti. Napajaje logičnega dela vezja je priključeno na sistem HC11 preko I/O ali EXPAND konektorja. Masi močnostnega in logičnega dela nista galvansko ločeni.

močnostni mostiček

zaščitna logika

shema: tiskano vezje: shema: tiskano vezje:
shema močnostnega mostička tiskano vezje mostička (dimenzija 85 × 41 mm) shema zaščitne logike tiskano vezje zaščitne logike (dimenzija 35 × 26 mm)

 

 

3b) Register z dekodirnikom

Register z dekodirnikom priklopimo na razširitveni vhod (EXPAND konektor) razvojne plošče HC11. Do registra lahko dostopamo na eni od sledečih lokacij, odvisno od nastavitve DIP stikala (0='on'):

stikala adresa stikala adresa
0000 $0000 1000 $8000
0001 $1000 1001 $9000
0010 $2000 1010 $A000
0011 $3000 1011 $B000
0100 $4000 1100 $C000
0101 $5000 1101 $D000
0110 $6000 1110 $E000
0111 $7000 1111 $F000

Register je sestavljen iz dveh 8 bitnih D flip flopov. Prvi (IC3) je izhodni in je namenjen upravljanju močnostnega mostička. Spodnji štirje biti predstavljajo krmilne signale za tranzistorje močnostnega mostička (A, B, C, D). Drugi flip flop (IC4) je vhodni del registra. Njegovo vrednost  nastavimo na letvici SET in jo naložimo z urinim impulzom na letvici CLK; če je slednja krato sklenjena, ta impulz generiramo s pritiskom na tipko. Na letvici X/1 lahko vklopimo pull-up upore in vrednost vhodnega registra nastavimo z jumperji na letvici SET. 

Dekodirnik je dinamičnega tipa; sestavljen je iz dveh komparatorjev, ki primerjata kodo na adresnem vodilu s tisto, ki je nastavljena na kodirnem stikalu. Ob pravi kodi se generira urin impulz, ki nato glede na vrednost R/W in WE signala vpiše vsebino podatkovnega vodila v izhodni D flip flop ali pa priklopi na vodilo izhode drugega D flip flopa in tako omogoči branje nastavljene vrednosti. 

Močnostni mostiček priklopimo na letvico BRIDGE.

 

shema: tiskano vezje:
shema registra tiskano vezje registra (dimenzija 79 × 60 mm)

 

3c) Senzor

Kot števec vrtljajev sva uporabila optični senzor; na gred motorja pripeta ploščica z dvema režama ob vrtenju motorja prekinja svetlobni tok med emiterjem in detektorjem in tako generira vlak impulzov na izhodu senzorja; širina impulza je odvisna od hitrosti vrtenja motorja. Izhod senzorja sva priklopila na IC3 (Input Capture 3) vhod sistema HC11 in s tem ustvarila povratno regulacijsko zanko, katere parametre je moč programsko nastaviti s programom PWM_Reg.

Senzor se napaja z logično napetostjo sistema HC11.

shema:  
shema senzorja  

 

4) Programska oprema

Programska oprema obsega dva programa. Prvi, PWM_Demo, je namenjen preizkusu delovanja prvega dela projekta - naslovnega dekoderja in celotnega PWM krmilnika. Drugi, PWM_Reg, je namenjen uporabi z drugim delom projekta in omogoča uporabo krmilnika z regulatorjem ter vnos nastavitev preko serijskega terminala.

 

4a) PWM_Demo

Najprej se inicializirajo vse spremenljivke, nato se program izvaja v glavni zanki 'zanka'. Program uporablja oba registra, ki se nahajata na na enem od nastavljenih naslovov, v tem primeru $4000. Kadar na naslov '_reg' ($4000) vpišemo osembitno besedo, se ta pojavi na izhodnem registru. Kadar z naslova '_reg' preberemo podatek, dobi osembitno besedo, vpisano v vhodni register. 

Glavna zanka kliče funkcije 'naprej', 'stop' in 'nazaj'. Vsaka od teh treh funkcij najprej pogleda statusno spremenljivko 'motFlg' in s tem ugotovi, kakšno je stanje motorja: lahko se vrti naprej, nazaj, zavira, ali pa stoji. Na podlagi tega odloči, ali mora motor najprej zavirati in šele potem zavrteti v pravo smer, ali ga samo zavrteti, ali pa se ta že vrti in korekcija izodnih podatkov zato ni potrebna. Vsaka funkcija vrti motor samo določen čas, definiran s spremenljivko 'zakVrt'.

Funkcije krmilijo motor tako, da v izhodni register zapisujejo krmilno besedo, štejejo določeno število ponovitev 't0', potem vpišejo novo število, štejejo določeno število ponovitev 't1' in to ponavljajo, dokler se števec ponovitve period ne izteče. Časa oz. vrednosti spremenljivk 't0' in 't1' izračuna funkcija 'duty', in sicer iz vrednosti, prebrane z vhodnega registra '_reg' ter poznane periode T.

Števci ponovitev period so trije. Prvi 'zakZav' je uporabljen pri zaviranju, drugi 'zakVrt' pri vrtenju motorja naprej in nazaj, tretji 'zakStop' pa določa, koliko časa motor miruje.

Primer uporabe sistema s programom PWM_Demo: Ko poženemo program, se motor vrti z neko začetno hitrostjo; z jumperji na letvici SET dekodirnika nastavimo novo vrednost in jo spravimo v register s pritiskom na tipko. Program prebere novo vrednost in vrti motor s spremenjeno hitrostjo. Sekvenco smeri vrtenja in zaviranja lahko korigiramo z dodajanjem ali odvzemanjem funkcij v glavnem programu.

4b) PWM_Reg

Program PWM_Demo je izdelan na osnovi RTI operacijskega sistema za sistem HC11; z dodajanjem posamznih opravil v obstoječ operacijski sistem sva le-tega prilagodila za uporabo s ciljnim sistemom.

Program uporablja tri globalne spremenljivke in sicer 't0' in 't1', ki predstavljata delovni cikel pulznoširinsko moduliranega signala, ter spremenljivko 'motFlg', katere spodnji trije biti predstavljajo trenutno delovanje motorja, zgornji štirje pa nastavljene vrednosti, kot je prikazano v sledeči tabeli:

motFlg bit = 0 bit = 1
bit 0 motor trenutno miruje motor se trenutno vrti
bit 1 motor se trenutno vrti naprej motor se trenutno vrti nazaj
bit 2 motor trenutno ne zavira motor trenutno zavira
bit 3 (ni uporabljen) (ni uporabljen)
bit 4 referenčno mirovanje referenčno vrtenje naprej
bit 5 referenčno vrtenje nazaj
bit 6 referenčno zaviranje
bit 7 referenčna ročna zavora

Opravila si informacije izmenjujejo preko spremenljivk ovIzm, TmIzm, ovRef, TmRef in UNLOAD_SIGNAL.

Morda še pojasnilo k režimom delovanja - vrtenje naprej, zaviranje in vrtenje nazaj so opisani že pri razlagi delovanja močnostnega mostička; tu je dodana še t.i. ročna zavora, ki je s krmilnega stališča običajno zaviranje s polno močjo, vendar se motor pri tem ne vrti, ampak je stalno zavrt; s programskega stališča je zadeva olajšana, saj ni treba regulirati števila vrtljajev.

Opis posameznih opravil:

  • Opravilo SCI_TASK služi za prenos podatkov med registrom serijskega vmesnika _SDCR (Serial Communication Data Register) in sprejemnima krožnima bufferjema TRAB-TRAE in RECB-RECE. Ob sprejemu podatke tudi pošilja nazaj na serijski terminal (autoecho možnost), da uporabnik dobi povratno informacijo o sprejetih podatkih. Ob sprejemu podatkov opravilo tudi preveri, ali se morda v bufferju TRAB-TRAE nahaja še kakšen podatek; če se, tudi tega pošlje nazaj po serijskem terminalu. V ta namen kliče opravilo SCISEND.


  • Opravilo RECHR_TASK prepiše paket podakov iz sprejemnega krožnega bufferja v STACKTOP-STACKBOT buffer. Ta dodatni buffer poenostavi prepisovanje in pretvarjanje vhodnih podatkov v vrednosti za spremenljivke motFlg, ovRef in TmRef.


  • Opravili SYNTAX_CHECK in UNLOAD_TASK skrbita za pretvorbo in zlaganje podatkov iz STACKTOP-STACKBOT bufferja v spremenljivke motFlg, ovRef in TmRef. Opravili bi lahko združila v eno, vendar sta  zaradi varnosti ločeni v dva dela, saj je tako laže zagotoviti izvedbo v dovoljenih 1200 ciklih; obe opravili namreč kličeta kar nekaj podfunkcij (NEWORDER, CHECK_HEX, TESTORDER, ASCI2HEX), nekatere tudi večkrat. S pomočjo teh funkcij se podatki med zlaganjem prevedejo iz ASCII v binarni zapis. Vhodni podatki morajo biti zapisani v pravem zaporedju, sicer opravilo pobriše STACKTOP-STACKBOT buffer in čaka na nov paket podatkov.


  • Opravilo testRpm računa hitrost vrtenja motorja;  bere vrednost registra _TIC3, ga odšteje od starega stanja in s tem izračuna periodo signala iz senzorja. Pri tem pazi tudi na prehod števca _TIC3 preko ničle.

  • V urniku opravil mora zasedati vsaj štiri mesta oz. mora biti klicano dovolj pogosto, da je odčitana vrednost števca čim manjša.
  • Opravilo reglDuty izvaja regulacijo vrtljajev. Primerja dejansko in referenčno periodo signala senzorja (ovIzm-ovRef, TmIzm-TmRef) in ustrezno spremeni spremenljivko t0, s katero je povezan deovni cikel izhodnega pulznoširinsko moduliranega signala.


  • Opravilo PWM skrbi za vse načine krmiljenja motorja; razdeljen je na pet odločitvenih sklopov (miruj, naprej, nazaj, zavora, rocna zavora), ki kličejo sedem izvedbenih podfunkcij (vrtIzklop, vrtNapr, vrtNaz, zavNap, zavNaz, rzNap, rzNaz). Podfunkcije za vrtenje in zaviranje motorja so podobne kot v programu PWM_Demo, le da so prilagojene delovanju v operacijskem sistemu.

  • Opravilo PWM mora biti v urnik uvrščeno štiriktat in se periodično ponavljati.


Motor upravljamo z uporabo serijskega terminala v razvojnem okolju HC11IDT. Vpišemo kontrolni znak za način delovanja in zatem 24 bitno heksadecimalno vrednost, s katero nastavimo hitrost vrtenja oz. zaviranja (bolj natančno: 24 bitna vrednost predstavlja vrednost števca _TCNT med enim in drugim prehodom senzorja, stevec pa se vrti s četrtino urine frekvence; vrednost #$4756 pri frekvenci števca 1,2288 MHz npr. pomeni 60*1228800/($4756*2) = 2016 vrtljajev rotorja v minuti).  Kontrolni znaki so sledeči:

znak pomen
+ naprej
- nazaj
z ali Z zavora
r ali R ročna zavora
m ali M mirovanje
 

 


4) Datoteke

PWM_Demo.asm programska koda programa PWM_Demo (9k)
PWM_Reg.asm programska koda programa PWM_Reg (50k)

 

5) Povezave

www.4qdtec.com veliko snovi o mostičkih in krmiljenju dc motorjev
www.cadsoft.de Eagle Layout Editor - program za izdelavo shem in tiskanih vezij


vprašanja, pripombe, predlogi? pišite:

zoran.bjelic@kiss.uni-lj.si
jkranjski@email.si

zadnji popravek: 16.12.2002