Professional Documents
Culture Documents
D.radosavljevic - M.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877
D.radosavljevic - M.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877
ELEKTORNSKI FAKULTET
KATEDRA ZA ELEKTRONIKU
Studenti:
Mentor:
Sadržaj
Uvod 2
2. Mikrokontroler PIC16F877 11
2.1. Osnovne karakteristike mikrokontrolera
2.2. Arhitektura mikrokontrolera
2.3. Organizacija memorije
2.4. A/D konverzija
2.5. Periferijske jedinice
3. Hardverska realizacija 46
3.1. Šema sistema
3.2. Fizički izgled štampane pločice
3.3. Povezivanje uređaja na računar
3.4. Spisak korišćenih komponenata
4. Softver 52
4.1 MikroC
4.2. Programiranje korišćenjem AllPic -a i IC/prog-a
4.3. Algoritam
4.4. Listing programa u programskom jeziku C
5. Laboratorijska Vežba 93
6. Prilozi 95
6.1. Specifikacije pojedinih komponenti
6.2. AllPic Programator
6.3. Izgled realizovanog uređaja
Literatura 104
-1-
Upravljanje step motora preko mikrokontrolera PIC16F877
UVOD
Cilj ovog rada je da se pokaže kako je moguće preko mikrokontrolera upravljati step motorom i
unapred mu zadati različite parametre (mod rada, smer okretanja, pauzu između koraka).
U prvom poglavlju je teorijski objašnjen princip rada step motora i način kontrole različitih
namotaja. Dat je pregled osnovnih tipova motora i analiziran rad u monofaznom, dvofaznom i modu
polu koraka.
U drugom poglavlju opisan je mikrokontroler PIC16F877: arhitektura, mogućnosti i
specifikacije.
Treće poglavlje se bavi konkretnom realizacijom hardvera; prikazani su električna šema i izgled
štampane ploče projekta sa objašnjenjima uloga i funkcija komponenata u kolu, kao način povezivanja
i kontrolna logika između njih samih.
U četvrtom poglavlju prikazan je softver koji je korišćen za pisanje programa i za programiranje
mikrokontrolera, takođe je prikazan i listing programa u C-u.
Peto poglavlje predstavlja predloženu pokaznu laboratorijsku vežbu.
U šestom poglavlju su prilozi : specifikacije pojedinih komponenti i AllPic programatora kao i
fotografija realizovanog uređaja.
-2-
Upravljanje step motora preko mikrokontrolera PIC16F877
Step motori nalaze najveću moguću primenu u kompjuterskom upravljanu. Ovi motori se dele u
dve grupe i to: unipolarne i bipolarne step motore. Kod oba tipa motora jedan dovedeni impuls
uzrokuje pomeranje za jedan korak čija veličina u stepenima zavisi od vrste primenjenog step motora.
Tako su najčešće primenjivani uglovi za rotaciju za 1 korak dati u donjoj tabeli:
0.9 400
1.8 200
3.6 100
7.5 48
15 24
Step motore karakteriše nisko napajanje kao i mala struja potrošnje. Na donjoj slici je prikazan
presek step motora kao i namotaji za napajanje.
-3-
Upravljanje step motora preko mikrokontrolera PIC16F877
Ovaj motor se sastoji od rotora proizvedenog od nemagnetnog čelika i statora koji se sastoj od
većeg broja polova. Motor se upravlja tako da se na određeni par polova dovodi napajanje i koji
privlači polarizovane delove rotora. Step motori mogu da rade u tri različita režima i to:
Pretpostavimo da imamo step motor sa četiri namotaja. U monofaznom modu za svaki korak
dovodi sa napon samo na jedan namotaj što je dato u donjoj tabeli. Ta sekvenca se ponavlja onoliko
puta koliko želimo da imamo koraka. Budući da se napaja samo jedan namotaj to je i mali pokretni
momenat motora.
a.1 1 0 0 0
a.2 0 1 0 0
a.3 0 0 1 0
a.4 0 0 0 1
-4-
Upravljanje step motora preko mikrokontrolera PIC16F877
U dvofaznom modu napajaju se po dva namotaja istovremeno. Ovo je i najčešći postupqk koji
se primenju jer je tada i pokretni momenat motora najveći. Ovaj mod je prikazan u donjoj tabeli .
b.1 1 1 0 0
b.2 0 1 1 0
b.3 0 0 1 1
b.4 1 0 0 1
-5-
Upravljanje step motora preko mikrokontrolera PIC16F877
a.1 1 0 0 0
b.1 1 1 0 0
a.2 0 1 0 0
b.2 0 1 1 0
a.3 0 0 1 0
b.3 0 0 1 1
-6-
Upravljanje step motora preko mikrokontrolera PIC16F877
a.4 0 0 0 1
b.4 1 0 0 1
Za eksperimetisanje sa step motorima je najbolji način da se iz starog flopi drajva (5.25") uzme
step motor. Kod nas su često bili u upotrebi flopi drajvovi sa TEAC step motorom koji je prikazan na
donjoj slici.
-7-
Upravljanje step motora preko mikrokontrolera PIC16F877
Boja Namena
Crvena Namotaj 1
Plava Namotaj 2
Bela Namotaj 3
Narandžasta Namotaj 4
Za upravljanje step motorima često se koristi kolo UNL2003A koje smo mi već opisali. Tipična
šema takvog interfejsa koji se priključuje na paralelni port PC računara data je na donjoj slici.
Takođe se koristi i kolo 5804B firme Allegro upravo razvijeno za upravljanje step motorima
prikazano na donjoj slici:
-8-
Upravljanje step motora preko mikrokontrolera PIC16F877
Način rada ovog kola za upravljanje step motorom određuju pinovi 9 i 10 prema sledećoj tabeli:
Dvofazni L L
Monofazni H L
Polukorak L H
Zabrana rada H H
gde je: L - niski naponski nivo a H - visoki naponski nivo. Tipična aplikacija sa ovim kolom data je na
donjoj slici:
-9-
Upravljanje step motora preko mikrokontrolera PIC16F877
Iz prikazane šeme se vidi da pojedini bitovi sa Data porta se koriste prema sledećoj tabeli:
Bit Namena
0 Impuls za pokretanje
1 Smer okretanja
2 Jedn./Dvofazni mod
3 Polukor./Puni korak
- 10 -
Upravljanje step motora preko mikrokontrolera PIC16F877
2. MIKROKONTROLER PIC16F877
Većina današnjih mikrokontrolera je bazirano na Harvard arhitekturi, koja jasno definiše četiri
osnovne komponente potrebne za embedded sistem. To uključuje CPU jezgro, memoriju za program
(ROM, EPROM ili Flash memorija), memoriju za podatke (RAM), jedan ili više tajmera (podesive i
watchdog tajmere), kao i I/O linije za komunikaciju sa eksternim periferijama i dopunskim resursima –
sve to treba da bude smešteno u jednom integrisanom kolu. Mikrokontroler se u osnovi razlikuje od
opštenamenskog mikroprocesorskog čipa po tome što ga je izuzetno lako pretovoriti u radni kompjuter,
sa minimumom eksternih čipova za podršku.
- 11 -
Upravljanje step motora preko mikrokontrolera PIC16F877
U/I portovi: A, B, C, D, E
Tri tajmera:
- 12 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Kao što je istaknuto, mikrokontroler PIC16F877A poseduje tipičnu RISC arhitekturu, koja je
prikazana na Sl.3.2. Arhitektura poseduje odvojene magistrale za podatke i programski kôd. Obim
podataka je 8-bitni, dok je programski kôd 14-bitni. Moguće je protočno izvršenje (pipelining).
Sve instrukcije su istog obima (osim instrukcija grananja) i izvšavaju se za četiri taktna intervala.
Dakle, ukoliko se koristi oscilator od 20 MHz, ciklus instrukcije traje 200 ns. Na Sl.3.2 prikazani su
gradivni blokovi mikrokontrolera PIC16F877A:
- 13 -
Upravljanje step motora preko mikrokontrolera PIC16F877
- 14 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Oscilator
RC Resistor/Capacitor
XT Crystal / Resonator
Frekvencija oscilovanja zavisi ne samo od vrednosti Rext i Cext, već i od napona napajanja kao
i radne temperature. Vrednost otpornika Rext treba da bude u opsegu od 3 KΩ do 100K KΩ. Izvan
ovog opsega rad oscilatora nije stabilan i osetljiv je na spoljašne uticaje. Kondenzator Cext se može
čak i izostaviti. Međutim, zbog stabilnosti preporučuje se vrednost oko 20pF. Na pinu OSC2/CLKOUT
generiše se taktni impuls čija je perioda četiri puta veća od periode rada oscilatora.
Kod vremenski kritičnih aplikacija treba ugrađivati kvarcni oscilator ili keramički rezonator.
Vr-ednosti kondenzatora C1 i C2 (Sl.4.4), treba da budu identične.
- 15 -
Upravljanje step motora preko mikrokontrolera PIC16F877
U Tabeli 2.1 dat je izbor vrednosti kondenzatora za različite vrednosti frekvencije kristalnog
kvarca, dok je u Tabeli 2.2 predložen izbor vrednosti kondenzatora pri različitim vrednostima frekven-
cije rezonatora.
Na kraju ćemo istaći kako mikrokontroler PIC16F877A može da radi i na frekvenciji 32 kHz,
ka-da ima izuzetno malu potrošnju.
- 16 -
Upravljanje step motora preko mikrokontrolera PIC16F877
- 17 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Takt koji se dovodi na pin OSC1 oscilatora u mikrokontroleru deli se na četiri vremenski
nepre-klapajuća taktna signala nazvana Q1, Q2, Q3 i Q4. Skup ovih signala čine jedan
instrukcijski cik-lus . U zavisnosti od trenutka generisanja u okviru ciklusa instrukcija, taktni signali
Q1-Q4 se koriste za sledeće namene:
- 18 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Reset
Uloga Reseta je da sve registre mikrokontrolera dovede u početno stanje. Ako se mikrokontro-
ler “blokira” , ili smo ga tek uključili, neophodno je da se resetuje. Kako bi se sprečilo slučajno
dovo-đenje logičke ’0’ na MCLR, potrebno je da se ovaj pin preko otpornika (npr. vrednosti 10KΩ)
po-veže na pin napajanja Vdd (Sl.4.6).
Power-on reset (POR) impuls se generiše u samom kolu kada se detektuje porast napona
napaja-nja (oko 1.2-1.7 V). Da bi se POR iskoristio, dovoljno je da MCLR pin priključimo na Vdd
direktno ili preko otpornika (Sl.2.6). Ukoliko je porast napona napajanja spor, neophodno je na
MCLR postaviti spoljnje kolo za reset. Prikaz kola za POR reset je dat na Sl.2.7.
- 19 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Interno POR kolo neće generisati Reset signal kad napon napajanja padne ispod minimuma. Za
situacije kada je moguća pojava BROWN-OUT-a (privremeni pad napona ispod minimalne vrednosti),
neophodno je da se priključi spoljašnje Brown-out reset kolo, koje je prikazano na Sl.2.8.
- 20 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Power-up Timer (PWRT) generiše impuls fiksne širine (nominalno 72 ms) od pojave impulsa
POR-a. Za to vreme će mikrokontroler biti u Reset stanju. Za ovaj vremenski period obezbeđuje se
da napon napajanja dostigne nominalnu vrednost. Tajmeru PWRT dozvoljava se rad setovanjem
PWRTE bita koji pripada konfiguracionoj reči u fazi programiranja čipa. PWRT se taktuje inter-
nim RC oscilatorom.
Oscilator Start-up Timer (OST) obezbeđuje kasnjenje od 1024 taktnih intervala nakon isteka
kva-zistabilne periode PWRT-a (vidi Tabelu 2.3). Ovo obezbeđuje da kristalni oscilator ili rezonator
star-tuju stabilnom frekvencijom. OST se aktivira samo kod XT, LP i HS režima rada i to pri: POR i
“buđenju” iz SLEEP režima rada.
- 21 -
Upravljanje step motora preko mikrokontrolera PIC16F877
RC 72 ms - -
Stanja na kojima se postavljaju interni registri CPU-a nakon Reseta zavisi od vrste Reseta i reži-
ma rada u kojima se nalazi mikroprocesor (Sleep i normalni).
Stanje nekih registara ostaje nedifinisano, neki zadržavaju svoje stanje, a ostali se postavljaju u
unapred definisana stanja (vidi Tabele 2.4 i 2.5).
- 22 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Legenda:
X (nepoznato stanje)
U (nepromenjeno stanje)
- 23 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Watchdog timer
Watchdog timer (WDT) se taktuje nezavisanim RC oscilatorom koji radi čak i kad je
zaustavljen rad glavnog oscilatora, u SLEEP režimu rada. Prekoračenje intervala brojanja WDT-a,
prilikom nor-malnog rada, izaziva RESET mikrokontrolera. Ako je mikrokontroler bio u SLEEP
režimu rada, pre-koračenje tajmera će probuditi mikrokontroler i program će nastaviti sa normalnim
radom. Isključi-vanje WDT-a se vrši resetovanjem WDTE bita u konfiguracionoj reči.
Nominalno vreme WDT-a je 18 ms bez uptrebe preskalera. Ovo vreme može da varira od kola
do kola, zbog temperature i slično. Ukoliko je potrebno duže vreme moze se WDT-u pridružiti
preskaler sa faktorom deljenja do 1:128, tako da se vreme može produžiti do 2.3s. Instrukcije
CLRWDT i SLEEP resetuju WDT.
Prekidi (Interrupts)
Onog trenutka kada se prihvati zahtev za prekid, sledi izvršenje prekidnog programa počev
od adrese 0x0004. Tada se programskim putem testira stanje markera, koji se postavljaju kada se
aktivira odgovarajući prekid (interrupt flags polling). Kada se ustanovi koji je od uređaja zah-
tevao prekid, prelazi se na izvršenje odgovarajuće rutine za obradu tog prekida. Povratna adresa pre-
kinutog programana čuva se automatski u hardverskom magacinu. Povratak iz prekidnog programa se
vrši instrukcijom RETFIE. Upravljački registar INTCON se koristi za maskiranje prekida.
RBIF (INTCON:0) setuje se kada se dogodi promena stanja na nekom od pinova RB4-RB7
PSPIF (PIR1:7) PSP marker bit koji se koristi u operaciji čitanja i upisa na PORTD, kada je on
konfigurisan kao PSP
RCIF (PIR1:5) marker koji označava da je prijemni bafer koji koristi USART blok, pun
TXIF (PIR1:4) marker koji pokazuje da je bafer za slanje podataka koji koristi USART prazan
- 24 -
Upravljanje step motora preko mikrokontrolera PIC16F877
EEIF (PIR2:4) marker koji se setuje kada se završi upis u interni EEPROM
BCLIF (PIR2:3) marker koji koristi SSP blok kada je konfigurisan da radi u I2C master režimu
Pored bita za dozvolu rada svih prekida General Interrupt Enable (GIE) i bita za dozvolu rada
prekida generisanih od strane periferija (PEIE), ovom registru pripadaju i markeri prekida (interrupt
flags) i bitovi koji dozvoljavaju prekid koji izaziva Tajmer0 (TMR0), spoljašnji prekid na pinu
RB0/INT i prekida porta B na promenu stanja. Osim ova tri osnovna prekida, postoji još 11 periferij-
skih prekida. Bi-tovi za njihovu dozvolu nalaze se u registrima PIE1 i PIE2, a odgovarajući flegovi – u
registrima PIR1 i PIR2.Ovi se flegovi setuju čim se ispuni uslov prekida bez obzira na stanje njiho-
vog bita dozvole, a po izvršenju servisne rutine potrebno ih je soſtverski resetovati.
- 25 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Tajmeri
TMR0 (Tajmer0) poseduje čitava familija PICmicro kontrolera. To je, zapravo, običan 8-bitni
brojač koji generiše prekid pri prelasku sa stanja 0xFF na stanje 0x00 (overflow). Izvor takta za TMR0
može da bude bilo interni sistemski sat (frekvencije Fosc/4) ili bilo kakav spoljni generator takta
spojen na pin RA4/T0CKI. Naravno, može da se podesi da se TMR0 inkrementira na rastuću ili opa-
dajuću ivicu spoljašnjeg signala. U kombinaciji sa modulom Tajmera0 može da se koristi za prog-
ramabilni preskaler (delilac frekvencije) sa odnosima deljenja od 1:2 do 1:256. Ako deljenje nije pot-
rebno, preskaler se dodeljuje watchdog tajmeru. Kada je preskaler u upotrebi, maksimalna frek-
vencija eksternog izvora iznosi 50MHz. Na Sl. 2.10 prikazan je blok-dijagram TMR0/WDT preskalera.
TMR1 je 16-bitni tajmer i može da radi kao brojač ili može da se koristi za merenje vremena. Blok-
šema ovog tajmera data je na Sl. 2.11. TMR1 može da ima tri izvora takta: sistemski sat (Fosc/4),
spoljašnji takt ili spoljašnji kristal. Brojač eksternih događaja može se sinhronizovati sa internim
oscilatorom, a postoji i asinhroni način rada koji omogućava da se brojač inkrementi-ra i u SLEEP
režimu rada. Preskaliranje je moguće sa vrednostima deljenja 1:1, 1:2, 1:4 i 1:8.
- 26 -
Upravljanje step motora preko mikrokontrolera PIC16F877
TMR2 je 8-bitni tajmer sa programabilnim preskalerom i postskalerom. Može da bude tajmer ili brojač
opšte namene. Međutim, potreban je CCP modulu prilikom generisanja PWM signala i modulu za
sinhronu serijsku komunikaciju (SSP) kao Baud Rate generator. Zajedno sa TMR2 ko-risti se registar
PR2 (Period Register). Kada se vrednost brojača izjednači sa vrednošću upisanom u registar
PR2, generiše se odgovarajući prekid. Struktura TMR2 prikazana je na Sl. 2.12.
Portovi
- 27 -
Upravljanje step motora preko mikrokontrolera PIC16F877
PIC16F877A poseduje pet portova (PORTA, PORTB, PORTC, PORTD i PORTE) i oni pred-
tavljaju vezu njegove interne strukture sa spoljašnjim svetom. Svaki od njih može da se konfiguriše kao
ulazni ili kao izlazni. Pomenuti portovi su različitog obima:
6-pinski (PORTA)
3-pinski (PORTE).
Svakom pinu bilo kojeg porta, u zavisnosti od režima rada, mogu da se dodele fiksne ili
promen-ljive funkcije. Konfiguracija smera prenosa ostvaruje se upisom na odgovarajuću bit-poziciju u
pripa-dajućem TRIS registru (0 - pin je izlazni, 1 – pin je ulazni).
Svakom portu je dodeljen registar podataka (PORTX), preko kojeg se programski pristupa
U/I pinovima. Upis u neki od tih registara iniciraće upis u latch tog porta, a njegovo čitanje rezultiraće
čita-njem logičkih stanja direktno sa pinova. Sve instrukcije upisivanja su tipa read-modify-write . To
znači da se pri upisu u port najpre očitaju stanja pinova, zatim izvrši modifikacija, a potom
korigovana vrednost upiše u latch porta. Ne postoji velika razlika u konstrukciji pomenutih pet
portova. Jedino se PortB od ostalih razlikuje zbog posebne opcije koju nude četiri MSB. Ukoliko se
setuje bit RBIE u registru INTCON, svaka promena stanja na ovim pinovima, generisaće prekid
mikrokontrolera.
PortA
PortA je 6-bitni (RA5-RA0) bidirekcioni port (podaci mogu da se šalju u oba smera). Sadržaj
re-gistra TRISA određuje smer (ulazni ili izlazni) pinova na portu. Blok-dijagrami za pin RA4 je
prikazan na Sl.2.13, a za ostale pinove na Sl.2.14.
- 28 -
Upravljanje step motora preko mikrokontrolera PIC16F877
TRISA = 0b101000 (RA5 i RA3 pinovi su ulazni, a RA4, RA2, RA1 i RA0 su izlazni)
- 29 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Pin RA4 je sa otvorenim drejnom i može da se iskoristi za ulazni takt za tajmer TMR0.
- 30 -
Upravljanje step motora preko mikrokontrolera PIC16F877
U Tabeli 2.6 dati su prikaz funkcija pojedinačnih pinova PortaA i registri koji se koriste za
konfigurisanje porta.
Port B
Port B je 8-bitni bidirekcioni port. Svakom pinu porta korespondira odgovarajući bit u
regis-tru TRISB, kojim se definiše smer. Svi pinovi unutar PortB poseduju pull-up otpornike. Ovi
otpor-nici mogu da se uključe jednim kontrolnim bitom. To se postiže postavljanjem RBPU' bita
na ‘0’. Pull-up otpornici se automatski isključuju kada se pin konfiguriše kao izlazni. Otpornici su
isklju-čeni i kod Power-on reseta.
Četiri pina na PORTB (RB7-RB4) imaju mogućnost generisanja prekida. Samo pinovi
koji su definisani kao ulazni mogu da prouzrokuju prekid.
Kombinacija prekida na promenu stanja PortaB i pull-up otpornik mogu se iskoristiti kao
jednostavan interfejs za tastaturu.
- 31 -
Upravljanje step motora preko mikrokontrolera PIC16F877
- 32 -
Upravljanje step motora preko mikrokontrolera PIC16F877
U Tabeli 2.7 dati su prikaz funkcija pojedinačnih pinova PortaB i registri koji se koriste za
konfigurisanje porta.
Port C
Port C je 8-bitni bidirekcioni port. Posebnost ovog porta se ogleda u tome što poseduje ugrađen
USART modul, koji služi za serijsku komunikaciju (npr. sa racunarom ili drugim mikrokontro-
lerom). Modulu se pristupa preko pinova RC7 i RC6. Pinove treba softverski konfigurisati da budu u
funkciji USART modula.
- 33 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Na Slikama 2.16 i 2.17 prikazana je struktura PortaC, dok je funkcionalna tabela registara koji
se koriste za konfigurisanje samog porta data u Tabeli 2.8.
- 34 -
Upravljanje step motora preko mikrokontrolera PIC16F877
- 35 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Portovi D i E
Port D je 8-bitni bidirekcioni port. Ovaj port može da se konfiguriše kao 8-bitni paralelni
mikro-procesorski port (parallel slave port-PSP) i to podešavanjem konfiguracionog bita PSPMOTE
(TRISC<4>). U ovom režimu rada ulazni bafer je TTL tipa.
Port E je bidirekcioni veličine 3 bita. Ima mogućnost A/D konverzije.Ulazni bafer je tipa
Schmitt Trigger. Pinovi mogu da se konfigurišu kao digitalni ili analogni, kao i u slučaju PortaA, o
čemu je već bilo reči.
Programska memorija
Memorija podataka
Inače, u mikrokontroleru postoji i stack (magacin), koji radi na principu cikličnog bafera, što
zna-či da se u njega mogu staviti osam različitih adresa, dok se sa upisom devete adrese – briše prva i
tako redom. Programski se ne može utvrditi da li je došlo do prepunjeja stack-a.
Programska memorije
- 36 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Memorija za podatke je podeljena u više banki (banks), a sastoji se od registara opšte namene
(General Purpose Registers) i registara specijalne funkcije (Special Function Registers). U jednom od
specijalnih registara, tzv. STATUS registru postoje dva bita RP1 i RP0 koji služe za izbor željene
banke podataka po principu prikazanom na Sl. 2.19.
Svaka banka može da sadrži do 128 registara (0x7F). Niže lokacije u banci zauzimaju specijalni
registri, a ostatak prostora popunjavaju registri opšte namene implementirani kao statički RAM. Neki
specijalni registri koji se često koriste mapirani su u sve banke da bi se omogućio brzi pristup i reduk-
cija kôda. Mapa registara mikrokontrolera PIC16F877 prikazana je na Sl. 2.20. Nekoliko specijalnih
registara su registri jezgra, uskopovezani sa funkcionisanjem mikroprocesora kontrolera. Ostali registri
su vezani za periferne module i služe za njihovo upravljanje i kontrolu statusa.
Programski brojač (PC) određuje adresu naredne instrukcije u programskom flash-u. U pitanju
je 13-bitni registar. Simboličko ime nižeg bajta je PCL. To je registar u koji se može i upisivati i
iščitavati. Viših pet bita programskog brojača smešteni su u izolovani registar PCH kojem se
pristupa samo pre-ko latch-a PCLATH, mapiranom u internom RAM-u na adresi 0x0A.
STATUS registar je veoma bitan i zato je predviđeno da se može adresirati iz bilo koje banke.
On pokazuje status aritmetičko-logičke jedinice, reset status mikrokontrolera i sadrzi bite za selekciju
banki internog RAM-a. Od navedenih flegova posebno treba izdvojiti Zero bit (Z), koji se postavlja
kad je rezultat aritmetičke operacije jednak nuli i bit prenosa/pozajmice Carry (C).
- 38 -
Upravljanje step motora preko mikrokontrolera PIC16F877
- 39 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Ukoliko je potrebno sačuvati neke podatke i nakon ukidanja napajanja mikrokontrolera, treba ih
prethodno zapisati u interni EEPROM. Ova memorija je obima 256 bajtova.
Registrom ADCON1 određuje se uloga pojedinih pinova (analogni ili digitalni). Modul za
A/D konverziju se bazira na sa sukcesivnoj aproksimaciji.
- 40 -
Upravljanje step motora preko mikrokontrolera PIC16F877
- 41 -
Upravljanje step motora preko mikrokontrolera PIC16F877
- 42 -
Upravljanje step motora preko mikrokontrolera PIC16F877
- 43 -
Upravljanje step motora preko mikrokontrolera PIC16F877
- 44 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Prvi od njih je SSP modul (Synchronous Serial Port), koji služi za komunikaciju sa serijskim
EEPROM-ima, pomeračkim registrima, displej-drajverima itd. Ovaj modul može da radi u jednom od
dva režima:
Osim serijskih, postoji i jedan paralelni komunikacioni modul. U pitanju je modul PSP (Pa-
rallel Slave Port). Njegov zadatak je da PIC16F877 direktno poveže na 8-bitnu magistralu podataka
drugog mikroprocesora. Eksterni mikroprocesor tada, preko linija Read (RD) i Write (WR) može da
čita i upisuje u registar PortD kao u svaki drugi 8-bitni latch.
- 45 -
Upravljanje step motora preko mikrokontrolera PIC16F877
3.HARDVERSKA REALIZACIJA
- 46 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Naponski deo sistema se satoji od stabilizatora napona 7805 i 7812. Ovi stabilizatori su
dimenzionisani za struju do 1A. Pored njih tu su i prateći elementi, kao sto su kodezatori za filtriranje i
dioda za sprečavanje pogrešnog priključenja na naponskog izvora. Stabilizator 7805 sluzi za napajanje
mikrokontrolera i kola MAX232 koje opslužuje RS232 komunikaciju. U kolu postoji i mirotaster S2
koji ima ulogu da resetuje mikrokontroler. Konektor ICSP je konetor za serijsko programiranje
mikrokontrolera u kolu (ICSP programiranje). Dioda BAT42 sluzi da spreci prolaz napona
programiranja ka ostatku kola za vreme programiranja. Kolo ULN2803 je kolo koje sadrži osam para
darilngtonovih stoja i sluzi kao drajver za pokretanje step motora. Step motor je uzet iz rashodovanog
štampaca. On je povezan preko ULN2803 na port B mikrokontrolera. Predvidjeno je da motor radi u
modovima rada: monofazni, dvofazni i metod polukoraka. Takodje, je predviđeno menjanje smera
motora kao i pet brzine rada. Ovim se upravlja preko Windosows-og terminala. Didoda D11 u sistemu
je zener dioda sa naponom stabilizacije od 12V koja štiti drajversko kojo od EMS motora. Diode od
D13 do D16 sluze za idikaciju prisustva napona na odredjenim namotajim motora. Ovo je uradjeno
zbog vizuelne kontrole rada motora. Dioda D12 sluzi za idikaciju napona napajanja sistema.
- 47 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Na slici 3.3. prikazan je izgled štampane pločice. Prilikom projektovanja štampane ploče
vodjeno je računa o bezbednosti prilikom korišćenja sistema, o malim gabaritima ploče kao i o
funkcionalnosti sistema, tj. da bude jednostavan za rukovanje.
- 48 -
Upravljanje step motora preko mikrokontrolera PIC16F877
- 49 -
Upravljanje step motora preko mikrokontrolera PIC16F877
C14 470u
C15 100n
C16 100n
C17 CAP
C18 CAP
C19 CAP
C20 CAP
C21 CAP
C23 1u
C24 1u
C25 1u
C26 1u
D8 DIODE
D9 bat2
- 50 -
Upravljanje step motora preko mikrokontrolera PIC16F877
D10 ICSP
D11 DIODE
D12 LED
D13 LED
D14 LED
D15 LED
D16 LED
J5 napajanje
J6 CON3
J7 CON3
J8 DB9
Q2 ULN2803
Q3 PIC16F877A
Q4 MAX232
R5 RES2
- 51 -
Upravljanje step motora preko mikrokontrolera PIC16F877
4. SOFTVER
4.1. Mikro C
MikroC prestavlja moćan softverski alat, koji je razvila beogradska Mikroelektronika, i
namenjen je pisanju kôda za Microchip-ove PIC mikrokontrolere. Koristeći mikroC, programeru je
omogućen jednostavan način da kontroliše proces programiranja i napravi kvalitetan firmware.
o Jasan asemblerski kôd i standardna kompatibilnost generisanih HEX datoteka toka progra-ma
preko ugrađeg debagera (debugger)
o Programer ima na raspolaganju veliki broj integrisanih biblioteka i rutina, koje značajno
ubrzavaju pisanje programa
o Detaljan izveštaj i grafičko predstavljanje RAM i ROM mape, statistike kôda i slično.
o Pokazivači (pointers) promenljivih i pokazivači konstanti nisu kompatibilni, tj. nije moguća
međusobna dodela ili upoređivanje
o mikroC tretira označavanje const kao “true constans” (kod C++), što omogućava koriš-ćenje
const objekta na mestima gde ANSIC očekuje constant izraz .Ukoliko se teži ka pre-nosivosti
programa, treba koristiti tradicionalno pretprocesorsko definisanje konstanti
o mikroC dozvoljava C++ stil jednolinijskih komentara, koristeći dve kose crte (//). Komentar
može da počne bilo gde i traje do sledeće nove linije programskog kôda
- 52 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Napominjemo da mikroC podržava gotovo sve PIC mikrokontrolere serija 12, 16 i 18. Izuzetak su
mikrokontroleri koji imaju staro hardversko jezgro kao na primer PIC12C508, PIC12F508,
PIC12C509, PIC12F509 itd. Inače, ograničena verzija (do 2KB programa) može da s preuzme sa sajta
Mikroelektronike (www.mikroe.com). U sličaju ako se želi potpuna verzija (neograničen
kapacitet programa), mora da se plati licenca od 250$.
Instalacija
Ovde ćemo preko Slika 4.1-4.5 ilustrovati proces instaliranja mikroC-a. Inače, instalacija traje
30 sekundi. Posle instalacije treba pokrenuti mikroC, a to se najjednostavnije ostvaruje klikom na
ikonicu:
- 53 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Sl.4.3. Prihvatanje uslova licenciranja i zatim treba kliknuti na komandno dugme NEXT
- 54 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Sl.4.4. Izbor programatora (PicFlash), gotovih primera i zatim klik na komandno dugme NEXT
- 55 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Kreiranje kôda
U narednim redovima biće ilustrovan postupak kreiranja kôda u mikroC-u (Slike 4.6-4.13).
- 56 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Sl.4.8. Podešavanje parametara novog projekta (naziv, tip mikrokontrolera, takt, parametri kontrolera)
- 57 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Sl.4.11. Sada treba izvršiti prevođenje (compile) programa preko opcije Project → Build
- 58 -
Upravljanje step motora preko mikrokontrolera PIC16F877
- 59 -
Upravljanje step motora preko mikrokontrolera PIC16F877
UART terminal
Na Sl.4.15. je prikazan izgled prozora UART terminala. Kao što se vidi, moguće je podesiti
veli-ki broj parametara. Navešćemo najvažnije:
Serijski port (u padajućem meniju treba izabrati željeni serijski port, a kod standardnih raču-nara to su
COM1 i COM2)
Brzina prenosa (za frekvenciju kvarca od 4MHz treba izabrati 2400 bauda, za 8MHz bira se 9600
bauda itd.)
- 60 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Izbor formata podatka koji se šalje (ASCII, heksadecimalni - HEX ili dekadni - DEC)
Način slanja (odmah po kucanju ili kada se klikne na opciju SEND) itd.
Čim se podese parametri, terminal se startuje klikom na komandno dugme Connect. Odmah za-
tim, terminal je spreman da prihvati komande (vidi Sl.4.16). Kada se završi komunikacija, treba kliknu-
ti na komandno dugme Disconnect.
- 61 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Sl.4.16. Izgled prozora kod UART komunikacionog terminala kada je ovaj spreman za slanje/prijem
ASCII standard
ASCII standard je striktno definisan sedmobitni kôd, što znači da koristi sedam binarnih cifara
(opseg je od 0 do 127 u dekadnom sistemu) za predstavljanje znakovnih informacija. U vreme kada je
ovaj standard uveden, mnogi računari su koristili osmobitne grupe (bajtove) kao najmanju jedinicu za
predstavljanje informacija. Osmi bit je bio najčešće korišćen kao bit parnosti za proveru grešaka u pre-
nosu ili druge funkcije specifične za dati uređaj. Mašine koje nisu koristile parnost obično su postavlja-
le osmi bit na nulu, mada je bilo i nekih sistema koje su postavljali osmi bit na jedinicu. U Tabeli 4.1
prikazan je skup ASCII karaktera.
ASCII je kao standard prvi put objavila Američka asocijacija za standarde (American Standards
Association, ASA) 1963. godine, koja se kasnije preimenovala u ANSI. Postoji više varijante ASCII-a,
ali trenutno je najrasprostranjeniji ANSI X3.4-1986, takođe standardizovan kao ECMA-6, ISO/IEC
- 62 -
Upravljanje step motora preko mikrokontrolera PIC16F877
646:1991 International Reference Version, ITU-T Recommendation T.50 (09/92), i RFC 20. Neki raču-
narski stručnjaci smatraju kako jeASCII najuspešniji softverskim standard ikada usvojen.
Prvih trideset i dva kôda u tabeli ASCII kodova (od 0 do 31 u dekadnom sistemu) su rezervisani
su za tzv. kontrolne znakove. Ovi kôdovi, praktično, ne sadrže nikakve informacije o karakteru, nego
upravljaju izlaznim uređajima (npr. štampačima, skenerima itd.) Tako, na primer, kôd koji ima vred-
nost 10 predstavlja komandu line feed, koja nalaže štampaču da pomeri papir "na gore" za jedan red,
dok kod sa vrednošću 27 simulira pritisak na taster "escape", lociran u gornjem levom uglu tastature.
- 63 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Kôd 32 se koristi za razmak (blanko) između dve reči, za kojeg je na tastaturi najčešće predviđen
dugački horizontalni taster. Kôdovi od 33 do 126 se nazivaju štampajući (printable) karakteri, koji
predstavljaju slova, cifre, znakove interpunkcije, i još nekoliko raznih simbola.
Uloga bootstrap loader-a je da transformiše naponske nivoe porta (DB9, DB25 ili USB) na
nivoe standardne logike, dok je uloga softvera da upiše heksadecimalni kôd u programsku (najčešće:
EPROM ili flash) memoriju mikrokontrolera. Za potrebe ovog rada korišćeni su bootstrap loader
ALLPIC i softver IC-Prog.
ALLPIC
Električna šema bootstrap loader-a, čiji je autor Danijel Dabić, prikazana je na Sl. 4.17, a
izgled pločice i gotov uređaj – na Slikama 4.18 i 4.19, respektivno. U ovom poglavlju nećemo
opisivati loader ALLPic, s obzirom da se kompletan članak nalazi u poglavlju PRILOZI.
- 64 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Sl.4.19.Izgled_ALLPIC-a
- 65 -
Upravljanje step motora preko mikrokontrolera PIC16F877
Softver IC-Prog
66
Upravljanje step motora preko mikrokontrolera PIC16F877
67
Upravljanje step motora preko mikrokontrolera PIC16F877
68
Upravljanje step motora preko mikrokontrolera PIC16F877
69
Upravljanje step motora preko mikrokontrolera PIC16F877
70
Upravljanje step motora preko mikrokontrolera PIC16F877
71
Upravljanje step motora preko mikrokontrolera PIC16F877
72
Upravljanje step motora preko mikrokontrolera PIC16F877
73
Upravljanje step motora preko mikrokontrolera PIC16F877
74
Upravljanje step motora preko mikrokontrolera PIC16F877
4.3. Algoritam
75
Upravljanje step motora preko mikrokontrolera PIC16F877
"***************************************";
"* *";
"* MIKROPROCESORSKI SISTEMI *";
"* *";
"***************************************";
//Prijekat: Upravljane Step motorom
//Clock: 4MHz
//Procesor: PIC16F8777A
#define prvi PORTB.F3
#define drugi PORTB.F2
#define trci PORTB.F1
#define cetvrti PORTB.F0
#define led1 PORTD.F0
#define led2 PORTD.F1
#define led3 PORTD.F2
#define led4 PORTD.F3
unsigned char i,j, prijem, smer1, pauza1, smer, pauza, skok, pomocna, smer2, mod,
mod1;
unsigned char const prikaz1[40]="***************************************";
unsigned char const prikaz2[40]="* *";
unsigned char const prikaz3[40]="* MIKROPROCESORSKI SISTEMI *";
unsigned char const prikaz4[40]="* *";
unsigned char const prikaz5[40]="***************************************";
unsigned char const menu1[15]=" MENU ";
unsigned char const menu2[15]="Odaberite smer";
unsigned char const menu3[16]="1 - Smer udesno";
unsigned char const menu4[15]="2 - Smer ulevo";
unsigned char const menu5[31]="Odaberite pauzu izmedju koraka";
unsigned char const menu6[16]="1 - Pauza 100ms";
unsigned char const menu7[16]="2 - Pauza 200ms";
unsigned char const menu8[16]="3 - Pauza 300ms";
unsigned char const menu9[16]="4 - Pauza 400ms";
unsigned char const menu10[16]="5 - Pauza 500ms";
unsigned char const menu11[29]="Za start motora pritisnite 1";
unsigned char const menu12[29]="Za ponovni unos pritisnite 0";
unsigned char const menu13[36]="Pritisnite bilo koji taster za STOP";
unsigned char const menu14[19]="Odaberite mod rada";
unsigned char const menu15[18]="1 - Monofazni mod";
unsigned char const menu16[17]="2 - Dvofazni mod";
unsigned char const menu17[21]="3 - Metod polukoraka";
76
Upravljanje step motora preko mikrokontrolera PIC16F877
void menu(void)
{
Menu:
j=0;
for(j=0;j<15;j++)
{
Usart_Write(menu1[j]); //MENU
}
Usart_Write(10);
Usart_Write(13);
77
Upravljanje step motora preko mikrokontrolera PIC16F877
j=0;
for(j=0;j<19;j++)
{
Usart_Write(menu14[j]); //odaberi mod
}
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<18;j++)
{
Usart_Write(menu15[j]); //monofazni
}
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<17;j++)
{
Usart_Write(menu16[j]); //dvofazni
}
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<21;j++)
{
Usart_Write(menu17[j]); //polukorak
}
Usart_Write(10);
Usart_Write(13);
// cekaj prijem
while(!PIR1.RCIF);
Delay_ms(100);
if (Usart_Data_Ready())
{
Usart_Write(10);
Usart_Write(13);
mod1=Usart_Read();
UsartStr("Izabran je mod:");
78
Upravljanje step motora preko mikrokontrolera PIC16F877
Usart_Write(mod1);
Usart_Write(10);
Usart_Write(13);
Usart_Write(10);
Usart_Write(13);
}
if(mod1=='1') mod=1;
if(mod1=='2') mod=2;
if(mod1=='3') mod=3;
j=0;
for(j=0;j<15;j++)
{
Usart_Write(menu2[j]); //odaberi smer
}
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<16;j++)
{
Usart_Write(menu3[j]); //smer udesni
}
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<15;j++)
{
Usart_Write(menu4[j]); //smer ulevo
}
Usart_Write(10);
Usart_Write(13);
// cekaj prijem
while(!PIR1.RCIF);
Delay_ms(100);
if (Usart_Data_Ready())
{
Usart_Write(10);
Usart_Write(13);
smer1=Usart_Read();
UsartStr("Izabran je smer:");
Usart_Write(smer1);
79
Upravljanje step motora preko mikrokontrolera PIC16F877
Usart_Write(10);
Usart_Write(13);
Usart_Write(10);
Usart_Write(13);
}
if(smer1=='1') smer=1;
if(smer1=='2') smer=2;
j=0;
for(j=0;j<31;j++)
{
Usart_Write(menu5[j]); //Odabir pauze
}
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<16;j++)
{
Usart_Write(menu6[j]); // pauza 100
}
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<16;j++)
{
Usart_Write(menu7[j]); // pauza 200
}
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<16;j++)
{
Usart_Write(menu8[j]); //pauza 300
}
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<16;j++)
80
Upravljanje step motora preko mikrokontrolera PIC16F877
{
Usart_Write(menu9[j]); //pauza 400
}
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<16;j++)
{
Usart_Write(menu10[j]); //pauza 500
}
Usart_Write(10);
Usart_Write(13);
while(!PIR1.RCIF);
Delay_ms(100);
if (Usart_Data_Ready())
{
Usart_Write(10);
Usart_Write(13);
pauza1=Usart_Read();
UsartStr("Izabrana je pauza:");
Usart_Write(pauza1);
Usart_Write(10);
Usart_Write(13);
Usart_Write(10);
Usart_Write(13);
}
if(pauza1=='1') pauza=2; // korekcija
if(pauza1=='2') pauza=4;
if(pauza1=='3') pauza=6;
if(pauza1=='4') pauza=8;
if(pauza1=='5') pauza=10;
j=0;
for(j=0;j<29;j++)
{
Usart_Write(menu11[j]);
}
Usart_Write(10);
Usart_Write(13);
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<29;j++)
{
81
Upravljanje step motora preko mikrokontrolera PIC16F877
Usart_Write(menu12[j]);
}
Usart_Write(10);
Usart_Write(13);
Usart_Write(10);
Usart_Write(13);
while(!PIR1.RCIF);
Delay_ms(100);
if (Usart_Data_Ready())
{
skok=Usart_Read();
}
if(skok=='0') goto Menu;
if(skok=='1')
{
UsartStr("Motor radi");
Usart_Write(10);
Usart_Write(13);
Usart_Write(10);
Usart_Write(13);
j=0;
for(j=0;j<36;j++)
{
Usart_Write(menu13[j]);
}
Usart_Write(10);
Usart_Write(13);
Usart_Write(10);
Usart_Write(13);
}
82
Upravljanje step motora preko mikrokontrolera PIC16F877
cetvrti=0;
led1=1;
led2=0;
led3=0;
led4=0;
kas(p);
prvi=0;
drugi=1;
trci=0;
cetvrti=0;
led1=0;
led2=1;
led3=0;
led4=0;
kas(p);
prvi=0;
drugi=0;
trci=1;
cetvrti=0;
led1=0;
led2=0;
led3=1;
led4=0;
kas(p);
prvi=0;
drugi=0;
trci=0;
cetvrti=1;
led1=0;
led2=0;
led3=0;
led4=1;
kas(p);
}
if (s==2)
{
prvi=0;
drugi=0;
trci=0;
cetvrti=1;
led1=0;
led2=0;
83
Upravljanje step motora preko mikrokontrolera PIC16F877
led3=0;
led4=1;
kas(p);
prvi=0;
drugi=0;
trci=1;
cetvrti=0;
led1=0;
led2=0;
led3=1;
led4=0;
kas(p);
prvi=0;
drugi=1;
trci=0;
cetvrti=0;
led1=0;
led2=1;
led3=0;
led4=0;
kas(p);
prvi=1;
drugi=0;
trci=0;
cetvrti=0;
led1=1;
led2=0;
led3=0;
led4=0;
kas(p);
}
if (s==0)
{
prvi=0;
drugi=0;
trci=0;
cetvrti=0;
led1=0;
led2=0;
led3=0;
led4=0;
}
84
Upravljanje step motora preko mikrokontrolera PIC16F877
prvi=1;
drugi=1;
trci=0;
cetvrti=0;
led1=1;
led2=1;
led3=0;
led4=0;
kas(p);
prvi=0;
drugi=1;
trci=1;
cetvrti=0;
led1=0;
led2=1;
led3=1;
led4=0;
kas(p);
prvi=0;
drugi=0;
trci=1;
cetvrti=1;
led1=0;
led2=0;
led3=1;
led4=1;
kas(p);
prvi=1;
drugi=0;
trci=0;
cetvrti=1;
led1=1;
led2=0;
led3=0;
85
Upravljanje step motora preko mikrokontrolera PIC16F877
led4=1;
kas(p);
}
if (s==2)
{
prvi=1;
drugi=0;
trci=0;
cetvrti=1;
led1=1;
led2=0;
led3=0;
led4=1;
kas(p);
prvi=0;
drugi=0;
trci=1;
cetvrti=1;
led1=0;
led2=0;
led3=1;
led4=1;
kas(p);
prvi=0;
drugi=1;
trci=1;
cetvrti=0;
led1=0;
led2=1;
led3=1;
led4=0;
kas(p);
prvi=1;
drugi=1;
trci=0;
cetvrti=0;
led1=1;
led2=1;
led3=0;
led4=0;
kas(p);
}
86
Upravljanje step motora preko mikrokontrolera PIC16F877
if (s==0)
{
prvi=0;
drugi=0;
trci=0;
cetvrti=0;
led1=0;
led2=0;
led3=0;
led4=0;
}
}
prvi=1;
drugi=1;
trci=0;
cetvrti=0;
led1=1;
led2=1;
led3=0;
led4=0;
kas(p);
prvi=0;
drugi=1;
trci=0;
cetvrti=0;
led1=0;
led2=1;
led3=0;
87
Upravljanje step motora preko mikrokontrolera PIC16F877
led4=0;
kas(p);
prvi=0;
drugi=1;
trci=1;
cetvrti=0;
led1=0;
led2=1;
led3=1;
led4=0;
kas(p);
prvi=0;
drugi=0;
trci=1;
cetvrti=0;
led1=0;
led2=0;
led3=1;
led4=0;
kas(p);
prvi=0;
drugi=0;
trci=1;
cetvrti=1;
led1=0;
led2=0;
led3=1;
led4=1;
kas(p);
prvi=0;
drugi=0;
trci=0;
cetvrti=1;
led1=0;
led2=0;
led3=0;
led4=1;
kas(p);
prvi=1;
drugi=0;
trci=0;
88
Upravljanje step motora preko mikrokontrolera PIC16F877
cetvrti=1;
led1=1;
led2=0;
led3=0;
led4=1;
kas(p);
}
if (s==2)
{
prvi=0;
drugi=0;
trci=0;
cetvrti=1;
led1=0;
led2=0;
led3=0;
led4=1;
kas(p);
prvi=0;
drugi=0;
trci=1;
cetvrti=1;
led1=0;
led2=0;
led3=1;
led4=1;
kas(p);
prvi=0;
drugi=0;
trci=1;
cetvrti=0;
led1=0;
led2=0;
led3=1;
led4=0;
kas(p);
prvi=0;
drugi=1;
trci=1;
cetvrti=0;
led1=0;
led2=1;
89
Upravljanje step motora preko mikrokontrolera PIC16F877
led3=1;
led4=0;
kas(p);
prvi=0;
drugi=1;
trci=0;
cetvrti=0;
led1=0;
led2=1;
led3=0;
led4=0;
kas(p);
prvi=1;
drugi=1;
trci=0;
cetvrti=0;
led1=1;
led2=1;
led3=0;
led4=0;
kas(p);
prvi=1;
drugi=0;
trci=0;
cetvrti=0;
led1=1;
led2=0;
led3=0;
led4=0;
kas(p);
prvi=1;
drugi=0;
trci=0;
cetvrti=1;
led1=1;
led2=0;
led3=0;
led4=1;
kas(p);
}
if (s==0)
90
Upravljanje step motora preko mikrokontrolera PIC16F877
{
prvi=0;
drugi=0;
trci=0;
cetvrti=0;
led1=0;
led2=0;
led3=0;
led4=0;
}
}
INTCON.GIE=0;
}
i=0;
Usart_Write(10);
Usart_Write(13);
for(i=0;i<40;i++)
{
Usart_Write(prikaz2[i]);
}
i=0;
Usart_Write(10);
Usart_Write(13);
for(i=0;i<40;i++)
{
Usart_Write(prikaz3[i]);
}
i=0;
Usart_Write(10);
Usart_Write(13);
for(i=0;i<40;i++)
{
Usart_Write(prikaz4[i]);
i=0;
91
Upravljanje step motora preko mikrokontrolera PIC16F877
Usart_Write(10);
Usart_Write(13);
for(i=0;i<40;i++)
{
Usart_Write(prikaz5[i]);
}
Usart_Write(10);
Usart_Write(13);
}
while(1)
{
if(skok=='1')
{
motor(smer,pauza,mod);
if(smer2=='0')
{
menu();
smer2='1';
}
}
}
}
92
Upravljanje step motora preko mikrokontrolera PIC16F877
5. LABORATORIJSKA VEŽBA
93
Upravljanje step motora preko mikrokontrolera PIC16F877
94
Upravljanje step motora preko mikrokontrolera PIC16F877
6. PRILOZI
95
Upravljanje step motora preko mikrokontrolera PIC16F877
96
Upravljanje step motora preko mikrokontrolera PIC16F877
97
Upravljanje step motora preko mikrokontrolera PIC16F877
98
Upravljanje step motora preko mikrokontrolera PIC16F877
99
Upravljanje step motora preko mikrokontrolera PIC16F877
100
Upravljanje step motora preko mikrokontrolera PIC16F877
stabilizatora može biti primetno. Indikator LED2 indicira prisutan napon napajanja (Vdd
+5 V ) na čipu koji se programira. Kratkospajač JPl ima funkciju:
Ukoliko je spojen, Vdd (+5 V) napon će stalno biti prisutan što će se i videti
upaljenom LED2. Ovaj mod je za sve Microchip PIC mikrokontrolere koji nemaju interni
oscilator (16F84, 16F87x,) kao i eeprome.
Za sve nove mikrokontrolere potrebno je skinuti JPl i u tom modu Vdd (+5v) se
pojavljuje tek po uspostavljanju Vpp (13 V) programskog napona na početku
programiranja. Ovakav način rada je potreban za programiranje sledećih mikrokontrolera
16F627, 16F628, 12F629, 12F675...
Kratkospajač JP2 služi za izbor Write protect moda za eeprome 24CXX. Poseban
konektor koji je označen na šemi veza kao CON1 koristi se za eksterni priključak za
incircuit programiranje (ICSP).
Napomena: Programator nije predviđen za 16C5x seriju i još neke specifične
Microchip mikrokontrolere.
Komponente koje su upotrebljene u ovom programatoru spadaju u standardni
asortiman ponude svake prodavnice elektro materijala. Iz tog razloga ne treba očekivati
poteškoće oko nabavke delova. Sklapanje treba odraditi standardnim postupkom, pri
čemu treba obratiti pažnju na dva kratkospajača koji su označeni na montažnoj šemi
crnom linijom, a nalaze se ispod podnožja za mikrokontrolere i pored kondenzatora C4.
Njih treba zalemiti pre svih drugih komponenti. Uređaj sa PC računarom možete povezati
i pomoću dodatnog kabla, ali nije preporučljivo da njegova dužina prelazi 2 m.
101
Upravljanje step motora preko mikrokontrolera PIC16F877
102
Upravljanje step motora preko mikrokontrolera PIC16F877
103
Upravljanje step motora preko mikrokontrolera PIC16F877
LITERATURA
104
Upravljanje step motora preko mikrokontrolera PIC16F877
BIOGFRAFIJE AUTORA
Obrazovanje :
Poznavanje jezika :
Rad na računaru :
MS Office
Excel
Internet
Grafički programi (Photoshop, Corel Draw, Flash)
Sopstvene veštine :
Ostalo :
105
Upravljanje step motora preko mikrokontrolera PIC16F877
Obrazovanje :
Poznavanje jezika :
Rad na računaru :
MS Office
Excel
Internet
Grafički programi (Photoshop, Corel Draw, Flash)
Web design (HTML, Dreamweaver, Front Page)
Osnove računarskih mreža ( Windows server 2003, osnove rutiranja)
106