You are on page 1of 23

VELEUČILIŠTE U RIJECI

ODJEL TELEMATIKA

STUDENT Marin Simčić

UPRAVLJANJE KORAČNIM MOTORIMA


PUTEM ARDUINO PLATFORME
PROJEKTNA DOKUMENTACIJA

Rijeka, 2013.
VELEUČILIŠTE U RIJECI
ODJEL TELEMATIKA

UPRAVLJANJE KORAČNIM MOTORIMA


PUTEM ARDUINO PLATFORME
PROJEKTNA DOKUMENTACIJA

Kolegij: Projekt u telematici


Mentor: Marino Franušić, predavač
Student: Marin Simčić
Matični broj: 2427005016/10
Studij: Telematika

Rijeka, siječanj, 2013.


2
SADRŽAJ
APSTRAKT ......................................................................................................................... 4
1. UVOD ............................................................................................................................... 5
2. KORAČNI MOTORI ...................................................................................................... 6
2.1. Karakteristike koračnih motora ................................................................................. 6
2.2. Podjela koračnih motora ............................................................................................ 7
2.2.1 Reluktantni koračni motori ................................................................................. 7
2.2.2 Koračni motori s permanentnim magnetom ........................................................ 8
2.2.3 Hibridni koračni motori ...................................................................................... 8
2.3 Bipolarni i unipolarni koračni motori ......................................................................... 9
2.4 Upravljanje bipolarnim koračnim motorom ............................................................... 9
3. ARDUINO PLATFORMA ........................................................................................... 10
4. MOTOR DRIVER L298N ............................................................................................ 11
5. UPRAVLJANJE MOTORIMA ................................................................................... 12
5.1 Spajanje tipkala ......................................................................................................... 12
5.2 Regulacija brzine vrtnje ............................................................................................ 13
5.3 Prisilno zaustavljanje motora .................................................................................... 14
5.4 Električna shema spajanja ......................................................................................... 15
5.5 Montažna shema spajanja ......................................................................................... 16
5.6 Problem s radom tipkala ........................................................................................... 17
5.7 Problem s istovremenim pokretanjem oba motora ................................................... 18
5.8 Programski kod ......................................................................................................... 18
6. ZAKLJUČAK ................................................................................................................ 22
7. LITERATURA............................................................................................................... 22
8. POPIS SLIKA ................................................................................................................ 23

3
APSTRAKT
U projektnom radu je opisana jedna od brojnih mogućnosti Arduino razvojne platforme
otvorenog koda, upravljanje koračnim motorom. Koračni motori pulsnu električnu pobudu
pretvaraju u korak, te omogućavaju potreban diskretni pomak, što je nužno u sklopovima i
sustavima gdje se zahtijeva kontrolirano upravljanje preciznim pomacima mehaničkih
dijelova. U praktičnom dijelu projekta realizirano je simultano upravljanje dvama bipolarnim
dvofaznim koračnim motorimam, pomak za jedan korak napred-nazad i kontinuirano kretanje
napred-nazad. Za realizaciju projekta, pored osnovnog modela arduinovog modela
ArduinoUNO-a i odgovarajućeg izvora napajanja, korištena su dva odvojena motor drivera s
integriranim krugom L298N. Motor driver je elektronički sklop koji putem upravljačkih
signala sa miktrokontrolera napaja koračni motor potrebnim naponskim i strujnim veličinama.
Arduino UNO nema mogućnost višedretvenog rada, no isti nedostatak se donekle može
kompenzirati Interrupt funkcijom kojom je na primjeru ovog projekta riješen zahtjev za
prisilno zaustavljanje motora. Upravljački program je napisan u originalnoj arduinovoj
programskoj podršci otvorenog koda, u programskom jeziku vrlo sličnom C-u. Programski
kod je relativno jednostavan jer Arduinova programska podrška između ostalih sadrži
knjižnicu naredbi namjenjenih upravo upravljanju koračnim motorima.

Ključne riječi: koračni motor, mikrokontroler, motor-driver, bipolarni, upravljanje,


tipkalo, bouncing.
4
1. UVOD
Veliki dio tehnologija koja se susreće i koristi u svakodnevnom životu sadrži pokretne
dijelove čijim je pomacima potrebno precizno upravljati kako bi sustav zadovoljio željenu
funkcionalnost i automatizam. Suvremena elektronička rješenja omogućavaju pretvorbu
analognih veličina u digitalne podatke, a koračni motori te iste podatke pretvaraju u
proporcionalni mehanički pomak.
Arduino UNO je univerzalni mikrokontroler otvorenog koda i besplatne programske
podrške sa jednostavnim korisničkim sučeljem, te je kao takav idealan za razvoj upravljačke
elektronike i robotike. Glavna namjena kontrolera je komuniciranje s različitim hardverom
koji je na njega priključen putem ulazno-izlaznih konektora. Bogata programska podrška
između brojnih knjižnica s predefiniranim programskim paketima sadrži i onu koja je posebno
kreirana za upravljanje koračnim motorima, a što je i cilj ovog projekta.
Koračni motori su jednostavne, pouzdane i precizne komponente koje ne zahtjevaju
posebno održavanje, te su nezaobilazni elementi u različitim robotiziranim i automatiziranim
uređajima i sustavima. Ovisno o namjeni proizvode se u različitim oblicima, različitim
tehnološkim rješenjima i sa različitim tehničkim specifikacijama.
Kontroleri na izlazu daju naponske i strujne vrijednosti koje su u pravilu puno manje od
onih koje su potrebne za pokretanje elektromehaničkih pretvornika. Rješenje ovog tehničkog
problema je ugradnja motor-drivera između kontrolera i motora, elektroničkog sklopa koji na
osnovu upravljačkih impulsa napaja priključeni motor potrebnim naponskim i strujnim
veličinama iz odgovarajućeg zasebnog izvora napajanja.
Zadatak ovog projektnog rada je izvedba oglednog primjera sustava za pretvorbu digitalnih
veličina u mehaničko gibanje.

5
2. Koračni motori
Koračni motori su pretvornici električne energije u mehaničku koji omogućavaju pretvorbu
digitalnog podatka u proporcionalni mehanički pomak. Prevladava uporaba rotacijske
izvedbe, no proizvode se i koračni motori u translacijskoj izvedbi. Pri uzbudi namotaja po
programiranom redoslijedu rotor se pomakne u diskretnim koracima, odnosno pokrene u
željenom smijeru za predviđeni kut. To su dakle sinkroni motori jer rotor sinkrono prati
kretanje statorskog polja zbog sila nastalih međudjelovanjem s poljem rotorskih magneta ili
reluktantnih sila. Pozicija rotora se mijenja u koracima jer se statorski namotaji napajaju
strujnim impulsima potrebnog rasporeda i polariteta upravljanim pomoću binarnih signala.
Smjer vrtnje se može mijenjati promjenom impulsnog slijeda, brzina rotacije promjenom
frekvencije impulsa, a kut (prijeđeni broj koraka) ovisi o ukupnom broju pristiglih impulsa.
Rotor se može i držati u željenoj kutnoj poziciji. Koračni motori su nezaobilazni elementi za
precizno upravljanje i pozicioniranje pokretnih mehanizama u praktičnim uređajima i
sustavima kao što su na primjer disketni pogoni, CD/DVD uređaji, printeri, skeneri, fax
uređaji, kamere, roboti, elektromotorni ventili, protočne pumpe, CNC strojevi, industrijski
ventilatori, te brojni drugi uređaji u domaćinstvu i industriji. Svima njima je zajedničko
kontrolirano gibanje mehaničkih pokretnih djelova. Za široku primjenu zaslužna je njihova
prilagodljivost konkretnoj potrebi i relativno jednostavan način njihovim upravljanjem.

2.1. Karakteristike koračnih motora

Iz mehaničkog pogleda koračni motor je jednostavna, pouzdana i precizna komponenta


koja ne zahtjeva posebno održavanje zahvaljujući konstrukciji bez kolektora i četkica. Još
neke od prednosti su povoljna cijena, jednostavan dizajn, velika akceleracija i snaga, te veliki
raspon brzine vrtnje koja je proporcionalna frekvenciji ulaznih impulsa. Od nedostataka se
može izdvojiti mala korisnost (koračni motori troše značajnu energiju bez obzira na teret),
moment znatno opada s povećanjem brzine, sklonost rezonanciji, jako zagrijavanje na
zahtjevnim režimima, te niska izlazna snaga s obzirom na veličinu i težinu. Odabir koračnog
motora za konkretnu primjenu ovisi o njegovim specifičnim vrijednostima slijedećih
parametara:
• Rezolucija
o Rezolucija rotacijskih koračnih motora – broj koraka po okretaju, odnosno
iznos koraka u stupnjevima
o Rezolucija linearnih koračnih motora – dužina koraka
• Odziv jednog koraka – pokazuje brzinu, oscilatornost i točnost odziva. To je vrijeme
potrebno za pomak motora za jedan korak nakon što se napajanje jedne faze isključi, a
slijedeće faze uključi
• Točnost koračnog motora – ovisi o preciznosti izrade motora, a izražava se
maksimalnom relativnom pogreškom, odnosno greškom pozicije zbog konstrukcije.

6
• Statički moment – moment držanja je ovisnost uspostavljenog momenta u motoru o
pomaku rotora. Krutost koračnog motora može se povećati povećanjem statičkog
momenta.
• Dinamički moment – ovisnost srednje vrijednosti momenta u motoru o brzini vrtnje.
Predstavlja maksimalnu vrijednost momenta tereta kojom se u stacionarnom stanju
može opteretiti koračni motor na određenoj brzini vrtnje, a da rotor ne ispadne iz
sinkronizma s upravljačkim impulsima i motor se ne zaustavi.
• Start-stop moment – moment tereta s kojim motor može krenuti pri zadanoj frekvenciji
koračnih impulsa, a da ne izgubi korak.

2.2. Podjela koračnih motora

Koračni motori se mogu podijeliti na više načina:


• Prema vrsti uzbude
o Prema načinu stvaranja uzbude
Elektromagnetska uzbuda
Uzbuda permanentnim magnetima
o Prema smještaju uzbude
Uzbuda na rotoru
Uzbuda na statoru
• Prema izvedbi rotora
o Nazubljeni čelični rotor (rotor s varijabilnom reluktancijom)
o Rotor sa permanentnim magnetima
o Hibridni motori – kombinacija prethodna dva
• Prema broju faza – najčešće 2-6 faza
• Prema broju pari polova
o Koračni motori s permanentnim magnetima na rotoru imaju 1 do 4 pari polova
o Ostali serijski proizvedeni koračni motori imaju 1 do 90 pari polova
• Prema načinu kretanja
o Rotacijski
o Translacijski
• Prema konstrukciji namotaja odnosno napajanju
o Unipolarni
o Bipolarni

2.2.1 Reluktantni koračni motori

Sastoji se od nazubljenog višefazno namotanog statora i nazubljenog (višepolnog) rotora


od mekog željeza (nema stalnih magneta). Broj polova (zubi) rotora treba biti takav da
jednom polu statora ne pripada cijeli broj zubi rotora, jer bi inače došlo do „ljepljenja“ rotora
i motor se ne bi mogao okretati. Uzbuda statorskih namota stvara magnetno polje na njegovim
polovima koji magnetnom silom djeluju na najmanje udaljene zube rotora. Rotor teži položaju
7
minimalnog magnetskog otpora (reluktancije), a
postiže ga poklapanjem simetrale uzbuđenog para
statorskih polova i simetrale samo jednog para
rotorskih polova. Kad namoti nisu napajani, statički
moment motora jednak je nuli. Kut koraka ovisi o
broju zuba statora i rotora, o načina namatanja
statorskih faza te načinu njihove pobude. Reluktantni
koračni motori se dijele:
• Prema broju paketa namota
o Jednopaketni Slika 1_reluktantni koračni motor
o Višepaketni
• Prema načinu kretanja
o Rotacijski
o Translacijski
• Prema vrsti zračnog raspora
o Radijalni
o Aksijalni

2.2.2 Koračni motori s permanentnim magnetom

Sastoji se od radijalno magnetiziranog


permanentnomagnetskog rotora i višefaznog
statora. Smještaj permanentnih magneta na
rotoru omogućava jednostavniju izvedbu
koračnog motora. Uslijed uzastopnog
ukapčanja ili okratanja smjera struje pojedinih
faza (ili njihova kombinacija po određenom
redoslijedu) dolazi do skokovitog mijenjanja Slika 2_permanentnomagnetski koračni motor

rezultantnog vektora magnetskog polja statora


u jednom ili drugom smijeru. U smjeru rezultantnog magnetskog polja statora postavlja se
rotor i to čini koračnu rotaciju. Kut koji pripada jednom koraku kod koračnog motora s
permanentnim magnetima zavisi od odnosa broja magnetskih polova na statoru i broja
magnetskih polova na rotoru. Ovi motori imaju malu rezoluciju, tipični koračni kutovi su
između 7,5o i 15o, a postižu veće snage i momente od reluktantnih.

2.2.3 Hibridni koračni motori

Hibridni koračni motori rade na kombinaciji rada permanentnomagnetskih i motora s


promjenjivom reluktancijom. Stator i namotaji odgovaraju onima kakve imaju reluktantni
motori. Rotor hibridnog motora se sastoji od uzdužno orjentiranog permanentnog magneta
koji na svakom polu ima nazubljeni disk. Jedan disk je na južnom, a drugi na sjevernom polu i
međusobno su zarotirani za pola zuba čime je postignuta visoka rezolucija koračanja.
8
Statorski namotaji su podjeljeni u najmanje
dvije faze. Ovaj tip motora ima visoku
preciznost i veliki moment, a može se
konfigurirati i za koračne kuteve od 1,8o.

Slika 3_hibridni koračni motor

2.3 Bipolarni i unipolarni koračni motori

Koračni motor može imati 4, 5, 6 ili 8 priključnih žica. Za razliku od unipolarne izvedbe,
statorski namotaji bipolarnog koračnog motora nemaju srednji izvod na pojedinom statorskom
namotaju. Umjesto izmjenične uzbude jedne pa druge polovice namotaja za postizanje
promjene struje, a time i magnetskog polja, kod bipolarnih je to moguće izvesti samo
promjenom vrijednosti napona na oba kraja namotaja. Koračni motor sa 4 priključne žice je
dakle isključivo bipolarni i zahtjeva bipolarni kontroler. Ostali motori se mogu pokretati i
unipolarnom i bipolarnom uzbudom jer se srednji statorski izvod može jednostavno
zanemariti.

Slika 4_različite konstrukcije namotaja koračnih motora


(http://www.stepperworld.com/Tutorials/pgBipolarTutorial.htm)

2.4 Upravljanje bipolarnim koračnim motorom

U praktičnom dijelu ovog projektnog rada se koriste bipolarni koračni motori. Razlikuju se
dva osnovna načina upravljanja koračnim motorom:
• Upravljanje – puni korak
• Upravljanje – polukorak

9
Na slici br. 5 je shematski prikaz oba načina upravljanja bipolarnim koračnim motorom na
primjeru jednostavnog dvofaznog modela sa jednim parom polova po fazi i
permanentnomagnetskim rotorom s dva pola, a isti princip rada se primjenjuje i na
najsloženije modele.

Slika 5_shematski prikaz upravljanja bipolarnim koračnim motorom


(http://powerelectronics.com/images/Versatile-Microstepper-Driver-fig-1.jpg)

3. Arduino platforma
Arduino je univerzalni mikrokontroler zasnovan na ATmel tehnologiji i idealan je za
razvoj upravljačke elektronike i robotike. Platforma je otvorenog koda temeljena na
jednostavnoj razvojnoj pločici s ulazno/izlaznim konektorima i besplatnom programskom
podrškom sa jednostavnim korisničkim sučeljem. Programiranje uređaja se izvodi iz
integriranog razvojnog okruženja, koje postoji za Windows, Mac i Linux operativni sustav, u
programskom jeziku sličnom C-u. Glavna je namjena cijelog sustava komuniciranje s
različitim hardverom koji je na njega priključen. Arduino je dostupan u nekoliko različitih
verzija, a osnovni model je Arduino UNO sa slijedećom tehničkom specifikacijom:
• Mikroprocesor : ATmega328
• Frekvencija procesora : 16MHz
• Radni napon : 5V
• Ulazni napon (preporučeno): 7-12V
• Ulazni napon (ograničeno): 6-20V
• Digitalni I/O pinovi : 14 (od toga moguće 6 PWM izlaza)
• Analogni ulazni pinovi : 6
10
• DC struja za I/O pinove: 40mA
• DC struja za 3,3V pin: 50mA
• Flash memorija: 32 KB (0,5KB rezervirano za bootloader)
• SRAM: 2KB
• EEPROM: 1KB

Slika 6_Arduino UNO razvojna platforma

Mikrokontroler izvodi jedan program koji je zapisan u njegovu Flash memoriju, a u


EEPROM-u se čuvaju podaci nakon gašenja uređaja, kao u malom hard disku. Za proširenje
arduina dostupni su brojni shildovi koji imaju dodatne mogućnosti ili čak svoje vlastite
mikrokontrolere.

4. Motor driver L298N


Za kontrolirano napajanje elektromotora se koriste motor driveri koji osiguravaju potrebne
naponske i strujne vrijednosti iz odgovarajućeg izvora napajanja, a na pobudu upravljačkih
impulsa iz kontrolera. Pored toga da bi DC motor mijenjao smjer okretanja potrebno je
promijeniti smjer struje u motor, a to se najlakše postiže H-mostom. U ovom projektu se
koristi sklop sa integriranim krugom L298N, dvostrukim H-bridge DC motor driverom, koji
može upravljati sa dva odvojena istosmjerna motora ili jednim bipolarnim dvofaznim
koračnim motorom.
Tehnička specifikacija korištenog sklopa:
Ulazni napon: 7-35V
Izlazni napon: 5-35V
Vršna izlazna struja: 2A
Napon napajanja drivera: 5-7V
Raspon upravljačkog napona: -0,3-2,3V
Maksimalna izlazna snaga: 20W

11
Slika 7_raspored pinova IC L298 Slika 8_motor driver s L298N

5. Upravljanje motorima
Ovim projektom je realizirano simultano upravljanje dvama koračnim motorima putem
četiri tipkala uz mogućnost regulacije brzine vrtnje i prisilno zaustavljanje motora;
1. vrtnja za cijeli krug u smijeru kazaljke na satu
2. vrtnja za cijeli krug obrnuto od kazaljke na satu
3. okretanje za jedan korak u smijeru kazaljke na satu
4. okretanje za jedan korak obrnuto od kazaljke na satu

5.1 Spajanje tipkala

Tipkala su prema priloženoj shemi spajanja spojena preko R-2R otporne mreže na jedan
analogni ulaz mikrokontrolera, pin A1.

Slika 9_shema spajanje 4 tipkala na jedan analogni ulaz


12
Arduino naime ima ugrađen 10-bitni analogno-digitalni pretvornik koji vrijednost
priključenog istosmjernog napona na analogni ulaz pretvara u cjelobrojnu vrijednost i to
„1023“ za priključeni napon 5V, „0“ za 0V, te ostale vrijednosti u rasponu „1-1022“
proporcionalno vrijednosti priključenog napon. Za izvor napona se koristi 5V interni napon
mikrokontrolera pa se može izračunati korak kvantizacije 5V / 1024 = 0,0049V ili 4,9mV.
Najveća brzina čitanja je 10000 puta u sekundi jer je procesoru potrebno 100µs da pročita
analogni ulaz. Pritiskom na odgovarajuće tipkalo u otpornoj mreži na analognom ulazu se
dakle generira cjelobrojna vrijednost proporcionalna narinutom naponu. Generiranu brojčanu
vrijednost je moguće ispisati uz pomoć alata „Serial Monitor“, te programski kod prilagoditi
dobivenim vrijednostima za svako tipkalo.

5.2 Regulacija brzine vrtnje

Na sličan način je omogućena regulacija brzine vrtnje putem naponskog djelitelja


ostvarenog sa linearnim potenciometrom vrijednosti 10kΩ, čiji su krajevi spojeni na naponski
izvor 5V, a priključak klizača na analogni ulaz A2. Ovisno o položaju klizača potenciometra,
na analogni ulaz je narinuta odgovarajuća vrijednost napona što generira proporcionalu
brojčanu vrijednost na pripadajućem analognom ulazu.

Slika 10_shema spajanja potenciometra na analogni ulaz

13
5.3 Prisilno zaustavljanje motora

Prisilno zaustavljanje je obavezna sigurnosna funkcija različitih pogonskih sustava koja se


aktivira ručno ili automatski uslijed prekoračenja unaprijed zadanih graničnih vrijednosti ili
nastanka incidentne situacije. Kod mikrokontrolera Arduino UNO steper funkcija blokira rad
procesora te je za prisilno zaustavljanje motora potrebno koristiti prekidnu funkciju
integriranu u arduinovoj programskoj podršci. Instanca funkcije prekida se deklarira
slijedećim izrazom: attachInterrupt(pin, function, mode). Digitalni pinovi
2 i 3 su na Arduino UNO kontroleru rezervirani za prvi parametar funkcije. Drugim
parametrom se poziva izvršna funkcija prekida, a na mjestu trećeg parametra se definira uvjet
okidanja prekida na jedan od slijedećih načina:
• LOW – okidanje prekida kad je pin postavljen nisko
• CHANGE – okidanje prekida uvijek kad pin promijeni vrijednost
• RISING – okidanje prekida na pozitivan brid promjene vrijednosti pina
• FALLING – okidanje prekida na negativan brid promjene vrijednosti pina
Za potrebe ovog projekta korišten je mod CHANGE.
Varijabla u koju se sprema promjena stanja prilikom okidanja prekida mora imati prefiks
volatile što govori kompajleru da se ista nalazi u RAM memoriji, a ne u memorijskim
registrima. Razlog tome je što bi varijabla mogla pod određenim uvjetima imati netočnu
vrijednost uslijed izvođenja trenutnog procesa kad bi se ista čuvala u memorijskim registrima.

Slika 11_shema spajanja elemenata za potrebe Interrupt funkcije


14
5.4 Električna shema spajanja

Slijedi prikaz kompletne električne i montažne sheme spajanja. Sve sheme u ovom
projektu su izrađene u desktop aplikaciji „Fritzing“ (ima GNU GPL licencu za slobodan
softver) koja ima veliku bazu predefiniranih elemenata, no nedostajao je montažni element
korištenog motor drivera, te je isti bilo potrebno dodatno generirati. To je učinjeno tako da je
.jpg datoteka s fotografijom motor drivera konvertirana u .svg datoteku (vektorski grafički
format), te je nakon importiranja u Fritzing programsku aplikaciju prilagođena za korištenje
putem integriranog editora novih elemenata na način da su na odgovarajućim pozicijama na
slici definirane virtualne priključnice na koje se kasnije mogu „lijepiti“ spojne veze.

Slika 12_električna shema spajanja praktičnog dijela projekta

15
5.5 Montažna shema spajanja

Slika 13_montažna shema spajanja praktičnog dijela projekta

16
Slika 14_fotografija gotovog modela projekta

5.6 Problem s radom tipkala

Prilikom izrade projekta uočeni su standardni tehnički problemi u radu tipkala, za koja je
karaktiristačan takozvani „bouncing“ ili titranje kontakata kad se uključuju strujni krugovi
koji traju vrlo kratko (mjereno u ms ili još kraćim vremenskim jedinicama). U konkretnom
slučaju pokretanje motora za jedan korak rezultiralo bi okretanjem motora za dva-tri koraka.
Ovo je riješeno ubacivanjem linije koda koja za definirano vrijeme stavlja procesor u
mirovanje, a nakon odrađenog prvog kontakta tipkala. Pokusom je utvrđeno da kašnjenje od
250ms uglavnom rješava navedeni problem u ovom projektu. Kod pokretanja motora za cijeli
krug ovog problema nema jer se motor okreće najmanje 0,5s i za to vrijeme procesor ne
reagira na promjene stanja tipkala.

17
5.7 Problem s istovremenim pokretanjem oba motora

Problem se je pojavio i pri pokušaju pokretanja dva motora istovremeno jer bi drugi motor
započeo s okretanjem tek kad bi prvi završio, a razlog tome je što je stepper ciklus blokirajuća
funkcija za mikrokontroler. Ovaj problem je donekle riješen pokretanjem oba motora za po
jedan korak u while petlji koja ima unaprijed zadani broj ponavljanja, a koji odgovara
željenom kutu vrtnje motora. Iako za ljudsko oko izgleda da se oba motora vrte istovremeno,
u stvarnosti okret drugog motora kasni za okretom prvog za vrijeme potrebno da procesor
obradi i pošalje upravljački impuls na motor driver.

5.8 Programski kod

Upravljački program je napisan u originalnoj arduinovoj programskoj podršci otvorenog


koda, u programskom jeziku vrlo sličnom C-u. Arduinova programska podrška između ostalih
sadrži knjižnicu naredbi namjenjenih upravo upravljanju koračnim motorima što izradu
glavnog programa čini jednostavnom a napisani programski kod lako razumljivim.

/*Programski kod za upravljanje bipolarnim steper motorima


putem Arduino mikrokontrolera. Omogućava pokretanje dva motora
za jedan korak ili cijeli krug u smjeru kazaljke na satu
odnosno obrnuto, uz mogućnost regulacije brzine okretanja te
prisilno zaustavljanje motora putem funkcije prekida*/

#include <Stepper.h>
// uključivanje Arduino knjižnice
#define KORAK 48
// broj koraka za puni krug = 360 / kut jednog koraka korištenog motora
#define OMJER 5
// omjer dijeljenja analogne vrijednosti potenciometra => brzina vrtnje
int pbIn = 0;
//Interrupt 0 je na Arduino UNO-u na digitalnom pinu 2
volatile int stanje = LOW;
/* deklaracija i inicijalizacija varijable za upravljanje prekidom,
prefiks volatile govori kompajleru da se varijabla čuva u RAM memoriji
umjesto u memorijskom registru gdje bi ista u određenim uvjetima mogla biti
netočna uslijed trenutnog izvođenja programa*/
int potPin = A2;
// definicija pina za priključenje potenciometra
int tipkaPin = A1;
// definicija pina za priključenje tipkala

18
int tipkaVrijednost = 0;
/* deklaracija i inicijalizacija varijable za pohranu
trenutne vrijednosti tipkala*/
int potVrijednost;
/* deklaracija varijable za pohranu trenutne vrijednosti
potenciometra*/
int brzina;
// deklaracija varijable za pohranu izračunate vrijednosti brzine

Stepper mojSteper1(KORAK, 4, 5, 6, 7);


Stepper mojSteper2(KORAK, 8, 9, 10, 11);
/*deklaracija instance steper motora uključuje broj koraka
za puni krug i priključne pinove*/

void setup() {
pinMode(2, INPUT);
// setiranje digitalnog pina 2 za ULAZ
attachInterrupt(pbIn, prekid, CHANGE);
/* deklaracija prekida imena "prekid" koji se aktivira
na promjenu ("CHANGE") stanja na digitalnom pinu 2 (pbIn)*/
pinMode(potPin, INPUT);
// setiranje analognog pina A2 za ULAZ
pinMode(tipkaPin, INPUT);
// setiranje analognog pina A1 za ULAZ
Serial.begin(9600);
// inicijalizacija serijskog porta:
}

void loop() {
if(potVrijednost >= OMJER){ //podešavanje brzine vrtnje
brzina = potVrijednost / OMJER;
}
else{
brzina = 1;
}
mojSteper1.setSpeed(brzina);
// setiranje brzine vrtnje 1. motora
mojSteper2.setSpeed(brzina);
// setiranje brzine vrtnje 2. motora
tipkaVrijednost = analogRead(tipkaPin);
//spremanje u varijablu trenutne vrijednosti na pinu A1

19
potVrijednost = analogRead(potPin);
//spremanje u varijablu trenutne vrijednosti na pinu A2

if (tipkaVrijednost > 500 && tipkaVrijednost <520){


// okretanje za puni krug u smjeru kazaljke na satu
stanje = HIGH;
Serial.println("Vrtnja u smijeru kazaljke na satu");
Serial.print("tipka = ");
Serial.println(tipkaVrijednost);
//ispis vrijednosti na A1 prilikom pritiska tipkala S1
Serial.print("brzina = ");
Serial.println(brzina);
int i=0;
while(stanje == HIGH && i<48){
mojSteper1.step(1);
mojSteper2.step(1);
i++;
}
}
if (tipkaVrijednost > 600 && tipkaVrijednost < 620){
// okretanje za puni krug obrnuto od kazaljke na satu
stanje = HIGH;
Serial.println("Vrtnja obrnuto od kazaljke na satu");
Serial.print("tipka = ");
Serial.println(tipkaVrijednost);
Serial.print("brzina = ");
Serial.println(brzina);
int i=0;
while(stanje == HIGH && i<48){
mojSteper1.step(-1);
mojSteper2.step(-1);
i++;
}
}
if (tipkaVrijednost > 670 && tipkaVrijednost < 690){
// okretanje za jedan korak u smjeru kazaljke na satu
stanje = HIGH;
Serial.println("Korak u smijeru kazaljke na satu");
Serial.print("tipka = ");
Serial.println(tipkaVrijednost);
Serial.print("brzina = ");

20
Serial.println(brzina);
mojSteper1.step(1);
mojSteper2.step(1);
delay(250);
}
if (tipkaVrijednost > 720 && tipkaVrijednost < 740){
// okretanje za jedan korak u smjeru kazaljke na satu
stanje = HIGH;
Serial.println("Korak obrnuto od kazaljke na satu");
Serial.print("tipka = ");
Serial.println(tipkaVrijednost);
Serial.print("brzina = ");
Serial.println(brzina);
mojSteper1.step(-1);
mojSteper2.step(-1);
delay(250);
}
}
void prekid(){ //deklaracija izvršne funkcije prekida
stanje = LOW;
mojSteper1.step(0);
mojSteper2.step(0);
Serial.print("stanje = ");
Serial.println(stanje);
}

21
6. ZAKLJUČAK
Arduino platforma je široko primjenjiv mikrokontroler brojnih mogućnosti s posebnim
naglaskom na jednostavnost njegova korištenja i bogatu programsku podršku za realizaciju
različitih projektnih rješenja. Njegova primjena je i u ovom projektu ispunila sva očekivanja i
omogućila realizaciju jednostavnog sustava za upravljanje dvama koračnim motorima uz
minimalnu upotrebu dodatnih elemenata. Prikazani ogledni sustav može biti dijelom nekog
većeg sustava u kojem se traži precizno upravljanje pokretnim elemenatima, bilo da se radi o
računalnoj opremi, industrijskim strojevima, robotici, sustavima pametnih kuća, i sl.
Arduino mikrokontroler ima ograničen broj digitalnih ulaza-izlaza i analognih ulaza, a na
primjeru ovog projekta prikazana je mogućnost dodatne uštede u korištenju analognih ulaza
kada se više tipkala za različite zadaće spaja na isti ulaz. Priključenjem većeg broja različitih
senzora na mikrokontroler moguće je postići i potpuno autonoman rad sustava.
Kao nedostatak može se istaknuti nemogućnost višedretvenog rada Arduino UNO
mikrokontrolera, što se u nekim slučajevima može kompenzirati Interrupt funkcijom, a što je
pokazano i na primjeru ovog projekta. No s obzirom na nisku tržišnu cijenu arduino modula,
jednostavnost njegova korištenja, besplatnu programsku podršku i brojne druge mogućnosti
ovaj nedostatak ne umanjuje popularnost i široku primjenu arduino platforme.

7. LITERATURA
1. Arduino – Home Page, URL: http://www.arduino.cc.
2. Fritzing, URL: http://fritzing.org/
3. Using Motor Bridges, URL: http://www.robotoid.com/appnotes/circuits-bridges.html
4. Arduino Motor Shield L298_Manual, URL:
http://droboticsonline.com/ebaydownloads/L298_Motor_Shield_Manual.pdf
5. Koračni motori, URL:
http://www.fer.unizg.hr/_download/repository/EAP_VIII_dio_KM%5B1%5D.pdf
6. Koračni motori, URL: http://people.etf.unsa.ba/~jvelagic/laras/dok/Lekcija6.pdf
7. Stepper Motors, URL: http://www.allaboutcircuits.com/vol_2/chpt_13/5.html
8. Stepper Motors and Control, URL:
http://www.stepperworld.com/Tutorials/pgBipolarTutorial.htm
9. Power Electronic Tehnology, URL:
http://powerelectronics.com/images/Versatile-Microstepper-Driver-fig-1.jpg

22
8. POPIS SLIKA
Slika 1_reluktantni koračni motor ......................................................................................... 8
Slika 2_permanentnomagnetski koračni motor ..................................................................... 8
Slika 3_hibridni koračni motor .............................................................................................. 9
Slika 4_različite konstrukcije namotaja koračnih motora ..................................................... 9
Slika 5_shematski prikaz upravljanja bipolarnim koračnim motorom ................................ 10
Slika 6_Arduino UNO razvojna platforma .......................................................................... 11
Slika 7_raspored pinova IC L298 ........................................................................................ 12
Slika 8_motor driver s L298N ............................................................................................. 12
Slika 9_shema spajanje 4 tipkala na jedan analogni ulaz .................................................... 12
Slika 10_shema spajanja potenciometra na analogni ulaz................................................... 13
Slika 11_shema spajanja elemenata za potrebe Interrupt funkcije ...................................... 14
Slika 12_električna shema spajanja praktičnog dijela projekta ........................................... 15
Slika 13_montažna shema spajanja praktičnog dijela projekta ........................................... 16
Slika 14_fotografija gotovog modela projekta .................................................................... 17

23

You might also like