aleksander filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. the stepper...

92
Aleksander Filipovič MIKRORAČUNALNIŠKI KRMILNIK KORAČNEGA MOTORJA Diplomsko delo Maribor, maj 2013

Upload: dinhnhan

Post on 03-Jul-2019

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Aleksander Filipovič

MIKRORAČUNALNIŠKI KRMILNIK KORAČNEGA MOTORJA

Diplomsko delo

Maribor, maj 2013

Page 2: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

MIKRORAČUNALNIŠKI KRMILNIK KORAČNEGA MOTORJA

Diplomsko delo

Študent: Aleksander Filipovič

Študijski program: Visokošolski strokovni študijski program

Elektrotehnika

Smer: Elektronika

Mentor: viš. pred. dr. Bogdan Dugonik

Page 3: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

i

Page 4: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

ii

Mikroračunalniški krmilnik koračnega motorja

Ključne besede: sekvenčno vezje, mikrokrmilnik, Arduino, koračni motor

UDK: 621.313.31:681.5(043.2)

Povzetek

Diplomsko delo opisuje izdelavo sekvenčnega vezja, ki je bilo realizirano z

mikrokrmilnikom. V diplomi so predstavljeni tudi odprtokodna platforma Arduino in

koračni motorji.

V diplomskem delu je bil izdelan dvižni mehanizem, krmiljen s pomočjo računalnika ali

tipk na vezju. Kot krmilni sistem je uporabljena mikrokontrolna platforma Arduino Mega

2560. Izdelano mikrokrmilno vezje krmili bipolarni koračni motor in sicer v

polnokoračnem načinu. Ta koračni motor premika objekt vzdolž linearnega vodila na

različne položaje po določenem, vnaprej predvidenem protokolu. Tovrstno vezje je bilo

izbrano, ker ga je moč enostavno in hitro prilagoditi.

Page 5: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

iii

Microcomputer stepper motor controller

Key words: sequential circuit, microcontroller, Arduino, stepper motor

UDK: 621.313.31:681.5(043.2)

Abstract

This thesis describes the fabrication of a sequential circuit, which was realized with a

microcontroller. The open source platform Arduino and stepper motors are also presented.

In this diploma thesis a lifting mechanism was built. The mechanism is controlled by a

computer or by buttons on the circuit. For this purpose the microcontrol platform Arduino

Mega 2560 was used as the control system. This constructed microcontrol circuit controlls

a bipolar stepper motor in a full step mode. The stepper motor moves an object along a

linear guide to different positions following a certain, pre-scheduled protocol. This specific

type of circuit has been chosen because of its easy and quick adjustability.

Page 6: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

iv

KAZALO VSEBINE

1 UVOD.................................................................................................................................1

1.1 Struktura diplomskega dela..............................................................................................1

2 OPIS IZDELKA..................................................................................................................2

3 ODPRTOKODNA PLATFORMA ARDUINO..................................................................3

3.1 Strojna oprema.................................................................................................................3

3.1.1 Opis posameznih strojnih komponent...........................................................................4

3.2 Programska oprema..........................................................................................................8

3.2.1 Razvojno okolje.............................................................................................................8

3.2.2 Programski jezik..........................................................................................................10

4 OPIS DELOVANJA KORAČNEGA MOTORJA IN NJEGOVO UPRAVLJANJE.......11

5 STROJNA OPREMA DVIŽNEGA MEHANIZMA........................................................14

5.1 Arduino Mega 2560........................................................................................................14

5.2 Bipolarni koračni motor na vodilu.................................................................................16

5.3 H-mostič.........................................................................................................................16

5.4 Logična vrata..................................................................................................................18

5.5 Zaslon LCD....................................................................................................................19

Page 7: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

v

6 KRMILJENJE...................................................................................................................20

6.1 Načini krmiljenja............................................................................................................21

7 VEZALNA SHEMA.........................................................................................................28

8 PROGRAM.......................................................................................................................32

8.1 Delovanje programa.......................................................................................................33

9 PREPREKE IN PRILAGODITVE...................................................................................35

10 SKLEP.............................................................................................................................38

VIRI......................................................................................................................................40

PRILOGA A.........................................................................................................................43

PRILOGA B.........................................................................................................................73

Page 8: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

vi

KAZALO SLIK

Slika 2.1: Dvižni mehanizem.................................................................................................2

Slika 3.1: Arduino Nano.........................................................................................................6

Slika 3.2: Arduino Uno R3.....................................................................................................6

Slika 3.3: Arduino Motor Shield R3......................................................................................7

Slika 3.4: Mini USB / Serial Adapter.....................................................................................7

Slika 3.5: Razvojno okolje Arduino 1.0.................................................................................9

Slika 4.1: Bipolarni koračni motor.......................................................................................12

Slika 4.2: Unipolarni koračni motor.....................................................................................12

Slika 4.3: Koračni motorji....................................................................................................13

Slika 5.1: Arduino Mega 2560 R3........................................................................................15

Slika 5.2: L293D..................................................................................................................17

Slika 5.3: Pierceova in Shefferjeva vrata.............................................................................18

Slika 6.1: H-mostič...............................................................................................................20

Slika 6.2: Koračni motor z osmimi legami, krmiljen s štirimi krmilnimi koraki.................22

Slika 6.3: Poteki napetosti na navitjih v polnokoračnem načinu delovanja pri posameznih

krmilnih korakih...................................................................................................................22

Page 9: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

vii

Slika 6.4: Poteki napetosti na navitjih v valovnem načinu delovanja pri posameznih

krmilnih korakih...................................................................................................................23

Slika 6.5: Poteki napetosti na navitjih v polkoračnem načinu delovanja pri posameznih

krmilnih korakih...................................................................................................................24

Slika 6.6: Poteki napetosti na navitjih v mikrokoračnem načinu delovanja pri posameznih

krmilnih korakih...................................................................................................................25

Slika 6.7: H-mostič krmiljen s pomočjo negatorja...............................................................26

Slika 6.8: H-mostič krmiljen s pomočjo tranzistorja............................................................27

Slika 6.9: Lege koračnega motorja v polnokoračnem in v valovnem načinu delovanja......27

Slika 7.1: Vezalna shema.....................................................................................................30

Slika 7.2: Vezalna shema na preizkusni plošči....................................................................31

Slika 7.3: Tiskano vezje.......................................................................................................31

Slika 8.1: Prehajanje stanj....................................................................................................33

Slika 9.1: Vezje L297...........................................................................................................37

Page 10: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

viii

KAZALO TABEL

Tabela 5.1: Opis priključkov zaslona LCD DEM16216SYH-LY.......................................19

Tabela 6.1: Logične vrednosti krmilnih signalov pri polnokoračnem načinu delovanja.....21

Tabela 6.2: Logične vrednosti krmilnih signalov pri valovnem načinu delovanja..............23

Tabela 6.3: Logične vrednosti krmilnih signalov pri polkoračnem načinu delovanja.........24

Tabela 6.4: Logične vrednosti krmilnih signalov za polnokoračni način delovanja z dvema

krmilnima signaloma............................................................................................................26

Page 11: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

ix

UPORABLJENE KRATICE IN SIMBOLI

USB – Universal Serial Bus

(univerzalno serijsko vodilo)

SPI – Serial Peripheral Interface

(serijski periferni vmesnik)

TWI – Two Wire Serial Interface

(dvožični serijski vmesnik)

UART – Universal Asynchronous Receiver/ Transmitter

(univerzalni asinhroni sprejemik/ oddajnik)

TTL – Transistor-Transistor Logic

(tranzistor-tranzistor logika)

SRAM – Static Random Access Memory

(statični bralno/ pisalni pomnilnik)

EEPROM – Electrically Erasable Programmable Read-Only Memory

(električno zbrisljiv in programirljiv bralni pomnilnik)

kB – Kilobyte

(kilobajt)

LED – Light Emitting Diode

(svetleča dioda)

LCD – Liquid Crystal Display

(zaslon s tekočimi kristali)

PCB – Printed Circuit Board

(tiskano vezje)

GND – Ground

(masa)

Vcc – Pozitivna napajalna napetost

mA – Miliamper

A – Amper

V – Volt

kΩ – Kiloohm

Ω – Ohm

Page 12: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

x

Hz – Hertz

MHz – Megahertz

Page 13: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

1

1 UVOD

V diplomski nalogi smo predstavili odprtokodno platformo Arduino [1] in koračne

motorje. Arduino je strojna in programska oprema, ki nam olajša delo z mikrokrmilniki

Atmel AVR iz družine izdelkov megaAVR.

Z diplomsko nalogo smo preučili odprtokodno platformo Arduino tako, da smo lahko

izdelali napravo, s pomočjo katere se izvaja nadzorovano pomikanje linearnega vodila.

Objekt na linearnem vodilu pri tem pomikamo s pomočjo bipolarnega koračnega motorja v

polnokoračnem načinu delovanja.

Tovrstno napravo lahko hitro in enostavno prilagodimo trenutnim zahtevam uporabnika.

1.1 Struktura diplomskega dela

Vsebino diplomskega dela smo razdelili na deset poglavij. Prvo poglavje je uvod. Drugo

poglavje je opis izdelanega dvižnega mehanizma. V tretjem poglavju je predstavljena

strojna in programska oprema odprtokodne platforme Arduino. V četrtem poglavju

predstavimo delovanje in upravljanje koračnih motorjev. V petem poglavju predstavimo

potrebno strojno opremo za izdelavo dvižnega mehanizma. V šestem poglavju je opisano

krmiljenje bipolarnih koračnih motorjev. V sedmem poglavju je predstavljena vezalna

shema dvižnega mehanizma. Osmo poglavje je obrazložitev delovanja programa

'sketch_stepper', ki krmili dvižni mehanizem. V devetem poglavju so napotki za delo s

koračnimi motorji. Deseto poglavje je sklep.

Page 14: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

2

2 OPIS IZDELKA

V diplomski nalogi smo med drugim izdelali tudi dvižni mehanizem. Sestavili smo ga iz

linearnega vodila, bipolarnega koračnega motorja, mikrokontrolne platforme Arduino

Mega 2560 in vezja. Vezje nam je omogočilo krmiljenje in prikazovanje delovanja

koračnega motorja. Za krmiljenje bipolarnega koračnega motorja, ki premika linearno

vodilo, smo v razvojnem okolju Arduino 1.0 napisali program 'sketch_stepper' (priloga A).

Dvižni mehanizem smo prikazali na sliki 2.1.

Slika 2.1: Dvižni mehanizem

Page 15: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

3

3 ODPRTOKODNA PLATFORMA ARDUINO

Arduino je odprtokodna prototipna platforma, ki temelji na strojni in programski opremi.

Okolje zaznava s pomočjo senzorjev, sam pa lahko vpliva na okolico s pomočjo

aktuatorjev. Deluje lahko samostojno, lahko pa komunicira s programsko opremo, ki teče

na računalniku (npr. Flash, Processing, itd.). Arduino poenostavlja postopek dela z

Atmelovimi mikrokrmilniki (megaAVR), saj ima enostavno razvojno okolje, ob tem pa

nam nudi tudi odprtokodno in razširljivo strojno ter programsko opremo [1].

3.1 Strojna oprema

Strojna oprema Arduino temelji na 8-bitnih mikrokrmilnikih Atmel AVR iz družine

izdelkov megaAVR. Mikrokontrolno platformo Arduino lahko sestavimo sami, na voljo pa

so nam tudi že sestavljene platforme. Razširjamo jih lahko z raznimi dodatki, ki se

imenujejo ščiti ('Shield'). Za programiranje mikrokrmilnika ni potreben zunanji

programator. Na mikrokrmilniku je namreč že prednaložen program 'Bootloader', s

pomočjo katerega v Flash pomnilnik mikrokrmilnika naložimo t.i. 'sketch' program. To

izvedemo na sami mikrokontrolni platformi Arduino, le-ta je povezana z računalnikom

preko univerzalnega serijskega vodila (USB - Universal Serial Bus) [1].

Mikrokontrolna platforma ima digitalne in analogne priključke. Digitalni priključki so

vhodni ali izhodni. Digitalni vhodi/ izhodi poznajo le logično vrednost 0 ali 1. Nekatere

digitalne priključke lahko uporabimo za serijsko komunikacijo, nekatere pa za pulzno

širinsko modulacijo [1].

Večina mikrokontrolnih platform Arduino lahko izvaja serijsko komunikacijo na 3 načine,

Page 16: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

4

način je določen z vrsto uporabljenega vmesnika [1]:

• serijski periferni vmesnik (SPI - Serial Peripheral Interface)

• dvožični serijski vmesnik (TWI - Two Wire Serial Interface)

• univerzalni asinhroni sprejemnik/ oddajnik (UART – Universal Asynchronous

Receiver/ Transmitter)

Za serijsko komunikacijo s pomočjo UART priključkov se za prenos podatkov uporablja

tranzistor-tranzistor logika (TTL – Transistor-Transistor Logic). Analogni priključki so

analogni vhodi. Analogne napetosti, katere priklopimo na analogne vhode, primerjamo z

referenčno napetostjo, ki jo lahko vzamemo kot privzeto ali pa jo spremenimo s pomočjo

priključka AREF. Napetost pri tem pretvorimo v digitalno obliko s pomočjo analogno-

digitalnega pretvornika, ki ima 10 bitno ločljivost. To pomeni, da dobimo vrednosti od 0

do 1023. Analogne priključke je možno uporabiti kot digitalne vhode/ izhode [1].

Izbira mikrokontrolnih platform Arduino je zelo pestra: Arduino Mini, Arduino Nano,

Arduino Uno, Arduino Ethernet,.... Večina jih deluje pri napetosti 5 V. Obstajajo pa

različice, ki delujejo z napetostjo 3,3 V, z izjemo Lily Pad Arduino, ki deluje v razponu od

2,7 do 5,5 V [1].

3.1.1 Opis posameznih strojnih komponent

Arduino Nano, prikazan na sliki 3.1, je majhen in primeren za delo na preizkusni plošči.

Nekaj karakteristik Arduina Nano 3.0 [2]:

• temelji na mikrokrmilniku Atmega328

• delovna frekvenca procesorja je 16 MHz

• digitalni vhodi/ izhodi delujejo pri napetosti 5 V ter maksimalnem toku 40 mA

• 32 kilobajtov (kB – kilobyte) programskega Flash pomnilnika, od teh uporablja

'bootloader' 2 kB

Page 17: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

5

• 2 kB statičnega bralno/ pisalnega pomnilnika (SRAM – Static Random Access

Memory)

• 1 kB električno zbrisljivega in programirljivega bralnega pomnilnika (EEPROM –

Electrically Erasable Programmable Read-Only Memory)

• 8 analognih vhodov z 10 bitno ločljivostjo

• 14 digitalnih vhodov/ izhodov (šest izmed teh digitalnih vhodov/ izhodov omogoča

pulzno širinsko modulacijo)

• ima priključke za napajanje ( 3.3V, 5V, VIN in GND )

• ima še AREF, RST, Mini-B USB in ICSP priključke

• s pomočjo digitalnih priključkov TX ter RX imamo možnost vzpostaviti serijsko

komunikacijo (TTL-UART), vendar teh priključkov v tem primeru med procesom

komunikacije ne smemo uporabljati v druge namene

• za serijsko komunikacijo (TTL-UART) z računalnikom preko vodila USB

uporabljamo pretvornik FT232Rl podjetja Future Technology Devices International

Ltd..

Tudi Arduino Uno R3, prikazan na sliki 3.2, temelji na mikrokrmilniku Atmega328 [6].

Od mikrokrmilne platforme Arduino Nano 3.0 se med drugim razlikuje v naslednjih

lastnostih:

• uporaba Atmelovega mikrokrmilnika Atmega16U2 za komunikacijo preko vodila

USB

• je večji

• ima priključek za enosmerno napajanje mikrokontrolne platforme

• ima manj analognih vhodov

• drugačna razporeditev in tip priključitve priključkov

Drugačna razporeditev in tip priključitve priključkov omogočata uporabo ščita, ki ga lahko

nataknemo na mikrokontrolno platformo Arduino. Na razpolago so različni ščiti (Arduino

Ethernet Shield, Arduino Motor Shield, Arduino Wireless SD Shield,itd ).

Arduino Motor Shield R3, prikazan na sliki 3.3, temelji na L298 H-mostiču, s katerim

Page 18: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

6

lahko poganjamo dva enosmerna motorja ali en koračni motor. S pomočjo digitalnih

izhodov spreminjamo hitrost in smer vrtenja motorja. Preko analognih vhodov lahko

merimo tok, ki teče skozi navitje motorja [3].

Slika 3.1: Arduino Nano [2]

Slika 3.2: Arduino Uno R3 [10]

Page 19: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

7

Slika 3.3: Arduino Motor Shield R3 [3]

Kadar Arduino nima USB priklopa, nam lahko USB adapter (kot je npr. Mini USB / Serial

Adapter, ki temelji na pretvorniku FT232RL) služi za programiranje mikrokontrolerja ter

komunikacijo mikrokontrolerja z računalnikom [5].

Slika 3.4: Mini USB / Serial Adapter [5]

Page 20: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

8

3.2 Programska oprema

Programska oprema Arduino deluje na operacijskih sistemih Windows, Linux ali Mac OS

X. Za razvoj programov, imenovanih 'sketch', smo uporabili razvojno okolje Arduino 1.0,

prikazano na sliki 3.5. 'Sketch' programiramo v jeziku, ki temelji na programskem jeziku

C/C++ [1]. Razvojno okolje si lahko brezplačno naložimo iz spletne strani

http://www.arduino.cc/. V našem primeru je bilo razvojno okolje naloženo na operacijski

sistem Windows.

Ko mikrokontrolno platformo Arduino povežemo z računalnikom in namestimo ustrezen

gonilnik, se ustvarijo (navidezna) serijska vrata, imenovana 'COM port', preko katerih

Arduino komunicira s programsko opremo. Mikrokontrolna platforma Arduino lahko

neposredno komunicira s tistimi programi, ki tudi sami zmorejo serijsko komunikacijo.

Programska oprema Arduino vključuje programsko orodje 'Serial Monitor', s pomočjo

katerega lahko prenašamo enostavne tekstovne podatke med računalnikom in Arduinom

[1].

3.2.1 Razvojno okolje

V razvojnem okolju najprej izberemo uporabljeno mikrokontrolno platformo Arduino in ji

določimo ustrezni 'COM port', preko katerega komunicira. Te nastavitve izvedemo v

meniju 'Tools'. 'Sketch' program pišemo v urejevalniku besedil, mora pa vsebovati funkciji

'setup()' in 'loop()'. Funkcija 'setup()' se izvede samo enkrat, na začetku, funkcija 'loop()' pa

je zanka. To pomeni, da se procesi v njej skozi celotno trajanje izvajanja programa

ponavljajo [1].

Vse potrebne informacije o delovanju razvojnega okolja zvemo iz sporočilnega območja in

tekstovne konzole, ki sta v spodnjem delu razvojnega okolja. V zgornjem delu najdemo

vrstico z meniji in orodno vrstico, v kateri so vse potrebne funkcije za programiranje [1].

Page 21: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

9

Opis funkcij orodne vrstice s pripadajočimi ikonami [1]:

Preveri ali ima 'sketch' program napake.

Preveri in prevede 'sketch' program in ga nato naloži v Flash pomnilnik Arduina.

Ustvari nov 'sketch' program.

Odpre obstoječ 'sketch' program.

Shrani 'sketch' program.

Odpre programsko orodje 'Serial Monitor'.

Ko uporabljamo programsko orodje 'Serial Monitor', moramo nastaviti hitrost prenosa

('baud') na enako vrednost, kot jo uporabljamo v 'sketch' programu. V zgornjo vrstico

vnesemo podatke, ki jih želimo poslati mikrokontrolni platformi Arduino. S pomočjo tipke

'Send' pa jih odpošljemo [1]. Podatki, poslani iz mikrokontrolne platforme Arduino, se

prikazujejo v sredinskem oknu.

Slika 3.5: Razvojno okolje Arduino 1.0

Page 22: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

10

3.2.2 Programski jezik

Programski jezik poenostavlja programiranje mikrokrmilnikov, saj uporabljamo knjižnice

in posebne ukaze za nadzor mikrokontrolne platforme Arduino.

Kratek opis nekaterih ukazov za nadzor mikrokontrolne platforme Arduino [1]:

pinMode() – določimo način delovanja priključka (vhod ali izhod)

digitalRead() – odčitamo logično vrednost signala na priključku

digitalWrite() – nastavimo logično vrednost na priključku

analogRead() – odčitamo vrednost signala na analognem priključku

delay() – ustavimo program za vnešeno vrednost časa v milisekundah

Page 23: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

11

4 OPIS DELOVANJA KORAČNEGA MOTORJA IN

NJEGOVO UPRAVLJANJE

Glede na zgradbo delimo koračne motorje v tri osnovne izvedbe. Poznamo izvedbo s

trajnim magnetom, s spremenljivo magnetno upornostjo in hibridno različico. Glede na

izvedbo tuljav pa delimo koračne motorje na unipolarne in bipolarne. Bipolarni imajo 4 ali

8 priklopov, unipolarni pa 5 ali 6 priklopov. Unipolarni s 6 priklopi se lahko uporabljajo

kot bipolarni koračni motorji, bipolarni z 8 priklopi pa kot unipolarni koračni motorji. Na

sliki 4.3 smo z modro barvo označili priklope preko katerih krmilimo koračne motorje v

bipolarnem načinu delovanja. Ko imamo motor s šestimi priključki, moramo sredinski

odcep izolirati, pri motorju z osmimi priključki pa lahko navitji vežemo zaporedno ali

vzporedno [13]. Prednost bipolarne vezave je večji navor, saj pri unipolarni vezavi

vzbujamo le 50 % navitja bipolarne vezave [14].

Za delovanje koračnega motorja ne zadostuje enostaven priklop napetosti. Za en obrat

rotorja potrebujemo točno določeno število in zaporedje impulzov, kar nam omogoča

natančno pozicioniranje rotorja. To pomeni, da pri krmiljenju motorja na željeni položaj ne

potrebujemo senzorjev. Rotor se pri tem premika z diskretnimi koraki [13].

Koračni motor naredi korak, ko se spremeni magnetno polje. Postopek spremembe

magnetnega polja pri unipolarnem koračnem motorju se razlikuje od postopka pri

bipolarnem koračnem motorju. Ko imamo bipolarni koračni motor z dvema navitjema,

prikazano na sliki 4.1, dosežemo spremembo magnetnega polja z zamenjavo polaritete

napetosti na priključnih sponkah navitja. Če navitjem bipolarnega koračnega motorja

naredimo sredinski odcep, dobimo unipolarni koračni motor, prikazan na sliki 4.2. Zaradi

sredinskega odcepa se lahko na vsaki polovici navitja ustvari magnetno polje z nasprotnim

delovanjem. Zaradi te lastnosti se napaja le ena polovica navitja, kadar ustvarimo

magnetno polje. Spreminjanje magnetnega polja pa dosežemo s priklapljanjem oziroma

Page 24: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

12

odklapljanjem napetosti na posameznih polovičkah navitja [15].

Za krmiljenje koračnega motorja se pogosto uporabljajo mikrokrmilniki. Z raznimi pristopi

krmiljenja lahko koračni motor deluje v polnokoračnem, valovnem, polkoračnem ali

mikrokoračnem načinu. V polnokoračnem načinu imamo največji navor, vendar ima tudi

slabosti, kot so hrup, velik korak,... Največji navor ima koračni motor ko je na navitju

napetost, pri tem pa motor miruje. Med krmiljenjem imamo manjši navor, ki se z večanjem

hitrosti še zmanjšuje in posledično pri tem lahko pride do neželjene izgube korakov

[13,14].

Podroben opis krmiljenja bipolarnega koračnega motorja je v poglavju 6.

Slika 4.1: Bipolarni koračni motor [15]

Slika 4.2: Unipolarni koračni motor [15]

Page 25: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

13

Slika 4.3: Koračni motorji

Page 26: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

14

5 STROJNA OPREMA DVIŽNEGA MEHANIZMA

Za upravljanje bipolarnega koračnega motorja smo uporabili samostojno delujočo

mikrokontrolno platformo Arduino Mega 2560. Ukaze smo vnašali s pomočjo tipk na

vezju ali z računalnikom preko USB priklopa. Platformo bi lahko napajali bodisi z

enosmernim virom napetosti 7 do 12 V, ali pa s pomočjo USB priklopa.

Za krmiljenje bipolarnega koračnega motorja EM-464 (ta motor je na vodilu) ob

mikrokontrolni platformi Arduino Mega 2560, smo uporabili še dvovhodna Pierceova

vrata integriranega vezja CD4001 in H-mostič L293D. Delovanje smo prikazovali s

pomočjo svetlečih diod (LED – Light Emitting Diode) in zaslona s tekočimi kristali (LCD

– Liquid Crystal Display) DEM16216SYH-LY, ki je imel dve vrstici s šestnajstimi znaki.

Za napajanje koračnega motorja smo uporabili enosmerni vir napetosti 6 V.

5.1 Arduino Mega 2560

Mikrokontrolna platforma Arduino Mega 2560 R3, prikazana na sliki 5.1, ima med drugim

naslednje lastnosti [4]:

• temelji na mikrokrmilniku Atmega2560

• delovna frekvenca procesorja je 16 MHz

• vgrajenih ima 256 kB programskega Flash pomnilnika, od teh uporablja 'bootloader'

8 kB

• 8 kB pomnilnika SRAM

• 4 kB pomnilnika EEPROM

• digitalni vhodi/ izhodi delujejo pri napetosti 5 V ter maksimalnem toku 40 mA

Page 27: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

15

• na razpolago imamo 16 analognih vhodov z 10 bitno ločljivostjo

• imamo še 54 digitalnih vhodov/ izhodov, petnajst teh omogoča pulzno širinsko

modulacijo

• ima priključke za napajanje ( 3.3V, 5V, VIN in GND )

• ima priključek za enosmerno napajanje mikrokontrolne platforme (dovoljena

enosmerna napajalna napetost preko napajalnega priključka je 6 do 20 V, vendar je

priporočljivo napajati z napetostjo 7 do 12 V)

• ima še priključke AREF, IOREF, RESET, USB-B, ICSP

• zmore 3 načine serijske komunikacije (TTL-UART, TWI in SPI)

• na razpolago imamo štiri strojna serijska vrata UART (ena izmed njih imajo možnost

komunikacije z računalnikom in sicer preko priključkov 0 (RX0) in 1 (TX0), vendar

teh priključkov v procesu komunikacije ne smemo uporabljati v druge namene)

• za serijsko komunikacijo (TTL-UART) z računalnikom preko vodila USB je

uporabljen Atmelov mikrokrmilnik Atmega16U2

• na priključku 13 imamo že vgrajeno LED diodo

• ima tipko za ponovni zagon (RESET)

Uporabljamo lahko enake ščite kot pri mikrokontrolni platformi Arduino Uno.

Slika 5.1: Arduino Mega 2560 R3 [4]

Page 28: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

16

5.2 Bipolarni koračni motor na vodilu

Ker na spletu ni bilo podatkov o bipolarnem koračnem motorju EM-464, smo morali s

pomočjo multimetra ugotoviti, kateri priklopi so za posamezna navitja. Pri tem smo

izmerili vrednost upornosti navitja 10,2 Ω. S pomočjo tega podatka ter napetosti, na katero

je priklopljeno navitje, smo lahko izračunali kolikšen tok teče skozi navitje. Vrednost toka

smo izračunali s pomočjo Ohmovega zakona. To je pomemben podatek, saj lahko pri

prevelikem toku pride do poškodbe navitja ali H-mostiča. Ker nismo vedeli kolikšen tok

mora teči skozi navitje, smo morali postopoma dvigovati napetost navitja do mere, pri

kateri je koračni motor deloval zadovoljivo. To smo ugotovili tako, da smo sestavili vezje

in napisali kratek program za krmiljenje koračnega motorja. Pri dvigovanju napetosti smo s

pomočjo multimetra merili napetost ali tok skozi navitje. Ker izhod H-mostiča zmore le

600 mA toka, smo pazili, da se je vrednost toka gibala znotraj tega območja. Izkazalo se je,

da bipolarni koračni motor EM-464, krmiljen s pomočjo H-mostiča L293D, deluje

zadovoljivo pri pozitivni napajalni napetosti motorja 6,2 V (priključek Vcc2). Pri tej

napajalni napetosti smo na njegovem navitju izmerili napetost 4,37 V in tok 0,43 A.

Zanimalo nas je tudi to, koliko korakov potrebuje motor za en obrat rotorja. V ta namen

smo napisali program, ki nam izpisuje število korakov. Pri tem smo opazovali os motorja

in ko je opravil en obrat, smo odčitali koliko korakov je potreboval. Ta motor je potreboval

48 korakov, to pomeni, da se je z vsakim korakom premaknil za 7,5 stopinje.

Meritev je pokazala, da se je z vsakim obratom koračnega motorja uporabljeno vodilo

premaknilo za 2,6 cm.

5.3 H-mostič

Integrirano vezje L293D, prikazano na sliki 5.2, se uporablja za krmiljenje induktivnih

bremen. Ima že vgrajene diode (t.i. 'flyback' diode), ki služijo zaščiti pred napetostnimi

konicami, do katerih pride ob izklopu induktivnega bremena. Priključek Vcc2 napajamo z

Page 29: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

17

izbrano pozitivno napajalno napetostjo v razponu od 4.5 do 36 V, ki jo speljemo na

vsakega od štirih izhodov. Vsak od tako napajanih izhodov zmore do 600 mA toka. To

vezje ima štiri polovične gonilnike tipa H-most. Delovanje gonilnikov omogočimo s

priključitvijo napajalne napetosti 5 V na priključka '1,2EN' in '3,4EN' [16]. V poglavju 6

smo podrobneje opisali koncept H-mostiča in kako lahko s pomočjo tega integriranega

vezja krmilimo bipolarni koračni motor.

Slika 5.2: L293D [16]

Page 30: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

18

5.4 Logična vrata

Integrirano vezje CD4001 ima štiri dvovhodna Pierceova vrata, ki jih lahko uporabimo kot

negator. Možna bi bila tudi uporaba dvovhodnih Shefferjevih vrat, ki imajo enako

razporeditev priključkov. Pierceova in Shefferjeva vrata smo prikazali na sliki 5.3.

Slika 5.3: Pierceova in Shefferjeva vrata [9]

Page 31: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

19

5.5 Zaslon LCD

Razporeditev priključkov zaslona in priključitev na ustrezne priključke mikrokontrolne

platforme Arduino Mega 2560, ki smo jih uporabili v našem vezju, sta prikazani v tabeli

5.1.

Tabela 5.1: Opis priključkov zaslona LCD DEM16216SYH-LY [8]

PRIKLJUČEK ZASLONA

(OZNAKA PRIKLJUČKA) :

PRIKLOP ZASLONA NA USTREZNE PRIKLJUČKE ARDUINA MEGA 2560 (OZNAKA PRIKLJUČKA):

1

( VSS )

(GND)

2

( VDD )

(5V)

3

( V0 )*

(GND)*

(5V)*

Opomba: Zaslon je na 3. priključku z Arduinom povezan preko potenciometra, ki ima 3 priključke. Prvi je povezan na GND, drugi na priključek zaslona (V0), tretji pa na napajalno napetost 5 V.

4

( RS )

(DIGITALNI PRIKLJUČEK 2)

5

( R/W )

(GND)

6

( E )

(DIGITALNI PRIKLJUČEK 3)

7

( DB0 )

8

( DB1 )

9

( DB2 )

10

( DB3 )

11

( DB4 )

(DIGITALNI PRIKLJUČEK 4)

12

( DB5 )

(DIGITALNI PRIKLJUČEK 5)

13

( DB6 )

(DIGITALNI PRIKLJUČEK 6)

14

( DB7 )

(DIGITALNI PRIKLJUČEK 7)

15

( LED – (K) )

(GND)

16

( LED + (A) )

(5V)

Page 32: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

20

6 KRMILJENJE

Ker večina mikrokontrolnih platform Arduino na digitalnem izhodu ne zmore več kot 40

mA toka, je za krmiljenje koračnega motorja potrebno dodatno krmilno vezje [1]. Za

delovanje bipolarnega koračnega motorja moramo navitju spreminjati polariteto napetosti

[13], zato smo uporabili vezavo imenovano H-mostič, prikazano na sliki 6.1. Polariteto

spreminjamo tako, da stikala paroma preklapljamo. Ko sta sklenjeni stikali S1 in S4, sta

razklenjeni stikali S2 in S3 in obratno [17]. Ko ni sklenjeno nobeno stikalo, je navitje brez

napetosti. Podobna krmilna vezja najdemo v intergriranih vezjih, kot so: L293, L298,

L6205, SN754410, itd.

Slika 6.1: H-mostič

Page 33: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

21

6.1 Načini krmiljenja

Na sliki 6.2 smo prikazali koračni motor, ki za en obrat rotorja potrebuje 8 korakov

(pomikov). Ti koraki (pomiki) so prikazani za polnokoračni način delovanja. Proizvajalec

nam velikost koraka (pomika) poda v kotnih stopinjah. Na sliki 6.9 smo z modro barvo

označili lege, ki jih koračni motor iz slike 6.2 zavzame v polnokoračnem načinu delovanja,

lege valovnega načina delovanja pa smo označili z rumeno. Velikost koraka (pomika) je v

obeh načinih delovanja enaka. Polkoračni način delovanja pa zavzame kombinacijo obeh

leg polnokoračnega in valovnega načina delovanja.

Pri bipolarnem koračnem motorju smo uporabljali polnokoračni način delovanja. V tem

načinu imamo največji navor. Velik navor imamo, ker sta navitji ves čas krmiljenja

napajani [14]. Za krmiljenje uporabljamo štiri različne krmilne korake, le-ti morajo biti v

pravilnem zaporedju. Vrstni red krmilnih korakov določa smer vrtenja [7].

Logične vrednosti krmilnih signalov za posamezne priključke navitij pri posameznih

krmilnih korakih, smo predstavili v tabeli 6.1. Poteke napetosti na navitjih pri posameznih

krmilnih korakih pa smo prikazali na sliki 6.3.

Če začnemo s 1. krmilnim korakom, bomo za en korak (pomik) v desno potrebovali 2.

krmilni korak. Če bi pa želeli za en korak (pomik) v levo, bi morali uporabiti 4. krmilni

korak. Primer cikla krmilnih korakov (3., 2., 1., 4., 1., 2., 3., 4., 1., 2., 1.) nam najprej

izvede 3 korake (pomike) v levo, nato 6 korakov (pomikov) desno in potem še 1 korak

(pomik) v levo. Končni pložaj rotorja je torej od začetnega oddaljen 2 koraka v desno.

Tabela 6.1: Logične vrednosti krmilnih signalov pri polnokoračnem načinu delovanja [7]

POLNOKORAČNI NAČIN DELOVANJA

Logične vrednosti

1. navitje 2. navitje

Krmilni

koraki

Priklop A Priklop B Priklop A Priklop B

1. korak 0 1 0 1

2. korak 0 1 1 0

3. korak 1 0 1 0

4. korak 1 0 0 1

Page 34: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

22

Slika 6.2: Koračni motor z osmimi legami, krmiljen s štirimi krmilnimi koraki

Slika 6.3: Poteki napetosti na navitjih v polnokoračnem načinu delovanja pri posameznih

krmilnih korakih

Page 35: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

23

Včasih se uporablja valovni način delovanja, kjer se za krmiljenje uporabljajo štirje krmilni

koraki, podobno kot pri polnokoračnem načinu. Razlika med valovnim načinom in

polnokoračnim je npr. v tem, da je v valovnem načinu aktivno le eno navitje. Slabost tega

načina je majhen navor [13,14]. Logične vrednosti krmilnih signalov za posamezne

priključke navitij pri posameznih krmilnih korakih, smo predstavili v tabeli 6.2. Poteke

napetosti na navitjih pri posameznih krmilnih korakih pa smo prikazali na sliki 6.4.

Tabela 6.2: Logične vrednosti krmilnih signalov pri valovnem načinu delovanja

VALOVNI NAČIN DELOVANJA

Logične vrednosti

1. navitje 2. navitje

Krmilni

koraki

Priklop A Priklop B Priklop A Priklop B

1. korak 0 1 0 0

2. korak 0 0 1 0

3. korak 1 0 0 0

4. korak 0 0 0 1

Slika 6.4: Poteki napetosti na navitjih v valovnem načinu delovanja pri posameznih

krmilnih korakih

V tabeli 6.3 smo prikazali, kako lahko s kombinacijo krmilnih korakov iz polnokoračnega

Page 36: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

24

in valovnega načina delovanja, dobimo polkoračni način delovanja. V tem načinu se nam

zato podvoji število krmilnih korakov in razpolovi velikost koraka (pomika). Tako imamo

v primerjavi s polnokoračnim načinom večjo natančnost pozicioniranja in manjši navor

[13,14]. Tudi logične vrednosti krmilnih signalov za posamezne priključke navitij pri

posameznih krmilnih korakih, smo predstavili v tabeli 6.3. Poteke napetosti na navitjih pri

posameznih krmilnih korakih pa smo prikazali na sliki 6.5.

Tabela 6.3: Logične vrednosti krmilnih signalov pri polkoračnem načinu delovanja

POLKORAČNI NAČIN DELOVANJA

Logične vrednosti

1. navitje 2. navitje

Krmilni

koraki

Priklop A Priklop B Priklop A Priklop B

1. korak 0 1 0 1

2. korak 0 1 0 0

3. korak 0 1 1 0

4. korak 0 0 1 0

5. korak 1 0 1 0

6. korak 1 0 0 0

7. korak 1 0 0 1

8. korak 0 0 0 1

Slika 6.5: Poteki napetosti na navitjih v polkoračnem načinu delovanja pri posameznih

krmilnih korakih

Page 37: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

25

Pri mikrokoračnem načinu delovanja nimamo hipnega preklopa polaritete napetosti,

temveč jo postopoma spreminjamo, v majhnih korakih. S tem postopnim zviševanjem in

zmanjševanjem se želimo približati kosinusni funkciji. V enem navitju uporabljamo

sinusno krivuljo, v drugem navitju pa kosinusno. Ker se premikamo z zelo majhnimi

koraki, je pomik umirjen in tih. Pri uporabi mikrokrmilnika to kosinusno funkcijo

dosežemo z uporabo digitalno-analognega pretvornika [14]. Slika 6.6 prikazuje primer

poteka napetosti na navitjih pri posameznih krmilnih korakih mikrokoračnega načina

delovanja. Primer prikazuje mikrokoračni način z enakim številom korakov (pomikov) kot

jih ima polkoračni način delovanja. V resnici mikrokoračni način ponavadi deluje z večjim

številom korakov (pomikov), a smo v prikazanem primeru želeli izpostaviti razliko med

načinoma krmiljenja pri teh dveh načinih delovanja.

Slika 6.6: Poteki napetosti na navitjih v mikrokoračnem načinu delovanja pri posameznih

krmilnih korakih

Za krmiljenje bipolarnega koračnega motorja s pomočjo H-mostiča, potrebujemo štiri

krmilne signale. Pri polnokoračnem načinu je možna uporaba dveh krmilnih signalov, kar

lahko razberemo iz tabele 6.1. V vsakem krmilnem koraku imamo na enem priključku

navitja logično vrednost 0, na drugem priključku pa logično vrednost 1 [11]. To lahko

realiziramo s pomočjo negatorja, kar je prikazano na sliki 6.7, ali pa uporabimo tranzistor,

kot prikazano na sliki 6.8. Logične vrednosti krmilnih signalov za posamezni navitji pri

posameznih krmilnih korakih smo predstavili v tabeli 6.4.

Page 38: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

26

Tabela 6.4: Logične vrednosti krmilnih signalov za polnokoračni način delovanja z dvema

krmilnima signaloma [11]

POLNOKORAČNI NAČIN DELOVANJA

Logične vrednosti Krmilni

koraki 1. navitje 2. navitje

1. korak 0 0

2. korak 0 1

3. korak 1 1

4. korak 1 0

Slika 6.7: H-mostič krmiljen s pomočjo negatorja [16]

Page 39: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

27

Slika 6.8: H-mostič krmiljen s pomočjo tranzistorja [11]

Če uporabimo način vezave iz slike 6.7 ali 6.8, imamo navitji vseskozi pod napetostjo.

Vezavo na sliki 6.7 smo izbrali tudi zato, da bi dvižnemu mehanizmu omogočili dovolj

navora skozi ves čas delovanja. Uporabili bi pa lahko tudi modificirano vezje iz slike 6.8.

Slika 6.9: Lege koračnega motorja v polnokoračnem in v valovnem načinu delovanja

Page 40: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

28

7 VEZALNA SHEMA

Vezalno shemo, prikazano na sliki 7.1, smo načrtali z odprtokodnim programom Fritzing,

ki ga je moč brezplačno naložiti iz spletne strani http://fritzing.org/. Slika 7.2 prikazuje

načrt za testno preizkusno vezje, s katerim preverimo pravilnost delovanja sistema. Na sliki

7.3 je podan načrt za tiskanino vezja (PCB – Printed Circuit Board), ki jo uporabimo kot

vmesni ščit med motorjem in mikrokontrolno platformo Arduino Mega 2560.

Za vezavo LED diode na digitalni izhod mikrokontrolne platforme Arduino se uporablja

upor, s katerim omejimo tok. Tok ne sme preseči 40 mA. Tok ali vrednost upora pri tem

izračunamo s pomočjo Ohmovega zakona. Za ta projekt smo uporabili 330 Ω upore, ki

smo jih vezali med digitalne priključke Arduina (priključki 8 do 13) in pripadajoče LED

diode.

Za vezavo posamične tipke na Arduina smo uporabili po 10 kΩ velike upore. Vsak upor je

vezan med analogni priključek Arduina (priključki A0 do A4) in priključek mase (GND –

Ground), tipko pa povežemo preko istega Arduino priključka na 5 V napajanje. Tako

vezan upor v elektroniki poznamo pod imenom 'pull-down' upor. Ko tipka ni pritisnjena,

dobimo na vhodu priključka Arduina logično stanje 0. Ko tipko pritisnemo, pa je logično

stanje 1.

Na uporabljen LCD zaslon je priklopljen 10 kΩ velik potenciometer, s katerim smo lahko

nastavili kontrast. Katoda za osvetljavo zaslona se nahaja na priključku številka 15, anoda

pa na priključku 16. Razporeditev priključkov zaslona in priključitev na Arduina smo

prikazali v tabeli 5.1 (poglavje 5.5).

Integrirano vezje CD4001 ima štiri dvovhodna Pierceova vrata, ki smo jih uporabili kot

negator. Negator smo uporabili za negiranje vrednosti krmilnega signala, s katerim smo

Page 41: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

29

krmilili bipolarni koračni motor. Krmilne signale smo pošiljali s pomočjo Arduinovih

digitalnih priključkov 8 in 9. Ta negiran signal smo vodili do naslednjega negatorja in do

H-mostiča. Tudi ponovno negirano vrednost smo peljali do H-mostiča. Na H-mostiču smo

priključek 1 in priključek 9 povezali s 5 V priključkom iz Arduina. S tem smo ob vklopu

Arduina omogočili, da H-mostič krmili koračni motor. Na H-mostiču smo imeli

priklopljeno tudi napajalno napetost za koračni motor, le-to smo morali priklopiti še preden

priklopimo Arduina na napajanje. Da je krmilna logika delovala pravilno, smo morali

GND napajalne napetosti motorja povezati s priključkom GND na Arduinu.

V vezalni shemi smo imeli tudi tipko, ki smo jo aktivirali preko nanjo pritrjenega vzvoda.

S pomočjo tega vzvoda smo ugotavljali položaj tovora na vodilu oz. ga pozicionirali. Ta

tipka je morala biti nameščena s spodnje strani dvižnega mehanizma. Priklopljena je bila

na analogni priključek A0.

Uporabljeni priključki Arduina Mega se ujemajo s priključki Arduina Uno, tako da bi za

realizacijo vezja lahko uporabili tudi slednjega.

Page 42: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

30

Slika 7.1: Vezalna shema

Page 43: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

31

Slika 7.2: Vezalna shema na preizkusni plošči

Slika 7.3: Tiskano vezje

Page 44: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

32

8 PROGRAM

Program je napisan za dvižni mehanizem, ki smo ga realizirali s pomočjo linearnega vodila

in bipolarnega koračnega motorja. Ukaze za krmiljenje smo vnašali s pomočjo računalnika

preko univerzalnega serijskega vmesnika ali s pomočjo tipk na vezju. Tipke smo povezali

na analogne priključke mikrokontrolne platforme Arduino. Z uporabo ukaza 'digitalRead()'

smo analogno branje vhodov pretvorili v digitalno branje vhodov, tako da se je ob pritisku

tipke prepoznala logična vrednost 1. Ena izmed tipk pa je bila uporabljena za

pozicioniranje dvižnega mehanizma. Na izbiro smo imeli dve izhodiščni poziciji. Izhodišče

smo določili z izbiro programov P ali programov S. Tipko za pozicioniranje smo uporabili

še za preverjanje izgube položaja (izgube korakov motorja) dvižnega mehanizma.

Dovoljeno odstopanje je bilo osem korakov.

Na izbiro smo imeli tri načine delovanja:

• program (P1, S1) s samodejnim prehajanjem stanj, ki se neskončno ponavljajo

• program (P2, S2) s samodejnim prehajanjem stanj z eno ponovitvijo, za naslednjo

ponovitev pa moramo vnesti ukaz

• program (P3, S3) z ročnim načinom prehajanja stanj, kjer za vsak prehod v naslednje

stanje vnesemo ukaz.

Prehod v naslednje stanje je bil možen le po preteku prej nastavljenega časa. Prehajanje

stanj je prikazano na sliki 8.1. Za delovanje programov smo imeli že vnaprej nastavljene

parametre, vendar bi jih lahko spreminjali. Ti so: čas mirovanja za posamezni položaj,

nastavitev razmaka med posameznimi položaji in hitrost pomika. Spremenjene nastavitve

bi lahko tudi ponastavili. Razmak med posameznimi položaji smo določili z izbiro števila

korakov, pri tem je bilo število korakov vedno večkratnik števila štiri. Celotno delovanje

smo prikazovali s pomočjo LED diod in LCD zaslona. Uporabili smo šest diod. Dve diodi

Page 45: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

33

smo uporabili za prikazovanje krmilnih signalov (delovanje motorja). Tri diode smo

uporabili za prikazovanje položaja dvižnega mehanizma. Ena dioda pa se je v vsakem

stanju po prvi sekundi vklopila za eno sekundo. Delovanje bi bilo možno prikazovati tudi

na računalniku. Za prikazovanje podatkov na LCD zaslonu smo uporabili knjižnico

'LiquidCristal.h'. Za krmiljenje koračnih motorjev nam je bila na voljo knjižnica

'Stepper.h', ki pa je tokrat nismo uporabili. Uporabili smo tabelo 6.4 (poglavje 6.1) z

logičnimi vrednostmi krmilnih signalov.

Slika 8.1: Prehajanje stanj

8.1 Delovanje programa

V prilogi A je program 'sketch_stepper', ki nam je omogočal krmiljenje dvižnega

mehanizma. V programu imamo funkcijo 'setup()' in funkcijo 'loop()', ki smo ju

potrebovali za delovanje programa na mikrokrmilniku. Poleg teh dveh smo imeli še druge

A

B

C

A t = 1

t = 1

t = 1

C

A

B

A t = 1

t = 1

t = 1

Programi S Programi P

Izhodiščni

položaj je

stanje A

Page 46: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

34

funkcije, ki pa smo jih klicali le, kadar smo jih potrebovali. Z uvedbo teh dodatnih funkcij

smo si olajšali pisanje programske kode.

Na začetku programa smo določili spremenljivke, potrebne za delovanje programa.

Uporabili smo tudi knjižnico 'LiquidCrystal.h', s pomočjo katere smo prikazovali podatke

na LCD zaslonu.

V funkciji 'setup()', ki se izvede le enkrat (ob pričetku), smo določili kateri digitalni

priključki Arduina bodo izhodi. Omogočili smo še prikazovanje podatkov na LCD zaslonu.

Omogočiti pa smo morali tudi prenos podatkov preko serijskega vmesnika. Analogni

priključki Arduina, ki so bili uporabljeni kot digitalni vhodi, so že v osnovi nastavljeni kot

vhodi, zato jih ni bilo treba nastaviti.

V funkciji 'loop()' smo klicali funkcije, ki nam določajo način delovanja programa. Kadar

te funkcije zapustimo, se vrnemo nazaj v funkcijo 'loop()'.

Imeli smo še naslednje funkcije, potrebne za delovanje programa:

• funkcije 'P1()', 'P2()', 'P3()', 'S1()', 'S2()' in 'S3()' določijo način delovanja dvižnega

mehanizma

• funkcija 'avtomatsko()' krmili in prikazuje delovanje dvižnega mehanizma, vendar le

takrat, ko uporabljamo funkcijo 'P1()' ali 'P2()'

• funkcija 'avtomatskoS()' krmili in prikazuje delovanje dvižnega mehanizma, vendar

le takrat, ko uporabljamo funkcijo 'S1()' ali 'S2()'

• funkcija 'menu()', z njeno pomočjo določimo, s katerimi parametri naj program

deluje

• funkcija 'reset()' ponastavi parametre na začetne nastavitve

• funkcija 'iskanje()' pozicionira tovor v izhodiščni položaj

• funkcija 'pozicijaA()' izniči izgubo korakov

• funkcija 'tipke()' ugotovi, kateri ukazi so bili vneseni

• funkciji 'GOR()' in 'DOL()' nam določata smer vrtenja koračnega motorja.

Page 47: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

35

9 PREPREKE IN PRILAGODITVE

Pri koračnem motorju smo morali paziti na način krmiljenja in stopnjo obremenitve, sicer

bi zaradi prevelike hitrosti, oscilacije ali preobremenitve lahko prišlo do izgube korakov

[13,14]. Za uporabljeni koračni motor se je izkazalo, da je deloval zanesljivo, kadar je bila

zakasnitev med korakoma vsaj 4 ms.

Za doseganje večjih hitrosti oz. večjega navora pri enaki hitrosti, lahko uporabimo tokovni

regulator, ki koračnemu motorju zagotovi nazivni tok. Večjo hitrost dosežemo tudi s

postopnim večanjem hitrosti. Za dvigovanje težjega tovora je možna uporaba zobniškega

gonila. Ker se iz različnih razlogov lahko premakne os motorja, kar bi povzročilo izgubo

informacije o položaju, je priporočljivo, da navitja vseskozi napajamo [13,14].

Kadar želimo spremeniti smer vrtenja bipolarnega koračnega motorja, ki je priklopljen na

H-mostič, nam ni treba spreminjati krmilnega programa na Arduinu. Za naše vezje torej

krmilni program 'sketch_stepper' lahko ostane takšen kot je. Za obrat smeri vrtenja motorja

nam zadostuje že zamenjava priklopov enega navitja koračnega motorja, s katerima je

priklopljen na H-mostič [13].

Za lažjo realizacijo vezalne sheme je priporočljivo, da izdelamo dva ščita. Pri tem en ščit

nataknemo na drugega, vse skupaj pa nataknemo na mikrokontrolno platformo. Prvi ščit

(spodnji) bi imel vse potrebne elemente za krmiljenje koračnega motorja, drugi ščit

(zgornji) pa bi imel vse potrebne elemente za prikazovanje delovanja dvižnega mehanizma

in tipke za vnos ukazov.

Pogosto se za krmiljenje koračnih motorjev uporabljajo namenska integrirana vezja. Pri

uporabi takih vezij, ne potrebujemo tabel s krmilnimi koraki iz poglavja 6.1. Primer

namenskega integriranega vezja je L297. Za krmiljenje manjših bipolarnih koračnih

Page 48: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

36

motorjev pa lahko uporabimo namensko integrirano vezje SAA1042, saj ima že vgrajena

dva H-mostiča, vsak od njiju zmore do 500 mA toka. Integrirani vezji L297 in SAA1042

lahko krmilimo s pomočjo treh digitalnih priključkov mikrokrmilnika, tako da koračni

motor deluje v polnokoračnem ali polkoračnem načinu delovanja. S pomočjo enega

priključka določimo način delovanja motorja (polnokoračni ali polkoračni). Z drugim

priključkom določimo smer vrtenja. S pomočjo tretjega priključka pa pošiljamo krmilne

impulze za pozicioniranje motorja na željeni položaj, pri tem nam motor ob vsakem

krmilnem impulzu naredi en korak. Možno bi bilo tudi krmiljenje s pomočjo samo dveh

priključkov mikrokrmilnika, saj lahko na integriranem vezju fiksno nastavimo željeni

način delovanja koračnega motorja tako, da ustrezni priključek integriranega vezja

priključimo bodisi na GND, ali pa na 5 V. Ko to naredimo, moramo samo še določiti smer

vrtenja in pošiljati krmilne impulze za vsak korak motorja [13].

Na sliki 9.1 je prikazana vezalna shema za krmiljenje bipolarnega koračnega motorja s

pomočjo integriranega vezja L297 in H-mostiča L298. S to vezalno shemo krmilimo

koračne motorje s pomočjo stikalnega tokovnega regulatorja, pri tem pa zmorejo izhodi H-

mostiča 2 A toka. Napajalna napetost navitij motorja je 36 V. Z visoko napajalno

napetostjo dosežemo, da tok v navitjih hitreje narašča. Na takšen način hitreje dosežemo

željeno vrednost toka, ki naj teče skozi navitje [12]. Željeno vrednost toka skozi navitje

nastavimo s pomočjo priključka Vref. Na ta priključek priklopimo ustrezno napetost, ki jo

izračunamo tako, da pomnožimo željeno vrednost toka z vrednostjo upora Rs1 oz. Rs2 [13].

Logika tokovne regulacije integriranega vezja L297 regulira tok za vsako navitje

koračnega motorja posebej. Postopek tokovne regulacije izgleda tako, da ob vklopu

napajanja navitja tok skozi navitje narašča tako dolgo, da se doseže željena vrednost toka.

Ko je ta vrednost toka dosežena, nam logika tokovne regulacije izklopi napajanje navitja.

Tok v navitju začne padati. Čez nekaj trenutkov logika ponovno vklopi napajanje in ko je

željena vrednost toka dosežena, se napajanje ponovno izklopi. Ta postopek vklapljanja in

izklapljanja napajanja se ponavlja dokler je navitje treba napajati. Logika tokovne

regulacije izklopi napajanje prvega navitja v trenutku, ko je napetost na priključku 14

enaka napetosti priključka Vref, napajanje drugega navitja pa izklopi, ko je napetost na

priključku 13 enaka napetosti priključka Vref. Trenutek ponovnega vklopa napajanja navitij

pa določa oscilator na priključku 16 [12].

Page 49: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

37

Kratek opis nekaterih priključkov integriranega vezja L297 [12,13]:

• CW/CCW (določimo smer vrtenja motorja)

• CLOCK (na ta priključek pošiljemo krmilni impulz za vsak korak motorja)

• HALF/FULL (določimo način delovanja koračnega motorja)

• ENABLE (omogočimo krmiljenje koračnega motorja)

• RESET (koračni motor namestimo v izhodiščni položaj)

• SYNC (priključek za sinhronizacijo več integriranih vezij L297)

• Vref (določimo največjo vrednost toka, pri kateri bo koračni motor deloval)

• CONTROL (določimo način delovanja tokovne regulacije: hitro ali počasno

padanje vrednosti toka)

Slika 9.1: Vezje L297 [13]

Page 50: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

38

10 SKLEP

Pri izdelavi dvižnega mehanizma se je izkazalo, da je odprtokodna platforma Arduino

enostavna za uporabo in zelo primerna za eksperimentalno delo. Uporabljena

mikrokontrolna platforma Arduino Mega 2560 omogoča nadgradnjo tega projekta, saj je

bila le delno izkoriščena.

Vezalno shemo dvižnega mehanizma bi bilo možno realizirati z večino mikrokontrolnih

platform Arduino. Tudi program 'sketch_stepper' bi lahko deloval na večini njih, saj za

realizacijo uporabljenega dvižnega mehanizma zadošča mikrokrmilnik Atmega328. Tak

mikrokrmilnik je vgrajen tudi v mikrokrmilnih platformah Arduino Uno in Arduino Nano

3.0, s katerima smo med drugim preverili delovanje našega dvižnega mehanizma. Uporaba

omenjenih cenovno ugodnejših mikrokrmilnih platform nam zmanjša strošek za izdelavo

dvižnega mehanizma, vendar pa nas omeji za možnost nadgradnje sistema.

V diplomski nalogi smo prikazali, da je koračne motorje mogoče krmiliti na več različnih

načinov in tudi uporaba strojne opreme ni enolično določena. Vrsta uporabljene strojne

opreme nam določa, kako je potrebno izdelati krmilni program.

Pri realizaciji dvižnega mehanizma za krmiljenje koračnih motorjev nismo uporabili

namenskih integriranih vezij, ker to v našem primeru ni bilo nujno potrebno. Za izveden

dvižni mehanizem je bilo pomembno predvsem to, da ima motor čim višji navor. To smo

dosegli tako, da smo bipolarni koračni motor krmilili v polnokoračnem načinu delovanja.

Ker smo krmilno vezje izvedli s pomočjo H-mostiča, smo v programu 'sketch_stepper'

(priloga A) uporabili tabelo s krmilnimi koraki iz poglavja 6.1. S tem, ko za krmiljenje

koračnega motorja nismo uporabili dodatnega namenskega integriranega vezja, smo

predvsem zmanjšali strošek izdelave vezja za dvižni mehanizem. Pomanjkljivost naše

izvedbe je le v tem, da nimamo tokovne regulacije, ki bi koračnemu motorju zagotovila

Page 51: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

39

potrebni nazivni tok. S tokovnim regulatorjem namreč hitreje dosežemo vrednost

delovnega navora. Na tak način lahko koračni motor pri višjih krmilnih frekvencah doseže

večji navor, kot bi mu uspelo brez tokovne regulacije. Prednost v diplomi uporabljene

vezalne sheme v kombinaciji s programom 'sketch_stepper' je, da lahko tako brez

spreminjanja vezalne sheme, kot tudi programske kode, priklopimo bipolarni koračni

motor, ki deluje v napetostnem razponu med 4.5 in 36 V, ter pri nazivnem toku do 600

mA.

Uporabnost platforme Arduino je tudi v tem, da za izvedbo drugega projekta ne

potrebujemo veliko predznanja o strojni opremi. Na razpolago je velika izbira namenskih

strojnih dodatkov, t. i. ščitov, senzorjev in vrsta že realiziranih praktičnih zgledov, ki so

nam v pomoč pri izdelavi specifičnega projekta. Koriščenje teh namenskih in sestavljenih

ščitov ter senzorjev je smotrno tudi zato, ker nam z njihovo uporabo odpade preučevanje

strojnega dela opreme. Hkrati prihranimo na času, ki bi ga sicer potrebovali za razvoj

načrta in izvedbo namenskega vezja. Uporabnik se zato lahko bolj posveti razvoju

osnovnega programa za delovanje določenega digitalnega sistema, saj so nam pri

programiranju na razpolago še knjižnice in programi za predizdelane ščite. To poenostavi

in skrajša čas za razvoj novega 'sketch' programa.

Page 52: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

40

VIRI

[1] Arduino. Svetovni splet: Arduino, 2012.

Dostopno na: http://www.arduino.cc/ [18.12.2012]

[2] Arduino. Products: Arduino Nano. Svetovni splet: Arduino, 2012.

Dostopno na: http://arduino.cc/en/Main/ArduinoBoardNano [18.12.2012]

[3] Arduino. Products: Arduino Motor Shield. Svetovni splet: Arduino, 2012.

Dostopno na: http://arduino.cc/en/Main/ArduinoMotorShieldR3 [18.12.2012]

[4] Arduino. Products: Arduino Mega 2560. Svetovni splet: Arduino, 2012.

Dostopno na: http://arduino.cc/en/Main/ArduinoBoardMega2560 [18.12.2012]

[5] Arduino. Products: Mini USB Adapter. Svetovni splet: Arduino, 2012.

Dostopno na: http://arduino.cc/en/Main/MiniUSB [18.12.2012]

[6] Arduino. Products: Arduino Uno. Svetovni splet: Arduino, 2012.

Dostopno na: http://arduino.cc/en/Main/ArduinoBoardUno [18.12.2012]

[7] Bartmann, E. Die elektronische Welt mit Arduino entdecken, 1. izdaja. Köln: O'Reilly,

2011

Page 53: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

41

[8] Display Elektronik. LCD MODULE: DEM 16216 SYH-LY. Nidda: Display Elektronik

GmbH, 2008.

Dostopno na: http://www.display-elektronik.de/DEM16216SYH-LY.PDF [18.12.2012]

[9] Dugonik, B. Pretvorba funkcijskega sistema. V: mag. Bogdan Dugonik, univ. dipl. inž.

el. (ur.). Digitalni sistemi. Maribor: Fakulteta za elektrotehniko, računalništvo in

informatiko, 2002, str. 16-18.

Dostopno na: http://regul.uni-mb.si/~meolic/dt/Skripta_DS.pdf [10.3.2013]

[10] Gammon, N. ArduinoUno Rev3 pinouts photo. Svetovni splet: Gammon Software

Solutions forum, 2011.

Dostopno na: http://www.gammon.com.au/forum/?id=11473 [18.12.2012]

[11] Igoe, T. Stepper motors. Svetovni splet: Code, circuits, & construction, 2007.

Dostopno na: http://www.tigoe.net/pcomp/code/circuits/motors/stepper-motors/

[18.12.2012]

[12] Lavrič, S. Krmiljenje koračnih motorjev v teoriji in praksi. Svetovni splet: Še ena

domača stran - Arnes, 2007.

Dostopno na: http://www2.arnes.si/~sspslavr/k_motor/k_motor.html [30.3.2013]

[13] RN-Wissen. Motoren: Schrittmotoren. Svetovni splet: Roboternetz, 2012.

Dostopno na: http://www.rn-wissen.de/index.php/Schrittmotoren [18.12.2012]

[14] RN-Wissen. Motoren: Stepmotoren und deren Ansteuerung. Svetovni splet:

Roboternetz, 2012.

Page 54: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

42

Dostopno na: http://www.rn-wissen.de/index.php/Stepmotore_und_deren_Ansteuerung

[18.12.2012]

[15] Štravs, F. Osnove koračnih motorjev. V: OSNOVE ELEKTROTEHNIKE – OET

(delovni osnutek kot predhodno gradivo). Velenje: ŠOLSKI CENTER VELENJE, 2008,

str. 58-59.

Dostopno na:

ftp://ftp.scv.si/vss/franc_stravs/OET%20%28program%20MEHATRONIK%29/Gradivo%

20za%20OET.pdf [18.12.2012]

[16] Texas Instruments. L293, L393D: QUADRUPLE HALF-H DRIVERS. Texas: Texas

Instruments Incorporated, 2004.

Dostopno na: http://www.ti.com/lit/ds/symlink/l293d.pdf [18.12.2012]

[17] Wikipedia. Electronic circuits: H bridge. Svetovni splet: Wikimedia Foundation, Inc.,

2012.

Dostopno na: http://en.wikipedia.org/wiki/H_bridge [18.12.2012]

Page 55: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

43

PRILOGA A

Program sketch_stepper:

byte ledpin1 = 12; byte ledpin2 = 11; byte ledpin3 = 10; byte ledpin4 = 13; byte motorpin1 = 8; byte motorpin2 = 9; byte MENU ; byte sekunde =5 ; byte koraki = 24; int kor = 96 ; byte hitrost =4 ; byte dvojnikoraki =48 ; byte primerjava; byte liftpin1pozicija ; byte program; byte spremembaparametra; byte tekst ; byte j =0 ; byte A =1 ; byte B =1 ; byte C =1 ; byte S; byte liftpinS; char SERIA ; #include <LiquidCrystal.h> LiquidCrystal lcd(2, 3, 4, 5, 6, 7); void setup( ) pinMode (ledpin1,OUTPUT); pinMode (ledpin2,OUTPUT); pinMode (ledpin3,OUTPUT); pinMode (ledpin4,OUTPUT); pinMode (motorpin1,OUTPUT); pinMode (motorpin2,OUTPUT); lcd.begin(16, 2); Serial.begin(9600);

Page 56: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

44

void loop() SERIA = 0; SERIA = Serial.read(); S=0; if ( tekst ==0) lcd.clear(); lcd.setCursor(0,0); lcd.print("MENU"); lcd.setCursor(6,0); lcd.print("P"); lcd.setCursor(8,0); lcd.print("S"); lcd.setCursor(11,0); lcd.print("RESET"); lcd.setCursor(0,1); lcd.print("VHOD"); lcd.setCursor(6,1); lcd.print("1"); lcd.setCursor(8,1); lcd.print("1"); lcd.setCursor(11,1); lcd.print("1"); tekst=1; Serial.println("IZBERI : MENU "); Serial.println("UKAZ : M "); Serial.println(" ali "); Serial.println("IZBERI : RESET "); Serial.println("UKAZ : R "); Serial.println(" ali "); Serial.println("IZBERI PROGRAM : P1, P2, P3, S1, S2, S3 "); Serial.println("UKAZ : P1, P2, P3, S1, S2, S3 "); if ( digitalRead(A4) ==1 || SERIA== 'R') reset(); tekst=0; if ( digitalRead(A1) ==1 || SERIA== 'M') menu(); tekst=0; if ( digitalRead(A2) ==1 || SERIA== 'P') lcd.clear(); lcd.setCursor(0,0); lcd.print("IZBIRA"); lcd.setCursor(0,1); lcd.print("PROGRAMOV P"); Serial.println("IZBIRA PROGRAMOV P. "); delay(2000);

Page 57: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

45

while( digitalRead(A1) ==0 && SERIA != 'I' ) if ( tekst ==1) lcd.clear(); lcd.setCursor(0,0); lcd.print("IZHOD"); lcd.setCursor(6,0); lcd.print("P1"); lcd.setCursor(10,0); lcd.print("P2"); lcd.setCursor(14,0); lcd.print("P3"); lcd.setCursor(0,1); lcd.print("1"); lcd.setCursor(6,1); lcd.print("1"); lcd.setCursor(10,1); lcd.print("1"); lcd.setCursor(14,1); lcd.print("1"); tekst=0; Serial.println("IZBERI : IZHOD, P1, P2, P3 "); Serial.println("UKAZ : I, 1, 2, 3 "); SERIA = Serial.read(); if ( digitalRead(A2) ==1 || SERIA== '1') P1(); tekst=1; program = 0; if ( digitalRead(A3) ==1 || SERIA== '2') P2(); tekst=1; program = 0; if ( digitalRead(A4) ==1 || SERIA== '3') P3(); tekst=1; program = 0; lcd.clear(); lcd.setCursor(0,0); lcd.print("IZHOD"); lcd.setCursor(0,1); lcd.print("PROGRAMOV P"); Serial.println("IZHOD PROGRAMOV P. "); delay(1500); tekst=0;

Page 58: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

46

if ( digitalRead(A3) ==1 || SERIA== 'S') S=1; lcd.clear(); lcd.setCursor(0,0); lcd.print("IZBIRA"); lcd.setCursor(0,1); lcd.print("PROGRAMOV S"); Serial.println("IZBIRA PROGRAMOV S. "); delay(2000); while( digitalRead(A1) ==0 && SERIA != 'I') if ( tekst ==1) lcd.clear(); lcd.setCursor(0,0); lcd.print("IZHOD"); lcd.setCursor(6,0); lcd.print("S1"); lcd.setCursor(10,0); lcd.print("S2"); lcd.setCursor(14,0); lcd.print("S3"); lcd.setCursor(0,1); lcd.print("1"); lcd.setCursor(6,1); lcd.print("1"); lcd.setCursor(10,1); lcd.print("1"); lcd.setCursor(14,1); lcd.print("1"); tekst=0; Serial.println("IZBERI : IZHOD, S1, S2, S3 "); Serial.println("UKAZ : I, 1, 2, 3 "); SERIA = Serial.read(); if ( digitalRead(A2) ==1 || SERIA== '1') S1(); tekst=1; program = 0; if ( digitalRead(A3) ==1 || SERIA== '2') S2(); tekst=1; program = 0; if ( digitalRead(A4) ==1 || SERIA== '3') S3(); tekst=1;

Page 59: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

47

program = 0; lcd.clear(); lcd.setCursor(0,0); lcd.print("IZHOD"); lcd.setCursor(0,1); lcd.print("PROGRAMOV S"); Serial.println("IZHOD PROGRAMOV S. "); delay(1500); tekst=0; void menu() lcd.clear(); lcd.print("MENU"); Serial.println("MENU "); delay(1000); Serial.println(); Serial.print("t = "); Serial.print(sekunde); Serial.print(" s"); Serial.println(); Serial.print("k = "); Serial.print(kor); Serial.print(" korakov"); Serial.println(); Serial.print("v = "); Serial.print(hitrost); Serial.print(" ms"); Serial.println(); Serial.println("IZBERI :" ); Serial.println("MENU IZHOD JE UKAZ (I) " ); Serial.println("CAS JE UKAZ (S) IN DODANA VREDNOST OD 2 DO 60. PRIMER: (S15)." ); Serial.print ("KORAKI JE UKAZ (K) IN DODANA VREDNOST OD 1 DO 63." ); Serial.println("PRIMER: (K8). DOBLJENO STEVILO KORAKOV JE DODANA VREDNOST KRAT 4."); Serial.println("HITROST JE UKAZ (V) IN DODANA VREDNOST OD 4 DO 9. PRIMER: (V5). "); Serial.print ("VNESEN UKAZ (S), (K) ALI (V) BREZ DODANE VREDNOSTI, "); Serial.println("POVECA VREDNOST ZA ENA. PRIMER: (V). " ); Serial.print ("KO VNESEMO VEC UKAZOV HKRATI, SE MORAJO LOCIT Z VEJICO."); Serial.println(" PRIMER: (K20,S5,V8)"); SERIA = Serial.read(); primerjava=koraki; while( digitalRead(A1) ==0 && SERIA != 'I') SERIA = Serial.read(); if ( SERIA == 'S' || digitalRead(A2)==1) sekunde = sekunde + 1; SERIA= Serial.read(); if (SERIA >= '0'&& SERIA <= '9')

Page 60: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

48

sekunde = SERIA - 48; SERIA= Serial.read(); if (SERIA >= '0'&& SERIA <= '9') sekunde =( sekunde * 10 ) + ( SERIA - 48 ); SERIA= Serial.read(); if (SERIA >= '0'&& SERIA <= '9') sekunde =2; if ( sekunde >= 61 || sekunde <= 1 ) sekunde =2; Serial.println(); Serial.print("t = "); Serial.print(sekunde); Serial.print(" s"); Serial.println(); if ( SERIA == 'K' || digitalRead(A3)==1) koraki =koraki + 1 ; SERIA= Serial.read(); if (SERIA >= '0'&& SERIA <= '9') koraki = SERIA - 48; SERIA= Serial.read(); if (SERIA >= '0'&& SERIA <= '9') koraki =( koraki * 10 ) + ( SERIA - 48 ); SERIA= Serial.read(); if (SERIA >= '0'&& SERIA <= '9') koraki =1; if ( koraki >= 64 || koraki <= 0 ) koraki =1; kor=(koraki*4); dvojnikoraki=(2*koraki); Serial.println(); Serial.print("k = "); Serial.print(kor); Serial.print(" korakov"); Serial.println();

Page 61: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

49

if ( SERIA == 'V' || digitalRead(A4)==1) hitrost = hitrost + 1; SERIA= Serial.read(); if (SERIA >= '0'&& SERIA <= '9') hitrost = SERIA - 48; SERIA= Serial.read(); if (SERIA >= '0'&& SERIA <= '9') hitrost =4; if ( hitrost >= 10 || hitrost <= 3 ) hitrost =4; Serial.println(); Serial.print("v = "); Serial.print(hitrost); Serial.print(" ms"); Serial.println(); lcd.clear(); lcd.setCursor(0,0); lcd.print("MENU"); lcd.setCursor(6,0); lcd.print("t="); lcd.setCursor(9,0); lcd.print("k="); lcd.setCursor(13,0); lcd.print("v="); lcd.setCursor(0,1); lcd.print("IZHOD"); lcd.setCursor(6,1); lcd.print(sekunde); lcd.setCursor(8,1); lcd.print("s"); lcd.setCursor(9,1); lcd.print(kor); lcd.setCursor(12,1); lcd.print("k"); lcd.setCursor(13,1); lcd.print(hitrost); lcd.setCursor(14,1); lcd.print("ms"); delay(150); Serial.println(); Serial.println("PODATKI"); Serial.println(); Serial.print("t = "); Serial.print(sekunde);

Page 62: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

50

Serial.print(" s"); Serial.println(); Serial.print("k = "); Serial.print(kor); Serial.print(" korakov"); Serial.println(); Serial.print("v = "); Serial.print(hitrost); Serial.print(" ms"); Serial.println(); if(primerjava != koraki) iskanje(); spremembaparametra=1; j=0; A=1; B=1; C=1; digitalWrite(ledpin1,LOW); digitalWrite(ledpin2,LOW); digitalWrite(ledpin3,LOW); digitalWrite(ledpin4,LOW); lcd.clear(); delay(800); lcd.print("PROGRAM : OK"); Serial.println("PROGRAM : OK" ); void reset() lcd.clear(); lcd.print("RESET"); Serial.println(" RESET " ); delay(500); sekunde=5; koraki =24; kor =96; hitrost =4; dvojnikoraki=48; iskanje(); spremembaparametra=1; j=0; A=1; B=1; C=1; void P1() iskanje(); lcd.clear(); lcd.print("PROGRAM P1"); lcd.setCursor(0,1);

Page 63: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

51

lcd.print("Avtomatsko"); delay(1000); lcd.clear(); lcd.setCursor(0,0); lcd.print("MENU"); lcd.setCursor(5,0); lcd.print("IZHOD"); lcd.setCursor(11,0); lcd.print("OK"); lcd.setCursor(14,0); lcd.print("R"); lcd.setCursor(0,1); lcd.print("VHOD"); lcd.setCursor(5,1); lcd.print("1"); lcd.setCursor(11,1); lcd.print("-"); lcd.setCursor(14,1); lcd.print("1"); Serial.println("PROGRAM P1 " ); Serial.println("IZBERI : MENU, IZHOD, OK, RESET "); Serial.println("UKAZ : M, I, (), R "); delay(2500); while( program == LOW ) avtomatsko(); digitalWrite(ledpin1,LOW); digitalWrite(ledpin2,LOW); digitalWrite(ledpin3,LOW); digitalWrite(ledpin4,LOW); lcd.clear(); lcd.print("IZHOD P1"); Serial.println("IZHOD P1 " ); delay(1500); void avtomatsko() for(int i=1; i<4 ; i++) if(i==1 && spremembaparametra == LOW ) digitalWrite(ledpin1,HIGH); digitalWrite(ledpin3,LOW); lcd.clear(); lcd.print("Pozicija A "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println("Pozicija A " ); Serial.println("sekund " ); for(int i=0; i<sekunde ; i++)

Page 64: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

52

lcd.setCursor(0,1); lcd.print(i); Serial.print(i ); Serial.print("s, " ); if( i == 1 ) digitalWrite(ledpin4,HIGH); if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("GOR "); Serial.println(" GOR " ); for(int i=0; i<koraki ; i++) GOR(); tipke(); if( spremembaparametra == HIGH ) i=koraki; if(i==2 && spremembaparametra == LOW ) digitalWrite(ledpin2,HIGH); digitalWrite(ledpin1,LOW); lcd.clear(); lcd.print("Pozicija B "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println("Pozicija B " ); Serial.println(" sekund " ); for(int i=0; i<sekunde ; i++) lcd.setCursor(0,1); lcd.print(i);

Page 65: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

53

Serial.print(i ); Serial.print("s, " ); if( i == 1 ) digitalWrite(ledpin4,HIGH); if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("GOR "); Serial.println(" GOR " ); for(int i=0; i<koraki ; i++) GOR(); tipke(); if( spremembaparametra == HIGH ) i=koraki; if(i==3 && spremembaparametra == LOW ) digitalWrite(ledpin3,HIGH); digitalWrite(ledpin2,LOW); lcd.clear(); lcd.print("Pozicija C "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println(" Pozicija C " ); Serial.println(" sekund " ); for(int i=0; i<sekunde ; i++) lcd.setCursor(0,1); lcd.print(i); Serial.print(i ); Serial.print("s, " );

Page 66: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

54

if( i == 1 ) digitalWrite(ledpin4,HIGH); if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("DOL "); Serial.println(" DOL " ); for(int i=0; i<dvojnikoraki ; i++) DOL(); tipke(); if( spremembaparametra==1 ) i=dvojnikoraki; tipke(); spremembaparametra=0; void P2() iskanje(); lcd.clear(); lcd.print("PROGRAM P2"); lcd.setCursor(0,1); lcd.print("Polavtomatsko"); Serial.println("PROGRAM P2 " ); delay(1000); lcd.clear(); lcd.setCursor(0,0); lcd.print("MENU"); lcd.setCursor(5,0);

Page 67: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

55

lcd.print("IZHOD"); lcd.setCursor(11,0); lcd.print("OK"); lcd.setCursor(14,0); lcd.print("R"); lcd.setCursor(0,1); lcd.print("VHOD"); lcd.setCursor(5,1); lcd.print("1"); lcd.setCursor(11,1); lcd.print("1"); lcd.setCursor(14,1); lcd.print("1"); Serial.println("IZBERI : MENU, IZHOD, OK, RESET "); Serial.println("UKAZ : M, I, O, R "); while( program == LOW ) if( digitalRead(A3) ==1 || SERIA== 'O') avtomatsko(); digitalWrite(ledpin1,HIGH); digitalWrite(ledpin3,LOW); lcd.clear(); lcd.print("Pozicija A "); lcd.setCursor(0,1); lcd.print("PRIPRAVLJEN "); Serial.println("Pozicija A PRIPRAVLJEN" ); tipke(); SERIA = Serial.read(); digitalWrite(ledpin1,LOW); digitalWrite(ledpin2,LOW); digitalWrite(ledpin3,LOW); digitalWrite(ledpin4,LOW); lcd.clear(); lcd.print("IZHOD P2"); Serial.println("IZHOD P2" ); delay(1500); void P3() iskanje(); lcd.clear(); lcd.print("PROGRAM P3"); lcd.setCursor(0,1); lcd.print("Rocno"); Serial.println("PROGRAM P3 " ); delay(1000); while( program == LOW ) if( j==0 && A==1 && B==1 && C==1 )

Page 68: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

56

lcd.clear(); lcd.print("Pozicija A "); lcd.setCursor(0,1); lcd.print("PRIPRAVLJEN "); digitalWrite(ledpin1,HIGH); Serial.println("Pozicija A PRIPRAVLJEN" ); delay(1000); lcd.clear(); lcd.setCursor(0,0); lcd.print("MENU"); lcd.setCursor(5,0); lcd.print("IZHOD"); lcd.setCursor(11,0); lcd.print("OK"); lcd.setCursor(14,0); lcd.print("R"); lcd.setCursor(0,1); lcd.print("VHOD"); lcd.setCursor(5,1); lcd.print("1"); lcd.setCursor(11,1); lcd.print("1"); lcd.setCursor(14,1); lcd.print("1"); Serial.println("IZBERI : MENU, IZHOD, OK, RESET "); Serial.println("UKAZ : M, I, O, R "); A=0; B=0; C=0; if(digitalRead(A3) ==1 || SERIA== 'O') j=j+1; if(j==4 ) j=1; if(j==1 && spremembaparametra == LOW && A == 0 ) C=0; A = 1; lcd.clear(); lcd.print("Pozicija A "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println("Pozicija A " ); Serial.println("sekund " ); for(int i=0; i<sekunde ; i++) lcd.setCursor(0,1); lcd.print(i);

Page 69: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

57

Serial.print(i ); Serial.print("s, " ); if( i == 1 ) digitalWrite(ledpin4,HIGH); if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("GOR "); Serial.println(" GOR " ); for(int i=0; i<koraki ; i++) GOR(); tipke(); if( spremembaparametra == HIGH ) i=koraki; lcd.clear(); lcd.print("Pozicija B "); lcd.setCursor(0,1); lcd.print("PRIPRAVLJEN "); digitalWrite(ledpin1,LOW); digitalWrite(ledpin2,HIGH); Serial.println("Pozicija B PRIPRAVLJEN" ); if(j==2 && spremembaparametra == LOW && B == 0) A = 0; B=1; lcd.clear(); lcd.print("Pozicija B "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println("Pozicija B " );

Page 70: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

58

Serial.println("sekund " ); for(int i=0; i<sekunde ; i++) lcd.setCursor(0,1); lcd.print(i); Serial.print(i ); Serial.print("s, " ); if( i == 1 ) digitalWrite(ledpin4,HIGH); if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("GOR "); Serial.println(" GOR " ); for(int i=0; i<koraki ; i++) GOR(); tipke(); if( spremembaparametra == HIGH ) i=koraki; lcd.clear(); lcd.print("Pozicija C "); lcd.setCursor(0,1); lcd.print("PRIPRAVLJEN "); digitalWrite(ledpin2,LOW); digitalWrite(ledpin3,HIGH); Serial.println("Pozicija C PRIPRAVLJEN" ); if(j==3 && spremembaparametra == LOW && C == 0) B = 0; C=1;

Page 71: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

59

lcd.clear(); lcd.print("Pozicija C "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println("Pozicija C " ); Serial.println("sekund " ); for(int i=0; i<sekunde ; i++) lcd.setCursor(0,1); lcd.print(i); Serial.print(i ); Serial.print("s, " ); if( i == 1 ) digitalWrite(ledpin4,HIGH); if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("DOL "); Serial.println(" DOL " ); for(int i=0; i<dvojnikoraki ; i++) DOL(); tipke(); if( spremembaparametra==1 ) i=dvojnikoraki; lcd.clear(); lcd.print("Pozicija A "); lcd.setCursor(0,1); lcd.print("PRIPRAVLJEN "); digitalWrite(ledpin3,LOW); digitalWrite(ledpin1,HIGH); Serial.println("Pozicija A PRIPRAVLJEN" );

Page 72: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

60

tipke(); spremembaparametra=0; SERIA = Serial.read(); digitalWrite(ledpin1,LOW); digitalWrite(ledpin2,LOW); digitalWrite(ledpin3,LOW); digitalWrite(ledpin4,LOW); lcd.clear(); lcd.print("IZHOD P3"); Serial.println("IZHOD P3"); delay(1500); j=0; A=1; B=1; C=1; void pozicijaA() spremembaparametra=1; liftpinS=1; for(int i=0; i<2 ; i++) digitalWrite(motorpin1,HIGH); delay(6); digitalWrite(motorpin2,HIGH); delay(6); digitalWrite(motorpin1,LOW); delay(6); digitalWrite(motorpin2,LOW); delay(6); void iskanje() digitalWrite(ledpin1,LOW); digitalWrite(ledpin2,LOW); digitalWrite(ledpin3,LOW); digitalWrite(ledpin4,LOW); lcd.clear(); lcd.print("Iskanje pozicije"); Serial.println("ISKANJE POZICIJE" ); delay(100); liftpin1pozicija = digitalRead(A0); while(liftpin1pozicija == LOW) digitalWrite(motorpin2,HIGH); delay(6); digitalWrite(motorpin1,HIGH); delay(6);

Page 73: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

61

digitalWrite(motorpin2,LOW); delay(6); digitalWrite(motorpin1,LOW); delay(6); liftpin1pozicija = digitalRead(A0); for(int i=0; i<2 ; i++) digitalWrite(motorpin1,HIGH); delay(6); digitalWrite(motorpin2,HIGH); delay(6); digitalWrite(motorpin1,LOW); delay(6); digitalWrite(motorpin2,LOW); delay(6); if( S==1 ) for(int i=0; i<koraki ; i++) digitalWrite(motorpin1,HIGH); delay(6); digitalWrite(motorpin2,HIGH); delay(6); digitalWrite(motorpin1,LOW); delay(6); digitalWrite(motorpin2,LOW); delay(6); lcd.clear(); lcd.print("Pozicija A "); Serial.println("Pozicija A POZICIONIRAN " ); digitalWrite(ledpin1,HIGH); lcd.setCursor(0,1); lcd.print("POZICIONIRAN"); delay(2000); digitalWrite(ledpin1,LOW); void S1() iskanje(); lcd.clear(); lcd.print("PROGRAM S1"); lcd.setCursor(0,1); lcd.print("Avtomatsko"); delay(1000); lcd.clear(); lcd.setCursor(0,0); lcd.print("MENU"); lcd.setCursor(5,0);

Page 74: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

62

lcd.print("IZHOD"); lcd.setCursor(11,0); lcd.print("OK"); lcd.setCursor(14,0); lcd.print("R"); lcd.setCursor(0,1); lcd.print("VHOD"); lcd.setCursor(5,1); lcd.print("1"); lcd.setCursor(11,1); lcd.print("-"); lcd.setCursor(14,1); lcd.print("1"); Serial.println("PROGRAM S1 " ); Serial.println("IZBERI : MENU, IZHOD, OK, RESET "); Serial.println("UKAZ : M, I, (), R "); delay(2500); while( program == LOW ) avtomatskoS(); digitalWrite(ledpin1,LOW); digitalWrite(ledpin2,LOW); digitalWrite(ledpin3,LOW); digitalWrite(ledpin4,LOW); lcd.clear(); lcd.print("IZHOD S1"); Serial.println("IZHOD S1 " ); delay(1500); void avtomatskoS() for(int i=1; i<4 ; i++) if(i==1 && spremembaparametra == LOW ) digitalWrite(ledpin1,HIGH); digitalWrite(ledpin3,LOW); lcd.clear(); lcd.print("Pozicija A "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println("Pozicija A " ); Serial.println("sekund " ); for(int i=0; i<sekunde ; i++) lcd.setCursor(0,1); lcd.print(i); Serial.print(i ); Serial.print("s, " ); if( i == 1 )

Page 75: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

63

digitalWrite(ledpin4,HIGH); if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("GOR "); Serial.println(" GOR " ); for(int i=0; i<koraki ; i++) GOR(); tipke(); if( spremembaparametra == HIGH ) i=koraki; if(i==2 && spremembaparametra == LOW ) digitalWrite(ledpin2,HIGH); digitalWrite(ledpin1,LOW); lcd.clear(); lcd.print("Pozicija B "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println("Pozicija B " ); Serial.println(" sekund " ); for(int i=0; i<sekunde ; i++) lcd.setCursor(0,1); lcd.print(i); Serial.print(i ); Serial.print("s, " ); if( i == 1 ) digitalWrite(ledpin4,HIGH);

Page 76: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

64

if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("DOL "); Serial.println(" DOL " ); for(int i=0; i<dvojnikoraki ; i++) DOL(); tipke(); if( spremembaparametra==1 ) i=dvojnikoraki; if( liftpinS==1 ) spremembaparametra =0; liftpinS=0; if(i==3 && spremembaparametra == LOW ) digitalWrite(ledpin3,HIGH); digitalWrite(ledpin2,LOW); lcd.clear(); lcd.print("Pozicija C "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println(" Pozicija C " ); Serial.println(" sekund " ); for(int i=0; i<sekunde ; i++) lcd.setCursor(0,1); lcd.print(i); Serial.print(i ); Serial.print("s, " ); if( i == 1 )

Page 77: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

65

digitalWrite(ledpin4,HIGH); if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("GOR "); Serial.println(" GOR " ); for(int i=0; i<koraki ; i++) GOR(); tipke(); if( spremembaparametra == HIGH ) i=koraki; tipke(); spremembaparametra=0; void S2() iskanje(); lcd.clear(); lcd.print("PROGRAM S2"); lcd.setCursor(0,1); lcd.print("Polavtomatsko"); Serial.println("PROGRAM S2 " ); delay(1000); lcd.clear(); lcd.setCursor(0,0); lcd.print("MENU"); lcd.setCursor(5,0); lcd.print("IZHOD");

Page 78: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

66

lcd.setCursor(11,0); lcd.print("OK"); lcd.setCursor(14,0); lcd.print("R"); lcd.setCursor(0,1); lcd.print("VHOD"); lcd.setCursor(5,1); lcd.print("1"); lcd.setCursor(11,1); lcd.print("1"); lcd.setCursor(14,1); lcd.print("1"); Serial.println("IZBERI : MENU, IZHOD, OK, RESET "); Serial.println("UKAZ : M, I, O, R "); while( program == LOW ) if( digitalRead(A3) ==1 || SERIA== 'O') avtomatskoS(); digitalWrite(ledpin1,HIGH); digitalWrite(ledpin3,LOW); lcd.clear(); lcd.print("Pozicija A "); lcd.setCursor(0,1); lcd.print("PRIPRAVLJEN "); Serial.println("Pozicija A PRIPRAVLJEN" ); tipke(); SERIA = Serial.read(); digitalWrite(ledpin1,LOW); digitalWrite(ledpin2,LOW); digitalWrite(ledpin3,LOW); digitalWrite(ledpin4,LOW); lcd.clear(); lcd.print("IZHOD S2"); Serial.println("IZHOD S2" ); delay(1500); void S3() iskanje(); lcd.clear(); lcd.print("PROGRAM S3"); lcd.setCursor(0,1); lcd.print("Rocno"); Serial.println("PROGRAM S3 " ); delay(1000); while( program == LOW ) if( j==0 && A==1 && B==1 && C==1 )

Page 79: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

67

lcd.clear(); lcd.print("Pozicija A "); lcd.setCursor(0,1); lcd.print("PRIPRAVLJEN "); digitalWrite(ledpin1,HIGH); Serial.println("Pozicija A PRIPRAVLJEN" ); delay(1000); lcd.clear(); lcd.setCursor(0,0); lcd.print("MENU"); lcd.setCursor(5,0); lcd.print("IZHOD"); lcd.setCursor(11,0); lcd.print("OK"); lcd.setCursor(14,0); lcd.print("R"); lcd.setCursor(0,1); lcd.print("VHOD"); lcd.setCursor(5,1); lcd.print("1"); lcd.setCursor(11,1); lcd.print("1"); lcd.setCursor(14,1); lcd.print("1"); Serial.println("IZBERI : MENU, IZHOD, OK, RESET "); Serial.println("UKAZ : M, I, O, R "); A=0; B=0; C=0; if(digitalRead(A3) ==1 || SERIA== 'O') j=j+1; if(j==4 ) j=1; if(j==1 && spremembaparametra == LOW && A == 0 ) C=0; A = 1; lcd.clear(); lcd.print("Pozicija A "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println("Pozicija A " ); Serial.println("sekund " ); for(int i=0; i<sekunde ; i++) lcd.setCursor(0,1); lcd.print(i); Serial.print(i );

Page 80: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

68

Serial.print("s, " ); if( i == 1 ) digitalWrite(ledpin4,HIGH); if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("GOR "); Serial.println(" GOR " ); for(int i=0; i<koraki ; i++) GOR(); tipke(); if( spremembaparametra == HIGH ) i=koraki; lcd.clear(); lcd.print("Pozicija B "); lcd.setCursor(0,1); lcd.print("PRIPRAVLJEN "); digitalWrite(ledpin1,LOW); digitalWrite(ledpin2,HIGH); Serial.println("Pozicija B PRIPRAVLJEN" ); if(j==2 && spremembaparametra == LOW && B == 0) A = 0; B=1; lcd.clear(); lcd.print("Pozicija B "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println("Pozicija B " ); Serial.println("sekund " );

Page 81: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

69

for(int i=0; i<sekunde ; i++) lcd.setCursor(0,1); lcd.print(i); Serial.print(i ); Serial.print("s, " ); if( i == 1 ) digitalWrite(ledpin4,HIGH); if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("DOL "); Serial.println(" DOL " ); for(int i=0; i<dvojnikoraki ; i++) DOL(); tipke(); if( spremembaparametra==1 ) i=dvojnikoraki; lcd.clear(); lcd.print("Pozicija C "); lcd.setCursor(0,1); lcd.print("PRIPRAVLJEN "); digitalWrite(ledpin2,LOW); digitalWrite(ledpin3,HIGH); Serial.println("Pozicija C PRIPRAVLJEN" ); if(j==3 && spremembaparametra == LOW && C == 0) B = 0; C=1; lcd.clear();

Page 82: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

70

lcd.print("Pozicija C "); lcd.setCursor(8,1); lcd.print(" sekund "); Serial.println("Pozicija C " ); Serial.println("sekund " ); for(int i=0; i<sekunde ; i++) lcd.setCursor(0,1); lcd.print(i); Serial.print(i ); Serial.print("s, " ); if( i == 1 ) digitalWrite(ledpin4,HIGH); if( i == 2 ) digitalWrite(ledpin4,LOW); for(int i=0; i<10 ; i++) delay(100); tipke(); if( spremembaparametra == HIGH ) i=sekunde; digitalWrite(ledpin4,LOW); if( spremembaparametra == LOW ) lcd.clear(); lcd.print("GOR "); Serial.println(" GOR " ); for(int i=0; i<koraki ; i++) GOR(); tipke(); if( spremembaparametra == HIGH ) i=koraki; lcd.clear(); lcd.print("Pozicija A "); lcd.setCursor(0,1); lcd.print("PRIPRAVLJEN "); digitalWrite(ledpin3,LOW); digitalWrite(ledpin1,HIGH); Serial.println("Pozicija A PRIPRAVLJEN" );

Page 83: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

71

tipke(); spremembaparametra=0; SERIA = Serial.read(); digitalWrite(ledpin1,LOW); digitalWrite(ledpin2,LOW); digitalWrite(ledpin3,LOW); digitalWrite(ledpin4,LOW); lcd.clear(); lcd.print("IZHOD S3"); Serial.println("IZHOD S3"); delay(1500); j=0; A=1; B=1; C=1; void tipke() SERIA = Serial.read(); if ( digitalRead(A2) ==1 || SERIA== 'I') lcd.clear(); lcd.print("IZHOD"); Serial.println(" IZHOD " ); delay(500); program = 1; spremembaparametra=1; if ( digitalRead(A1) ==1 || SERIA== 'M') menu(); if ( digitalRead(A4) ==1 || SERIA== 'R') reset(); if ( digitalRead(A0) ==1) pozicijaA(); void GOR() digitalWrite(motorpin1,HIGH); delay(hitrost); digitalWrite(motorpin2,HIGH); delay(hitrost); digitalWrite(motorpin1,LOW); delay(hitrost); digitalWrite(motorpin2,LOW);

Page 84: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

72

delay(hitrost); void DOL() digitalWrite(motorpin2,HIGH); delay(hitrost); digitalWrite(motorpin1,HIGH); delay(hitrost); digitalWrite(motorpin2,LOW); delay(hitrost); digitalWrite(motorpin1,LOW); delay(hitrost);

Page 85: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

73

PRILOGA B

Page 86: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

74

Page 87: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

75

Page 88: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

76

Page 89: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

77

Page 90: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

78

Page 91: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

79

Page 92: Aleksander Filipovi č - core.ac.uk · a bipolar stepper motor in a full step mode. The stepper motor moves an object along a linear guide to different positions following a certain,

Mikroračunalniški krmilnik koračnega motorja

80