| Upravljanje koračnim motorom u pogonu pisaće glave matričnog štampača - praktična realizacija |
|
|
|
| Autor FTN Novi Sad, Katedra za elektroniku | |
U Bazi znanja, opisana je struktura celog sistema u grubim crtama i na osnovu poznatih karakteristika motora s kojim raspolažemo određeni su svi parametri neophodni za kvalitetno upravljanje pomenutom strukturom. U ovom delu ostalo je da se daju crteži i šeme celog uređaja i naravno algoritmi i program koji će izvršavati mikrokontroler.
Kratak opis paralelnog interfejsa
Interfejs prema računaru upotrebljen u ovom projektu je u osnovi standardni paraleni interfejs koji se može naći na skoro svakom računaru. Jedino što je on u ovom slučaju proširen sa nekoliko dodatnih signala neophodnih za efikasnije upravljanje. Njihov opis sledi.
Osnovni signali ovog interfejsa su osam linija za podatke D0..D7, kontrolna linija STROBE koja je ulazni signal i još dva izlazna BUSY i ERROR. Svi ovi signali su aktivni na niskom nivou, dakle na nuli. STROBE signal dolazi sa računara i označava da su podaci na linijama za podatke ispravni i da bi prijemni uređaj trebalo da ih preuzme. Postoji i signal ACK u specifikacijama interfejsa ali on se često izostavlja pa je izostavljen i ovde. On bi trebalo da potvrdi prijem podatka. Linija BUSY je na niskom nivou kada uređaj ne može da prima podatke jer je zbog nečeg zauzet. Ovde je aktivan dok se vrši pozicioniranje ili pomeranje signalizirajući računaru da je posao u toku i da čeka sa narednom komandom.
Slika 1. Osnovni signali na paralelnom interfejsu
Linija ERROR je niska kada nastupi neka greška - bilo zbog besmislene komande ili zbog neke teške greške u pozicioniranju. Ako se ERROR aktivira, ovaj uređaj je programiran da čeka dok ne dobije potvrdu o saznavanju za prekid od računara. Tek kada računar potvrdi prihvatanje greške visokim nivoom na ERROR_ACK, uređaj nastavlja sa radom i prihvatanjem komandi, dotle je blokiran. Tu su još dva signala MOTOR_READY i MOVE_ACK. Prvi generiše uređaj i to svaki put kada izvrši jedan korak pri sporom pomeranju glave. Sledeće pomeranje se ne izvršava sve dok računar ne potvrdi prethodni signal visokim nivoom na svom MOVE_ACK-u. Nakon toga MOTOR_READY pada na svoj neaktivni niski nivo i motor pravi sledeći korak ukoliko ima još zadatih koraka koji čekaju na izvršenje. Na prethodnoj slici, dat je i šematski prikaz osnovnih signala pri prenosu reči ovim interfejsom.
Prikaz algoritma upravljanja i program mikrokontrolera
Treba reći nešto o algoritmu uz pomoć kog je realizovano ovo mikrokontrolersko upravljanje koračnim motorom. Pošto se taj motor nalazi u jednom relativno samostalnom uređaju kojim se komanduje sa računara uz pomoć paralelnog kabla, taj upravljački algoritam se mora u izvesnoj meri baviti i komunikacijom. Biće do krupnijih detalja objašnjeni svi delovi upravljačkog programa, a najvažniji delovi koji se tiču upravljanja režimima pojedinačnog koračanja i brzog pozicioniranja biće ilustrovani i grafičkim prikazom algoritma.
Prvo, koja reč o tome, kako su izlazni i ulazni signali raspoređeni pa portovima mikrokontrolera. P0 služi kao ulazni port za podatke sa paralelnog interfejsa. Na njega su vezane linije D0..D7. P1 upravlja prekidačkim tranzistorima i to sa četiri njih preko donja četiri bita tog porta. P2 upravlja izlaznim kontrolnim signalima paralelnog interfejsa i prima ulazne kontrolne signale. Tačan raspored označen je na šemi koja je data na kraju. P3 nije upotrebljen niti kao port, niti ijedan njegov bit kao neki specijalni ulazno/izlazni pin. Na samom početku, definisane su promenljive. Čitava lista navedena je na početku asemblerskog listinga. To su vrednosti koje moraju da se čuvaju tokom rada programa jer čuvaju vrednosti od značaja. Te se vrednosti izračunavaju tokom rada programa. Tu su recimo upravljačke reči koje su stigle preko interfejsa, broj potrebnih pomeranja, položaj motora itd. Na redu je zatim nekoliko instrukcija skokova na odgovarajućim mestima, konkretno na adresi 0000h i 000Bh. Prva adresa je adresa sa koje počinje izvršavanje programa pa ta lokacija sadrži instrukciju skoka na rutinu za obradu reseta. Drugim rečima to je ulazna tačka celog upravljačkog programa. Druga adresa je adresa na koju se skače ako dođe do prekida zbog prekoračenja tajmera 0. To je dakle mesto gde treba da se preusmeri tok programa na rutinu za obradu tog prekida. Sledeće, na adresi 0010h počinje deo programa koji sprovodi reset akciju. Na početku, postavljaju se neke osnovne promenljive, stek se postavi na odgovarajuće mesto, ulazni portovi se programiraju na jedinice da bi mogli nesmetano da primaju, korisnički flegovi se dovode u početna stanja. Nakon toga kreće se sa dovođenjem pisaće glave u nulti položaj. To se izvodi tako što se motor okreće u desnom smeru i to osam koraka jer za osam koraka motor mora da počne da se okreće u skladu sa pobudom bez obzira na svoj inicijalni položaj. Posle se motor pobuđuje da se okreće u levom smeru i to korak po korak sve dok detektor nultog položaja ne detektuje nulti položaj. Sad smo sigurni da poznajemo položaj motora, postavljamo promenljivu koja sadrži položaj motora na nultu vrednost, i sve je spremno za normalan rad. Sledi deo koji rukuje paralelnim interfejsom. Čeka se na STROBE signal. Čim on postane nizak, preuzme se reč sa P0. Čeka se na prestanak STROBE signala ako se to već nije desilo, a odmah zatim, čeka se sledeći. Kada se desi, preuzme se i druga reč sa P0. Kratko se analizira komanda i prelazi se na izvršenje komande. Postavljaju se flegovi smera, izdvoji se broj koraka i konačno poziva odgovarajući potprogram - koračanje ili pozicioniranje. Ukoliko se desila greška što se indikuje flegom za grešku, čeka se na potvrdu od računara tj. signal ERROR_ACK. Posle toga se vraća na glavnu petlju upravljača interfejsom. Mora se na ovom mestu objasniti i format upravljačkih reči. Svaka se sastoji iz šesnaest bita koji uvek stižu u dva dela jedan za drugim. Kada drugi stigne, prelazi se na izvršenje komande. Druga reč je jednostavno niža reč broja koraka. Prva reč u svoja niža četiri bita sadrži višu reč. Preostala četiri bita određuju komandu. Ako je četvrti bit te reči jedinica, odmah se prelazi na reset sistema standardnom reset rutinom. Šesti bit govori da li je pomeranje na levo(1) ili na desno(0). Sedmi bit određuje vrstu komande - koračanje(0) ili pozicioniranje(1). Ako je u pitanju koračanje odradi se zadati broj koraka (ukoliko je moguće) u zadatom smeru. Kada je u pitanju pozicioniranje, bit smera se ignoriše, a broj koraka zapravo znači apsolutnu poziciju na koju će se pisaća glava pozicionirati (0 - 880). Sledi algoritam step režima, odnosno pojedinačnih koraka pri čemu je moguće pisanje. Algoritam je grfički prikazan na slici:
Slika 2. Algoritam koračanja
Prvo se utvrdi vrednost koraka 1 ili -1 u zavisnosti od smera koračanja, a posle se odmah proveri da li je uopšte moguće izvesti zadati broj koraka u zadatom smeru. Ako nije, vraća se u glavni program, ali sa setovanim flegom za grešku. Ako je sve u redu, inicijalizuje se brojač, zatraži se sledeća pobuda za faze, brojač se umanji, proveri se da li je možda pisaća glava u nultom položaju, a traži se pomeranje u levo. Ako se utvrdi da jeste, to znači da upravljanje misli da je glava u nekom drugom položaju nego što zaista jeste pa se setuje fleg greške i vraća se u glavni program. Ako je sve u redu, menja se pobuda na sledeći polukorak koja se dobija logičkim sabiranjem sa starom pobudom. Zatim se čeka 3,5ms pozivajući potprogram za softversko kašnjenje. Kada to vreme prođe, uključuje se samo nova faza i čeka se još 1,5ms da se glava malo umiri, ažurira se pokazivač položaja i postavi signal računaru da je korak izvršen i čeka se odgovor računara. Kada se odgovor dobije, ukine se signal o izvršenom koraku. Ako je to bio i poslednji korak, vraća se u glavni program, a ako nije radi se sledeći korak po istom postupku.
Koristi se potprogram za sledeću fazu. Taj podprogram ima sopstveni brojač pokazivač trenutno aktivne faze i tabelirane vrednosti pobude, ukupno četiri. Kada se zatraži nova vrednost, na osnovu flega smera uveća se ili smanji pokazivač aktivne faze, i vrati se stara i nova vrednost u promenljivama NEW i OLD. Taj algoritam je prilično jednostavan i neće biti dat grafički. Softverska kašnjenja su realizovana u obliku potprograma (2 odvojena). Radi se o običnooj dvostrukoj petlji. Pri tome, pošto znamo frekvenciju takta koji dovodimo mikrokontroleru (12MHz), znamo i vremena izvršenja pojedinih instrukcija, možemo tačno izračunati kašnjenje koje će svaki od tih potprograma da unese. To je princip na kom rade ova softverska kašnjenja. Ostaje još da se kaže koja reč o načinu brzog pozicioniranja. On je ujedno i najsloženiji deo celog upravljačkog algoritma. Ne koristi softverska kašnjenja nego koristi tajmer0 i interapte. Interapt rutina je krajnje jednostavna i sve što treba da uradi jeste da iz određenih promenljivih prepiše vrednosti u izlazni port za upravljanje motorom, da napuni nove vrednosti u tajmer i da postavljanjem odgovarajućeg flega obavesti glavni program da je završio. Odgovarajuće vredmosti u pomenute promenljive upisuje glavni program čiji će algoritam biti dat grafički. Algoritam pozicioniranja. Prvo se naravno proveri da li je komanda ispravna odnosno da li BR_KOR koji sada označava apsolutnu pozicioju pada u opseg koji je dozvoljen tj. pozitivan i manji od 880. Ako je izvan, javlja se greška. Izračunava se BK odnosno broj koraka koji treba da se izvrše. Ako je on veći od nule ide se desno, ako ne onda se ide levo. Postavlja se fleg smera. Uzima se apsolutna vrednost od BK, P je polovina ukupnog broja koraka. Ako je on manji od dužine ubrzavanja u koracima, onda se neće izvršiti ACCLEN broj ubrzavajućih koraka nego P koji je maksimalni mogući broj koraka posle kojih mora početi usporavanje. Izračunava se još gomila promenljivih od kojih svaka označava redni broj koraka jedne od ključnih promena u upravljanju motorom. To se redom CSPD: korak do kog se ubrzava; BTSD: korak do kog se ide konstantnom brzinom, a posle kog sledi korak dvostruke dužine; DCTB: korak posle kog počinje usporavanje; i konačno KRAJ posle koga se prekida rad potprograma i sledi vraćanje u glavni program. Tu su i DECPNT koji je neophidan za pravilno izvršenje dela za usporavanje i naravno KORBROJ za brojanje koraka. Prvo se dozvole interapti i namesti jedan za 100s koji je neophodan da bi se inicirao ceo proces. DONE se postavlja na nulu. (To je inače fleg koji govori da li se interapt desio, postavlja ga interapt servisna rutina, a briše glavni program.) Traži se sledeća faza, postavljaju se promenljive SLED i VREME čije će vrednosti interapt rutina prepisati u odgovarajuće registre, poveća se brojač koraka i sledi čekanje da se interapt rutina izvrši.
Slika 3. Algoritam pozicioniranja
Kada se izvršio, DONE fleg se odmah briše, traži se sledeća faza i odmah se i stavlja u promenljivu odakle će je interapt rutina prepisati. Sad sledi niz provera do koje faze je koračanje stiglo. U zavisnosti od toga da li je na redu ubrzavanje, konstantna brzina, korak kada počinje usporavanje, usporavanje ili kraj preduzima se odgovarajuća akcija. To je uzimanje odgovarajuće vrednosti vremena za tajmer koja se i upisuje u za to predviđenu promenljivu VREME. Pri ubrzavanju uzima se vrednost iz tabele, pri usporavanju isto iz tabele i ažurira se DECPNT, pri konstantnoj brzini konstantna vrednost, a za korak početka usporavanja dvostruka prethodna vrednost. Posle toga se vraća na standardnu petlju čekanja da se interapt odradi. Jedino kada se detektuje kraj, zabrane se interapti, zaustavi tajmer i vraća se u glavni program.
Vredno je napomenuti da se vreme dobija iz tabele i to u obliku višeg i nižeg bajta. To radi odgovarajući potprogram. Time je gotovo sve rečeno o algoritmu upravljanja. Ostaje još da se da kompletan asemblerski listing programa mikrokontrolera Intel_8051. Program je komentarisan tako da se mogu uočiti svi delovi o kojima je bilo reči.
;** Program mikrokontrolera 8051 za upravljanje koracnim motorom **
Električna šema mikrokontrolera i elektronskog pogonskog kola motora
Elektronsko kolo mikrokontrolera je jednostavno. Integrisano kolo mikrokontrolera je priključeno na napajanje od 5V - VCC. Njegov reset signal je vezan preko kvaziintegratora i reset signal polako opada kada se uključi napajanje i postiže da resetuje kolo pošto dovoljno sporo opada, a napon napajanja se dovoljno brzo uspostavlja. Oscilator je uobičajeni, prema preporukama proizvođača sa kristalom učestanosti 12MHz. EA/VP je na VCC pošto nema eksternog eproma, nego je program isprogramiran u ugrađenom ROM-u. P3 uopšte nije upotrebljen, pa nijedan pin nije povezan nigde.
P0 je ulazni port za D linije interfejsa. P1 sa svoja četiri niža bita kontroliše uključenje pogonskih tranzistora. P2 je mešovit, i ulazni i izlazni. Mora se primetiti još jedna važna stvar. Svi signali koji izlaze iz mikrokontrolera su priključeni na bafersko kolo - drajver magistrale 74LS244. To je urađeno zato što su strujne mogućnosti mikrokontrolera skromne, a za linije koje izlaze iz uređaja poželjno je da budu malo većih strujnih mogućnosti. Pošto na tom kolu ima još slobodnih bafera, kroz to kolo puštaju se i kontrolni signali za uključenje pogonskih tranzistora. To kolo može da da struju od oko 15mA po baferu pri visokom izlaznom naponu i da proguta struju od oko 24mA pri niskom izlaznom naponu. Dakle sasvim u redu. Signali koji izlaze iz uređaja preko interfejsa i oni koji preko istog ulaze povezani su na 25 pinski D konektor kao što je to propisano standardom za računare (PC), stim što su specijalni signali povezani na pinove koji se u ovoj primeni ne koriste ili se uopšte ne koriste kod ovog interfejsa. Napajanje uređaja izvedeno je kao nezavisno. Daje dva izlazna napona i to VCC - stabilisani jednosmerni napon od 5V, i nestabilisani jednosmerni napon srednje vrednosti 26V. Masa im je zajednička, dakle nema galvanskog odvajanja pogonskog, energeskog dela. Očekivana potrošnja upravljačke elektronike ne bi trebalo da pređe 300mA, a za tu struju i datu vrednost filtarskog kondenzatora od 1000uF brujanje iznosi oko 3V, pa vršna vrednost napona na prvom sekundaru transformatora treba da iznosi oko 10V što daje neophodan prenosni odnos od 26:1. Tada će linearni regulator na svom ulazu imati oko 6,5V, što mu je dovoljno da da ispravan napon od 5V na svom izlazu. Drugi sekundar transformatora radi sa mnogo većim strujama. Nema stabilizacije. Najviše mogu biti uključene dve faze, svaka sa po 1,8A, dakle ukupno 3,6A. Pri tome, ako su filtarski kondenzatori ukupnog kapaciteta 6600uF, brujanje iznosi oko 5V, dakle ±2,5V. Ako se vršna vrednost podesi na 28,5V na sekundaru to će značiti srednju vrednost jednosmernog napona od 26V. Nije neophodno da ta vrednost napona bude mnogo tačna pošto promena od 2,5V pri naponu od 26V unosi promenu struje manje od 10%, a pošto je reč o brujanju i struja će da osciluje oko svoje potrebne vrednosti (1,8A) u svakom namotaju. To zahteva prenosni odnos 9,11:1. U ispravljaču se moraju upotrebiti diode koje izdržavaju struje i preko 4A. Ostaje još pogonsko tranzistorsko kolo. Glavni prekidač je NPN tranzistor čije strujne mogućnosti treba da budu bar 1,8A pošto je to maksimalna struja koja se ima kroz svaki namotaj motora. Međutim bolje je da se stave tranzistori koji izdržavaju i 3A jer ako dođe do veoma brzog ponovnog uključenja tranzistora, a struja kroz namotaj se još nije ugasila kroz zamajnu diodu, tranzistor će morati da izdrži i inverznu jako veliku struju diode, pa je bolje da je on ipak nešto jači od neophodnog minimuma (1,8A), mada do opisane situacije u uobičajenom radu ipak ne bi trebalo da dolazi. Zamajna dioda bi trebalo da bude bar za 2A. Naponi opterećenja koji se tu javljaju su maksimalno do oko 28V, dakle nisu problematični pa u obzir dolaze niskonaponski tranzistori (40 - 60V). Od tranzistora se zahteva da ima koeficijent strujnog pojačanja od bar hfe=50. Pri struji od 1,8A, njegova bazna struja je bar 60mA da bi bio u zasićenju. Za razdelnik u odnosu kao što je dato na šemi kolektorska struja gornjeg PNP tranzistora je oko 33mA. Ako on ima bar hfe=100, a to za takav tranzistor uopšte nije problem, kolektorska struja prvog poslednjeg NPN tranzistora, odnosno njegova bazna struja, sigurno neće biti veća od 2mA. Naravno sve ove vrednosti su računate kao da su tranzistori u aktivnom režimu. Međutim cilj je da se svi tranzistori dovedu u zasićenje. A to će se i desiti jer podešeno je da sve bazne struje imaju minimalne vrednosti koje će biti dovoljne za to. Ta dovoljna bazna struja za NPN tranzistor biće oko 200uA ako mu je u kolektoru otpornik od 12k, a u baznom kolu otpornik od 220k. Tu bi struju mogao da da i mirokontroler, ali pošto je bilo slobodnih bafera na 74LS244 bolje je da tu struju daje on. Disipacije na ovim malim tranzistorima su u uključenom stanju vrlo male reda nekoliko mW. Na velikom tranzistoru ona iznosi 360mW, što isto ne bi trebalo da bude problem za tranzistor takvih strujnih mogućnosti. Naravno ta snaga može nešto da se izmeni zbog uključivanja - isključivanja. Jedino prinudna otpornost ima značajnu disipaciju od oko 21W kada kroz nju protiče struja pa treba predvideti odgovarajuće hlađenje za njega. Data je i principska šema detektora nultog položaja. LED dioda stalno emituje svetlost i postavljena je u blizinu fototranzistora. Dok dioda svetli fototranzistor provodi i napon njegovog kolektora je nizak ako je gornja otpornost dovoljno velika. Ako odgovarajući deo pisaće glave prekrije LED diodu fototranzistor prestaje da vodi i kolektorski napon odlazi na visok nivo. Taj se napon dovodi na jedino preostalo bafersko kolo pošto je ovako napravljen detektor veoma male snage. Sve šeme, date su u prilogu koji sledi.
Zaključak
Prikazani uređaj, napravljen je dosta jednostavno, nema previše delova, dosta je jednostavan što se tiče hardvera. Sve poslove oko upravljanja preuzima mikrokontroler, tako da pored njega od hardvera ostaju samo napajanje i pogonska energetska kola motora. No ni ovako mikrokontroler nije previše opterećen. Da se preorganizuje upravljanje i da se mnogo više koriste interapti i tajmeri mikrokontrolera, mogao bi se realizovati i upravljački uređaj za više od jednog motora, no to bi zahtevalo znatno složeniji program za upravljanje.
Nezgodno mesto ovog uređaja je njegov deo za napajanje. Pošto se energetski deo napaja jednosmernom strujom potrebni su ogromni i dosta skupi kondenzatori i veliki transformator koji takođe nije jeftin. Doduše. naponi su niski što možda u nekome popravlja stvar bar što se tiče cene kondenzatora. Stvar bi se možda dala rešiti nekim drugačijim tipom napajanja - možda prekidačkim regulatorom, ali to bi na drugi način usložnilo i poskupelo rešenje.
Prilog
Prilog 1. Skica mehaničke strukture sistema
Prilog 2. Šema elektronskog kola mikrokontrolera
Prilog 3. Baferisanje izlaznih signala mikrokontrolera
Prilog 4. Šema jednog elementa (ima ih 4) drajverskog kola
Prilog 5. Šema koračnog motora i kako su pogonska kola priključena na njega
Prilog 6. Električna šema napajanja uredjaj
Prilog 7. Konektor na kablu uredjaja koji se priključuje na računar
Prilog 8. Detektor nultog položaja (principska šema)
Teorijska objašnjenja možete pogledati na ovom linku .
Komentari (2)
![]() napisao Marko Nikolić, January 12, 2010
Pozdrav kolega,
na linku na kraju teksta možes pogledati jedan članak koji se tiče programiranja mikrokontrolera u asembleru. http://www.automatika.rs/index...mcs51.html Prijavite neodgovarajući komentar
glasaj za
glasaj protiv
Glasova: +0
Napišite komentar
Morate biti prijavljeni da biste mogli poslati komentar. Molimo, registrujte se ukoliko nemate već otvoren korisnički nalog.
|
| < Prethodno | Sledeće > |
|---|









U Bazi znanja, opisana je struktura celog sistema u grubim crtama i na osnovu poznatih karakteristika motora s kojim raspolažemo određeni su svi parametri neophodni za kvalitetno upravljanje pomenutom strukturom. U ovom delu ostalo je da se daju crteži i šeme celog uređaja i naravno algoritmi i program koji će izvršavati mikrokontroler.



Voleo bih ako biste mogli da napišete nekoliko tekstova o programiranju u asembleru, jer o tome ne znam ništa, a vidim iz ovog vašeg članka da se to i na fakultetu radi.