You are on page 1of 107

UNIVERZITET U NIŠU

ELEKTORNSKI FAKULTET
KATEDRA ZA ELEKTRONIKU

UPRAVLJANJE STEP MOTORA


PREKO MIKROKONTROLERA
PIC16F877

Studenti:

Darko Radosavljević 10948


Miloš Marković 10862

Mentor:

. prof. dr Mile Stojčev

U Nišu, maj 2009.god


Upravljanje step motora preko mikrokontrolera PIC16F877

Sadržaj

Uvod 2

1. Upravljanje Step motorom 3

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

Biografije autora 105

-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

1. UPRAVLJANE STEP MOTOROM


U razvoju tehnologije sistema digitalnog upavljanja koračni (step) motor je najzanimljivije
otkriće. To je jedini tip motora kojim mikroprocesor može direktno upravljati bez posredstva
digitalno/analognog pretvarača. Naravno, mikroprocesor ne može da obezbedi dovoljno veliku struju
za pokretanje motora, pa se zato mora koristi poseban izvor i par komponenata “drajvera” preko kojih
mikroprocesor upravlja motorom.

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:

Ugao za 1 korak Broj koraka za 360

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:

Monofaznom režimu rada

Dvofaznom režimu rada

Režimu rada polukoraka

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.

Korak Namotaj 4 Namotaj 3 Namotaj 2 Namotaj 1

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 .

Korak Namotaj 4 Namotaj 3 Namotaj 2 Namotaj 1

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

U modu polukoraka se smenjuje dvofazno sa monofaznim napajanje motora i tako


naizmenično. Na ovaj se način postiže dvostruko veći broj koraka step motora. Međutim njegova je
očigledno glavna mana promenljivi momenat. U donjoj tabeli je prikazan ovaj način rada.

Korak Namotaj 4 Namotaj 2 Namotaj 2 Namotaj 1

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

Raspored njegovih priključnih vodova je sledeći:

Boja Namena

Braon Zajed. napajanje

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:

Način rada Pin 9 Pin 10

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.

Tradicionalni mikroprocesor je rasterećen obaveze da komunicira direktno sa periferijom. On,


naime, zahteva da sve to odrade drugi čipovi.

Mikrokontroler PIC16F877A firme Microchip predstavlja integraciju mikroprocesora (CPU),


memorije i periferija, pa zato ne zahteva složeni eksterni hardver da bi se realizovao mikroračunar-
ski sistem. Ovaj mikrokontroler je izrađen u CMOS tehnologiji sa ugrađenom FLASH i EEPROM me-
morijom za memorisanje programa i podataka. PIC16F877A ima tipičnu RISC arhtekturu. Ova ar-
hitektura, kao što je poznato, karakteriše se manjim skupom instrukcija koje se brže izvšavaju od in-
strukcija kod CISC arhitekture.

U daljem tekstu detaljnije će biti opisani gradivni delovi mikrokontrolera PIC16F877A. .

Sl.2.1. Raspored pinova kod mikrokontrolera PIC16F877 u kućištu DIP40

- 11 -
Upravljanje step motora preko mikrokontrolera PIC16F877

2.1. Osnovne karakteristike mikrokontrolera

 RISC mikroprocesor visokih performansi

 35 instrukcija obima jedne reči

 Radna frekvencija do 20 MHz

 Trajanje taktnog intervala 200 ns, pri frekvenciji 20 MHz

 Opkôd obima 14 bita

 Harverski magacin sa osam nivoa

 Tri načina adresiranja (direktno,indirektno i relativno)

 Programska flash memorija kapaciteta 8 k X 14-bitnih reči

 Memorije za podatke tipa RAM kapaciteta 368 X 8 bita

 Memorije za podatke EEPROM tipa kapaciteta 256 X 8 bita

 Prekidi (do 14 izvora prekida)

 U/I portovi: A, B, C, D, E

 Tri tajmera:

- Timer0 (TMR0): 8-bitni tajmer/brojač_događaja

- Timer1 (TMR1): 16-bitni tajmer/brojač_događaja

- Timer2 (TMR2): 8-bitni tajmer/brojač_događaja

 10-bitni 8-kanalni analogno-digitalni (A/D) konvertor

 Serijska komunikacija: MSSP, USART

 Paralelna komunikacija: PSP

 Power-on Reset - reset pri uključenju napajanja (POR)

 Power-up timer - unošenje kašnjenja nakon uključenja napajanja (PWRT)

 Oscillator Start-up Timer - unošenje kašnjenja nakon stabilizovanja radne frekvencije


oscilatora (OST)

- 12 -
Upravljanje step motora preko mikrokontrolera PIC16F877

 Sleep mode - režim rada sa malim utroškom energije

 Watchdog tajmer sa sopstvenim integrisanim RC oscilatorom za nezavisni rad

 Izbor tipa oscilatora

 Radni napon od 2V do 5.5V

 Mala potrošnja energije:

 <0.6 mA pri naponu od 3V i radnoj frekvenciji od 4 MHz

 20µA pri naponu od 3V i radnom taktu od 32kHz

 <1µA u standby režimu rada.

2.2. Arhitektura mikrokontrolera

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:

 Flash programska memorija – 8 kiloreči obima 14 bita

 RAM (File Registers) – 368 bajtova

 Aritmetičko-logička jedinica (ALU)

 Akumulator (Working Register)

 Hardverski magacin (Stack) organizivan u 8 nivoa

 EEPROM memorija podataka obima 256 bajtova

 Višekanalni A/D konvertor, USART (univerzalni sinhroni i asinhroni primo-predajnik),


tajmere, portove itd.

- 13 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.2.2. Arhitektura mikrokontrolera PIC16F877A

- 14 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Oscilator

Kod mikrokontrolera PIC16F877A postoje četiri konfiguracije oscilatora:

RC Resistor/Capacitor

XT Crystal / Resonator

LP Low Power Crystal

HS High Speed Crystal / Resonator.

Najjednostavnija varijanta je RC oscilator, a to je ilustrovano na Sl.4.3 . Ovakav pristup je


ispravan u aplikacijama u kojima se ne zahteva precizna procena vremenskih intervala. Ovde ćemo
naglasiti ka-ko je moguće koristiti i interni RC oscilator, koji je integrisan u mikrokontroleru.

Sl.2.3. Povezivanje eksternog RC oscilatora

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

Sl.2.4. Povezivanje eksternog kvarca (LP, XT, HS)

Mikrokontroleru PIC16F877A može da se dovede i spoljašnji takt, što je prikazano na Sl.4.5.

Sl.2.5. Dovođenje spoljašnjeg takta

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

Tabela 2.1. Izbor vrednosti kondenzatora za kvarcni kristal

- 17 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Tabela 2.2. Izbor vrednosti kondenzatora za rezonator

Odnos između takta i instrukcijskog ciklusa

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:

Q1 - pribavljanje instrukcije iz programske memorije

Q2 - dekodiranje naredbe iz prethodnog instrukcijskog ciklusa

Q3 - izvršenje naredbe iz prethodna dva instrukcijska ciklusa

Q4 - prenos opkôda naredbe pozvane u Q1 u instrukcijski registar.

- 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).

Postoji nekoliko tipova reseta kod mikrokontrolera PIC16F877A i to su:

I. Power-on reset (POR)

II. MCLR Reset pri normalnom režimu radu

III. MCLR Reset prilikom SLEEP režima rada

IV. WDT Reset pri normalnom radu

V. WDT Wake-up (“buđenje” iz SLEEP režima rada)

VI. Brown-out Reset (BOR).

Sl.2.6. Povezivanje MCLR pina na napajanje

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

Sl.2.7. Spoljašnje kolo za POR

Sl.2.8. Kolo za BROWN-OUT RESET (prva varijanta)

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

Sl.2.9. Kolo za BROWN-OUT RESET (druga varijanta)

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.

Mikrokontroler PIC16F877A ima implementiran dvobitni statusni registar nazvan


PCON (Power Control Register). Prvi bit nazvan POR setuje se kada se aktivira Power-on-Reset, a
resetuje se kada se aktivira neki drugi Reset. Drugi bit (BOR) kada je setovan ukazuje da je aktivno
Brown-out stanje (nedozvoljena naponska stanja u napajanju mikrokontrolera), zbog kojeg takođe
može da se aktivira Reset.

- 21 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Konfiguracija PWRT omogućen PWRT “Buđenje” iz SLEEP


oscilatora režima rada
onemogućen
XT, HS, LP 72 ms + 1024 1024 Tosc 1024 Tosc

RC 72 ms - -

Tabela 2.3. Kašnjenja OST-a

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).

Program Counter STATUS register


Power-on reset (POR) 000h 0001 1XXX
MCLR reset pri
normalnom radu 000h 000U UUUU
MCLR reset prilikom
SLEEP režima rada 000h 0001 0UUU
WDT Reset pri
normalnom radu 000h 0000 1UUU
WDT Wake-up
(buđenje iz SLEEP PC+1 UUU0 0UUU
režima rada)
Interrupt 004h UUU1 0UUU

Tabela 2.4. Postavljanje registara nakon reseta

- 22 -
Upravljanje step motora preko mikrokontrolera PIC16F877

MCLR reset pri: Buđenje iz


- normalnom režimu SLEEP režima
Registar Power-on reset - SLEEP mod WDT - interrupt
reset pri normalnom režimu - WDT time out

00h INDF ---- ---- ---- ---- ---- ----


01h TMR0 XXXX XXXX UUUU UUUU UUUU UUUU
02h PCL 0000 0000 0000 0000 PC+1
03h STATUS 0001 1XXX 000Q QUUU UUUQ QUUU
04h FSR XXXX XXXX UUUU UUUU UUUU UUUU
05h PORTA ---X XXXX ---U UUUU ---U UUUU
06h PORTB XXXX XXXX UUUU UUUU UUUU UUUU
08h EEDATA XXXX XXXX UUUU UUUU UUUU UUUU
09h EEADR XXXX XXXX UUUU UUUU UUUU UUUU
0Ah PCLATH ---0 0000 ---0 0000 ---U UUUU
0Bh INTCON 0000 000X 0000 000U UUUU UUUU
80h INDF ---- ---- ---- ---- ---- ----
81h OPTION 1111 1111 1111 1111 UUUU UUUU
82h PCL 0000 0000 0000 0000 PC+1
83h STATUS 0001 1XXX 000Q QUUU UUUU UUUU
84h FSR XXXX XXXX UUUU UUUU UUUU UUUU
85h TRISA ---1 1111 ---1 1111 ---U UUUU
86h TRISB 1111 1111 1111 1111 UUUU UUUU
88h EECON1 ---0 X000 ---0 Q000 ---0 UUUU
89h EECON2 ---- ---- ---- ---- ---- ----
8Ah PCLATH ---0 0000 ---0 0000 ---U UUUU
8Bh INTCON 0000 000X 0000 000U UUUU UUUU

Tabela 2.5. Postavljanje registara nakon reseta

Legenda:

X (nepoznato stanje)

U (nepromenjeno stanje)

Q (stanje zavisi od uslova)-

– (ne postoji fizički, čita se kao logička ‘0’).

- 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)

Mikrokontroler PIC16F877A podržava tehniku rada sa prekidima (interrupts) i može da opsluži


ukupno 14 izvora prekida, što internih, što eksternih. Napomenućemo kako svaki prekid ne poseduje
sopstveni vektor-broj.

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.

Značenje pojedinih markera ćemo sada navesti:

 T0IF (INTCON:2) setuje se na prekoračenje TMR0

 INTF (INTCON:1) setuje se u slučaju da nastupi spoljni prekid na pinu RBO/INT

 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

 ADIF (PIR1:6) marker koji se koristi za vreme analogno-digitalne konverzije

 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

 SSPIF (PIR1:3) marker koji se koristi za rad sinhronog serijskog porta

- 24 -
Upravljanje step motora preko mikrokontrolera PIC16F877

 CCP1IF (PIR1:2) marker koji koristi CCP1 blok

 TMR2IF (PIR1:1) marker koji setuje TMR2 kada dođe do prekoračenja

 TMR1IF (PIR1:0) marker koji setuje TMR2 kada dođe do prekoračenja

 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

 CCP2IF (PIR2:0) marker koji koristi CCP2 blok.

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

U arhitekturi mikrokontrolera PIC16F877A su ugrađena tri tajmera (TMR0, TMR1 i TMR2) i


njihov zadatak je da mere vreme i broje eksterne događaje. Svaki od pomenutih tajmera poseduje od-
ređene specifičnosti.

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.

Sl.2.10. 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

Sl. 2.11. Blok-dijagram tajmera TMR1

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.

Sl. 2.12. Blok-dijagram tajmera TMR2

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:

8-pinski (PORTB, PORTC, PORTD)

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

2.13. Blok-dijagram pina RA4

Sada ćemo kroz nekoliko primera ilustrovati postavljanje smerova na portu:

TRISA = 0b000000 (PORT A je izlazni)

TRISA = 0b111111 (PORT A je ulazni)

TRISA = 0b101000 (RA5 i RA3 pinovi su ulazni, a RA4, RA2, RA1 i RA0 su izlazni)

TRISA = 0b111000 (RA5-RA3 su ulazni, a RA2-RA0 su izlazni) itd.

- 29 -
Upravljanje step motora preko mikrokontrolera PIC16F877

2.14. Blok-dijagram pinova RA5, RA3-RA0

Port A ima mogućnost analogno-digitalne konverzije i prvenstveno se koristi u te svrhe. A/D


kon-vertor, koji je integrisan u mikrokontroleru, je 10-bitni sa 8 ulaznih kanala, jer se u ove svrhe
koriste i svi pinovi PortaE (i pinovi PortaA izuzev RA4).

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

Tabela 2.6. Funkcije PortaA i registri

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.

Na Slikama 2.14 i 2.15 prikazana je struktura PORTB.

- 31 -
Upravljanje step motora preko mikrokontrolera PIC16F877

2.14. Blok-dijagram pinova RB3-RB0

2.15. Blok-dijagram pinova RB7-RB4

- 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.

Tabela 2.7. Funkcije PortaB i registri

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.

2.16. Blok-dijagram pinova RC7-RC5, RC2-RC0

- 34 -
Upravljanje step motora preko mikrokontrolera PIC16F877

2.17. Blok-dijagram pinova RC7-RC5, RC2-RC0

- 35 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Tabela 2.8. Funkcije PortaC i registri

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.

2.3. Organizacija memorije


Memorije mikrokontrolera čine tri odvojene celine:

Programska memorija

Memorija podataka

EEPROM 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

PIC16F877A poseduje 13-bitni programski brojač (PC) koji je u mogućnosti da adresira


memo-rijski prostor od 8K programskih reči od 14 bita. Reset vektor je 0x0000 i od njega počinje
izvršavanje programa. Prekidni (interrupt) vektor je 0x0004. Mapa programske memorije i magacin
prikazani su na Sl.2.18.

- 36 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Organizacija memorije podataka

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.

Sl.2.18 Mapa programske memorije i stack


- 37 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.2.19. Izbor željene banke preko bitova RP0 i RP1

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).

Registar OPTION_REG se koristi za konfiguraciju preskalera za TMR0 ili Watchdog, za


upravljanje TMR0, selekciju ivice okidanja eksternog prekida, i za omogućavanje Pull-up otpornika na
PortaB. Kada je reč o registrima jezgra, ne treba zaboraviti par FSR (File Select Register) i INDF (Indi-
rect File), koji služe za indirektno adresiranje memorije podataka. Bilo koja instrukcija koja se obra-
ća INDF registru predstavlja indirektan pristup onoj lokaciji internog RAM-a čija je adresa trenutno
u registru FSR.

- 38 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl. 2.20. Mapa registara mikrokontrolera PIC16F877

- 39 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Interni EEPROM za podatke

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.

2.4. A/D konvertor


Svi signali u prirodi su kontinualni, a veoma teško je upravljati nekim procesom bez
digitalizacije analognih veličina. Kao što je napomenuto, PORTA i PORTE imaju mogućnost A/D
konverzije što podrazumeva da se mogu konfigurisati kao analogni ili digitalni.

Da bi se iskoristio 10-bitni A/D konveror integrisan u mikrokontroleru, neophodno je podesiti


re- gistre ADCON0 i ADCON1. U Tabelama 2.9 i 2.10 dati su prikazi pomenutih registara.

Inače, registar ADCON0 služi za podešavanje A/D konverzije (frekvencije odabiranja


konverto-ra, kanal koji se koristi za konverziju, početak konverzije i uključivanje modula za
konverziju).

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

Tabela 2.9. Registar za podešavanje A/D konverzije

- 41 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Tabela 2.10. Registar za podešavanje tipa kanala (analogno-digitalni)

Blok-dijagram A/D konvertora mikrokontrolera PIC16F877A prikazan je na Sl. 2.21.

- 42 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Algoritam A/D konverzije

1. Konfiguracija A/D konvertora (preko ADCON0 i ADCON1)

2. Konfigurisanje A/D prekida ukoliko se zahtevaju (ADIF, ADIE, PEIE, GIE)

3. Čekanje da prođe zahtevano akviziciono vreme

4. Početak procesa A/D konverzije

5. Završetak procesa A/D konverzije

6. Čitanje rezultata A/D konverzije iz registra ADRES

7. Za sledeću konverziju, skočiti na korak 1. ili korak 2.

- 43 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.2.21. Blok-dijagram A/D konverrota

- 44 -
Upravljanje step motora preko mikrokontrolera PIC16F877

2.5. Periferijske jedinice


Mikrokontroler PIC16F877 poseduje nekoliko korisnih periferijskih modula. S obzirom da
mikro-kontroler treba da razmenjuje podatke sa ostalim komoponentama (registrima, memorijama,
drugim mikrokontrolerima itd.) u tu svrhu je opremljen sa tri hardverska komunikaciona modula.

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:

Serial Peripheral Interface (SPI)

Inter-Integrated Circuit (I2C).

Drugi serijski komunikacioni modul je USART (Universal Synchronous Asynchronous


Receiver Transmiter). On uglavnom služi za povezivanje sa personalnim računarom, mada to nije
jedina njegova mogućnost primene.

USART može da se konfiguriše u neki od sledećih režima rada:

Asinhroni rad (full duplex)

Sinhroni master rad (half duplex)

Sinhroni slave rad (half duplex).

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

3.1. Šema sistema

Za hardversku realizaciju korišćen je programski paket Protel 99 Se. Sistem se sastoji od


mikrokontrolera PIC16F877, kao centralnog elementa sistema, koji ima ulogu da opslužuje RS232
komunikaciju, da upravlja led diodama koje signaliziraju mod rada step motora, i da kontroliše sam
motor. Na slici 3.1 je prikazana blok šema sistema, a na slici 3.2. električna šema.

Sl.3.1. Blok šema sistema

- 46 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl. 3.2. Električna šema sistema

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

3.2. Fizički izgled štampane pločice

Sl.3.3. Štampana ploča

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

Slika 3.4. Botom layer štampane pločice.

3.3. Povezivanje uređaja na računar

Za povezivanje uredjaja na računar koristi se deveto pinski konektor, asinhrona serijska


komunikacija u full-duplex modu. Komunikacija se vrši preko Hyper terminala. Bira se mod
rada:monofazni, dvofazni ili polukorak. Zatim se bira smer okretanja : levi ili desni, i na kraju dužina
pauze između koraka. Ovo je prikazano na slici 3.5. Za start motora koristi se taster 1, a za stop, bilo
koji taster, a za ponovni unos taster 0.

- 49 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.3.5. Terminal preko kog se zadaju parametri step motora

3.4. Spisak korišćenih komponenata

Designator Component Library Reference Sheet


-----------------------------------------------------------------

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

Slika 3.6. Raspored elemenata na pločici.

- 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.

Osnovne karakteristike programa mikroC su sledeće:

o Pisanje C kôda korišćenjem kvalitetnog editora, što se ogleda automatskom kontrolom i


upozorenjima vezanim za sintaksu kôda, korišćenih parametara, kao i automatskoj korekciji
pojedinih grešaka

o Preglednost strukture programa (kôda), promenljivih i funkcija omogućava Code explorer

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 Moramo da napomenemo kako mikroC odstupa od ANSI standarda u nekoliko segmenata.


Neka odstupanja su načinjena su u cilju da se olakša programiranje, dok su druge rezultat
hardverskih ograni-čenja PIC mikrokontrolera. Pomenućemo neke specifičnosti:

o Rekurzivne funkcije (function recursion) su podržane sa izvesnim ograničenjima, koja su


posledica nešto složenijeg pristupa magacinu (stack) i ograničenja vezana za memoriju

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

o Brojne standardne C biblioteke (ctype, math, stdlib, string ) implementirane su u mikroC, uz


individualna odstupanja.

- 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:

Sl.4.1. Početak procesa instalacije se ostvaruje klikom na izvršni fajl mikroC_..._.exe

- 53 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.4.2. Sada treba kliknuti na komandno dugme NEXT

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

Sl.4.5. Izbor foldera za smeštanje programa i 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).

Sl.4.6. Izgled editora po startovanju programa mikroC

Sl.4.7. Kreiranje novog projekta preko opcije Project → New Project

- 56 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.4.8. Podešavanje parametara novog projekta (naziv, tip mikrokontrolera, takt, parametri kontrolera)

Sl.4.9. U editor treba uneti program (kôd) mikrokontrolera

- 57 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.4.10. U editor je unet za primer Soft_UART program

Sl.4.11. Sada treba izvršiti prevođenje (compile) programa preko opcije Project → Build

- 58 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.4.12. Izgled prozora posle kompilacije sa izveštajem (Messages)

Sl.4.13. Kao produkti prevođenja (kompilacije/kompajliranja) generiše se nekoliko fajlova: asemblerski


kôd (ASM), heksadecimalni kôd (HEX), izveštaji itd.

- 59 -
Upravljanje step motora preko mikrokontrolera PIC16F877

UART terminal

Na Sl.4.14 ilustrovano je startovanje internog (softverskog) terminala za UART komunikaciju.

Sl.4.14. Pokretanje internog terminala mikroC-a preko Tools → USART 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.)

Broj stop bitova (1, 1.5 i 2)

Izbor parnosti (bez, parna, neparna itd.)

- 60 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Broj bitova koji čine karakter (5, 6, 7 ili 8)

Uključivanje/isključivanje handshaking signala (RTS i DTR)

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.

Sl.4.15. Izgled prozora kod UART komunikacionog terminala

- 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.

Tabela 4.1.Tabela ASCII kôdova

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.

4.2. Programiranje korišćenjem AllPic-a i IC-prog-a

Da bi se heksadecimalni kôd dobijen iz kompilatora/kompajlera (compiler) upisao u mikrokon-


troler, neophodno je posedovati programator. Programator čine dve celine: bootstrap loader (hardver-
ski deo) i softver (za programiranje firmware-a).

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.

Sl.4.17. Električna šema ALLPIC bootstrap loader-a

- 64 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.4.18. Izgled štampane pločice ALLPIC-a

Sl.4.19.Izgled_ALLPIC-a

- 65 -
Upravljanje step motora preko mikrokontrolera PIC16F877

Softver IC-Prog

Za programiranje mikrokontrolera PIC16F877A može da se koristi softver IC-


Prog. Inače, ovaj softver je kompatibilan sa mnogim bootstrap loader-ima, kao što su
JDM Programmer, TAFE Programmer, TAIT Programmer, Conquest Programmer,
ProPIC 2 Programmer itd. ICProg poseduje mogućnost čitanja, upisa i verifikacije (Read,
Write, Verify) sadržaja mikrokontrolera. Narav-no, softver dozvoljava mogućnost
podešavanja parametara (WDT, PWRT, BODEN, LVP, CPD, CO, Debugger), kao i izbor
oscilatora (RC, LP, XT, HS).

Program IC-Prog se ne instalira na računaru, već se pokreće direktno – tačnije,


klikom na fajl ICPROG.EXE (Sl.4.20.).

Sl. 4.20.. Pokretanje softvera IC-Prog

Ako programer ima računar sa verzijom Windows-a «višom» od Windows-a 98,


odmah po star-tovanju progra-ma IC-Prog na ekranu će se pojaviti prozor sa
upozorenjem, koji je prikazan na Sl. 4.21. Razlog je što su kod svih Windows-a sa
platformom NT zaštićeni portovi. Zbog toga je neophodno da se instalira odgovarajući
drajver.

66
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl. 4.21. Upozorenje prilikom pokretanja programa

Korak 1. Instaliranje drajvera

Ulaskom u podmeni Misc, koji se nalazi u meniju Options, ostvaruje se


instaliranje/uključivanje drajvera icprog.sys (Settings → Options → Misc: √ Enable
2000/NT/XP), što je ilustrovano na Sl. 4.22. Na taj način omogućava se pristup serijskom
portu računara. Isto tako, neophodno je da se prioritet programiranja postavi ili na High
ili na Realtime, a nikako na Normal. Ovo potonje je veoma bitno. Naime, program po
startovanju automatski podesi normalan prioritet i ukoliko se ne promeni na High ili
Realtime, računar ne može da pristupi PIC mikrokontrolerima preko serijskog porta.

67
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.4.22. Uključivanje drajvera i prioriteta

68
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl. 4.23. Podešavanje parametara programa

Korak 2. Podešavanje hardverskih parametara

Nakon što je instaliran/uključen drajver, program će se restartovati i ponudiće


opciju podešavanja hardverskih parametara, koji treba da budu postavljeni kao na Sl.4.23.
IC-Prog ima sličnu konfigura-ciju kao JDM Programmer, signali su bez inverzije – dok
se komunikacija obavlja preko, na primer, serijskog porta COM2. Ako računar ima samo
jedan serijski port, podrazumeva se da je to COM1.

Korak 3. Izbor mikrokontrolera i učlitavanje kôda u bafer programa

Najpre treba izabrati mikrokontroler PIC16F877A (obeleženi padajući meni u


gornjem desnom uglu osnovnog prozora programa), a potom učitati heksadecimalni kôd
klikom na opciju Open File iz menija File - što je ilustrovano na Slikama 4.24 i 4.25..
(Napomena: Heksadecimalni kôd se dobija kompilacijom programa koji je napisan na
nekom višem programskom jeziku (C, Pascal, Basic itd.) ili na asembleru. Viši
programski jezici za mikrokontrolere imaju izvesne specifičnosti u odnosu na stan-dardne
programske jezike, ali ovde te specifičnosti neće biti razmatrane.)

69
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl. 4.24. Upisivanje/učitavanje kôda u bafer programa

70
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl. 4.25. Upisivanje/učitavanje fajla projekat.hex koji sadrži kôd

Korak 4. Programiranje mikrokontrolera

Ulaskom u meni Command i startovanjem opcije Program All (Sl.4.26). Zapravo,


proces pro-gramiranja podrazumeva da se sadržaj bafera programa (Sl. 4.25) upiše u
flash memoriju našeg mikro-kontrolera.

Naravno program će postaviti pitanje, tj. mogućnost da se izabere da li da otpočne


proces progra-miranja ili da se od njega odustane (Sl. 4.27.). Ukoliko se izabere

71
Upravljanje step motora preko mikrokontrolera PIC16F877

programiranje, program će obrisati prethodni sadržaj flash memorije mikrokontrolera i u


nju “prepisati” sadržaj bafera programa, čiji se je-dan deo vidi na Sl. 4.26.

Napredak proces programiranja, a potom i verifikacije programiranja je ilustrovan


na Sl. 4.28. Ukoliko je proces uspešno okončan, na ekranu će se pojaviti prozor kao na
Sl. 4.29. – u suprotnom, izgled prozora će biti kao na Sl. 4.30.

Sl.4.26. Startovanje programiranja mikrokontrolera PIC16F877A

72
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl. 4.27. Mogućnost da se prekine proces programiranja

Sl. 4.28. Proces programiranja, a zatim i verifikacije

Sl. 4.29. Poruka nakon uspešnog programiranja

73
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl. 4.30. Poruka nakon neuspešnog programiranja

74
Upravljanje step motora preko mikrokontrolera PIC16F877

4.3. Algoritam

75
Upravljanje step motora preko mikrokontrolera PIC16F877

4.3. Listing programa u programskom jeziku C

"***************************************";
"* *";
"* 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 interrupt() // za zaustavljanje motora


{

if(PIR1.RCIF) //Da li je RX interrupt?


{
smer2='0';
pomocna=RCREG;
}
}

void UsartStr(unsigned char *str) //Saljemo string na RS232


{
while((*str)!=0)
{
Usart_Write(*str);
if (*str==13) Usart_Write(10);
if (*str==10) Usart_Write(13);
str++;
}
}

void kas(unsigned char broj)


{
unsigned char broj1;
for (broj1=0; broj1<broj; broj1++)
{
Delay_ms(50);
}
}

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);
}

void motor(unsigned char s, unsigned char p, unsigned char m) //Kontrola motora


{
INTCON.GIE=1;
if(m==1) //monofazni mod
{
if (s==1)
{
prvi=1;
drugi=0;
trci=0;

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

if(m==2) // dvofazni mod


{
if (s==1)
{

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;
}
}

if(m==3) //monofazni mod


{
if (s==1)
{
prvi=1;
drugi=0;
trci=0;
cetvrti=0;
led1=1;
led2=0;
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=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;
}

void screen(void) // pocetni prikaz na terninalu


{
i=0;
for(i=0;i<40;i++)
{
Usart_Write(prikaz1[i]);
}

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);
}

void main() // glavna petlja


{
PIE1.RCIE=1;
INTCON.PEIE=1;
INTCON.GIE=0;
TRISA=0;
TRISB=0;
TRISC=0b10000000;
TRISD=0;
TRISE=0;
PORTB=0;
PORTD=0;
Usart_Init(9600);
Delay_ms(100);
smer1='0';
smer=0;
smer2='1';
pauza=500;
screen();
menu();

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

Povezati sitem sa računarom preko serijskog porta (RS232). Otvoriti komunikacioni


terminal. Start>All Programs>Accessories>Communications>Hiper Terminal. U opciji
Connect Using odabrati opciju željenog porta (COM 1). Podesiti sledeće parametre :
Bit per second : 9600,
Data bits : 8,
Parity : None,
Stop bits : 1,
Flow control : None.
Ovaj dialog box je prikazan na slici 6.1.

Slika 5.1. Podešavanje parametara COM porta

Taster za restart na pločici pokreće aplikaciju. Nakon podešavanja parametara step


motora (slika 5.2.), zelene diode pokazuju koji namotaj step motora je pod naponom.

93
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl 5.2. Komunikacioni terminal uređaja

94
Upravljanje step motora preko mikrokontrolera PIC16F877

6. PRILOZI

6.1 Specifikacije pojedinih komponenti

Sl.6.1. Fizičke specifikacije stabilizatora

95
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.6.2. Fizičke specifikacije PIC16F877

96
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.6.3. Tehnički parametri I izgled tastera

97
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.6.4. Tehnički parametri I fizičke specifikacije dioda

98
Upravljanje step motora preko mikrokontrolera PIC16F877

6.2. AllPic Programator

Programator je namenjen programiranju većine serijskih


PICmikrokontrolera.Pomenućemo samo neke od najpoznatijih: PIC16F8x, PIC16F62x,
PIC16F87x, PIC12C50x, PIC12F6xx itd.Hardver je zasnovan na već oprobanom i veoma
popularnom serijskom programatoru Pony Prog.

Uređaj se povezuje sa PC računarom putem RS232 serijskog porta, koji


standardno postoji na većini današnjih PC računara. Za rad programatora potreban je i
slabiji izvor napona napajanja oko 15 V. Dioda Dl na ulazu za napajanje je predviđena
kao zaštita od pogrešnog priključenja polariteta izvora za napajanje. Izvor može biti i
naizmenični napon, ukoliko vam je takav pri ruci. Stabilizator napona 78L05 obezbeđuje
5 V napon potreban za napajanje mikrokontrolera, dok se Vppnapon (aprox. 13V)
generiše pomoću zener diode D3. Ostatak kola čine tranzistori NPN i PNP, univerzalnog
tipa, kao i propratne zener diode D5 i D6 I otpornici R4 i R5 koji obezbeđuju TTL
logičke nivoe (5V) potrebne za programiranje mikrokontrolera. Razlika u odnosu na
postojeće programatore koji se mogu sresti na internetu (Pony prog, JDM) je upravo u
delu kola koga čine T3, T4 i JPl sa pratećim elementima. Kod starih modela
programatora (Pony, JDM,...) javlja se problem ako je potrebno reprogramirati PIC koji
je prethodno programiran sa uključenim; INT/RC; i uključenim internim MCLR, u
FUSES podešavanjima. U tom slučaju PONY programator ne može ni da obriše PIC jer

99
Upravljanje step motora preko mikrokontrolera PIC16F877

nije ispoštovana procedura preporučena od strane proizvođača mikrokontrolera, koja se


odnosi na to da se Vdd (+5 V) napon sme pojaviti tek nakon uspostavljanja MCLR (+13
V) programskog napona. Jedino je sa ovakvim sistemom moguće da PIC uđe u
programski mod i da se ponovno reprogramira. Sve navedene osobine poseduje AllPIC.
Međutim stari modeli PIC mikrokontrolera koji nemaju interni oscilator zahtevaju obrnut
proces od gore navedenog tj. prvo Vdd napon pa tek nakon toga MCLR napon I za takve
PIC kontrolere je ubačena podrška u vidu džampera JPl kojim se bira mod rada; Vdd
mode select.

Sl.6.5. Šema veza programatora AllPic

Indikator LED1 nas informiše o prisustvu napona napajanja programatora I on treba da


bude u granicama 14-20V, s tim da treba računati da pri 20V napajanju grejanje

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.

Sl.6.6. Komponente koje su upotrebljene u AllPic programatoru

101
Upravljanje step motora preko mikrokontrolera PIC16F877

6.3. Izgled realizovanog uređaja i pločice

Sl. 6.1.Izgled uređaja

102
Upravljanje step motora preko mikrokontrolera PIC16F877

Sl.6.2. Izgled pločice

103
Upravljanje step motora preko mikrokontrolera PIC16F877

LITERATURA

1. ARHITEKTURE I PROGRAMIRANJE RAČUNARSKIH SISTEMA


ZASNOVANIH NA FAMILIJI PROCESORA 80x86, Mile K. Stojčev,
Branislav D. Petrović, I izdanje, Elektronski fakultet, Niš
2. mikroC Help , Mikroelektronika Beograd, http://mikroe.com
3. IC-Prog, Version 1.05, B.Gijzen, www.ic-prog.com
4. PIC16F877, DATASHEET, Microchip Tecnology Inc, 2001.
http://www.microchip.com
5. Mikrokontroleri, http://milan.milanovic.org/skola/mikkon/mikkon-06.htm
6. PC interfejsi,Vojo Milanović dipl.ing., Infelektronika,2006.

104
Upravljanje step motora preko mikrokontrolera PIC16F877

BIOGFRAFIJE AUTORA

Ime i prezime : Darko Radosavljević


Datum rodjenja : 04. jun 1983.
Adresa : Stanoja Glavaša 2,
37000 Kruševac,
Srbija
Tel : 037/ 490 876
Mob : 064/16 33 230
e-mail : drmeca@gmail.com
Bračno stanje: neoženjen

Obrazovanje :

 Elektrotehnička škola Kruševac, „Elektrotehničar automatike“ 2002.god


 Elektronski fakultet u Nišu, smer Telekomunikacije, apsolvent

Poznavanje jezika :

 Engleski (pisanje-odlično, čitanje-odlično, govor-odličan)

Rad na računaru :

 MS Office
 Excel
 Internet
 Grafički programi (Photoshop, Corel Draw, Flash)

Sopstvene veštine :

Orjentisanost ka ostvarenju zadatih ciljeva, postavljanje prioriteta, preuzimanje


problema na sebe i rešavanje istih, komunikativnost, kreativnost, inovacije, spremnost na
saradnju i rad pod stresom.

Ostalo :

 Vozačka dozvola B kategorije, aktivan vozač.


 Višegodišnje bavljenje vaterpolom

105
Upravljanje step motora preko mikrokontrolera PIC16F877

Ime i prezime : Miloš Marković


Datum rodjenja : 16. decembar 1983.
Adresa : Marka Jovanovića 22,
18000 Niš,
Srbija
Tel : 018/255 494
Mob : 063/523 999
e-mail : markovicmilos83@gmail.com
Bračno stanje: neoženjen

Obrazovanje :

 Gimnazija „ Svetozar Marković“, Niš 2002.god


 Elektronski fakultet u Nišu, smer Telekomunikacije, apsolvent

Poznavanje jezika :

 Engleski (pisanje-odlično, čitanje-odlično, govor-odličan)

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

You might also like