U ovom projektu je prikazano konstruisanje elektronskog hronometra pomoću hibridnog unipolarnog koračnog motora. Na vratilo motora pričvršćena je kazaljka. Vratilo motora prolazi kroz brojčanik na čijem su obodu označene sekunde. U ravni brojčanika, postavljen je i dvocifreni sedmosegmentni LED displej na kojem se prikazuju protekli minuti. Koračni motor ima 200 koraka po jednom obrtaju. Nominalni napon motora je 12V, a otpornost namotaja je 30Ω. Takođe su na raspolaganju još tri tastera koje treba upotrebiti za kontrolu hronometra. Rezolucija treba da bude 1s.
Analiza hardvera
Ako koristimo Intel 8051 sa programom u internoj postojanoj memoriji (ROM, EPROM ili FLASH) i nemamo potrebu za pristupom složenim dodatnim digitalnim uređajima, na raspolaganju su nam četiri osmobitna ulazno-izlazna porta. Procenjujemo da će to biti slučaj pri rešavanju ovog problema. U slučaju da nam je neophodna spoljašnja programska memorija ili veći broj digitalnih uređaja kojima se pristupa preko magistrala adresa i podataka, morali bismo jedan ili dva osmobitna porta da žrtvujemo u tu svrhu.
Koračni motor na raspolaganju je hibridni unipolarni, što znači da za njegov pogon možemo koristiti prekidače za samo jedan smer struje, a pošto imamo četiri fazna namotaja, biće potrebna četiri prekidača. Nominalni napon napajanja za motor je 12V, otpornost namotaja 30Ω, na osnovu čega možemo zaključiti da je maksimalna struja jedne faze motora iF=12V/30Ω=400mA. Imajući to u vidu, zaključujemo da bi nam najzgodnije bilo da kao prekidače upotrebimo integrisanu komponentu ULN2803 koja sadrži osam tranzistora u Darlington sprezi. Svaki od njih predstavlja prekidač kakav smo zaključili da nam treba, a strujne mogućnosti kola su dovoljne za procenjenu maksimalnu jačinu struje. Za njegovu kontrolu moramo predvideti četiri digitalna izlaza. Detaljnije o tome kasnije.
Pošto imamo i tri tastera, iskoristićemo ih da nam daju očitavanje logičke nule ili jedinice u zavisnosti da li su pritisnuti ili ne. Za to će nam biti potrebna tri digitalna ulaza.
Ostaju sedmosegmentni LED displeji. Obično svaki od njih ima sedam segmenata (LED dioda) koji predstavljaju samu cifru i još jedan segment koji predstavlja decimalnu tačku. Za potpunu, neposrednu kontrolu svih elemenata, zahteva osam digitalnih izlaznih linija. Moramo doneti sledeću odluku: da li da projektujemo kolo koje troši 16 digitalnih izlaza za pogon displeja ili da predvidimo hardverski dekoder BCD cifre na sedmosegmentni displej čime bismo za dve cifre morali da potrošimo dva puta po četiri digitalna izlaza (jer jedna BCD cifra ima četiri bita) što je dva puta manje nego u prvoj varijanti. Kao treća mogućnost, postavlja se multipleksni prikaz dve cifre, pri čemu bismo korišćenjem hardverskog BCD/7-seg dekodera i dodatnih prekidačkih komponenti mogli da svedemo broj potrebnih izlaza na 5 izlaznih linija (kako ovo izvesti, biće pomenuto u sledećem primeru). Pošto smo na početku rekli da očekujemo da ćemo imati slobodna četiri osmobitna ulazno-izlazna porta, opredelićemo se za prvu varijntu. U slučaju da imamo ograničen broj slobodnih portova, u razmatranju bi bile druga i treća varijanta.
Slika 1. Mehanički raspored elemenata hronometra
Izvedba hardvera
U prethodnom odeljku, dali smo neke osnovne smernice, u kom smeru će se nastaviti naše razmišljanje o konkretnom hardveru našeg hronometra. U skladu s tim, nacrtana je šema prikazana na slici 2.
Slika 2. Šema uređaja
Kontrolni tasteri
Zadato je, da postoje tri tastera preko kojih će se hronometar kontrolisati. U tu svrhu je iskorišćeno tri prekidača koji daju kratak spoj između krajeva, kada su pritisnuti. U varijanti prikazanoj na šemi u slučaju da je neki od prekidača pritisnut, odgovarajuća nožica mikrokontrolera (od P14 do P16) biće kratko spojena na masu i sa odgovarajućeg bita porta 1 moći će da se očita logička nula. Kada je prekidač pušten, odgovrajuća nožica je spojena na napon napajanja (Vcc) preko otpornika od 10k, a to je dovoljno da mikrokontroler može da očita logičku jedinicu. Otpornik je neophodan, da pri zatvorenom prekidaču ne bude kratak spoj između Vcc i mase.
Sedmosegmentni displeji
Za pogon dva sedmosegmentna displeja, iskorišćena su kompletna dva porta mikrokontrolera i to portovi 0 i 2. Analizirajmo malo detaljnije tu situaciju: sama komponenta koja predstavlja jednu cifru displeja ima najmanje devet priključaka. Svaki segment predstavlja jedan LED. Uobičajeno je da se ili sve anode ili sve katode spoje zajedno (na jedan priključak), a drugi krajevi se pojedinačno izvode. Pošto imamo sedam segmenata cifre i decimalnu tačku, to je dakle, još osam priključaka. Na našoj šemi, data je prva varijanta (engl. Common Anode, što je označeno sa CA u imenu komponente), tzv. zajednička anoda. Ovo znači da se zajednički priključak spaja na napon napajanja, a pojedinačni izvodi preko otpornika na prekidače. Ako je neki prekidač zatvoren, odgovarajući segment svetli, u suprotnom ne. Detaljan prikaz opisane situacije možemo videti na slici 3. Sam ulazno-izlazni port mikrokontrolera, prikazan je kao mosfet kontrolisan hardverom (zapravo pod programskom kontrolom). Na svim portovima, osim nultog, postoji i takozvani slabi pull-up otpornik. O njemu će biti više reči kasnije. Dakle, uključi li se mosfet, struja će proteći prema masi. Napon između sorsa i drejna uključenog mosfeta je veoma mali, pošto se preko gejta uključuje dovoljno visokim naponom, da i za maksimalnu propisanu struju radi u omskoj oblasti. Za vrednost otpornosti datu na šemama (1k8), struja iznosi oko 1,83mA, što je dovoljno za LED-ove predviđene za rad sa malim strujama.
Slika 3. Prikaz jednog ulazno-izlaznog porta i priključenog LED-a
U dokumentaciji za mikrokontroler može se naći podatak, da je maksimalna struja koja ne bi trebalo da se prelazi pri normalnom radu 10mA po jednoj nožici porta. Svih osam nožica jednog porta u zbiru ne bi trebalo da vode struju veću od 15mA, osim u slučaju porta 0 kada je limit 26mA. Ovo se odnosi na struju koja teče kroz mosfet, dakle u mikrokontroler, pri niskom logičkom nivou. Čak i tada, pomenute struje se mogu tolerisati samo pri kontroli sporih procesa preko odgovarajućih nožica, kada brzina odziva nije bitna. Pri visokom logičkom nivou, možemo da očekujemo nekoliko puta manje struje (zbog velike vrednosti) ugrađenog pull-up otpornika i ni u kom slučaju ne bi trebalo napajati neki potrošač u takvoj konfiguraciji.
Napomenimo još nešto: ovo je pažljivo izabran primer, kada je ovo moguće i dozvoljeno uraditi ovako jer je brzina kojom očekujemo promenu na displeju veoma mala. Kada pristupamo nekoj brzoj periferiji, nekom drugom digitalnom sistemu, opterećenje na portovima mora biti daleko manje. Dozvoljeno opterećenje portova je 8 TTL ulaza na portu 0, a 4 na ostalim portovima.
Pogon hibridnog, unipolarnog koračnog motora
Da bismo u potpunosti razumeli kako pogon koračnog motora funkcioniše (a to će nam biti od značaja i kada ćemo se baviti softverskim delom rešenja), podsetimo se nekih detalja. Na slici 4 je šematski prikazano ekvivalentno električno kolo pomenutog tipa koračnog motora. Brojevi sa leve strane predstavljaju mesta priključivanja motora na pogonsko kolo i odgovaraju brojevima sa glavne šeme (Slika 2). Priključak za masu dat je za slučaj da je neophodno napajati neki davač pozicije ili slično, a u ovom slučaju ne igra nikakvu ulogu. Četiri nacrtana kalema predstavljaju četiri namotaja ovakvog motora. Namotaji su motani sa po dva provodnika istovremeno (bifilarno) i na taj način dobijamo dva para kalemova identične geometrije (na slici su parovi označeni strelicama). Posledica zajedničkog motanja namotaja je da će ista struja kroz bilo koji od dva namotaja iz jednog para da stvori identičan magnetski fluks kroz motor. Krajeve ta dva namotaja povezujemo tako da je po jedan kraj svakog namotaja spojen zajedno (zajednički kraj) na jedan kraj izvora jednosmerne struje, a druge krajeve spajamo na drugi kraj izvora, dobijamo potpuno isti fluks kroz motor, ali suprotan smer polja. Na taj način, dolazimo do šeme sa slike: zajednički kraj oba para namotaja se vezuje zajedno i predstavlja priključak 1 – on se obično vezuje na napon napajanja. Preostale krajeve možemo priključiti na masu (pomoću prekidačke komponente). Priključivanje npr. priključka 2 i 4 naizmenično na masu, stvoriće kroz motor ista magnetska polja, ali suprotnog smera, jer ta dva namotaja čine par. Da bi ovakav motor okretao u jednu stranu potrebno je kroz motor stvoriti magnetska polja sledećih smerova redom: napred kroz prvi par, napred kroz drugi par, nazad kroz prvi par, nazad kroz drugi par (napred i nazad nema fizičko značenje, korišćeno je samo radi lakšeg razumevanja). Nakon toga se sekvenca ciklično ponavlja. Za kretanje na suprotnu stranu, potrebno je ovu sekvencu sprovoditi suprotnim redosledom. Pomenuta pobuda je tzv. jednofazna pobuda. Moguće je pokretati motor i na druge načine, npr. dvofazno (polja parova namotaja se sabiraju i dobija se veći pogonski moment) ili polukoračno (dobija se neravnomeran pogonski moment). Detaljnije o ovome se može naći u literaturi.
Slika 4. Električno kolo koračnog motora
Na osnovu prethodno rečenog, jesno je da motor možemo pokretati na sledeći način: zajednički kraj (1) vežemo na napajanje, a slobodne krajeve preko prekidača pojedinačno spajamo ili ne spajamo na masu. Uključivanjem samo jednog od prekidača u ponavljajućoj sekvenci na krajevima (2), (3) , (4) , (5) izazvaćemo potrebna polja za okretanje motora na jednu stranu. Promenom sekvence uključivanja prekidača, možemo postići i druge varijante upravljanja motorom. Kolo koje sadrži potrebne prekidače je ULN2803 čija je struktura prikazana na slici 5. Na levoj strani vidimo šemu kompletnog integrisanog kola koje sadrži osam nezavisnih prekidača, a na desnoj strani je prikazana fizička struktura svakog od prekidača. U pitanju su dva tranzistora u darlington spoju, a otpornici prilagođuju prekidač upravljanju pomoću naponskih nivoa koji su na raspolaganju na izlazima logičkih kola napajanih sa 5V (TTL/CMOS).
Slika 5. Struktura kola ULN2803
Na slici 6. šematski je prikazano pogonsko kolo zajedno sa detaljima interne strukture mikrokontrolera i ULN2803. Unutar pravougaonika nacrtanih isprekidanom linijom, nalaze se elementi odgovarajućih integrisanih kola. Razmotrimo prvo uključenje, tj. proticanje struje kroz jedan namotaj motora (PHx na šemi): mosfet odgovarajuće ulazno/izlazne nožice je isključen (programiran visok nivo – logička jedinica), pa je ulaz odgovarajućeg prekidača preko pull-up otpornika Rpu vezan za napon napajanja Vcc (5V) i prekidački tranzistori dobijaju baznu struju dovoljno veliku da provedu u zasićenju. Kao rezultat, namotaj PHx je povezan na približno napon napajanja motora od 12V i kroz namotaj se uspostavlja struja od IPH =12/RPH. Pošto RPH iznosi 30Ω, očekivana ustaljena struja je 400mA. Namotaji poseduju i izvesnu induktivnost, tako da se struja ne uspostavlja odmah, nego struja po eksponencijalnom zakonu dostiže svoju ustaljenu vrednost. Međutim, pošto je očekivana frekvencija uključivanja faza do maksimalno nekoliko stotina Hz, ovo ne moramo analizirati jer je vremenska konstanta promene značajno manja od trajanja uključenog stanja prekidača. Zamajna dioda FWD je u ovom slučaju inverzno polarisana i sigurno neprovodna.
Slika 6. Šematski prikaz pogonskog kola koračnog motora
Kada želimo da isključimo struju kroz namotaj, ulazno/izlazna nožica mikrokontrolera se programira na nizak logički nivo, što izaziva uključenje mosfeta. Time se baza prekidačkih tranzistora spaja na masu i time se oni efikasno gase. Usled značajne induktivnosti namotaja, struja nastavlja da teče kroz namotaj, ali kroz zamajnu diodu FWD, opadajući prema nuli po eksponencijalnom zakonu u skladu sa vremenskom konstantom. Nakon toga kroz namotaj motora više ne teče nikakva struja. Primetimo da se u ULN2803 nalazi onoliko integrisanih zamajnih dioda koliko ima i prekidača. Sve su anode spojene zajedno na jedan izvod kola i taj se izvod spaja na napon napajanja. Kod induktivnih potrošača kao što je slučaj u ovom primeru, povezivanje zamajne diode je obavezno jer bi u suprotnom usled prekida struje došlo do značajnih prenapona na prekidaču koji bi ga mogli uništiti.
Iz ovog razmatranja, treba uočiti važnost primene pull-up otpornika na portovima mikrokontrolera. Portovi 1, 2 i 3 poseduju već ugrađene ovakve otpornike. U dokunetaciji se spominje kao slabi pull-up i poseduje veoma veliku vrednost otpornosti. Primetimo da port 0 uopšte nema nikakve ugrađene pull-up otpornike. U slučaju kao što je ovaj, ne možemo se osloniti ni na kakav slabi pull-up, pošto nam je potrebno značajno opterećenje porta na visokom nivou koje prema dokumentaciji ULN2803 može dostići i skoro 2mA. Naravno, u ovoj konkretnoj konfiguraciji, zbog veličine pull-up otpornika, tolika struja ne može, a i nema potrebe da se dostigne. U nekoj primeni, gde je veća struja neophodna, treba smanjiti vrednost tog otpornika, ali nikada toliko da predstavlja značajno opterećenje mosfetu pri niskom logičkom nivou. Ako su velike struje potrebne, uvek treba razmotriti dodavanje dodatnog baferskog kola.
Analiza softverskog rešenja
U postavci zadatka, dato je da su na raspolaganju tri tastera za kontrolu, što smo u hardverskom delu uvažili i implementirali. Nije međutim, precizirano, kako tačno pomoću njih kontrolisati hronometar? Dakle, imamo slobodu da to uradimo kako nam odgovara, odnosno mislimo da je najbolje, a naš softver će biti napisan u skladu sa tim. Opredelićemo se za najjednostavniju varijantu: neka jedan taster bude start, drugi stop, a treći reset. Start pokreće merenje vremena, stop zaustavlja (ali se može nastaviti ponovnim pritiskom na start), dok reset vraća kazaljku u početni položaj i postavlja pokazivanje displeja na nulu. Taster će se smatrati aktiviranim u trenutku ostvarivanja prvog kontakta (bez filtriranja tzv. odskakanja kontakata), a istovremeni pritisci na više tastera mogu prouzrokovati neispravan rad. Dakle obrada komandi sa tastera će biti samo minimalna. No, uprkos tome, hronometar će biti potpuno funkcionalan, razmotrićemo zašto.
Koračni motor koji je na raspolaganju ima 200 koraka. Zahtevana rezolucija je 1s i zato ćemo kazaljku pokretati skokovito: 60 pomeraja od po 6 stepeni u jednom minutu. Ovo uvodi jedan problem: naš motor ima korak od 360°/200 što daje korak od 1,8°. Taj korak se ne sadrži ceo broj puta u potrebnih 6°, drugim rečima 200/60 nije ceo broj. Rešenje koje ćemo primeniti, malo će odstupati od idealnih uglovnih položaja, ali to posmatraču nije previše upadljivo i što je još važnije, ne akumulira grešku vremenom. Dva uzastopna skoka, izvešćemo sa tri koraka motora (5,4°), a naredni jedan skok sa četiri koraka (7,2°), što će tokom jednog kruga dati 40 skokova od 3 koraka i 20 skokova od 4: (40×3)+(20×4)=200. Time smo problem rešili.
Što se displeja tiče, pošto imamo dve cifre, najveći broj minuta koje možemo prikazati je 99. Najjednostavnije je da tu vrednost predstavimo osmobitnom (jedan bajt) vrednošću. Nakon isteka svakog minuta, vrednost povećavamo za jedan, a nakon reseta samo postavimo na nulu. Naravno, pri svakom osvežavanju displeja, osmobitnu vrednost moraćemo da konvertujemo u dve binarno kodirane (BCD) cifre, a njih u sedmosegmentne cifre (pomoću tabele).
C file za mikrokontroler možete skinuti ovde.
Literatura:
- Mikrokontroler 8051/8052, Praktikum za laboratorijske vežbe – Miloš Slankamenac , Kalman Babković , Ivan Mezei
Fakultet tehničkih nauka, Katedra za elektroniku