d.radosavljevic - m.markovic - upravljanje step motora preko mikrokontrolera pic16f877

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

Upload: vladislav-cizmovic

Post on 02-Dec-2014

248 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

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

Page 2: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 1 -

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

Page 3: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 2 -

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.

Page 4: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 3 -

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.

Page 5: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 4 -

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

Page 6: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 5 -

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

Page 7: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 6 -

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

Page 8: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 7 -

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.

Page 9: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 8 -

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:

Page 10: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 9 -

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:

Page 11: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 10 -

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

Page 12: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 11 -

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

Page 13: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 12 -

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)

Page 14: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 13 -

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.

Page 15: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 14 -

Sl.2.2. Arhitektura mikrokontrolera PIC16F877A

Page 16: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 15 -

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.

Page 17: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 16 -

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.

Page 18: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 17 -

Tabela 2.1. Izbor vrednosti kondenzatora za kvarcni kristal

Page 19: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 18 -

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.

Page 20: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 19 -

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.

Page 21: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 20 -

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.

Page 22: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 21 -

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.

Page 23: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 22 -

Konfiguracija oscilatora

PWRT omogućen PWRT

onemogućen

“Buđenje” iz SLEEP režima rada

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 režima rada)

PC+1

UUU0 0UUU

Interrupt 004h UUU1 0UUU

Tabela 2.4. Postavljanje registara nakon reseta

Page 24: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 23 -

Registar

Power-on reset

MCLR reset pri: - normalnom režimu - SLEEP mod WDT reset pri normalnom režimu

Buđenje iz SLEEP režima - interrupt - 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’).

Page 25: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 24 -

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

Page 26: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 25 -

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

Page 27: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 26 -

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.

Page 28: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 27 -

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

Page 29: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 28 -

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.

Page 30: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 29 -

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.

Page 31: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 30 -

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.

Page 32: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 31 -

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.

Page 33: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 32 -

2.14. Blok-dijagram pinova RB3-RB0

2.15. Blok-dijagram pinova RB7-RB4

Page 34: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 33 -

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.

Page 35: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 34 -

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

Page 36: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 35 -

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

Page 37: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 36 -

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.

Page 38: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 37 -

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

Page 39: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 38 -

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.

Page 40: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 39 -

Sl. 2.20. Mapa registara mikrokontrolera PIC16F877

Page 41: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 40 -

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.

Page 42: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 41 -

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

Page 43: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 42 -

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

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

Page 44: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 43 -

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.

Page 45: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 44 -

Sl.2.21. Blok-dijagram A/D konverrota

Page 46: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 45 -

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.

Page 47: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 46 -

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

Page 48: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 47 -

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.

Page 49: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 48 -

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.

Page 50: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 49 -

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.

Page 51: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 50 -

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

Page 52: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 51 -

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.

Page 53: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 52 -

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.

Page 54: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 53 -

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

Page 55: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 54 -

Sl.4.2. Sada treba kliknuti na komandno dugme NEXT

Sl.4.3. Prihvatanje uslova licenciranja i zatim treba kliknuti na komandno dugme NEXT

Page 56: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 55 -

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

Page 57: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 56 -

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

Page 58: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 57 -

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

Page 59: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 58 -

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

Page 60: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 59 -

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.

Page 61: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 60 -

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

Page 62: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 61 -

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

Page 63: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 62 -

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

Page 64: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 63 -

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.

Page 65: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 64 -

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

Page 66: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

- 65 -

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

Sl.4.19.Izgled_ALLPIC-a

Page 67: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

66

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.

Page 68: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

67

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.

Page 69: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

68

Sl.4.22. Uključivanje drajvera i prioriteta

Page 70: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

69

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

Page 71: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

70

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

Page 72: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

71

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

Page 73: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

72

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

Page 74: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

73

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

Page 75: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

74

Sl. 4.30. Poruka nakon neuspešnog programiranja

Page 76: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

75

4.3. Algoritam

Page 77: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

76

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

Page 78: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

77

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

Page 79: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

78

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:");

Page 80: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

79

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

Page 81: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

80

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

Page 82: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

81

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

Page 83: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

82

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;

Page 84: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

83

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;

Page 85: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

84

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

Page 86: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

85

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

Page 87: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

86

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

Page 88: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

87

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;

Page 89: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

88

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;

Page 90: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

89

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;

Page 91: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

90

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)

Page 92: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

91

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

Page 93: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

92

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

Page 94: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

93

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.

Page 95: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

94

Sl 5.2. Komunikacioni terminal uređaja

Page 96: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

95

6. PRILOZI 6.1 Specifikacije pojedinih komponenti

Sl.6.1. Fizičke specifikacije stabilizatora

Page 97: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

96

Sl.6.2. Fizičke specifikacije PIC16F877

Page 98: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

97

Sl.6.3. Tehnički parametri I izgled tastera

Page 99: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

98

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

Page 100: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

99

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

Page 101: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

100

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

Page 102: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

101

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

Page 103: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

102

6.3. Izgled realizovanog uređaja i pločice

Sl. 6.1.Izgled uređaja

Page 104: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

103

Sl.6.2. Izgled pločice

Page 105: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

104

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.

Page 106: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

105

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 : [email protected] 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

Page 107: d.radosavljevic - m.markovic - Upravljanje Step Motora Preko Mikrokontrolera Pic16f877

Upravljanje step motora preko mikrokontrolera PIC16F877

106

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 : [email protected] 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)