101
Univerzita Pardubice Dopravní fakulta Jana Pernera Ovládání modelu soustavy ”Kulička na rameni” Radek Ambrus Diplomová práce 2017

Univerzita Pardubice Dopravní fakulta Jana Pernera

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

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