Radek Ambrus
Diplomová práce
Tuto práci jsem vypracoval samostatn. Veškeré literární prameny a
informace, které
jsem v práci vyuil, jsou uvedeny v seznamu pouité literatury. Byl
jsem seznámen s tím, e se
na moji práci vztahují práva a povinnosti vyplývající ze zákona .
121/2000 Sb., autorský
zákon, zejména se skuteností, e Univerzita Pardubice má právo na
uzavení licenní smlouvy
o uití této práce jako školního díla podle § 60 odst. 1 autorského
zákona, a s tím, e pokud
dojde k uití této práce mnou nebo bude poskytnuta licence o uití
jinému subjektu, je
Univerzita Pardubice oprávnna ode mne poadovat pimený píspvek na
úhradu náklad,
které na vytvoení díla vynaloila, a to podle okolností a do jejich
skutené výše.
Beru na vdomí, e v souladu s § 47b zákona . 111/1998 Sb., o
vysokých školách a o
zmn a doplnní dalších zákon (zákon o vysokých školách), ve znní
pozdjších
pedpis, a smrnicí Univerzity Pardubice . 9/2012, bude práce
zveejnna v
Univerzitní knihovn a prostednictvím Digitální knihovny Univerzity
Pardubice.
V Pardubicích dne 26. 5. 2017 Radek Ambrus
PODKOVÁNÍ
Rád bych podkoval vedoucímu diplomové práce panu Ing. Zdekovi
Maškovi, Ph.D., za
jeho odborné vedení, cenné rady, pipomínky a návrhy v celém prbhu
práce. Dále bych chtl
podkovat všem kamarádm, kteí mi byli nápomocni po celou dobu
studia. Závrem bych chtl
podkovat celé své rodin, která m vdy ve studiu podporovala.
ANOTACE
Diplomová práce se zabývá ovládáním modelu soustavy ”Kulika na
rameni”. Jedná se
o navázání na diplomovou práci s názvem Návrh a realizace modelu
”Kulika na rameni”.
Autorem byl Bc.Zdenk Bureš. Práce je rozdlena na nkolik ástí.
Prvním bodem
bylo analyzovat aktuální stav zaízení. Dále byl upraven firmware
ídící jednotky. A nakonec
byl vytvoen ovládací software, pomocí kterého lze laboratorní
pípravek ovládat z poítae.
KLÍOVÁ SLOVA
TITLE
ANNOATTION
Master thesis is focused on the control "Ball on beam" model
system. This is continuation
of the Master thesis Design and implementation of "Ball on beam"
model from the author Bc.
Zdenk Bureš. The thesis is divided into several parts. An analyzing
the current status of the
device was the first part. Then the firmware of the control unit
was modified. In the last part
was created the control software, which can be used for an easy
controlling of the device from
the computer.
Obsah
1.1 HW ást
...............................................................................................................
10
1.2 SW ást
...............................................................................................................
12
1.2.2 MainFile.cpp
................................................................................................
13
1.3 Spojení s pípravkem
..........................................................................................
13
Návrh komunikaního protokolu pro spojení pípravku s PC
................................... 15
2.1 Fyzická a linková vrstva
.....................................................................................
15
2.2 Dostupné funkce [2]
............................................................................................
15
2.3 Seznam podporovaných píkaz
.........................................................................
16
Vyuití Atmel studia pro úpravu firmwaru
................................................................
19
Vlastní úprava firmwaru pro pípravek
......................................................................
22
4.1 Vyuité piny ídící desky Arduino
......................................................................
22
4.2 Hlavní vyuívané knihovny
................................................................................
23
4.2.1 AccelStepper
................................................................................................
23
4.2.2 IR_GP2D12
.................................................................................................
23
4.2.3 BallPositionGP2D12
...................................................................................
24
4.2.4 PID
...............................................................................................................
24
4.2.5 BeamControlStepper
...................................................................................
24
4.2.6 Communication
...........................................................................................
25
4.2.7 CommandsProcessing
..................................................................................
26
4.2.8 EEPROM_SETINGS.h
...............................................................................
26
4.2.9 BallOnBeam
................................................................................................
27
4.5 asování aplikace
...............................................................................................
30
4.6 Testování rychlosti krokového motoru
...............................................................
31
4.6.1 Krokový motor rychlost pohybu – teoretický rozbor
.................................. 32
4.6.2 Mení - Testování rychlosti
.......................................................................
34
4.7 Pohyb se zrychlením
...........................................................................................
36
Vyuití vývojového prostedí LabVIEW
...................................................................
38
5.1 Vývojové prostedí LabVIEW
............................................................................
38
5.1.1 elní panel (Front panel)
.............................................................................
38
5.1.2 Blokový diagram (Block diagram)
..............................................................
39
5.2 Vyuité struktury a VI
........................................................................................
41
5.2.1 Funkní globální promnná – FGV
.............................................................
41
5.2.2 Architektura Queued State Machine – Producer Consumer -
QSM-PC ..... 42
5.3 Základní bloky pro práci s frontami
...................................................................
43
5.3.1 Obtain Queue
...............................................................................................
43
5.3.2 Enqueue Element
.........................................................................................
44
5.3.3 Dequeue Element
.........................................................................................
44
5.4 Vyuitá šablona QSM-PC
...................................................................................
46
5.4.1 Soubory šablony QSM template
..................................................................
49
5.4.2 Vloení zprávy do fronty
.............................................................................
53
5.4.3 Výbr zprávy z fronty
..................................................................................
54
Výsledná ovládací aplikace
........................................................................................
55
6.2 Popis funkce a ovládání aplikace
........................................................................
57
6.3 Popis jednotlivých ástí hlavního souboru programu
......................................... 61
6.3.1 Data dostupná v hlavním souboru
...............................................................
62
6.3.2 Event struktura
.............................................................................................
63
6.3.3 State Machine
..............................................................................................
67
6.4.2 Stavový automat
..........................................................................................
79
-9-
ÚVOD
Tato práce se zabývá úpravou modelu zaízení ”Kulika na rameni”.
Jedná se o zaízení,
které bude vyuíváno pro výuku na KEEZ. Laboratorní pípravek byl
zhotoven v rámci
Diplomové práce, její autorem byl Bc. Zdenk Bureš.
Jeho práce se zabývala Analýzou moných ešení, výbrem jednotlivých
komponent pro
zaízení, simulaní ástí, ve které se zabýval matematickým popisem,
návrhem regulátoru a
nakonec vytvoením simulaního modelu. Druhá ást práce se zabývala
vlastní konstrukcí
zaízení, realizací íslicového regulátoru a na závr došlo k ovení
funkce celkového zaízení.
Reálný stav zaízení je takový, e po hardwarové stránce se jedná o
pln funkní výrobek
a s jeho aktuálním stavem se seznámíme v jedné z následujících
ástí. Z hlediska softwarového
je pípravek oiven a byla ovena jeho funkce jako celku. Software
plní pouze základní funkci.
Z hardwarové stránky nebudou provedeny ádné úpravy. Zásahy se budou
týkat pouze
softwarové ásti. Tuto úpravu lze rozlenit na dva hlavní úkoly.
Prvním úkolem je úprava
firmwaru ídící jednotky, aby byl pehlednjší a jeho správa
jednodušší. A druhým, by mlo
být rozšíení programu o komunikaní protokol, který bude slouit pro
komunikaci mezi
pípravkem a poítaem. A bude tak moné pípravek ovládat pomocí
aplikace pes PC.
Vytvoení ovládací aplikace pro pípravek byla jedním z dalších bod
této práce. Ovládací
aplikace by mla slouit k jednoduchému a rychlému ovládání
laboratorního pípravku bez
nutnosti znalosti komunikaního protokolu. Pro vytvoení této
aplikace bude vyuito vývojové
prostedí LabVIEW. Výsledná aplikace by mla plnit nkolik základních
funkcí. Mezi n patí
vizualizace regulaního pochodu, logování pijatých dat do souboru,
zptnovazební ízení
polohy kuliky nebo zadání úhlu natoení ramene a nastavení konstant
regulátoru polohy.
-10-
AKTUÁLNÍ STAV ZAÍZENÍ „KULIKA NA RAMENI“
V této ásti práce se seznámíme s aktuálním stavem pípravku „Kulika
na rameni“.
Aktuáln stavu se jedná o pln funkní model po hardwarové stránce. Z
hlediska softwarové
ásti je zaízení oivené a plní pouze základní funkce. Aby byl
pípravek pln funkní, musí
být pipojen síovým kabelem na naptí 230V 50Hz a zárove musí být
pipojen pomocí kabelu
k USB portu PC.
Všechny komponenty zaízení jsou pipevnné na devotískové desce o
rozmrech
120x30 cm. Zaízení je rozdleno na ást silnoproudou a
slaboproudou.
Silnoproudá ást, tedy jisti a spínaný napájecí zdroj jsou kryty
irým plastem. Ten slouí
jako ochrana uivatel ped pípadným zásahem elektrického proudu.
Zárove je na této
ochranné plastové ásti pipevnna signální kontrolka, která svítí,
pokud je zaízení pipojeno
k napájení. Jisti zde plní funkci prvku, který slouí pro pipojení,
respektive odpojení zaízení
od napájení.
Další ást je moné oznait jako slaboproudou, kterou tvoí Driver,
který slouí pro
napájení a ízení krokového motorku a ídící deska Arduino MEGA2560.
Do této ásti spadá
také v neposlední ad krokový motor, pomocí kterého je ovládáno
rameno, optický sníma
polohy kuliky, který je pipevnn na konci ramene a koncový spína.
Veškeré propojovací
kabely jsou ukryty v lištách, které jsou pevn pipevnny na
desku.
Poslední je ást mechanická. Jedná je o bytelnou hliníkovou
konstrukci, ke které je
pipevnno rameno. Penos momentu motoru na rameno je ešen pomocí
ozubených kol a
emenu. Vtší z ozubených kol je poté spojeno táhlem s ramenem.
Jako kulika, její poloha bude regulována, byl vybrán pingpongový
míek. Ten je
dostaten velký, take není problém snímat jeho polohu po celé délce
ramene.
Pod kabelovým labem jsou pipevnny pojistková pouzdra a svorky,
které nemají ádnou
souvislost s funkci celého zaízení. Na tyto svorky je pouze
vyvedeno stejnosmrné naptí 24V,
které me být vyuito pro napájení rzných externích zaízení.
[1]
-11-
Driver typ HY-DIV268N-5A
Krokový motor SX23-1414d
Rameno hliníkový U profil 50x30x2mm, délka 600mm
Kulika - pingpongový míek - prmr 40mm, hmotnost cca 2g
emen – šíka 9mm rozte zub 5mm
emenice 12 a 48 zub – pevodový pomr tedy 1:4
Obrázek 1 Celkový pohled na laboratorní pípravek [1]
-12-
rameni se skládá z nkolika samostatných modul. Vtšina jich je
tvoena C++ tídami. Kadá tída má za úkol uritou funkci v
programu jako napíklad PID regulátor, mení aktuální polohy
kuliky, ovládání krokového motoru a další. Tyto moduly
obsahují další knihovny a podprogramy, které se podílejí na
funkci hlavního programu s názvem “Krokovy”. [1]
1.2.1 Jednotlivé vyuité knihovny [1]
AccelStepper
motoru.
pevodní tabulka úhel - kroky. Velikost ádaného úhlu se
pohybuje v rozmezí od -15 ° do 15°.
IR_GP2D12
Slouí k vyítání hodnot z optického snímae. Souástí je i nkolik
dalších knihoven, které
jsou potebné pro správné urení polohy kuliky. Jedná se napíklad o
filtraci snímaných
hodnot.
Koncak
Jednoduchá knihovna, která slouí pouze ke snímání stavu koncového
spínae. Vyuívána
je pouze po spuštní, kdy rameno sjídí na koncový spína.
PID
Jedná se o PID regulátor. Regulace je nastavena zadanými parametry
Kp, Ki a Kd. Vstupní
promnné pro regulátor jsou hodnoty ádané a aktuální polohy kuliky.
Výpotem
získáváme ádaný úhel natoení ramene, který se pevádí na poet krok
pro krokový motor.
Obrázek 2 Struktura projektu [1]
-13-
1.2.2 MainFile.cpp
Jedná se o hlavní zdrojový soubor aplikace. Na zaátku zdrojového
kódu jsou pipojeny
patiné hlavikové soubory. Následuje vytváení instancí tíd a poté
jsou definovány
vyuívané promnné. MainFile je vdy sloen minimáln z dvou funkci a to
setup() a loop().
Kde funkce setup() probhne pouze jednou po startu zaízení a je
pouita pedevším
k inicializování. Funkce loop() se vykonává neustále dokola, avšak
kód v této funkci je naspaný
tak, e se vykoná pouze jednou. Nakonec jsou zapsány rutiny pro
obslouení perušení.
1.2.3 Funkce pípravku jako celku
Po propojení zaízení a PC pomocí USB kabelu typu A-B a zapnutí
pomocí jistie se ihned
zane vykonávat program. Po pipojení hlavikových soubor, definování
promnných,
vytvoení instancí tíd se zane vykonávat funkce setup().
Ve funkci setup() dochází k nastavení sériové linky, tedy její
penosové rychlosti,
parametr krokového motoru, PID regulátoru a asova. Kdy po vykonání
funkce setup(), se
zane vykonávat funkce loop(). V tomto pípad jsou píkazy ve smyce
loop() vykonány pouze
po spuštní, kdy je nutné zjistit polohu ramene. S ramenem se sjídí
na koncový spína, po
sepnutí se rameno nastaví do vodorovné polohy. Po vykonání této
sekvence úkon se teprve
mohou vykonávat píkazy v rutin pro obslouení perušení od asovae
3.
V této obsluze perušení se naítá aktuální pozice kuliky, která
spolu s ádanou polohou
jsou vstupní parametry pro výpoet ádaného úhlu natoení ramene. Tato
hodnota je poté
pomocí pevodní tabulky pevedena na poet krok pro krokový motor,
který pechází do
ádané polohy, a tím dochází k natoení ramene. ádaná poloha kuliky
je nastavena na 300
mm, co odpovídá stedu ramene.
V kódu je ješt zapsána obsluha perušení asovae 2. Pi tomto perušení
je obsluhován
krokový motor, který se na ádanou pozici.
1.3 Spojení s pípravkem
ídící deska laboratorního pípravku musí být pipojena k PC pomocí
USB portu. Toto
spojení slouí zárove pro vlastní napájení desky a pro komunikaci.
Penos me být teoreticky
oboustranný. Co znamená, e meme penášet hodnoty do PC nebo naopak z
PC posílat
píkazy do ídící desky. Zaízení v souasném stavu však nepodporuje
píkazy z PC, a pouze
po USB vypisuje hodnoty a etzce, které jsou definovány ve firmwaru
ídící desky. Jedná se o
-14-
informaní zprávy pro uivatele a stavy, ve kterých se zaízení
aktuáln nachází. Postupn
dochází k výpisu následujících zpráv:
Rameno sjizdi na koncak
Rameno je na koncaku
Rameno je ve vodorovne pozici
Aktualni poloha motoru = 0
Pro zobrazení vypisovaných hodnot v PC byla vyuita aplikace
„Terminal“. Jedna se o
jednoduchý program, který nevyaduje instalaci a umouje snadnou
obsluhu komunikace po
sériové lince. Na výbr jsou porty COM1 a COM10 a velké mnoství
penosových rychlostí i
s moností vlastní volby penosové rychlosti. Pijímaná data mohou být
zobrazována ve
formátu HEX nebo ASCII a zárove mohou být logována do souboru.
Program podporuje
odesílání textových píkaz nebo celých soubor. Moné je i vyuití
maker pro periodické
odesílání, kde se pouze zadá píkaz a perioda odesílání. [1]
Obrázek 3 Okno aplikace Terminal v1.9b [1]
-15-
PÍPRAVKU S PC
Pvodní verze firmwaru pípravku nedisponovala obousmrnou komunikací
s PC.
V programu pro ídící desku tedy bylo pouze moné zapsat píkazy pro
výpis aktuálních hodnot
a textu. Tyto informace poté mohly být zobrazeny na PC napíklad
pomocí ji zmínné aplikace
Terminal.
U pvodní zaízení byly všechny parametry pevn nastaveny v programu.
Pokud vznikl
poadavek na zmnu nkterého z tchto parametr, muselo dojít k pepsání
hodnot v programu
a optovn ho nahrát do ídící desky. Co je nekomfortní a asov
zdlouhavé ešení.
Hlavním cílem této práce je tedy upravit firmware výrobku tak, aby
ho bylo moné ovládat
pomocí aplikace, která bude spuštna na PC.
Jedním z prvních krok tedy bylo navrhnout a implementovat
komunikaní protokol pro
spojení pípravku s PC. Jedná se o soubor píkaz, pomocí kterých bude
pípravek ovládán.
Kdy komunikace by mla být obousmrná, tedy podporující zápis a tení.
Zápis spoívá v tom,
e pomocí píkazu odeslaného z PC, který má pesn definovaný formát a
obsah, je moné
zmnit hodnoty vybraných parametr i pi spuštném pípravku. Naopak pi
odeslání píkazu
ke tení dojde k vytení aktuální hodnoty nkterého z podporovaných
parametr. Kdy parametr,
který chceme zmnit nebo vyíst, je dán obsahem píkazu.
Celý pípravek by mlo být moné pln ovládat z PC pomocí píkaz po
USB.
Návrh komunikaního protokolu mi byl poskytnut vedoucím práce.
2.1 Fyzická a linková vrstva
Tabulka 2.1 Specifikace komunikaního protokolu [2]
Rozhraní UART/USB
2.2 Dostupné funkce [2]
Nastavení jednotlivých parametr PID regulátoru polohy kuliky: Kp,
Ti, Td, N
-16-
Vytení jednotlivých parametr PID regulátoru polohy kuliky z
pípravku: Kp, Ti, Td, N
Nastavení ádané polohy kuliky [mm]
Vytení skutené polohy kuliky [mm]
Nastavení módu regulace:
Nastavení ádaného úhlu lavice [°]
Vytení skuteného úhlu lavice [°]
Navázání/ukonení komunikace s pípravkem
2.3 Seznam podporovaných píkaz
Komunikace mezi pípravkem a PC je textová, odesílají se pesn
definované textové
etzce. etzec musí být vdy zakonen zakonovacím znakem, jinak nedojde
k rozpoznání
píkazu. Jako zakonovací znak byl zvolen podtrítka ” _ ”. Procesní
hodnoty odesílané
z pípravku jsou oddleny stedníkem.
Kadý píkaz lze pomysln rozdlit na 3 základní ásti, v pípad nkterých
píkaz pro
zápis i na 4 ásti.
Píkaz sloený z 3 ástí:
Typ píkazu | výbr podporované funkce | zakonovací znak
Píkaz sloený ze 4 ástí:
Typ píkazu | výbr podporované funkce | nová hodnota | zakonovací
znak
Typ píkazu – jedná se o výbr mezi tením – symbol “ r ” a zápisem –
symbol “w”
Výbr podporované funkce – text, který definuje, o jakou z
podporovaných funkcí se
jedná. Jednotlivé píkazy jsou uvedeny v tabulkách 3.2 a 3.3.
Nová hodnota - Nkteré píkazy pro zápis vyadují zadání nové hodnoty.
Nová hodnota
je vyadována v jednom ze dvou tvar (tvar závisí na píkazu) :
-17-
Zakonovací znak – Reprezentuje konec píkazu.
Tabulka 2.2 Podporované píkazy pro zápis [2]
Píkaz PC pípravek pípravek PC Poznámka
Navázání komunikace s
Nastav ádanou polohu kuliky
Nastavení módu regulace wMODxxx_ ádná odpov xxx me
nabývat tchto
regulace
regulace
pípravek
hodnoty.
Procení hodnoty jsou po spuštní regulace odesílány z pípravku do PC
ve formátu CSV
(textové hodnoty oddlené stedníkem) v následujícím tvaru:
PeriodaVzorkování;ádanáPolohaKuliky;SkutenáPolohaKuliky;adanýÚhelRamene;Skut
Píkaz PC pípravek pípravek PC Poznámka
Vyti Kp reg. polohy kuliky rKP_ xxx.yyy_
Vyti Ti reg. polohy kuliky rTI_ xxx.yyy_
Vyti Td reg. polohy kuliky rTD_ xxx.yyy_
Vyti N reg. polohy kuliky rN_ xxx_
Vyti ádanou polohu kuliky
Vytení módu regulace rMOD_ xxx_ xxx me
nabývat tchto
-19-
Pvodní firmware, který byl vytvoen pro tento laboratorní pípravek,
nebyl vytvoen za
pouití vývojového prostedí Arduino. Jeliko bylo zejmé, e program
bude rozsáhlejší, bylo
k vytvoení programu pouito Atmel Studio 6.1 s vyuitím
programovacího jazyka C++. Atmel
studio umouje lepší správu projektu. Celý projekt je poté
pehlednjší a práce tak uivatelsky
pívtivjší.
Vyuití bné verze Atmel studia nedovoluje vytváet projekty, ve
kterých lze psát
programy pro platformu Arduino. Aby bylo moné tyto projekty vytváet
je nutné do Atmel
studia nainstalovat šablonu Arduino. Po nainstalování tato šablona
umouje jednoduché
zaloení GCC C++ projektu s vyuitím hlavních knihoven Arduina. Poté
je ji v tomto projektu
moné psát programy pro Arudino v Atmel studiu. [2]
Atlmel studio 6.1, Arduino IDE ve verzi 1.5.6-r2 a Arduino šablonu,
která je urena pouze pro
tuto verzi Arduino IDE a vyuitou desku Mega2560 mi byly poskytnuty
vedoucím práce.
Obrázek 4 Zaloení projektu s vyuitím hlavních knihoven
Arduino
-20-
Zaloením nového projektu dochází v jeho sloce k vytvoení zdrojového
souboru
MainFile.cpp. V tomto souboru jsou ihned pedpipraveny dv prázdné
funkce, setup() a loop(),
pro zapsání kódu.
K programování desek Arduino se vyuívá aplikace s názvem
avrdude.exe, která je
souástí Arduino IDE. Pro nahrání programu na desku vyuívá
avrdude.exe USB (virtual COM
port). Aby nebylo nahrávání programu sloité a zdlouhavé, pidáme
aplikaci avrdude.exe jako
externí nástroj do Atmel studia.
Obrázek 5 Atmel studio 6.1 struktura nov zaloeného projektu s
vyuitím šablony Arduino
Obrázek 6 Nastavení avrdude.exe jako External tool
-21-
V okn External Tools musíme vyplnit následující ásti a pidáme
pomocí tlaítka Add.
Title
Command
Zde se musí vybrat celá cesta k aplikaci avrdude.exe, nachází se ve
sloce Arduino IDE
(…\Arduino\hardware\tools\avr\bin\avrdude.exe)
Arguments
Pidání parametr, se kterými se bude spouštt avrdude.exe:
-C D:\Arduino\hardware\tools\avr\etc\avrdude.conf -v -v -p
atmega2560 -c wiring -
P\\.\COM3 -b115200 -D
-Uflash:w:"$(ProjectDir)\Debug\$(TargetName).hex":i
V této poloce dochází k nastavení COM portu, ke kterému deska bude
deska
pihlášena. Pokud bude deska pihlášena na jiném portu, je
nejjednodušší ešení pepsat íslo
COM portu v Arguments.
Další velice dleitý parametr je -c wiring. Kdy slovo wiring
zajistí, e aplikace
avrdude.exe automaticky resetuje desku Arduino ped programováním,
ím dojde k aktivaci
bootloaderu. V pípad nezapsání této ásti by nedošlo ke zresetování
desky automaticky a byly
by notné desku resetovat manuáln ped spuštním avrdude.exe.
[2]
Do desky se nahrává HEX soubor. Ped spuštním programování nejdíve
napsaný
program peloíme a poté vybereme nov vytvoený nástroj z nabídky, ím
spustíme
programování.
-22-
VLASTNÍ ÚPRAVA FIRMWARU PRO PÍPRAVEK
Vedoucím práce mi byl poskytnut vzorový firmware pro ovládání
kuliky na rameni, který
ale nebyl uren pro tento konkrétní laboratorní pípravek. Dostal
jsem svolení, e tuto aplikaci
mohu vyuít jako základní kostru pro budoucí program.
Tento program musel být upraven, aby byl pln pouitelný a funkní na
laboratorním
pípravku, kterým se tato práce zabývá. Nkteré ásti programu,
napíklad pevodní tabulky,
byly vyuity z pvodního programu, který byl souástí diplomové práce
s názvem: Návrh a
realizace modelu „Kulika na rameni“ od autora Z. Bureše.
V programu bude vyuíváno nkolik pidaných knihoven, které plní
uritou funkci
dleitou pro správný chod programu.
4.1 Vyuité piny ídící desky Arduino
Vyuitá ídící deska Arduino je vybavena mikrokontrolérem ATmega2560,
který má 100
pin. Deska Arduino MEGA2560 umouje pipojení velkého mnoství
periférií. K pipojení
me být vyuito 54 digitálních vstupn-výstupních pin nebo 16
vstupních analogových pin.
Ped úpravou firmwaru bylo nutné analyzovat, na které piny desky
Arduino jsou pipojeny
jednotlivé souásti zaízení. Toto zaízení vyuívá pouze malé mnoství
dostupných pin.
Vyuité piny jsou sepsány v následující tabulce.
Tabulka 4.1 Vyuité piny na desce Arduino
íslo / Název pinu Vyuití
Vyuito k napájení:
Pipojeno:
Pipojen koncový spína
-23-
4.2.1 AccelStepper
Jedná se o voln dostupnou knihovnu, která slouí k ovládání
krokových motor. Autorem
této knihovny je Mike McCauley. Jedná se o knihovnu, která vychází
z knihovny Arduino
Stepper, která byla vhodná pro vyuití v jednodušších aplikacích s
krokovým motorem.
Knihovna AccelStepper byla rozšíena o nové uitené funkce a pináší
další zlepšení oproti
pvodní knihovn.
Jako napíklad:
ízení motor pomocí driveru i bez
Podpora malých rychlostí
Tato knihovna mi byla poskytnuta vedoucím práce jakou souást
vzorového píkladu.
Knihovna obsahující funkce, které jsou nezbytné pro získání skutené
hodnoty polohy kuliky
pomocí optického snímae SHARP GP2D12. Knihovna té obsahuje
defaultní pevodní
charakteristiku snímae, která je vyuita, pokud není definována
externí pevodní
charakteristika. Souástí jsou té další knihovny, které slouí
napíklad pro filtrování hodnot.
DIR –
PUL–
EN–
PWM PIN 5 Pipojené k driveru na svorku EN+ (neboli ENABLE)
Log.1 – s motorem je moné pohybovat
Log.0 – motor je odpojen od napájení
V aplikaci není vyuito
PWM PIN 6 Pipojené k driveru na svorku PUL+ (PULSE)
Pivedením pulsu s hodnotou log.1 se motor pootoí o jeden
krok
PWM PIN 7 Pipojené k driveru na svorku DIR+ (DIRECTION)
Nastavení smru otáení krokového motoru
Log.1 – po smru hodinových ruiek
Log.0 – proti smru hodinových ruiek
-24-
Tato knihovna mi byla poskytnuta vedoucím práce jakou souást
vzorového píkladu.
Knihovna byla vytvoena pro získávání pozice kuliky v pípad, kdy je
pozice snímána jedním
snímaem GP2D12, který je umístn na konci ramene. V této knihovn se
nastavují parametry
snímae a to konkrétn íslo analogového pinu, ke kterému je sníma
pipojen a referenní
naptí A/D pevodníku. Dále je zde také definována externí pevodní
charakteristika optického
snímae, která byla zmena pímo pro vyuití na tomto konkrétním
pípravku.
4.2.4 PID
Tato knihovna mi byla poskytnuta vedoucím práce jakou souást
vzorového píkladu.
Jedná se o softwarový PID regulátor polohy kuliky, který vrací
hodnotu ádaného natoení
ramene, na základ skutené a poadované polohy kuliky. Pi vytváení
objektu tídy PID
regulátoru se do konstruktoru pedává hodnota, která definuje
periodu vykonávání regulace.
Dále je nutné knihovn pedávat další parametry a to rozsah akní
veliiny a jednotlivé
konstanty Kp, Ti a Td.
4.2.5 BeamControlStepper
Tato knihovna mi byla poskytnuta vedoucím práce jakou souást
vzorového píkladu.
V této knihovn jsem provedl výrazné zmny, aby mohla být vyuita po
laboratorní pípravek,
kterým se tato práce zabývá. Zmny vychází pedevším ze skutenosti, e
je vyuit jiný krokový
motor, ne pro který byla pvodní knihovna urena. Knihovna obsahuje
veškeré funkce, které
souvisí s ovládáním pohybu ramene a nkteré funkce, které jsou na
pohybu závislé.
V této knihovn jsou inicializovány dv pevodní tabulky. První slouí
pro zjištní potu
krok pro krokový motor v závislosti ádaném úhlu natoení ramene a
druhá pro zjištní
skuteného úhlu natoení v závislosti na krocích motoru. Dvodem
zavedení pepotových
tabulek je nelineární závislost mezi potem krok a úhlovým natoením
ramene.
Dále zde dochází k nastavení následujících poáteních parametr
krokového motoru:
Rychlost, Maximální rychlost a Akcelerace.
Dleité funkce v knihovn:
bool TestBeamControl (void)
Tato funkce vyuívá získanou informaci z koncového spínae, který je
pipojen k pinu
íslo 8. Pokud není rameno na koncovém spínai, tak motor dostává
píkaz k pohybu o jeden
krok, smrem ke koncovému spínai, vzhledem k jeho aktuální pozici.
Pokud dojde k sepnutí
koncového spínae, nastaví se aktuální pozice krokového motoru na
-550 krok, co
-25-
odpovídá úhlu natoení ramene -18°. Poté motor dostává píkaz k
pohybu na opanou stranu.
Jakmile je pozice krokového motoru 0 krok, co znamená, e je rameno
ve vodorovné
poloze, motor zastaví. Tím získáme aktuální a pesnou informaci o
natoení ramene.
Nakonec funkce vrací promnnou typu bool, která reprezentuje, zdali
došlo ke
správnému vykonání celé funkce.
int AngleToSteps(float angle)
Funkce, která slouí k pevodu úhlu na poet krok pro krokový motor a
zalimitování
úhlu na platný rozsah. Vstupní promnnou funkce je hodnota úhlu.
Natoení ramene je
moné piblin v rozsahu od -18° do 18°. Z dvodu ochrany ped
mechanickým
poškozením, dochází k omezení rozsahu ádaného úhlu. Po omezení me
ádaný úhel
nabývat hodnot z intervalu od -15° do 15°. Na základ hodnoty
omezeného ádaného úhlu
získáme pomocí pevodní tabulky ádaný poet krok pro krokový motor,
který odpovídá
tomuto úhlu. Funkce vrací poet krok.
void SetBeamAngle(float angle)
Jednoduchá funkce, její vstupním parametrem je úhel. Je zadán píkaz
na pohyb
motoru na absolutní pozici, která odpovídá potu krok získaných
zavoláním funkce
AngleToSteps. Zavoláním funkce AngleToSteps získáme poet krok pro
krokový motor,
aby bylo dosaeno poadovaného úhlu.
float StepsToAngle(int steps_act)
Jedná se o funkci, která se vyuívá pro pevod potu krok krokového
motoru na úhel.
Vstupním parametrem jsou kroky krokového motoru. Primárn tato
funkce slouí ke zjištní
skuteného úhlu natoení ramene. Funkce vrací hodnotu aktuálního
úhlu.
float actual_angle (void)
Jednoduchá funkce, bez vstupního parametru. Pouze voláme funkci
StepsToAngle a
pedáváme jí pozici motoru v krocích. Funkce vrací hodnotu skuteného
úhlu natoení
ramene.
Tato knihovna mi byla poskytnuta vedoucím práce jakou souást
vzorového píkladu.
Jedná se o knihovnu, její úkol spoívá ve zpracování pijatých dat a
zavolání obsluné funkce
-26-
v závislosti na pijatém píkazu. Píkaz odeslaný z PC se ukládá to
pijímacího bufferu. Jakmile
jsou v pijímacím bufferu njaká data, dochází k jejich vyítání.
Pokud dojde k peteení
pijímacího bufferu, tak je etzec ignorován. Data jsou vyítána a
ukládána do jednoho etzce,
dokud není naten zakonovací znak, co znaí, e byl píkaz pijat celý a
me být dále
zpracováván. Následuje parsování pijatých dat, neboli rozdlení
pijatého etzce na jednotlivé
ásti píkazu. Nejdíve se oddlí první znak z etzce, který uruje,
jestli se jedná o píkaz tení
nebo zápisu a uloí se do etzce rw . Následuje parsování zbytku
etzce, kdy se zpracovává
ást, která me být sloena z malých nebo velkých písmen a ukládá se
do nového etzce
s názvem command. Nyní mohou nastat dv situace, narazí se na
poslední znak a parsování je
dokoneno nebo se narazí na íselnou ást, která následn zpracovává a
ukládá do nového
etzce pojmenovaného data. Zpracováním posledního znaku je parsování
dokoneno. Dále je
nutné identifikovat pijatý píkaz. To je provedeno tak, e
porovnáváme etzec command
s píkazy z definovaného seznamu píkaz. Pokud nastane úplná shoda,
získáme index píkazu,
na základ kterého je volána obsluná funkce pro daný píkaz. etzce rw
a pípadn data jsou
vstupní parametry obsluné funkce.
V této knihovn je také definována funkce pro odesílání procesních
dat. Voláním této
funkce dochází k odeslání aktuálních hodnot definovaných parametr
ve form textových
hodnot oddlených stedníkem.
Tato knihovna mi byla poskytnuta vedoucím práce jakou souást
vzorového píkladu. Tato
knihovna obsahuje veškeré obsluné funkce pro komunikaní píkazy.
Kadá obsluná funkce
se skládá ze dvou ástí: tení a zápis. Vyuití jednotlivých ástí
závisí na dané funkci. Obsluné
funkce pro nkteré píkazy vykonávají uritou innost jak pi tení tak i
pi zápisu. Naopak
nkteré reagují pouze na tení nebo zápis.
Pokud pijde nkterý z píkaz pro zápis nové hodnoty jedné z konstant
regulátoru, dojde
k jejímu nastavení a poté se nová pijatá hodnota uloí do pamti
EEPROM.
4.2.8 EEPROM_SETINGS.h
Soubor, ve kterém pouze jsou definovány adresy, pro uloení hodnot
konstant regulátoru
polohy a píznaku platnosti dat do pamti EEPROM. Píznak platnosti
dat je velký 1 bajt.
Jednotlivé adresy od sebe musí být dostaten vzdáleny, protoe
hodnoty Kp, Ti a Td mohou
být desetinná ísla a jsou tak ukládána. Pro uloení datového typu
float do pamti EEPROM
jsou vyuity tyi po sob jdoucí adresy po 8 bitech. Konstanta N je
vdy celé íslo s maximální
velikostí 16bit.
4.2.9 BallOnBeam
Jedná se o hlavní zdrojový soubor celého programu. Pi zaloení
nového projektu vdy
dojde k jeho vytvoení s názvem MainFile.cpp. V nm jsou vdy
pedpipraveny dv prázdné
funkce setup() a loop(). Tyto dv funkce musí být pítomny vdy, i kdy
by byly prázdné a
nevyuívaly se. Vtšinou jsou však funkce vyuity a je v nich zapsán
kód, který se vykonává.
Kdy funkce setup() se vykoná pouze jednou. Funkce loop() je
nekonená smyka aplikace,
která se vykonává neustále dokola.
ásti kódu BallOnBeam.cpp:
zadefinování jednotlivých promnných.
Funkce void setup()
Jeliko se tato funkce vykoná pouze jednou, je výhodné sem zapsat tu
ást kódu, kterou není
nutné opakovan vykonávat. V tomto pípad dochází v této funkci k
inicializaci sériové linky
a komunikace, nastavení filtrace mené polohy kuliky, nastavení
asova a nakonec volání
funkce TestBeamControl(), kterou nastavíme rameno do výchozí
polohy.
Po inicializace sériové linky dochází k vyítání konstant regulátoru
a píznaku platnosti dat
z pamti EEPROM. Pokud píznak platnosti dat bude nabývat jiné
hodnoty ne, která je dána
promnnou PlatnyPriznak, dochází k nastavení defaultních hodnot
regulátoru a uloení tchto
hodnot do pamti. V opaném pípad se nastaví hodnoty konstant
regulátoru, které byly
vyteny z pamti EEPROM.
Funkce void loop()
Nekonená smyka aplikace, která se vykonává neustále dokola, byla
vyuita pouze pro
obsluhu komunikace mezi laboratorním pípravkem a PC.
Funkce void
SetNewGainsForBallPositionController(PIDctrl::tPIDGains*
pGains)
Funkce, která se vykonává pouze v pípad, e pijatý píkaz z PC se
týká zmny hodnoty
jednoho z parametr PID regulátoru. Tato funkce zajistí zmnu
parametru za bhu programu.
-28-
ISR(TIMER2_COMPA_vect)
Jedná se o obsluhu perušení, které bylo vyvoláno peteením asovae 2.
Perioda perušení
je 502 s. V tomto perušení dochází k obsluze krokového motoru,
který pejde na ádanou
cílovou pozici.
ISR(TIMER3_COMPA_vect)
Obsluha perušení, vyvolaná peteením asovae 3. Perioda perušení je 4
ms. V obsluze
perušení se vykonává nkolik inností. Zjišuje aktuální úhel natoení
ramene, dochází k
omezení ádané polohy kuliky, zjišuje se skutená poloha kuliky,
probíhá regulace polohy
kuliky a nakonec ješt dochází k odeslání procesních dat.
4.3 Funkce pípravku jako celku
Nejdleitjší je pípravek pipojit pívodním kabelem k napájení 230V
50Hz a zárove
propojit ídící desku Arduino s PC pomocí USB kabelu typu A-B. Po
vykonání tchto úkon
rameno postupn zane sjídt a na koncový spína. Po sepnutí koncového
spínae rameno
pejde do vodorovné polohy. Série tchto dvou akcí se provádí pouze
po spuštní, protoe
nevíme jaké je aktuální natoení ramene a získáme tím informaci o
poátení pozici.
Následovn mohou být vykonávány další funkce pípravku.
V tomto okamiku me nastat více situací a to podle poáteních
parametr programu.
Regulace me být zastavena. V tomto stavu nedochází k odesílání
procesních dat do
PC a rameno je ve vodorovné tedy výchozí pozici. Komunikace je
funkní. Lze tedy pomocí
odesílaných píkaz vyítat aktuální hodnoty a zapisovat nové hodnoty
podporovaných
parametr. Dále je moné pomocí píkazu RUN regulaci zapnout.
Druhá monost nastává, pokud je regulace povolena. V tomto stavu
pípravek do PC
odesílá procesní data. Následná funkce pípravku pak závisí na
zvoleném módu. Pokud je
zvolen MOD1, co je první monost, tak je aktivní zptnovazební
regulace polohy kuliky. Pi
ní dochází k výpotu ádaného úhlu natoení ramene, kde vstupními
hodnotami jsou ádaná
a skutená poloha kuliky. Krokovým motorem je poté nastavován ádaný
úhel natoení
ramene. Hodnota ádaného úhlu natoení se mní tak, aby skutená poloha
kuliky byla rovna
poloze ádané. V tomto stavu je komunikace pln funkní a lze zadávat
novou ádanou hodnotu
polohy kuliky pomocí píkazu wPZADxxx_. Druhou moností je MOD0, pi
kterém je
-29-
zptnovazební regulace vypnuta a pomocí píkaz z PC lze nastavovat
úhel natoení ramene.
Regulaci je moné zastavit píkazem wSTOP_.
4.4 Vyuité zdroje mikrokontroléru ATmega2560
Program, který je nahraný do ídící desky Arduino, vyuívá nkolik
zdroj
mikrokontroléru ATmega2560. Ty jsou vyuity pro rzné funkce, které
jsou nezbytné pro
správnou funkci pípravku. V následující tabulce jsou vypsány ty
nejdleitjší.
Tabulka 4.2 Vyuité zdroje ATmega2560
Zdroj mikrokontroléru
ATmega2560 Funkce
Vyuitý k asování vlastním Arduinem
Umonuje vyuití funkcí:
piblin za 50 dní
micros() - funkce vrací asovou
hodnotu od spuštní programu
piblin za 70 minut
krokového motoru
regulaní smyky
Vyuit pro pevod z analogových
hodnot na digitální
Perušení od asovae2 Pi peteení asovae2 – asuje do
80H neboli do 128 dekadicky
Perioda peteení 502 s
Obsluha krokového motoru je provádna pi perušení, které nastává
vlivem peteení
asovae íslo 2. Motor je ovládán pomocí driveru, který podporuje
mikrokrokování. V plném
kroku má motor rozlišení 200 krok na 360°.
Tomu odpovídá délka plného kroku:
é é = 360°
200 = 1,8° (1)
Tento krok by byl však velice hrubý a nevhodný pro tuto aplikaci.
Proto bylo vyuito
mikrokrokování. Kdy je délka kroku rozdlena na menší ásti (1/2,
1/4, 1/8, 1/16, 1/64, 1/128,
1/256). Bylo zvoleno mikrokrokování 1/4.
Regulace polohy kuliky se vykonává kadé 4 ms v perušení asovae íslo
3.
Zárove dochází k odesílání procesních dat, a to pi kadém druhém
perušení. Take
k odesílání dat dochází kadých 8 ms.
V neposlední ad závisí dynamika regulace na parametrech nastavených
v programu.
Jedná se o parametry rychlost, maximální rychlost a akcelerace. Kdy
tmito parametry jsme
schopni ovlivnit rychlost motoru v krocích za sekundu.
V souasném stavu jsou nastaveny parametry následovn:
Akcelerace 15 000
4.5.1 Zmna hodnot, které ovlivují dynamiku regulace
Jednotlivé hodnoty, které mají vliv na dynamiku regulace, je moné
zmnit pepsáním
hodnot v programu.
Rychlost krokování lze nastavit zmnou periody peteení asovae 2.
Nastavení tchto
registr se provádí ve funkci setup() v hlavním zdrojovém souboru s
názvem
BallOnBeam.cpp.
Perioda vykonávání 4 ms
-31-
TCCR2A = 0x02;
TCCR2B = 0x04;
TIMSK2 = 0x02;
Perioda vykonávání regulaní smyky je dána konstantou
CONTROL_PERIOD. Tuto
hodnotu lze zmnit v souboru BallOnBeam.h. Aktuální hodnota je 4
ms.
#define CONTROL_PERIOD 4 //perioda vykonavani regulatoru [ms], max.
268 ms
Pípadn je moné zmnit i periodu odesílání procesních dat. Zmnu lze
provést
v obslouení perušení od asovae 3 - ISR(TIMER3_COMPA_vect). Kde je
nutné zmnit
dliku pro odesílání hodnot, ve kterém se volá funkce pro odesílání
procesních dat.
Perioda odesílání procesních dat po USB je odvozena od periody
vykonávání regulátoru
(CONTROL_PERIOD) podlením dlikou.
if (!(loopCounter % 10))
}
Moné je zmnit i parametry ovládání motoru a zvýšit tak rychlost
krokování motoru. Tyto
parametry jsou zapsány v souboru BeamControlStepper.h
const float akcelerace = 15000;
const float MAX_SPEED = 3000;
4.6 Testování rychlosti krokového motoru
Po vytvoení firmwaru došlo k jeho otestování na pípravku. Kdy
probíhaly rzné pokusy
s nastavováním parametr akcelerace a maximální rychlosti. Vznikl
tak poadavek na urení
vzájemného vztahu mezi nastavenou a skutenou hodnotou akcelerace a
maximální rychlosti.
-32-
Ped praktickým mením bylo nejdíve nutné provést rozbor výpotu
rychlosti pohybu
krokového motoru, který se provádí v knihovn AccelStepper.
4.6.1 Krokový motor rychlost pohybu – teoretický rozbor
Pi prvním spuštní dochází k urení polohy ramene definovanou
sekvencí úkon.
Nejdíve rameno sjídí na koncový spína s konstantní rychlostí. Poté
je penastaveno do
vodorovné polohy nerovnomrnou rychlostí, tedy s vyuitím akcelerace
a decelerace.
Pokud je zvoleno pouze ovládání úhlu natoení tak se rameno pohybuje
stále konstantní
rychlostí. Protoe funkce pro výpoet rychlosti je vykonána pouze
jednou pi zadání ádosti na
zmnu úhlu natoení ramene.
Pokud je zapnuta zptnovazební regulace, tak je pi kadém perušení od
asovae 3
vykonávána funkce pro zmnu cílové polohy krokového motoru. Pi
vykonávání této funkce je
volána i funkce pro pepoet rychlosti pro následující krok. Motor
tedy vyuívá akceleraci
respektive deceleraci.
Pi inicializaci krokového motoru voláme funkce pro nastavení
maximální rychlosti a
akcelerace. V tchto dvou funkcích jsou poítány hodnoty promnných,
které jsou dleité pro
pepoet rychlosti.
K nastavení maximální rychlosti se vyuívá funkce setMaxSpeed(float
speed). Kdy
hodnota maximální rychlosti slouí k výpotu minimální délky kroku v
mikrosekundách.
_ = 1000000
Následuje pepoet poítadla krok pro výpoet rychlosti podle
následujícího vztahu,
avšak pouze v pípad, e hodnota tohoto poítadla je vtší ne nula.
Poté je volána funkce pro
pepoet rychlosti.
_ = 2
-33-
Jeliko je funkce volána pi inicializaci, tak je hodnota poítadla
pro výpoet rychlosti nula
a take nedochází k jeho pepotu ani volání funkce pro pepoet
rychlosti.
Nastavení akcelerace
K nastavení se vyuívá funkce setAcceleration(float acceleration).
Funkce slouí pro
nastavení hodnoty akcelerace, respektive decelerace, kterou bude
motor vyuívat. V této funkci
dochází k výpotu s odmocninou a trvá tak nezanedbatelnou dobu.
Nedoporuuje se tedy asté
volání funkce.
Zárove znovu dochází k pepotu hodnoty poítadla krok pro výpoet
rychlosti.
_ = _−1 ( −1
) (4)
Jeliko je funkce pro nastavení hodnoty akcelerace volána pouze
jednou a to pi
inicializaci, je pvodní hodnota akcelerace i poítadla krok pro
výpoet rychlosti nulová. Proto
je i výsledná hodnota poítadla krok pro výpoet rychlosti rovna
nule.
Dále následuje výpoet poátení velikosti kroku v
mikrosekundách.
_0 = 0,676 √ 2
Na závr je volána funkce na pepoet rychlosti.
Výpoet nové rychlosti
K výpotu rychlosti pro následující krok slouí funkce
computeNewSpeed(). Tato funkce
musí být vyuita, pokud chceme, aby se motor vyuíval akceleraci
respektive deceleraci.
Nejdíve se zjistí hodnota distanceToGo, neboli vzdálenost mezi
souasnou cílovou
polohou v krocích. Poté následuje výpoet hodnoty stepsToStop dle
následujícího vztahu.
= 2
Na základ aktuálního stavu poítadla krok pro výpoet rychlosti,
hodnot distanceToGo,
stepsToStop a smru otáení se urí nová hodnota poítadla krok pro
výpoet rychlosti _n.
Kdy nová hodnota bude nabývat jedné z hodnot -_n nebo –
stepsToStop.
Ped výpotem rychlosti je nutné provést výpoet délky minulého
kroku
v mikrosekundách.
4_+1 ) [s] (7)
kde
_cn délka minulého kroku [s]
Následn dochází k porovnání, jestli není tato hodnota menší jak
minimální délka kroku
_cmin. Pokud by byla menší, tak by došlo ke zmn:
_c = _cmin (8)
V pípad, e by motor stál, tedy e hodnota poítadla pro výpoet
rychlosti by byla nulová,
a byl pijat poadavek na pohyb tak platí:
_c = _c0
_ = 1000000
_ [/] (10)
Zárove se výší hodnota poítadla krok pro výpoet rychlosti o
1.
Pokud je ádaný smr otáení po smru hodinových ruiek tak platí:
_ = − _ (11)
Z pedchozích vztah tedy vyplývá, e hodnotou akcelerace, nastavujeme
rychlost pro
první krok motoru po zastavení.
4.6.2 Mení - Testování rychlosti
Jedním z dleitých úkol pro správné pochopení funkce laboratorního
pípravku bylo
nutné zjistit jaký je vzájemný vztah mezi zadávanými hodnotami
akcelerace a maximální
rychlostí ve firmwaru a skutenými hodnotami, se kterými se rameno
pípravku pohybuje.
Tento vzájemný vztah byl zjištn provedením praktického mení. Mení
bylo
provedeno pomocí osciloskopu, kdy byly sledovány prbhy PUL+ a DIR+
na svorkách
Driveru. Tedy pulsní elektrický signál (PUL+), kde úrove logické
jedniky zpsobí pohyb
motoru o jeden krok a signál smru otáení krokového motoru.
Pohyb konstantní rychlostí
Jak je ji známo po spuštní pípravku nejdíve rameno zaízení sjídí
konstantní
rychlostí na koncový spína. Kdy je z ídící jednoty odesílán píkaz
driveru, aby odeslal motoru
puls, tedy povel k provedení jednoho kroku dokud ídící jednotka
neobdrí informaci, e
krokový motor sepnul koncový spína.
Teoretický výpoet
Výpoet bude proveden podle vztah, které jsou uvedeny v kapitole
Krokový motor
rychlost pohybu – teoretický rozbor.
Hodnoty zadané ve firmwaru
_0 = 0,676 √ 2
1000000 = 0,676 √
5000 1000000 = 13520s
Motor dostává píkaz k vykonání jednoho kroku a poté zastaví, dokud
není sepnut koncový
spína. Platí tedy vztah (9)
_c = _c0
_ = 1000000
Osa x - 2 ms/dílek
Osa y - 1 V/dílek (platí pro kanál 1 i 2)
Na Obrázku 8 je namený prbh, kdy se krokový motor otáel konstantní
rychlostí
krokování na koncový spína. Na kanálu 1 je pulsní prbh, na svorce
PUL+, s frekvencí
73,96Hz co odpovídá vypoítané rychlosti krokování.
4.7 Pohyb se zrychlením
Ne rameno sepne koncový spína, frekvence impuls (CH1) je
konstantní. Po sepnutí
koncového spínae se rameno penastaví do vodorovné polohy zrychleným
pohybem. A tedy
Obrázek 9 Prbh zrychlení, PUL+ (CH1), DIR+ (CH2)
Obrázek 8 Prbh impuls na svorce PUL+ (CH1) a prbh na svorce DIR+
(CH2)
-37-
se interval mezi impulsy zkracuje. Po sepnutí koncového spínae se
tedy zmní smr otáení
motoru, co dokazuje i zmna úrovn naptí na svorce DIR+ (CH2).
Modré záloky, které jsou v prbhu (Obrázek 9), vymezují interval, ve
kterém dochází ke
zvyšování rychlosti. Za tímto intervalem je frekvence impuls
konstantní a to 498Hz. Z dvodu
omezení nastavenou hodnotou maximální rychlosti, která byla
500ot/s.
Výpoet zrychlení
83,94 10−3 = 5051 /−2
Toto praktické mení bylo provedeno s rzným nastavením hodnot
akcelerace a
maximální rychlosti. Pokud se motor pohyboval konstantní rychlostí,
odpovídaly teoreticky
vypotené hodnoty nameným. V pípad zrychleného pohybu pi vyšších
hodnotách
akcelerace bylo sloitjší pesné urení koncové frekvence a doby
akcelerace. Vypoítané
hodnoty skutené akcelerace se tedy od zadaných lišily v ádu stovek
krok/s-2 .
-38-
Zpoátku byla k ovládání pípravku vyuívána jednoduchá aplikace
Terminal. Pomocí této
aplikace bylo moné pípravek pln ovládat, ale jednalo se o
komplikované ešení, kdy uivatel
musel jednotlivé píkazy napsat a odeslat pomocí njaké aplikace,
která slouí pro komunikaci.
Zárove musel uivatel znát nebo mít k dispozici jednotlivé píkazy
komunikaního protokolu.
ešením tedy bylo vytvoit ovládací software, co je druhým hlavním
bodem této práce,
po úprav firmwaru laboratorního pípravku. Kdy hlavní myšlenkou byla
rychlá a pohodlná
obsluha zaízení. Bez nutnosti znalosti jednotlivých komunikaních
píkaz.
Nová ovládací aplikace pro laboratorní pípravek, kterým se tato
práce zabývá, bude
vytvoena pomocí vývojového prostedí LabVIEW.
5.1 Vývojové prostedí LabVIEW
Název vývojového prostedí LabVIEW vznikl jako zkratka pro
Laboratory Virtual
Instrument Engineering WorkBench. Jedná se o profesionální produkt
americké firmy National
Instrument. K programování, se v tomto vývojovém prostedí vyuívá
grafického jazyka G.
Zdrojový kód, tedy není psaný v textové podob, ale je vytváen
pomocí grafických blok, které
lze mezi sebou vzájemn datov propojit. Vzniká tak blokový
diagram.
Tento nástroj má široké uplatnní v rzných oborech a lze vyuívat k
ešení komplexních
problém. Uplatnní nachází napíklad v oblasti zpracování signál,
automatizace a ízení.
Vzniknout tak me rozsáhlá aplikace tvoená systémy a podsystémy,
které mezi sebou
komunikují. Zárove lze zajistit spojení a komunikaci s rzným
hardwarem.
Soubory, které obsahují njaký kód mají koncovku *.VI. Jedná se o
zkratku z anglického
názvu pro tento program – Virtual Instrument neboli virtuální
pístroj. Aplikace lze rozdlit na
dv základní ásti a to elní panel (Front Panel) a Blokový diagram
(Block Diagram).
5.1.1 elní panel (Front panel)
elní panel slouí jako interface mezi uivatelem a vlastním
programem. Na elním panelu
mohou být umístny rzné prvky. Tyto prvky lze rozdlit z hlediska
funkce na vstupní neboli
ovládací (tlaítka, rzné prvky pro nastavení hodnoty) a výstupní
neboli zobrazovací (tabulky,
grafy). Nabídka dostupných prvk se zobrazí na palet Controls po
kliknutí pravým tlaítkem
myši v oblasti elního panelu. Veškeré prvky, které jsou umístny na
elní panel, mají svj
ekvivalent v blokovém diagramu, se kterým svou pevn spojeny. Tedy
smazáním prvku v jedné
ásti dojde ke smazání jeho ekvivalentu ve druhé.
-39-
Jednotlivé prvky mohou být libovoln uspoádány v prostoru elního
panelu. Výsledná
podoba tak ist závisí na programátorovi.
Ukázka elního panelu a palety Controls je uvedena na Obrázku
10.
5.1.2 Blokový diagram (Block diagram)
Druhou ástí aplikace je blokový diagram, ve které programátor
vytváí vlastní algoritmus
programu. Vlastní tvorba programu spoívá ve spojování jednotlivých
funkních blok.
Dostupné funkní bloky lze vybrat z palety Function, která se
zobrazí po kliknutí pravým
tlaítkem myši kdekoli v prostoru blokového diagramu. Spoji mezi
bloky se penáší informace.
Barva spoje závisí na datovém typu informace.
Tabulka 5.1 Základní typy datových spoj a jejich barevné
oznaení
Datový typ Barva spoje
Znakový etzec rová
-40-
Blokový diagram je pímo spustitelný kód, který je pekládán ji bhem
tvorby, co
umouje okamitou indikaci nkterých chyb. Napíklad spojení
nesluitelných datových typ.
Na Obrázku 11 je ukázka blokového diagramu a palety dostupných
funkních blok.
Bloky Tlaítko a Indikátor vznikly pi vytvoení prvk na elním panelu
(Obrázek 10).
V blokovém diagramu programu se asto vyuívají podprogramy neboli
SubVI.
Podprogramy se vytvoí sdruením napíklad prostorov rozlehlých nebo
asto se opakujících
ástí programu. Získáme tak blok s danými vstupy a výstupy, který
lze vyuít i vícekrát, co
vede ke zpehlednní celého programu. Kadé SubVI má poté vlastní elní
panel a blokový
diagram. Pro vytvoení SubVI se oznaí uritá ást programu a na záloce
Edit staí vybrat
Create SubVI.
Ikonu SubVI lze následn upravovat a zobrazit napíklad název, co me
pomoci
s následnou identifikací v rozlehlejších programech.
Obrázek 11 Blokový diagram a paleta dostupných funkních blok
Obrázek 12 Automatická podoba bloku SubVI (vlevo) a upravená
(vpravo)
-41-
5.2 Vyuité struktury a VI
Aplikace pro ovládání pípravku musí zvládat nkolik hlavních funkcí,
mezi které patí
vizualizace regulaního pochodu, logování pijatých dat do souboru,
nastavení konstant
regulátoru a zptnovazební ízení polohy kuliky nebo úhlu natoení
ramene. Jedná se tedy o
sloitjší aplikaci, která vyaduje vyuití sloitjší programové
architektury. Zárove bude
nutné uchovávat vtší mnoství dat, ke kterým by ml být snadný
pístup.
5.2.1 Funkní globální promnná – FGV
Jedna se o VI, které se vyuívá k ukládání dat. Vyuívá se
neinicializovaného shift registru.
Vyuití FGV pináší adu výhod. Mezi hlavní patí monost pístupu k
uloeným datm
kdekoliv v aplikaci bez nutnosti pivedení datového vodie. Pokud
dojde k volání tohoto VI,
vykoná se pouze jednou a poté se ukoní.
V pípad je-li nutné uchovávat velké mnoství dat, je výhodné vyuít
cluster.
Prvky FGV:
Smyka While
Vstupní a výstupní cluster
Enum Control slouí k urení stavu. V toto pípad se bude jednat o dva
stavy Set – nastav
data a Get – získej data. Zapojení Blokového diagramu FGV pro
jednotlivé stavy je na
Obrazcích 15 a 16.
-42-
Vyuití funkní globální promnné v aplikaci pak vypadá
následovn.
Toto VI má dva vstupy a jeden výstup (Obrázek 15). Prvním vstupem
je Enum, který
musí být pipojen vdy, protoe s jeho pomocí vybíráme, jestli chceme
data uloit nebo získat
A druhým je Cluster (Vstupni DATA), který musí obsahovat všechny
prvky ve stejném poadí
jako Input Cluster v FGV (Obrázek 13 a 14). Pokud chceme uloená
data získat, vyuívá se
výstupní terminál, který je na pravé stran tohoto VI.
5.2.2 Architektura Queued State Machine – Producer Consumer -
QSM-PC
Jedná se o jednu ze základních architektur pro stední nebo velké,
pokroilé aplikace.
Producer/Consumer se vyuívá v pípadech, kdy je nutné vykonávat dva
procesy paraleln
v jednom ase, a které mezi sebou mají komunikovat. Kdy ke
komunikaci se vyuívají fronty.
QMS-PC se vyuívá, pokud je nutné pomocí události od uivatele (smyka
Producer) ovládat
sled událostí ve smyce Consumer.
Ukázka základní architektury QSM-PC je zobrazena na Obrázku
16.
Obrázek 15 Vyuití FGV – nastavení hodnot (vlevo), získání hodnot
(vpravo)
Obrázek 14 FGV – Získání uloených hodnot
-43-
Event struktura (Producer) pijímá události od uivatele
Producer pidává píkazy a data do fronty
State Machine (Consumer) zpracovává píkazy a data z fronty a v
závislosti na nich
vykonává uritou innost
5.3 Základní bloky pro práci s frontami
Pro komunikace se tedy vyuívá front. V blokovém diagramu je moné
vyuít nkolik
základních blok pro práci s frontami.
5.3.1 Obtain Queue
Obrázek 17 Obtain Queue
-44-
Vstupy
Max queue size Maximální velikost fronty, defaultn -1 tedy
neomenená velikost
Name Název fronty, kterou chceme získat nebo vytvoit
Element data type Povinné, Datový typ vkládaných prvk do
fronty
Create if not found (T) Vytvoit frontu pokud neexistuje – defaultn
True tedy vytvoit
Error in
Výstupy
Queue out Vrací referenci na získanou nebo nov vytvoenou
frontu
Create new? Pokud byla vytvoena nová fronta, vrací true jinak
false
Error out
Vstupy
queue Povinné, Reference na frontu, do které chceme pidat
element
element Povinné, Element, který chceme pidat na konec fronty
Timeout in ms Timeout, který se eká, pokud ve front není místo,
defaultn -1
tj. nenastane nikdy
Výstupy
Timed out TRUE - Pokud nevzniklo místo ve front ped vypršením
timeoutu
Obrázek 18 Enqueue Element
5.3.4 Enqueue Element At Opposite End
Pidání elementu na zaátek fronty.
Tabulka 5.8 Enqueue element at opposite end Vstupy
Vstupy
queue Povinné, Reference na frontu, do které chceme pidat
element
element Povinné, Element, který chceme pidat na zaátek fronty
Timeout in ms Timeout, který se eká, pokud ve front není místo,
defaultn -1
tj. nenastane nikdy
Výstupy
Timed out TRUE - Pokud nevzniklo místo ve front ped vypršením
timeoutu
queue Povinné, Reference na frontu, ze které chceme vyjmout
element
Timeout in ms Timeout, který se eká, na element pokud je fronta
zatím prázdná,
defaultn -1 tj. nenastane nikdy
Error in
Queue out Vrací nezmnnou referenci frontu
Timed out TRUE - Pokud byla fronta prázdná a nebyl tak vyjmut
element
ped vypršením timeoutu
-46-
5.4 Vyuitá šablona QSM-PC
Pro tuto aplikaci byla vyuita šablona QSM template, která mi byla
poskytnuta vedoucím
práce. Struktura projektu je na Obrázku 21. Základem jsou dv sloky
Master a Slave.
Ve sloce Master je hlavní zdrojový soubor aplikace s názvem QSM
MAIN.vi a nkolik
dalších soubor dleitých pro správnou funkci. Popis hlavních soubor
je v jedné
z následujících podkapitol. Blokový diagram QSM MAIN.vi je na
Obrázku 22. Data jsou
uloena v clusteru, kdy datový vodi musí procházet pes stavový
automat. Co bylo následn
pedláno a byla vyuita funkní globální promnná - FGV. Dvod zavedení
FGV byl ten, aby
mla smyka s event strukturou pístup k aktuálním datm ve smyce
Consumer. ím je
moné na jednoduché události, které vyadují sdílená data, reagovat
pímo v event struktue.
Není tak nutné peposílat tyto poadavky do Consumera, kde by byly
dále zpracovány.
Sloka Slave obsahuje soubory, dleité pro chod paralelního SubVI.
Popis jednotlivých
soubor je v jedné z následujících podkapitol. Hlavní soubor
paralelního SubVI je pojmenován
jako QSM subVI (Slave). Paralelní SubVI je stavový automat, blokový
diagram je na Obrázku
23.
Master i Slave mají svou vlastní frontu, která je vyuívána pro
komunikaci. Kdy názvy
tchto front jsou definovány pouze v QSM MAIN.vi a musí být do
paralelního SubVI pedány
spolu s názvem notifikátoru. Notifikátor s tímto názvem se vytváí
pi ukonení QSM subVI
(Slave).vi a kontroluje se pi ukonování celé aplikace.
íslicemi ve tvercích na Obrázku 22 jsou oznaeny základní ásti QSM –
PC.
1 Event struktura – Producer
2 State Machine – Consumer
-47-
Enqueue Message
Aby byla pi tvorb programu ušetena plocha byly vyuívány pro pidání
zpráv do front
tchto SubVI. Toto SubVI je vnitním zapojením stejné pro pidání
zpráv do Master i Slave
fronty. Rozdílné jsou vstupy, kdy kadý oekává svou frontu (Qref in)
a píkaz píslušného
stavového automatu (Cmd).
Jeliko se asto zprávy pidávané do front skládají z píkazu a dat je
slouení provedeno
uvnit SubVI, ím se šetí prostor.
Zárove je zde vstup Priority Message? (F), který je defaultn
nastaven na False ím se
zpráva pidá na konec fronty. Pokud by bylo True zmní se stav
struktury Case, kde místo bloku
Enqueue Elemet, který pidává zprávu na konec fronty, bude blok
Enqueue Element At
Opposite End a zpráva se pidá na zaátek fronty.
Tabulka 5.10 Enqueue Message Vstupy
Vstupy
Qref in Povinné - Reference na frontu, do které chceme pidat
zprávu
Cmd (Message Cmd) Povinné, Píkaz zprávy, který chceme pidat do
fronty
Message Data Data zprávy, která chceme pidat do fronty
Error in
-50-
Výstupy
Error out
Queue Mgr
SubVI, které zajišuje nkolik dleitých funkcí:
Zajišuju pechod do dalšího stavu Case struktury State Machine. Kdy
pidá do fronty
zprávu, která je tvoena píkazem a prázdnými daty. Pomocí prvku enum
lze vybrat
prioritu. Na výbr jsou ti stavy Back – pidání zprávy na konec
fronty, Front – pidání
zprávy na zaátek fronty nebo Replace – kdy dojde k uvolnní všech
zpráv z fronty a
vloí se daná zpráva
Zajišuje pidání zprávy do fronty, pokud je fronta prázdná.
Zajištuje pomocí SubVI ENQUEUE ERROR pechod do stavu ERROR pi chyb
na
lutém vodii.
Toto SubVI je vnitním zapojením stejné pro Master i Slave. Rozdílné
jsou vstupy, kdy
kadý oekává svou frontu (Qref in), jinou zprávu (Messages), která
je pidána do fronty a
zajistí tak pechod do dalšího stavu píslušného stavového automatu a
jinou zprávu, která se
pidá do fronty, pokud je fronta prázdná.
Obrázek 26 Queue Mgr
-51-
Vstupy
empty)
Povinné, Zpráva, která se vloí do fronty, pokud je fronta
prázdná
Q ref in Povinné, Reference na frontu, do které chceme pidat
zprávu
Messages Zpráva s píkazem následujícího stavu
Place (back) Priorita zprávy
Výstupy
Error out
ENQUEUE ERROR
SubVI, které slouí ke zpracování chyby na lutém vodii. Vnitní
zapojení je stejné pro
hlavní (Master Q) i SubVI frontu (Slave Q). Rozdílné jsou vstupy.
Kdy kadý oekává jinou
frontu (Queue in) a jinou zprávu pro pechod do stavu ERROR.
Pokud nastane chyba na chybovém vodii, tak pi zpracování v tomto
bloku se vytvoí
prioritní zpráva, která se pidá na zaátek fronty, s píkazem (Cmd)
ERROR a do Dat se uloí
kód chyby. Zárove dojde ke smazání chyby. Take na výstupu není
chyba. Je však zajištno,
e pi další obrátce nekonené smyky dojde k vytení této zprávy z
fronty a stavový automat
pechází do stavu, ve kterém je kód pro zpracování chyby.
Obrázek 28 ENQUEUE ERROR
-52-
Vstupy
Error in
Výstupy
Error out
WaitUntilSlaveCloses
Jednoduché SubVI, které eká na notifikátor, který vzniká pi uzavení
Slave SubVI.
Tabulka 5.16 WaitUntilSlaveCloses Vstupy
Slave notifier name Název notifikátoru
Timeout in ms (-1) as, který se eká na notifikátor, -1 nikdy
nevyprší
Error in
Error out
Master_States_Typedef.ctl, Slave_States_Typedef.ctl
Control prvek tvoený pouze prvkem Enum, který obsahuje všechny
stavy stavového
automatu hlavního souboru (Master) nebo paralelního SubVI
(Slave).
Obrázek 30 WaitUntilSlaveCloses
-53-
Master_Message_Typedef.ctl, Slave_Message_Typedef.ctl
Cluster sloený ze dvou prvk. Enum, který obsahuje všechny stavy
stavového automatu
hlavní smyky (Master) nebo paralelního SubVI(Slave). A druhý prvek
jsou Data typu Variant.
Zprávy, které se ukládají do front jsou tohoto typu.
5.4.2 Vloení zprávy do fronty
Novou zprávu do fronty je moné pidat více zpsoby, kdy závisí
pedevším na jejím
obsahu. Respektive jestli do zprávy pidáváme data nebo ne.
Na Obrázku 32 je zobrazen praktický píklad pidání zprávy do fronty.
Zpr