ˇ ´ vysoke ´ uc ˇen´ı technicke ´ Cesk e ´ Fakulta elektrotechnicka ˇ´ıdic´ı techniky Katedra r
ˇ ızen´ı motor˚ R´ u s deskou Raspberry Pi a Linuxem Bakal´aˇrsk´a pr´ace
Autor: Radek Meˇciar Studijn´ı program: Kybernetika a robotika Obor: Syst´emy a ˇr´ızen´ı
2014
Vedouc´ı pr´ace: Ing. P´ıˇsa Pavel, Ph.D.
´ SEN ˇ ´I PROHLA
Prohlaˇsuji, ˇze jsem pˇredloˇzenou pr´aci vypracoval samostatnˇe a ˇze jsem uvedl veˇsker´e pouˇzit´e informaˇcn´ı zdroje v souladu s Metodick´ ym pokynem o dodrˇzov´an´ı etick´ ych princip˚ u pˇri pˇr´ıpravˇe vysokoˇskolsk´ ych z´avˇereˇcn´ ych prac´ı.
V Praze dne 21.5.2014
Podpis: ..................................
ˇ ´ ´I PODEKOV AN Zde bych chtˇel podˇekovat m´emu vedouc´ımu pr´ace Ing. Pavlu P´ıˇsovi, PhD za cenn´e rady z oblasti Linuxu a softwaru, tak´e za vˇenovan´ y ˇcas.
ABSTRAKT Pr´ace ovˇeˇruje moˇznost vyuˇz´ıt´ı levn´e procesorov´e desky Raspberry Pi pro realizaci real-time ˇr´ıdic´ıho syst´emu – konkr´etnˇe ˇr´ızen´ı servopohonu. V prvn´ı ˇc´asti pr´ace jsou popsan´e potˇrebn´e u ´pravy j´adra operaˇcn´ıho syst´emu Linux, kter´e zajist´ı spolehliv´e ˇcasovˇe omezen´e odezvy syst´emu na ud´alosti. D´ale popisuje n´avrh a implementace ovladaˇc˚ u a softwaru pro urˇcen´ı polohy motoru a jeho zpˇetnovazebn´ı ˇr´ızen´ı. K motoru pouˇzit´emu jako objektu ˇr´ızen´ı byla navrˇzena propojovac´ı periferie s Raspberry Pi. Inkrement´aln´ı sn´ımaˇc polohy pouˇzit´eho motoru pˇri pln´e rychlosti ot´aˇcen´ı souˇcasnˇe generuje sign´al o maxim´aln´ı frekvenci kolem 28 kHz. Dan´a platforma byla otestov´ana pro sn´ım´an´ı stavu motoru s touto frekvenc´ı. Do poloviˇcn´ıch ot´aˇcek motoru (tj. 2100 ot/min) bylo ovˇeˇreno, ˇze jsou zapoˇc´ıtan´e vˇsechny impulzy. Od vyˇsˇs´ıch frekvenc´ı nebo s n´aroˇcn´ ym zat´ıˇzen´ım syst´emu jiˇz doch´azelo k v´ ypadk˚ um v poˇc´ıt´an´ı impulz˚ u. Raspberry Pi je ale urˇcitˇe pouˇziteln´e v mnoha pˇr´ıpadech ˇr´ızen´ı a m˚ uˇze poskytnout daleko vˇetˇs´ı moˇznosti neˇz jedno´ uˇcelov´e vestavˇen´e ˇr´ıdic´ı obvody.
ABSTRACT This thesis examines the possibility to use cheap processor board Raspberry Pi for realization real-time control system – namely the control of the DC motor. The first part describes the required modifications to the Linux operating system kernel, which ensures reliable time limited system response to external and time events. It also describes the design and implementation of drivers and software to determine the position of the motor and feedback control. The DC motor, which was used as controlled object, is connected to Raspberry Pi with designed interface. Incremental encoder of used motor generates signal of maximum frequency about 28 kHz at full nominal voltage applied to the motor. Raspberry Pi was tested to process the incremental encoder sensor output up to this frequency. The platform is able to capture all signals while the speed is less than half of maximum speed (i.e. 2100 rev/min), but it isn’t able to capture correct information when the speed is faster than half of maximum speed or the system is loaded by other tasks. But Raspberry Pi is certainly useful in many cases of control and can provide more options than single-purpose embedded control circuits.
Kl´ıˇ cov´ e slova Raspberry Pi, motor, ˇr´ızen´ı, real-time, linux
Obsah
OBSAH ´ 1 Uvod 1.1 Motivace . . . . 1.2 Zp˚ usob ˇreˇsen´ı . 1.3 Zdroje pro pr´aci 1.4 Pˇredpoklady . .
. . . .
15 16 16 16 17
. . . . .
18 18 19 20 20 21
. . . . . . .
23 23 23 24 27 28 28 30
4 Stejnosmˇ ern´ y motorek 4.1 Popis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Propojen´ı s Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 PWM a GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . .
31 31 32 32
ˇ ıdic´ı software 5 R´ 5.1 Z´akladn´ı popis . . . . . . . . 5.2 Ovladaˇc . . . . . . . . . . . . ˇ ıdic´ı program . . . . . . . . 5.3 R´ 5.3.1 Hlavn´ı vl´akno . . . . . 5.3.2 Nastavov´an´ı hodnoty . 5.4 Server pro nastaven´ı hodnoty 5.5 Klient pro pos´ıl´an´ı hodnoty . 5.6 Webov´e rozhran´ı . . . . . . . 5.7 Grafick´ y program . . . . . . .
35 35 35 37 38 38 39 39 39 39
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
2 Raspberry Pi 2.1 Popis . . . . . . . . . . . . . . 2.1.1 Potˇrebn´e komponenty 2.2 Operaˇcn´ı syst´em . . . . . . . 2.2.1 Instalace v Linuxu . . 2.2.2 Prvn´ı spuˇstˇen´ı . . . . . 3 Linux a real-time rozˇ s´ıˇ ren´ı 3.1 Postup u ´pravy . . . . . . . . . 3.1.1 Nahr´an´ı rozˇs´ıˇren´ı . . . 3.1.2 Kompilace j´adra . . . 3.1.3 Zaveden´ı nov´eho j´adra 3.2 Test syst´emu . . . . . . . . . 3.2.1 Jednoduch´e vl´akno . . 3.2.2 Cyclictest . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
11
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . .
. . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . .
Obsah 5.8
Porovn´an´ı zobrazovac´ıch program˚ u . . . . . . . . . . . . . . . . . . . 40
6 Ovˇ eˇ ren´ı a moˇ znosti RPi 42 6.1 Frekvenˇcn´ı moˇznosti sn´ım´an´ı zpˇetn´e vazby . . . . . . . . . . . . . . . 42 6.2 Zhodnocen´ı ˇr´ızen´ı motoru . . . . . . . . . . . . . . . . . . . . . . . . 43 7 N´ avrh u ´ prav a zlepˇ sen´ı 7.1 Priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Webov´e rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Regul´atory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46 46 46 47
8 Z´ avˇ er
50
A DVD
53
B Seznam zkratek
54
C Sch´ ema motoru
55
12
Obsah
Seznam obr´azk˚ u
´ ˚ SEZNAM OBRAZK U 2.1 2.2
Raspberry Pi model B rev. 2.0 . . . . . . . . . . . . . . . . . . . . . . 19 Rozhran´ı pro z´akladn´ı konfiguraci Raspberry Pi . . . . . . . . . . . . 22
3.1 3.2 3.3
GUI pro konfiguraci j´adra pˇred kompilac´ı. . . . . . . . . . . . . . . . 26 ˇ Cetnost chyb pl´anov´an´ı proces˚ u. . . . . . . . . . . . . . . . . . . . . . 29 Seskupen´e ˇcetnosti chyb pl´anov´an´ı proces˚ u. . . . . . . . . . . . . . . 29
4.1 4.2 4.3 4.4 4.5 4.6 4.7
Pouˇzit´ y motor. . . . . . . . . . . . . . . . . . . Sch´ema rozhran´ı. . . . . . . . . . . . . . . . . . Graf pr˚ ubˇehu sign´alu IRC a IRQ z motoru. . . . Rozhran´ı GPIO konektor P1 na Raspberry Pi. . Zjednoduˇsen´e sch´ema ovl´ad´an´ı. . . . . . . . . . Sch´ema rozhran´ı mezi Raspberry Pi a motorem. Propojovac´ı obvod. . . . . . . . . . . . . . . . .
5.1 5.2 5.3
Diagram ˇr´ıdic´ıho softwaru. . . . . . . . . . . . . . . . . . . . . . . . . 36 Webov´e rozhran´ı. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Program servoPi gui. . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.1 6.2 6.3 6.4
Graf z´avislosti stˇr´ıdy a namˇeˇren´ ych ot´aˇcek. . . . . . . . . Graf rozd´ılu namˇeˇren´ ych ot´aˇcek s RPi oproti osciloskopu. Grafy rychlosti v oblasti s pˇresn´ ym mˇeˇren´ım. . . . . . . . Grafy rychlosti v oblasti s nepˇresn´ ym mˇeˇren´ım. . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
42 43 44 45
7.1 7.2 7.3 7.4
Test mˇeˇren´ı pevnˇe nastaven´e stˇr´ıdy PWM na 98 %. Test regulace na 4050 ot/min. . . . . . . . . . . . . V´ yˇrez programu servoPi. . . . . . . . . . . . . . . . Pokus s pˇrep´ın´an´ım regul´ator˚ u. . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
47 48 48 49
. . . . . . .
. . . . . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
31 31 32 33 33 34 34
C.1 Sch´ema motoru ze zdroje [16] . . . . . . . . . . . . . . . . . . . . . . 55 C.2 Sch´ema motoru ze zdroje [15] . . . . . . . . . . . . . . . . . . . . . . 56
13
Obsah
Seznam tabulek
SEZNAM TABULEK 2.1 2.2 2.3
Rozmˇer Raspeberry Pi zahrnuj´ıc´ı i konektory. . . . . . . . . . . . . . 18 Pˇrehled rozd´ıl˚ u jednotliv´ ych verz´ı a model˚ u. . . . . . . . . . . . . . . 18 V´ ykon Raspberry Pi model B. . . . . . . . . . . . . . . . . . . . . . . 19
4.1 4.2 4.3
Funkce pin˚ u konektoru motoru. . . . . . . . . . . . . . . . . . . . . . 31 Rozhran´ı GPIO, konektor P1 na Raspberry Pi. . . . . . . . . . . . . . 33 Pravdivostn´ı tabulka. . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.1
Tabulka pro urˇcen´ı smˇeru. . . . . . . . . . . . . . . . . . . . . . . . . 37
7.1
Zvolen´e priority. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
14
´ Kapitola 1 - Uvod
´ 1. UVOD Snaha o poˇc´ıtaˇcovou automatizaci velk´eho mnoˇzstv´ı i bˇeˇzn´ ych ˇcinnost´ı, od zaˇr´ızen´ı v dom´acnosti, pˇres hraˇcky aˇz po report´aˇzn´ı quadropt´ery a vojensk´e drony, je charakteristick´ ym znakem a ˇcasto i hnac´ı silou dneˇsn´ı technologicky zaloˇzen´e spoleˇcnosti. D˚ uleˇzitou u ´lohou n´avrh´aˇr˚ u je pak zvolit vhodn´ y ˇr´ıdic´ı syst´em. Nejjednoduˇsˇs´ı aplikace lze realizovat i s vyuˇzit´ım samotn´eho analogov´eho ˇr´ıdic´ıho obvodu, ale se st´ale se sniˇzuj´ıc´ı cenou procesorov´ ych syst´em˚ u a digit´aln´ıch komponent jsou postupnˇe i jednoduch´e u ´lohy ˇreˇseny touto technikou, kter´a nab´ız´ı vˇetˇs´ı uˇzivatelsk´ y komfort, snadnˇejˇs´ı pˇrizp˚ usoben´ı bez nutnosti mˇenit zapojen´ı, mnohem jednoduˇsˇs´ı ˇr´ızen´ı na d´alku a zapojen´ı do vˇetˇs´ıch celk˚ u. Pokud je ale na m´ıstˇe finanˇcn´ı ot´azka, je potˇreba vybrat vhodn´ y prostˇredek pro ˇr´ızen´ı, kter´ y spln´ı poˇzadovanou funkˇcnost a z´aroveˇ n je ekonomicky (nej)v´ yhodnˇejˇs´ı. Takov´e ˇreˇsen´ı pak ˇcasto nen´ı univerz´aln´ı a nab´ız´ı m´enˇe moˇznost´ı. Napˇr´ıklad, kdyˇz zvol´ıme pro ˇreˇsen´ı konkr´etn´ıho probl´emu, podobu jednoduch´eho obvodu s mikroprocesorem a pˇresn´ ym poˇctem zpˇetn´ ych vazeb ze senzor˚ u pˇres jist´a rozhran´ı, tak v budoucnu tato rozhran´ı jen tˇeˇzce rozˇs´ıˇr´ıme ˇ a pˇredevˇs´ım bude sloˇzitˇejˇs´ı itegrace do vˇetˇs´ıho celku. Casto je vˇsak moˇzn´e na trhu nal´ezt v´ ykonnˇejˇs´ı syst´em, kter´ y je vyr´abˇen´ y ve velk´ ych poˇctech a tak i pˇres nadbyteˇcn´ y v´ ykon vych´az´ı levnˇeji. V nab´ıdce je cel´a ˇrada velmi mal´ ych, cenovˇe pˇrijateln´ ych poˇc´ıtaˇc˚ u, realizovan´ ych na jednom ploˇsn´em spoji, kter´e maj´ı integrovan´e rozhran´ı poskytuj´ıc´ı komunikaˇcn´ı standardy, jak hardwarov´e, tak softwarov´e. Jedn´ım z tˇechto syst´em˚ u je i Raspberry Pi (d´ale RPi) vyv´ıjen´e britskou nadac´ı Raspberry Pi Foundation, p˚ uvodnˇe pˇredevˇs´ım pro v´ yuku a rozvojov´e zemˇe, kde m˚ uˇze b´ yt platforma vyuˇzita jako levn´ y dom´ac´ı poˇc´ıtaˇc, ˇci rozˇs´ıˇren´ı televizoru na multifunkˇcn´ı zaˇr´ızen´ı. Cena je srovnateln´a s cenou zak´azkovˇe vyr´abˇen´e jedno´ uˇcelov´e desky ploˇsn´ ych spoj˚ u, ale m˚ uˇze nab´ıdnout v´ıce moˇznost´ı s ˇra´dovˇe vyˇsˇs´ım v´ ypoˇcetn´ım v´ ykonem a s pˇr´ıtomnost´ı obecn´eho operaˇcn´ıho syst´emu (nab´ız´ı webov´e rozhran´ı, komunikace, vzd´alenou spr´avu, instalaci SW atd.) a proti profesion´aln´ım v´ ykonn´ ym obvod˚ um ˇcasto mnohem niˇzˇs´ı cenu, pˇredevˇs´ım d´ıky masov´e v´ yrobˇe a pouˇzit´ı levn´ ych komponent. ˇ Sirok´e zp˚ usoby vyuˇzit´ı nab´ız´ı RPi pˇredevˇs´ım d´ıky operaˇcn´ımu syst´emu Linux. S pochopen´ım pˇr´ıstupu Linuxu k hardwaru a principu fungov´an´ı syst´emu, bude pot´e jednoduˇsˇs´ı, t´ım sam´ ym ˇr´ıdic´ım ˇclenem, nebo jin´ ym s pouˇzit´ım z´ıskan´ ych znalost´ı, vyˇreˇsit i jinou podobnou ˇr´ıdic´ı u ´lohu. Vyˇsˇs´ı kvalitu ˇr´ızen´ı zajiˇst’uje u ´prava j´adra operaˇcn´ıho syst´emu, kter´a pˇrid´av´a podporu pro real-time pl´anov´an´ı a prioritn´ı ´ pˇrednosti pro ˇcasovˇe kritick´e u ´lohy. Uprava usnadˇ nuje pouˇzit´ı operaˇcn´ıho syst´emu Linux, pro kter´ y jsou takov´eto u ´pravy jiˇz k dispozici. ´ Uˇcelem pr´ace je otestovat, jestli je platforma RPi pro danou u ´lohu pouˇziteln´a a je moˇzn´e chybˇej´ıc´ı profesion´aln´ı periferie pro polohov´e nebo rychlostn´ı ˇr´ızen´ı nahradit softwarem a vyuˇzit´ım relativnˇe velk´eho v´ ypoˇcetn´ıho v´ ykonu centr´aln´ı procesorov´e jednotky. Jako kaˇzd´e ˇreˇsen´ı, i toto m´a sv´e limitn´ı moˇznosti funkcionality a ne jen z hlediska periferi´ı, ale tak´e z hlediska rychlosti v´ ypoˇct˚ u, naˇc´ıt´an´ı, ukl´ad´an´ı a komu-
15
´ Kapitola 1 - Uvod nikace. S realizac´ı dan´e u ´lohy ˇr´ızen´ı servopohonu se je pokus´ım otestovat.
1.1
Motivace
Pr´ace je velice praktick´eho charakteru. Jedn´a se sp´ıˇse o vyzkouˇsen´ı jestli a jak dobˇre je RPi pouˇziteln´e ke zpˇetnovazebn´ımu ˇr´ızen´ı motoru. Oˇcek´av´an´ı nejsou pˇr´ıliˇs vysok´a, protoˇze RPi nen´ı v´ ykonn´ y hardware. Naopak je vˇsak velmi rozˇs´ıˇren´ y a ˇreˇsen´ı m˚ uˇze b´ yt zaj´ımav´e pro v´ yukov´e u ´ˇcely a pouˇzit´ı komunitou.
1.2
Zp˚ usob ˇ reˇ sen´ı
Pr´aci jsem ˇreˇsil pˇresnˇe po bodech zad´an´ı. Prvn´ı bod je rozdˇelen na dvˇe kapitoly 2. Raspberry Pi a 3. Linux a real-time rozˇs´ıˇren´ı. Druh´ y bod zad´an´ı obsahuje ˇ ˇ ıdic´ı softkapitola 4. Stejnosmˇern´y motorek. R´ıdic´ı software je pops´an v kapitole 5. R´ ware, jako tˇret´ı bod zad´an´ı. A koneˇcn´e otestov´an´ı je k nalezen´ı v kapitole 6. Ovˇeˇren´ı a moˇznosti RPi.
1.3
Zdroje pro pr´ aci
Pˇri anal´ yze poˇzadavk˚ u na pr´aci se nepodaˇrilo dohledat, ˇze by se nˇekdo jin´ y vyuˇzit´ım RPi v aplikaci zpˇetnovazebn´eho ˇr´ızen´ı motoru zab´ yval. Existuje mnoho zdroj˚ u, jak v kniˇzn´ıch, tak elektronick´ ych podob´ach, ale ˇz´adn´ y mnou nalezen´ y, neobsahuje ˇreˇsen´ı obdobn´e u ´lohy. Obvykle je ˇr´ızen´ı motor˚ u s RPi ˇreˇseno zp˚ usobem otevˇren´e smyˇcky, tedy zab´ yvaj´ı se pouze nastaven´ım PWM, tak aby se motor ot´aˇcel pouze na urˇcit´e procento v´ ykonu. Nal´ezt se d´a mnoho SW ˇreˇsen´ı, pro r˚ uzn´a rozˇs´ıˇren´ı, jako napˇr´ıklad PiBlaster zm´ınˇen´ y v m´e pr´aci (viz. zdroj [25]). A velice rozˇs´ıˇren´e je WiringPi, kter´e um´ı zprovoznit mnoho funkc´ı. Uvaˇzoval jsem, ˇze bych toto pˇripraven´e ˇreˇsen´ı pouˇzil v pr´aci, ale nakonec jsem od toho upustil. Potˇreboval jsem zprovoznit pouze p´ar funkc´ı a seznamovat se s rozs´ahl´ ym ˇreˇsen´ım, abych pochopil funkcionalitu, bylo zbyteˇcn´e. R´ad bych jej ale doporuˇcil, jako zaj´ımav´ y zdroj [19] naprogramovan´ y v jazyce C. Obdobn´a pr´ace, ale existuje. Je to pr´ace vyuˇcovan´a v pˇredmˇetu Programov´an´ı syst´emu re´aln´eho ˇcasu, kter´ y m´am v doporuˇcen´ ych zdroj´ıch (viz. [18]). Pouˇz´ıv´a stejn´ y motor pro ˇr´ızen´ı, ale jin´ y ˇr´ıd´ıc´ı prvek neˇz RPi. V m´em, ponˇekud struˇcn´em, seznamu zdroj˚ u se nach´az´ı ˇctyˇri odkazy. Na v´ yˇse zm´ınˇen´ y pˇredmˇet a materi´aly pouˇzit´e k tomuto pˇredmˇetu a na informace ohlednˇe Linuxu, a real-time rozˇs´ıˇren´ı (viz. zdroj [13]). Potˇrebn´e informace jsem pak pˇredevˇs´ım hledal v dostupn´ ych knih´ach o programov´an´ı a syst´emu GNU/Linux (viz. zdroje [1], [2] a [3]). Z nich jsem ˇcerpal hlavnˇe pˇri tvoˇren´ı soketov´e komunikace, ale obsahuj´ı i mnoho jin´ ych informac´ı. D´ale jsem vyuˇz´ıval internetov´e zdroje.
16
´ Kapitola 1 - Uvod
1.4
Pˇ redpoklady
Jako operaˇcn´ı syst´em k ˇreˇsen´ı pr´ace je pouˇz´ıv´an pouze Linux, tedy vˇsechny postupy v t´eto pr´aci jsou urˇceny pr´avˇe pro tento syst´em. I kdyˇz jsem se snaˇzil vytvoˇrit n´avody pro zopakov´an´ı postup˚ u co nejjednoduˇseji na pochopen´ı, urˇcit´e z´akladn´ı znalosti pr´ace s t´ımto syst´emem jsou v popisech pˇredpokl´ad´any. Na pˇriloˇzen´em DVD (pˇr´ıloha A) se nach´azej´ı zdrojov´e k´ody pouˇzit´eho syst´emu i s pˇr´ısluˇsnou verz´ı rozˇs´ıˇren´ı. Cel´ y obraz syst´emu se v pˇr´ıloze nenach´az´ı. Ke staˇzen´ı je na internetov´em zdroji [21] a v textu d´ale je pops´ano, jak potˇrebn´e komponenty doinstalovat. Pr´ace byla realizov´ana s vyuˇzit´ım dvou programovac´ıch jazyk˚ u. Z´aklad ˇr´ızen´ı byl naprogramov´an v jazyce C a jazyk Java byl pouˇzit pˇri implementaci vzd´alen´eho ovl´adac´ıho panelu, protoˇze nab´ız´ı objektov´ y pˇr´ıstup, kter´ y se s v´ yhodou pouˇzije pˇri tvorbˇe grafick´e aplikace a usnadˇ nuje zpracovan´ı pˇrij´ıman´ ych dat. Software je navrˇzen pro vzd´alen´e s´ıt’ov´e ovl´ad´an´ı, ale jiˇz neˇreˇs´ı sofistikovan´e nav´az´an´ı komunikace apod. Zdrojov´e k´ody vˇsech implementovan´ ych program˚ u a komponent jsou um´ıstˇeny na DVD (pˇr´ıloha A), opatˇreny koment´aˇrem a v pr´aci je vysvˇetlen u ´ˇcel jednotliv´ ych program˚ u. Pro n´avody jsou pouˇzity pˇr´ıkazy z termin´alov´eho interpreteru pˇr´ıkaz˚ u, kter´e oddˇeluje n´asleduj´ıc´ı r´ameˇcek. Konkr´etnˇe byl pouˇzit interpreter Bash (Bourne Again Shell). Bash
17
Kapitola 2 - Raspberry Pi
2. RASPBERRY PI 2.1
Popis
RPi je kompletn´ı miniaturn´ı poˇc´ıtaˇc nen´aroˇcn´ y na poˇrizovac´ı n´aklady. Nen´ı pˇr´ıliˇs v´ ykonn´ y, ale jeho rozmˇery pˇribliˇznˇe odpov´ıdaj´ı kreditn´ı kartˇe (viz. tabulka 2.1). I pˇres malou velikost obsahuje veˇsker´e komponenty odpov´ıdaj´ıc´ı klasick´emu stoln´ımu ´ ziˇstˇe (pevn´ poˇc´ıtaˇci. Uloˇ y disk) je vˇsak nahrazeno pamˇet’ovou kartou SD/MMC. Verze
ˇ ıˇ S´ rka [mm]
Model A Model B
64.3 64.3
Hloubka [mm] V´ yˇ ska [mm] 92.5 92.5
18.3 21.3
Tabulka 2.1: Rozmˇer Raspeberry Pi zahrnuj´ıc´ı i konektory.
Existuj´ı dvˇe varianty tohoto poˇc´ıtaˇce, modely A a B. Model B proˇsel jeˇstˇe vylepˇsen´ım a je rozdˇelen na model B revize 1.0 a novˇejˇs´ı verze model B revize 2.0. Rozd´ıly jednotliv´ ych verz´ı ukazuje tabulka 2.2. Verze
Model A
Model B rev. 1
Model a rev. 2
RAM USB Ethernet Spotˇreba Cena1
256 MB 1x Ne 2.5 W 800 Kˇc
256 MB 2x Ano -
512 MB 2x Ano 3.5 W 1200 Kˇc
Tabulka 2.2: Pˇrehled rozd´ıl˚ u jednotliv´ ych verz´ı a model˚ u.
Vˇsechny modely a revize jsou zaloˇzen´e na stejn´em integrovan´em procesorov´em obvodu ARM, kter´ y je taktovan´ y na frekvenci 700 MHz s moˇznost´ı pˇretaktov´an´ı aˇz na 1 GHz a s grafick´ ym akceler´atorem oznaˇcen´ ym jako VideoCore IV. Model B revize 2.0 je jeˇstˇe vylepˇsen o mont´aˇzn´ı d´ıry pro pˇrichycen´ı a m´a o ˇctyˇri piny GPIO v´ıce. D´ale pak kaˇzd´a verze RPi obsahuje tyto vstupnˇe v´ ystupn´ı konektory:
1
• USB a nap´ajec´ı MicroUSB
• HDMI
• GPIO
• Kompozitn´ı Video
• Slot SD/MMC karty
• Jack 3.5 mm
Pˇribliˇzn´ a cena v lednu 2014 v kamenn´ ych obchodech v Praze.
18
Kapitola 2 - Raspberry Pi Spotˇreba modelu B revize 1.0 nebyla zjiˇstˇena a v souˇcasn´e dobˇe se jiˇz nevyr´ab´ı. Zjiˇstˇen´e spotˇreby jsou uv´adˇen´e prodejci RPi. Pokusil jsem se orientaˇcnˇe zmˇeˇrit spotˇrebu modelu B revize 2.0, kter´ y m´am k dispozici, za pouˇzit´ı bˇeˇzn´eho levn´eho multimetru, kde byla sledov´ana hodnota proudu. Raspberry Pi je nap´ajen´e z 5 V stejnosmˇern´eho adapt´eru, kter´ y je schopn´ y dod´avat aˇz 1,3 A. V´ ysledek mˇeˇren´ı je vidˇet v tabulce 2.3. ˇ Cinnost Proud [A] Vypoˇcten´ y v´ ykon [W]
Vypnuto Zapnuto Zat´ıˇ zeno 0,15 0,75
0,42 2,1
0,5 2,5
Tabulka 2.3: V´ ykon Raspberry Pi model B.
K ˇreˇsen´ı pr´ace byl pouˇzit model B revize 2.0. Fotografie je na obr´azku 2.1. Tato verze je energeticky n´aroˇcnˇejˇs´ı, ale zase m´a moˇznost pˇripojen´ı do ethernetov´ ych s´ıt´ı a 512 MB pamˇeti RAM.
Obr´azek 2.1: Raspberry Pi model B rev. 2.0 V´ıce informac´ı o RPi je uvedeno na internetov´em zdroji [11] nebo v knih´ach [4] a [5], ve kter´ ych je obsaˇzeno i mnoˇzstv´ı n´avod˚ u t´ ykaj´ıc´ıch se nastaven´ı syst´emu a pˇr´ıklad˚ u jak RPi pouˇz´ıt. Obvykle jsou pˇr´ıklady napsan´e v jazyce Python.
2.1.1
Potˇ rebn´ e komponenty
RPi nen´ı ihned po koupi pˇripraveno k pouˇzit´ı. Jednak se k nˇemu nedod´av´a pamˇet’ov´a karta, ale tak´e nen´ı pˇribalen potˇrebn´ y adapt´er. Minim´aln´ı velikost pamˇet’ov´e karty je doporuˇcena na 8 GB. Jako zdroj energie se doporuˇcuje adapt´er s napˇet´ım 5 V, kter´ y m˚ uˇze dod´avat aˇz 700 mA. RPi odeb´ır´a pˇribliˇznˇe 500 mA, takˇze pokud je nutn´e pˇripojit energeticky n´aroˇcnˇejˇs´ı periferie, mohou nastat probl´emy. S adapt´erem schopn´ ym dod´avat vˇetˇs´ı mnoˇzstv´ı energie, pak mohou nastat probl´emy pˇri zapojov´an´ı periferi´ı v zapnut´em stavu. D˚ uvod, proˇc nem´a RPi v balen´ı tyto dvˇe z´akladn´ı komponenty zahrnuty je prim´arnˇe cena a ekologick´e hledisko zbyteˇcn´e v´ yroby. Vyuˇzije se t´ım starˇs´ı pˇr´ısluˇsenstv´ı, kter´e je dostupn´e, nebo je moˇznost objedn´an´ı nov´eho. 19
Kapitola 2 - Raspberry Pi Mimo jin´e bude urˇcitˇe potˇreba dalˇs´ıho poˇc´ıtaˇce, pokud k RPi nen´ı objednan´a jiˇz pˇripraven´a pamˇet’ov´a karta, bude potˇreba vytvoˇrit spustiteln´ y operaˇcn´ı syst´em za pomoc´ı jin´eho poˇc´ıtaˇce. N´avody jsou dostupn´e na internetu (viz. zdroje [6] a [9]) a pro operaˇcn´ı syst´em Linux je pops´an v sekci 2.2.1 Instalace v Linuxu. Alespoˇ n k prvn´ımu spuˇstˇen´ı je potˇreba monitor pˇripojiteln´ y do HDMI konektoru, USB myˇs a kl´avesnice. Pozdˇeji m˚ uˇze b´ yt k RPi pˇristupov´ano vzd´alenˇe po s´ıti napˇr´ıklad pomoc´ı protokolu SSH.
2.2
Operaˇ cn´ı syst´ em
Samotn´e RPi se nedod´av´a s jedn´ım pˇredinstalovan´ ym operaˇcn´ım syst´emem. Ten je vˇsak lehce dostupn´ y v sekci Download na str´ank´ach www.raspberrypi.org, kde je v´ ybˇer z nˇekolika druh˚ u urˇcen´ ych pˇr´ımo pro RPi. Raspbian, kter´ y je odvozen´ y z distribuce Debian. Pokud m´ate v oblibˇe distribuci Fedora, tak jej´ı odvozen´a verze m´a n´azev Pidora. D´ale je tak´e k dispozici Arch Linux, ˇci r˚ uzn´e dalˇs´ı, ˇcasto specializovan´e, distribuce operaˇcn´ıho syst´emu. Napˇr´ıklad jako OpenElec a Raspbmc, kter´e udˇelaj´ı z RPi medi´aln´ı centrum, pˇripojiteln´e k televizi. V nab´ıdce je i nelinuxov´ y syst´em Risc OS. Bal´ıˇcek pro zaˇca´teˇcn´ıky nazvan´ y anglicky NOOBS obsahuje moˇznosti nainstalovat jak´ ykoliv v´ yˇse zm´ınˇen´ y operaˇcn´ı syst´em i jin´e. Pro zaveden´ı na pamˇet’ovou kartu je pˇripraven n´avod, jak pro uˇzivatele Linuxu, tak pro uˇzivatele Windows, ˇci Mac OS. Podle tohoto n´avodu se d´a postupovat i pˇri instalaci pouze jednoho vybran´eho syst´emu. Linuxov´a verze n´avodu je v dalˇs´ı sekci 2.2.1 Instalace v Linuxu. Vyzkouˇsel jsem vˇsechny operaˇcn´ı syst´emy dostupn´e z pˇripraven´eho instal´atoru NOOBS. Nejv´ıce jsem povaˇzoval za vhodn´ y Raspbian, protoˇze je pravdˇepodobnˇe nejrozˇs´ıˇrenˇejˇs´ı a s distribucemi odvozen´ ymi z projektu Debian m´am zkuˇsenosti. Nejnovˇejˇs´ı verze Raspbianu je ke staˇzen´ı z internetov´eho zdroje [21], tento zdroj obsahuje jiˇz pouze syst´em Raspbian. Bliˇzˇs´ı informace o tomto syst´emu jsou k dispozici na internetov´em zdroji [20].
2.2.1
Instalace v Linuxu
Kroky n´avodu jsou ˇcerp´any ze zdroje [9]. K zapoˇcet´ı instalace je potˇreba m´ıt staˇzen´ y image soubor, pokud moˇzno s posledn´ı stabiln´ı verz´ı syst´emu. Ta je ke staˇzen´ı na odkazu ve zdroji [21]. Kde se nach´az´ı archiv, konkr´etnˇe zip, kter´ y obsahuje soubor typu image. Soubor s archivem se za pomoc´ı linuxov´eho termin´alu rozbal´ı pˇr´ıkazem: cd / adresar / obsahujici / soubor / unzip 2014 -01 -07 - wheezy - raspbian . zip
Kde za pˇr´ıkazem unzip n´asleduje jm´eno konkr´etn´ıho souboru. Nyn´ı se ve sloˇzce nach´az´ı novˇe i soubor typu image, napˇr´ıklad s n´azvem 2014-01-07-wheezy-rasp” bian.img“. Tento soubor je potˇreba nakop´ırovat pomoc´ı programu dd na pamˇet’ovou kartu. Zjiˇstˇen´ı n´azvu pamˇet’ov´e karty, kter´ y je potˇreba zn´at pro program dd, se 20
Kapitola 2 - Raspberry Pi provede n´asleduj´ıc´ım pˇr´ıkazem: sudo fdisk -l | grep / dev /
Tento pˇr´ıkaz vytiskne v´ ypis na monitor, ve kter´em by se mˇela nach´azet i pamˇet’ov´a karta, pokud je pˇripojena k poˇc´ıtaˇci. Pˇr´ıklad v´ ypisu: ... Disk / dev / mmcblk0 : 31.6 GB , 31611420672 bytes / dev / mmcblk0p1 2048 61741055 30869504 Linux ...
83
Ve v´ ypisu m˚ uˇze b´ yt v´ıce poloˇzek, karta se nejl´epe pozn´a podle velikosti, kter´a je zde vidˇet jako 31.6 GB. Pamˇet’ obsahuje jeden odd´ıl a to mmcblk0p1“. Jm´eno, kter´e ” bude potˇreba pro kop´ırov´an´ı souboru je /dev/mmcblk0“. Pro pr´aci s programem ” dd mus´ı b´ yt pamˇet’ov´a karta odpojena a to se provede v tomto pˇr´ıpadˇe pˇr´ıkazem: sudo umount / dev / mmcblk0 *
Pˇr´ıkaz bud’to odpoj´ı vˇsechny odd´ıly pamˇet’ov´e karty, nebo vyp´ıˇse, ˇze nejsou pˇripojeny. Pot´e m˚ uˇzeme pokraˇcovat v samotn´em kop´ırov´an´ı souboru typu image, zkontrolujte si, zda m´ ate spr´ avn´ y n´ azev zaˇ r´ızen´ı, n´ asleduj´ıc´ım pˇ r´ıkazem m˚ uˇ zete ztratit data: sudo dd if =2014 -01 -07 - wheezy - raspbian . img of =/ dev / mmcblk0
Pot´e co se pˇr´ıkaz u ´spˇeˇsnˇe dokonˇc´ı, je pamˇet’ov´a karta pˇripravena k pouˇzit´ı s RPi. Mˇela by obsahovat dva odd´ıly, kter´e se v m´em pˇr´ıpadˇe jmenuj´ı boot“ a boot “. ” ” Prvn´ı odd´ıl boot“ obsahuje soubory s j´adrem a pomocn´ ymi soubory naˇc´ıtan´ ymi pˇri ” startu syst´emu. V souborov´e struktuˇre se pak napoj´ı do adres´aˇre /boot“. Druh´ y ” odd´ıl obsahuje cel´ y souborov´ y syst´em, takzvan´ y koˇren syst´emu (adres´aˇr /“, ang” licky root).
2.2.2
Prvn´ı spuˇ stˇ en´ı
Pˇri prvn´ım spuˇstˇen´ı operaˇcn´ıho syst´emu se naˇcte textov´ y reˇzim s programem pro z´akladn´ı nastaven´ı syst´emu. Program m´a jednoduch´e rozhran´ı, kter´e je vidˇet na obr´azku 2.2 a jmenuje se Raspberry Pi Software Configuration Tool. Pˇr´ıkaz pro opˇetovn´e spuˇstˇen´ı programu v budoucnu je: sudo raspi - config
Z nab´ıdky programu je vhodn´e pouˇz´ıt volbu ˇc´ıslo jedna a to Expand Filesystem, kter´a zp˚ usob´ı, ˇze RPi vyuˇzije cel´e m´ısto na pamˇet’ov´e kartˇe. Pokud je potˇreba k RPi pˇristupovat vzd´alenˇe pˇres protokol SSH, lze zde tento pˇr´ıstup povolit a to zvolen´ım osm´e volby Advanced Options, d´ale pak naj´ıt volbu SSH, kter´a se v m´em pˇr´ıpadˇe jmenuje A4 SSH a potvrzen´ım Enable umoˇznit komunikaci prostˇrednictv´ım SSH protokolu. Volba nen´ı zm´ınˇena n´ahodou. Ve zdroji o real-time rozˇs´ıˇren´ı syst´emu [13] je uvedeno, ˇze klasick´a konzole vykreslovan´a na monitor, m˚ uˇze zp˚ usobovat zpoˇzdˇen´ı, aˇz v ˇr´adech 100 µs, coˇz je pro tuto u ´lohu neˇza´douc´ı 21
Kapitola 2 - Raspberry Pi
Obr´azek 2.2: Rozhran´ı pro z´akladn´ı konfiguraci Raspberry Pi a proto doporuˇcuji pˇripojovat se k RPi prostˇrednictv´ım tohoto komunikaˇcn´ıho protokolu. V nastaven´ı je i jednoduch´a moˇznost pˇretaktov´an´ı procesoru, nebo urˇcen´ı vyuˇzit´ı pamˇeti RAM pro grafick´ y akceler´ator. Pˇretaktov´an´ı nedoporuˇcuji, protoˇze RPi se i pˇri z´akladn´ı frekvenci 700 MHz zahˇr´ıv´a. Moˇznost ubrat pamˇet’ grafick´emu akceler´atoru je rozumn´a, protoˇze ji pˇres protokol SSH stejnˇe RPi nevyuˇzije. Nen´ı ovˇsem tak z´asadn´ı v pˇr´ıpadˇe t´eto u ´lohy. Po potvrzen´ı Finish a restartu syst´emu dojde na poˇzadavek k pˇrihl´aˇsen´ı. Pˇrednastaven´e uˇzivatelsk´e jm´eno je pi“ a k tomuto u ´ˇctu je heslo raspberry“. ” ” Jako n´avod, pro dalˇs´ı nastaven´ı RPi mohu doporuˇcit knihy z m´ ych zdroj˚ u [4] a [5], kde se nach´az´ı napˇr´ıklad nastaven´ı automatick´eho pˇripojen´ı do Wi-Fi s´ıtˇe apod.
22
Kapitola 3 - Linux a real-time rozˇs´ıˇren´ı
ˇ´IREN ˇ ´I 3. LINUX A REAL-TIME ROZS ´ celem real-time rozˇs´ıˇren´ı v operaˇcn´ım syst´emu Linux je zmˇena pl´anovac´ıch alUˇ goritm˚ u, kter´e se staraj´ı o pˇridˇelov´an´ı procesorov´eho ˇcasu jednotliv´ ym, aktu´alnˇe bˇeˇz´ıc´ım, proces˚ um. V nerozˇs´ıˇren´em syst´emu moˇznost nadˇradit proces jako vysoce prioritn´ı tak´e existuje, ale pl´anovac´ı algoritmy nezaruˇcuj´ı stropn´ı hranici latence, kv˚ uli delˇs´ım u ´sek˚ um, ve kter´ ych je zablokovan´e pˇrepl´anov´an´ı u ´lohy nebo i pˇrijet´ı pˇreruˇsen´ı. Real-time rozˇs´ıˇren´ı vyˇzaduje sloˇzitˇejˇs´ı algoritmy pl´anov´an´ı, takˇze propustnost a minim´aln´ı doby odezvy jsou obvykle horˇs´ı, naopak maxim´aln´ı latence jsou omezen´e. J´adra Linuxu s moˇznost´ı vynucen´e zmˇeny poˇrad´ı proces˚ u jsou oznaˇcov´ana jako PREEMPT“ z anglick´eho preemption, ve smyslu pˇreruˇsen´ı pˇrepl´anov´an´ı. Rozˇs´ıˇren´a ” j´adra o real-time algoritmy pl´anov´an´ı jsou oznaˇcov´ana jako PREEMPT RT“ a od” liˇsuj´ı se omezov´an´ım u ´sek˚ u s blokovan´ ym pˇrepl´anov´an´ım a i zpracov´an´ı vnˇejˇs´ıch ud´alost´ı ˇreˇs´ı v r´amci vl´aken. Syst´emy vrac´ı nejmenˇs´ı rozliˇsitelnou jednotku ˇcasu 1 ns. Re´alnˇe je vˇsak moˇznost pl´anov´an´ı spuˇstˇen´ı procesu s pˇresnost´ı v ˇr´adech kolem 10 µs, jak bude uk´az´ano d´ale v t´eto kapitole.
3.1
Postup u ´ pravy
Tento postup navazuje na jiˇz hotovou instalaci Linuxu Raspbian podle n´avodu v sekci 2.2.1 Instalace v Linuxu a opˇet je urˇcen pro operaˇcn´ı syst´em Linux. Kroky z n´avodu jsou ˇcerp´any ze zdroj˚ u [7] a [8].
3.1.1
Nahr´ an´ı rozˇ s´ıˇ ren´ı
Jestliˇze chceme pˇridat do j´adra syst´emu Linux takto rozs´ahl´e rozˇs´ıˇren´ı, mus´ıme to prov´est pˇred kompilac´ı a n´aslednˇe j´adro zkompilovat. K tomu, abychom to mohli prov´est, bude tˇreba zdrojov´eho k´odu j´adra. J´adro syst´emu Linux je ˇs´ıˇreno pod licenc´ı GPL, kter´a zajiˇst’uje volnou dostupnost zdrojov´ ych k´od˚ u i n´aslednou moˇznost dalˇs´ıch u ´prav. Nen´ı tedy probl´em z´ıskat zdrojov´e k´ody j´adra. Existuje vˇsak cel´a ˇrada pˇrednastaven´ı pro j´adra a mnoho jeho verz´ı. Nalezen´ım spr´avn´eho zdroje pro RPi si uˇsetˇr´ıme ˇcas, kter´ y bychom museli vynaloˇzit na vhodnou konfiguraci a optimalizaci pro dan´ y hardware. J´adro urˇcen´e a spr´avnˇe nakonfigurovan´e pro RPi se nach´az´ı napˇr´ıklad na internetov´e adrese ve zdroji [22]. Zdroj obsahuje vˇzdy nejnovˇejˇs´ı verzi z verzovac´ıho syst´emu GIT serveru GitHub, aktu´alnˇe1 s oznaˇcen´ım 3.10.26. Oznaˇcen´ı je d˚ uleˇzit´e pro u ´pravu, kter´a je urˇcena pro konkr´etn´ı verze. Aby se dal postup zopakovat, poˇr´ıdil jsem kopii t´eto verze a um´ıstil ji na DVD (pˇr´ıloha A). Soubor je pojmenovan´ y jako linux-rpi-3.10.y.zip“ a obsahuje stabiln´ı vˇetev se zahrnut´ ymi ” aktu´aln´ımi upravami verze 3.10.y. 1
Leden 2014
23
Kapitola 3 - Linux a real-time rozˇs´ıˇren´ı Zdrojov´ y k´od ale nezahrnuje potˇrebn´e rozˇs´ıˇren´ı, pouze vhodn´e konfigurace pro RPi. Rozˇs´ıˇren´ı se teprve mus´ı pˇridat. Zdroj, kde se d´a nal´ezt je oznaˇcen jako [23] v seznamu soubor˚ u na konci pr´ace. Podle verze j´adra je potˇreba nal´ezt spr´avnou verzi rozˇs´ıˇren´ı. K verzi 3.10.26, obsaˇzen´e v pˇr´ıloze na DVD, je to soubor s n´azvem patch-3.10.26-rt24.patch.gz“. ” M´ame tedy dva soubory typu archiv. Nejprve je mus´ıme rozbalit, pot´e vˇclenit vylepˇsen´ı do zdrojov´eho k´odu j´adra. O u ´pravy se postar´a n´asleduj´ıc´ı sada pˇr´ıkaz˚ u termin´alu, pokud um´ıst´ıme soubory do jednoho adres´aˇre. Pro jin´e verze, mus´ıte upravit n´azvy soubor˚ u. cd / adresar / obsahujici / soubory unzip linux - rpi -3.10. y . zip gunzip patch -3.10.26 - rt24 . patch . gz cd linux - rpi -3.10. y patch p1 < ../ patch -3.10.26 - rt24 . patch
3.1.2
Kompilace j´ adra
Po u ´spˇeˇsn´em proveden´ı pˇr´ıkaz˚ u budeme m´ıt pˇripraven´ y zdrojov´ y k´od j´adra, konkr´etnˇe ve sloˇzce linux-rpi-3.10.y“, obsahuj´ıc´ı real-time vylepˇsen´ı. D´ale je potˇreba ” k´od zkompilovat. M´ame na v´ ybˇer v´ıce moˇznost´ı, jak kompilaci prov´est. M˚ uˇzeme kompilovat pˇr´ımo na RPi, avˇsak j´a bych tuto volbu nedoporuˇcil, protoˇze v´ ykon je n´ızk´ y a kompilace zabere mnoho hodin. Druh´a moˇznost je vyuˇz´ıt takzvan´e cross kompilace. Je to druh kompilace, pˇri kter´e se pˇrev´ad´ı program do strojov´eho k´odu na jin´em poˇc´ıtaˇci. Pokud maj´ı oba stroje stejnou architekturu procesoru, tak je moˇzno pouˇz´ıt pˇr´ımo kompil´ator z jin´eho poˇc´ıtaˇce. Jestliˇze nemaj´ı, je potˇreba sehnat n´astroj, kter´ y bude schopen pˇripravit strojov´ y k´od pro jinou architekturu procesor˚ u. V RPi se nach´az´ı procesor s architekturou ARM. Cross kompilaˇcn´ı n´astroj pro tento typ procesoru je na adrese ve zdroji [24]. Opˇet je dostupn´ y na pˇriloˇzen´em DVD (pˇr´ıloha A) a je pojmenov´an jako tools-master.zip“. ” Soubor obsahuj´ıc´ı n´astroj pro kompilaci je typu archiv a rozbal´ıme ho n´asleduj´ıc´ım pˇr´ıkazem. N´avod i nad´ale pˇredpokl´ad´a pouˇzit´ı stejn´eho pracovn´ıho adres´aˇre jako v pˇr´ıpadˇe pˇredeˇsl´ ych soubor˚ u. cd / adresar / obsahujici / soubory unzip tools - master . zip
Po u ´spˇeˇsn´em dokonˇcen´ı pˇr´ıkazu je vˇse pˇripraveno k zah´ajen´ı samotn´eho procesu kompilace. Sloˇzka obsahuje novˇe sloˇzku tools-master“, v kter´e se nach´az´ı kompilaˇcn´ı ” n´astroj. Tedy podstatn´e dva adres´aˇre, jeˇz by se mˇely nach´azet v pracovn´ım adres´aˇri jsou linux-rpi-3.10.y“ a tools-master“, pˇr´ıpadnˇe se m˚ uˇzou liˇsit podle verze j´adra. ” ” Prvn´ım krokem kompilace, pokud prov´ad´ıme opˇetovn´e pokusy, je vyˇciˇstˇen´ı pˇredeˇsl´ ych pokus˚ u. K tomu je urˇcen n´asleduj´ıc´ı termin´alov´ y pˇr´ıkaz, kter´ y se mus´ı spustit ve sloˇzce, kde je obsaˇzen k´od j´adra, v tomto pˇr´ıpadˇe se jedn´a o adres´aˇr linux-rpi” 3.10.y“.
24
Kapitola 3 - Linux a real-time rozˇs´ıˇren´ı
cd / adresar / obsahujici / soubory / linux - rpi -3.10. y make mrproper
Po vyˇciˇstˇen´ı pˇredchoz´ıch pokus˚ u o kompilaci, je tˇreba obnovit konfiguraˇcn´ı soubor, v kter´em je obsaˇzeno nastaven´ı pro danou kompilaci. Origin´aln´ı soubor s konfigurac´ı pro RPi se d´a naj´ıt v jiˇz beˇz´ıc´ım syst´emu ve sloˇzce /proc“ a n´azev souboru ” je config.gz“. Pomoc´ı pˇr´ıkazu zcat m˚ uˇzeme soubor uloˇzit do textov´e podoby a pak ” n´aslednˇe pˇren´est do pracovn´ıho adres´aˇre, konkr´etnˇe do sloˇzky, kter´a obsahuje zdrojov´ y k´od Linuxu linux-rpi-3.10.y“ a soubor pojmenujeme jako .config“. ” ” M´ame-li vhodnou konfiguraci, napˇr´ıklad z jiˇz bˇeˇz´ıc´ıho syst´emu, kterou chceme zachovat a pouze nastavit dosud nezvolen´e a nov´e moˇznosti, pouˇzijeme n´asleduj´ıc´ı pˇr´ıkaz. make oldconfig
Pˇr´ıkaz vyvol´a jednoduch´eho pr˚ uvodce, v kter´em nastav´ıme pouze nov´e volby a star´e z˚ ustanou nastaven´e jak byly. Pokud souhlas´ıme s pˇrednastavenou volbou, kter´a je vyznaˇcena velk´ ym p´ısmenem ˇci ˇsipkou, staˇc´ı pokraˇcovat d´ale kl´avesou Enter. Uk´azka v´ ypisu: ... Enable DMI scanning ( DMI ) [ Y / n /?] y GART IOMMU support ( GART_IOMMU ) [ Y / n /?] y IBM Calgary IOMMU support ( CALGARY_IOMMU ) [ N / y /?] n Preemption Model > 1. No Forced Preemption ( Server ) ( PREEMPT_NONE ) 2. Voluntary Kernel Preemption ( Desktop ) ( PR EEMPT_ VOLUNT ARY ) 3. Preemptible Kernel ( Low - Latency Desktop ) ( PREEMPT__LL ) ( NEW ) 4. Preemptible Kernel ( Basic RT ) ( PREEMPT_RTB ) ( NEW ) 5. Fully Preemptible Kernel ( RT ) ( PREEMPT_RT_FULL ) ( NEW ) choice [1 -5]: 5 ...
V´ ypis obsahuje d˚ uleˇzitou ˇca´st. Po nahr´an´ı rozˇs´ıˇren´ı do zdrojov´eho k´odu j´adra se rozˇs´ıˇrily moˇznosti v´ ybˇeru Preemption Model“, konkr´etnˇe o volbu 4 a 5. Pro tuto ” u ´lohu je pouˇzita volba 5 Fully Preemptible Kernel (RT) (PREEMPT RT FULL) ” (NEW)“. Druh´a moˇznost konfigurace je pomoc´ı n´asleduj´ıc´ıho pˇr´ıkazu. Rozd´ıl oproti pˇredchoz´ımu zp˚ usobu konfigurace je takov´ y, ˇze se nezept´a na vˇse dosud nenastaven´e, ale mus´ıte si naj´ıt konkr´etn´ı volbu, kterou chcete nastavit. make menuconfig
Vyvol´a jednoduch´e grafick´e prostˇred´ı jako je na obr´azku 3.1, kter´ y ukazuje opˇet d˚ uleˇzitou volbu s nastaven´ım Preemption Model“. Volba je um´ıstˇena pod volbou ” Processor type and features —>“ a v n´ı je moˇznost Preemption Model (Fully ” ” Preemptible Kernel (RT)) —>“. Posledn´ı konfigurace pˇred spuˇstˇen´ım kompilace, se t´ yk´a promˇenn´ ych termin´alov´eho prostˇred´ı. Mus´ıme zvolit vhodnou architekturu a uloˇzit ji do promˇenn´e s n´a25
Kapitola 3 - Linux a real-time rozˇs´ıˇren´ı zvem ARCH“. Dalˇs´ı volba se t´ yk´a kompilaˇcn´ıho n´astroje, kter´ y se nach´az´ı ve sloˇzce ” tools-master“. Do promˇenn´e CROSS COMPILER“ mus´ıme uloˇzit cestu pouˇzit´eho ” ” kompilaˇcn´ıho n´astroje. A posledn´ı promˇenn´a s n´azvem INSTALL MOD PATH“ ” urˇcuje um´ıstnˇen´ı pro novˇe zkompilovan´e moduly. Pokud bychom vynechali tuto volbu, zavedli by jsme novˇe vytvoˇren´e moduly do aktu´alnˇe bˇeˇz´ıc´ıho syst´emu. K nastaven´ı promˇenn´eho prostˇred´ı termin´alu jsou urˇceny n´asleduj´ıc´ı pˇr´ıkazy. export ARCH = arm export CROSS_COMPILE = " / adresar / obsahujici / soubory / tools - master / arm - bcm2708 / gcc - linaro - arm - linux - gnueabihf - raspbian / bin / arm linux - gnueabihf - " mkdir " / adresar / obsahujici / soubory / moduly " export INSTALL_MOD_PATH = " / adresar / obsahujici / soubory / moduly "
Obr´azek 3.1: GUI pro konfiguraci j´adra pˇred kompilac´ı. Kompilace se opˇet mus´ı spustit z adres´aˇre obsahuj´ıc´ıho zdrojov´ y k´od. Prvn´ı pˇr´ıkaz z dalˇs´ı sady pˇr´ıkaz˚ u, se postar´a o pˇresun do spr´avn´eho um´ıstˇen´ı. Druh´ y pˇr´ıkaz spust´ı kompilaci kernelu, neboli j´adra. Zb´ yvaj´ıc´ı pˇr´ıkazy pust´ı kompilaci modul˚ u a n´asledn´e instalov´an´ı, v naˇsem pˇr´ıpadˇe nakop´ırov´an´ı do um´ıstˇen´ı nastaven´eho v promˇenn´e INSTALL MOD PATH“. ” cd / adresar / obsahujici / soubory / linux - rpi -3.10. y make bzImage make modules make modules_install
Pˇr´ıkaz make je vhodn´e pouˇz´ıt s parametrem -j N, kde N je poˇcet bˇeˇz´ıc´ıch proces˚ u, kter´e prov´ad´ı kompilaci najednou. Pokud pouˇzijeme pouze -j, tak poˇcet proces˚ u nen´ı omezen. V pˇr´ıpadˇe, ˇze prov´ad´ıme kompilaci na jedno j´adrov´em procesoru, tak tento parametr nem´a aˇz takov´ y v´ yznam. V´ıce informac´ı obsahuj´ı manu´alov´e str´anky Linuxu (pˇr´ıkaz man make). 26
Kapitola 3 - Linux a real-time rozˇs´ıˇren´ı Kompilace se na bˇeˇzn´em notebooku provede do jedn´e hodiny. RPi kompiluje mnohem d´ele. Kompilace bˇeˇzela pˇres jeden den a pot´e mi syst´em zamrzl, takˇze nem´am ani pˇribliˇzn´ yu ´daj, jak dlouho m˚ uˇze trvat. Radˇeji doporuˇcuji cross kompilaci, doc´ıl´ıte velk´e u ´spory ˇcasu.
3.1.3
Zaveden´ı nov´ eho j´ adra
Pokud kompilace probˇehne v poˇra´dku aˇz do konce, objev´ı se v pracovn´ım adres´aˇri na cestˇe linux-rpi-3.10.y/arch/arm/boot“ soubor s n´azvem zImage“. D´ale tak´e sloˇzka ” ” moduly“ bude obsahovat adres´aˇr lib“, kde jsou obsaˇzeny moduly zkompilovan´e pro ” ” nov´e j´adro. Nyn´ı mus´ıme zav´est do jiˇz nainstalovan´eho syst´emu j´adro i s moduly. Pˇrekop´ırujeme soubor zImage“ na pamˇet’ovou kartu na odd´ıl boot“ pˇr´ımo do koˇrenov´eho ad” ” res´aˇre odd´ılu. Doporuˇcuji soubor pˇrejmenovat na aktu´aln´ı verzi j´adra, napˇr´ıklad jako zImage-3.10.26-rt24“. Moduly se skl´adaj´ı ze dvou adres´aˇr˚ u lib/firmware“ a lib/” ” ” modules“. Obsah sloˇzky modules“, kter´a obsahuje podsloˇzky pojmenovan´e podle ” verze j´adra, bude tˇreba pˇrekop´ırovat na druh´ y odd´ıl pamˇet’ov´e karty boot “ do ” um´ıstnˇen´ı /lib/modules“. N´azvy sloˇzek s moduly, by se nemˇely shodovat, protoˇze ” za aktu´alnˇe zkompilovanou verz´ı bude pˇrid´ano -rt“, pokud se vˇsak shodovat budou, ” doporuˇcuji pro jistotu, jednoduch´e pˇrejmenov´an´ı st´avaj´ıc´ıho adres´aˇre na jin´e jm´eno. Sloˇzku firmware“ nen´ı potˇreba kop´ırovat. ” Nakonec je potˇreba zmˇenit konfiguraˇcn´ı soubory, kter´e se nach´azej´ı v odd´ılu boot“. Jedn´a se o soubor config.txt“, kde se mus´ı zmˇenit parametr kernel=“ ” ” ” na n´azev aktu´aln´ıho souboru s j´adrem. M˚ uˇzete m´ıt v syst´emu v´ıce jader a pomoc´ı zmˇeny tohoto parametru urˇcovat, kter´e j´adro se naˇcte. Doporuˇcuji tedy vˇsechny ˇra´dky zaˇc´ınaj´ıc´ı kernel=“ v souboru zakomentovat pomoc´ı #“ a pˇridat ˇra´dek ” ” kernel=zImage-3.10.26-rt24“. Posledn´ı zmˇenu provedeme v konfiguraˇcn´ım souboru ” cmdline.txt“ a to pˇrid´an´ım parametru sdhci bcm2708.enable llm=0“ na konec ” ” souboru, pokud pouˇz´ıv´ame kartu typu SD. Bez toho parametru by se zaseklo naˇc´ıt´an´ı syst´emu. V pˇr´ıpadˇe karty typu MMC pˇriˇrad´ıme parametru hodnotu 1. Syst´em je nyn´ı pˇripraven k pouˇzit´ı s RPi.
27
Kapitola 3 - Linux a real-time rozˇs´ıˇren´ı
3.2 3.2.1
Test syst´ emu Jednoduch´ e vl´ akno
V syst´emu jsem vytvoˇril vl´akno, kter´e bˇeˇzelo s vysokou prioritou (98) a politikou pl´anov´an´ı FIFO. Bylo cyklicky volan´e s frekvenc´ı 1 kHz. Vykon´avalo pouze ukl´ad´an´ı ˇcasu do pole, pro n´asledn´e vyps´an´ı a hl´ıd´an´ı poˇctu opakov´an´ı na 600 000, coˇz je 10 minut. Po dobˇehnut´ı test vytvoˇr´ı soubor vystup.csv“, ve kter´em je ˇcetnost jed” notliv´ ych nepˇresnost´ı pl´anov´an´ı. V´ ysledek je vidˇet v podobˇe grafu na obr´azku 3.2, kde hodnota nuly odpov´ıd´a ˇcasu 1 ms od pˇredchoz´ıho spuˇstˇen´ı vl´akna. Z testu je vidˇet, ˇze pˇrev´aˇzn´a vˇetˇsina vzork˚ u vykazuje chybu kolem -2.5 µs aˇz 5 µs. Zdrojov´ y k´od testu je v pˇr´ıloze A s n´azvem souboru vlakno test planovani 1kHz.c“ ve sloˇzce ” test“ a kompilace se provede n´asleduj´ıc´ım pˇr´ıkazem. ” gcc - lrt - lpthread v l a k n o _ t e s t _ p l a n o v a n i _ 1 k H z . c
Z grafu je patrn´e, ˇze se jednotky ˇcasu v syst´emu pohybuj´ı kolem 1 µs a to i kdyˇz syst´em vrac´ı nejmenˇs´ı jednotuku 1 ns. Body, kter´e jsou na grafu vykresleny pod sebou, jsou zaznamen´any s rozd´ılem 1 ns. Graf z obr´azku 3.3 je vytvoˇren souˇctem hodnot ˇcetnost´ı v bodech s okol´ım do ±1 ns a je vykreslen jako spojit´a funkce.
28
Kapitola 3 - Linux a real-time rozˇs´ıˇren´ı
16 14 12
četnost [%]
10 8 6 4 2 -25
-20
-15
-10
-5
0
0
5
10
15
20
25
čas [us]
ˇ Obr´azek 3.2: Cetnost chyb pl´anov´an´ı proces˚ u.
16
14
12
Cetnost[%]
10
8
6
4
2
0 −20
−15
−10
−5
0 Cas[us]
5
10
15
Obr´azek 3.3: Seskupen´e ˇcetnosti chyb pl´anov´an´ı proces˚ u.
29
20
Kapitola 3 - Linux a real-time rozˇs´ıˇren´ı
3.2.2
Cyclictest
Syst´em jsem otestoval s testem, kter´ y se jmenuje Cyclictest. Informace o testu jsou dostupn´e ve zdroji [14], kde je k dispozici zdrojov´ y k´od i s n´avodem, jak tento test pouˇz´ıt. V´ ysledky testu jsou takov´e, ˇze pˇri zat´ıˇzen´ı syst´emu r˚ uzn´ ymi zp˚ usoby najednou, se pohybovala pˇresnost pl´anov´an´ı real-time procesu s vysokou prioritou v ˇra´dech kolem des´ıtek µs. K RPi jsem se pˇripojil pˇres ˇctyˇri SSH termin´aly. Kaˇzd´ y z nich zamˇestn´aval syst´em jinou ˇcinnost´ı: find / . . . . . . . . . . . . . . . . . . v´ ypis stromu soubor˚ u, pro zamˇestn´an´ı vstupu a v´ ystupu while true; do true; done . . . . . . . nekoneˇcn´a smyˇcka, pro zamˇestn´an´ı procesoru htop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sledov´an´ı syt´emu cyclictest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . test prodlevy pl´anov´an´ı Test jsem nechal bˇeˇzet po celou dobu v´ ypisu stromu souboru syst´emu. Konkr´etnˇe s tˇemito parametry se pustilo jedno vl´akno s prioritou 99 a frekvenc´ı 1 kHz. V´ ysledek byl n´asleduj´ıc´ı v´ ypis: sudo cyclictest - t1 -p 99 -n -i 1000 / dev / cpu_dma_latency set to 0 us policy : fifo : loadavg : 2.75 1.66 0.74 2/89 2796 T : 0 ( 2789) P :99 I :1000 C : 51 Max : 111
90502 Min :
16 Act :
52 Avg :
V´ ysledkem je, ˇze maxim´aln´ı latence ˇcek´an´ı byla 111 µs, pr˚ umˇern´a prodleva 51 µs a minim´aln´ı 16 µs, pˇri stoprocentn´ı z´atˇeˇzi procesoru a tak´e z´atˇeˇzi vstupnˇe v´ ystupn´ıch periferi´ı. Vyzkouˇsel jsem spustit test i bez zat´ıˇzen´ı syst´emu. Parametry nastavuj´ı test tak, aby spustil pˇet vl´aken s prioritou 80. sudo cyclictest - t5 -p 80 -n -i 1000 policy : fifo : loadavg : 0.27 0.22 0.19 1/79 2351 T : 0 ( 2347) P :80 I :1000 C : 51489 Min : 13 Act : 44 85 T : 1 ( 2348) P :80 I :1500 C : 34327 Min : 16 Act : 21 93 T : 2 ( 2349) P :80 I :2000 C : 25748 Min : 15 Act : 38 62 T : 3 ( 2350) P :80 I :2500 C : 20598 Min : 16 Act : 19 79 T : 4 ( 2351) P :80 I :3000 C : 17165 Min : 16 Act : 21 100
Avg : 25 Max : Avg : 26 Max : Avg : 24 Max : Avg : 26 Max : Avg : 25 Max :
Vl´akna maj´ı r˚ uzn´e periody a to T = 1000 + k · 500, kde k ∈ {0, 1, 2, 3, 4}. Z testu je vidˇet ze pr˚ umˇern´a chyba naˇcasov´an´ı je pˇribliˇznˇe poloviˇcn´ı a to 25 µs.
30
Kapitola 4 - Stejnosmˇern´ y motorek
ˇ ´ MOTOREK 4. STEJNOSMERN Y 4.1
Popis
Jako objekt pro ˇr´ızen´ı jsem pouˇzil stejnosmˇern´ y motor, se kter´ ym se vyuˇcuje podobn´a u ´loha ˇr´ızen´ı (v´ıce informac´ı ve zdroji [18]). Motor je pˇripraven k ˇr´ızen´ı se svoj´ı ˇ sen´ı je vidˇet na obr´azku vnitˇrn´ı elektronikou a vˇse je zahrnuto v jedn´e krabiˇcce. Reˇ 4.1a. Origin´aln´ı dokumentace a informace k tomuto ˇreˇsen´ı jsou dostupn´e ve zdroj´ıch [15], [16] a [17]. Sch´ema motoru je obsaˇzeno v pˇr´ıloze C na konci pr´ace.
(b) Rozhran´ı CANON 25 (a) Motor
Obr´azek 4.1: Pouˇzit´ y motor. K motoru vedou dva kabely. Jeden je nap´ajec´ı a druh´ y slouˇz´ı jako vstup pro ovl´ad´an´ı a v´ ystup zpˇetn´e vazby. Energii dod´av´a 24 V zdroj napˇet´ı a nap´ajec´ı konektor je rozdˇelen na dva klasick´e tzv. ban´ankov´e konektory. Kabel pro pˇriveden´ı ˇr´ıdic´ıch sign´al˚ u a v´ ystup zpˇetn´e vazby je zakonˇcen´ y konektorem typu CANON 25, kter´ y je vidˇet na obr´azku 4.1b. Toto rozhran´ı obsahuje 25 pin˚ u, funkˇcn´ıch je vˇsak jen 6. Sch´ematick´e rozhran´ı je vidˇet na obr´azku 4.2 a popis funkc´ı jednotliv´ ych pin˚ u je uveden v tabulce 4.1.
2 3
10
12 13
Pin
Funkce
Oznaˇ cen´ı
2 3 10 12 13 25
Ot´aˇcen´ı doprava Ot´aˇcen´ı doleva Pˇreruˇsen´ı IRC prvn´ı kan´al IRC druh´ y kan´al Uzemnˇen´ı
PWM-R PWM-L IRQ IRC1 IRC2 GND
25
Obr´azek 4.2: Sch´ema rozhran´ı.
Tabulka 4.1: Funkce pin˚ u konektoru motoru.
31
Kapitola 4 - Stejnosmˇern´ y motorek Elektronika motoru obsahuje v´ ykonov´ y H m˚ ustek, kter´ y umoˇzn ˇuje ˇr´ıdit smˇer ot´aˇcen´ı, tj. pˇriv´est na motor napˇet´ı o obou polarit´ach. Pro zpˇetnou vazbu je na hˇr´ıdel motoru pˇripojen´ y dvoukan´alov´ y rotaˇcn´ı inkrement´aln´ı senzor (IRC). Druh´ y 1 kan´al je posunut o /4 d´elky periody oproti prvn´ımu. Na jedno otoˇcen´ı hˇr´ıdele pˇripad´a 100 pulz˚ u od kaˇzd´eho kan´alu. Elektronika motoru obsahuje obvod generuj´ıc´ı impulz pˇreruˇsen´ı (IRQ) pˇri kaˇzd´e zmˇenˇe kter´ehokoliv z obou kan´al˚ u, tedy 400 impulz˚ u za celou ot´aˇcku hˇr´ıdele. Obr´azek 4.3 ukazuje pr˚ ubˇeh sign´al˚ u IRC1, IRC2 a IRQ pro konstantn´ı rychlost ot´aˇcen´ı. V´ ystupn´ı logika je 5 V. Maxim´aln´ı ot´aˇcky motoru se zdrojem 24 V jsou pˇribliˇznˇe 4200 ot/min, tedy maxim´aln´ı frekvence impulz˚ u IRQ kan´alu se pohybuje kolem 28 kHz.
IRC1 IRC2 IRQ Obr´azek 4.3: Graf pr˚ ubˇehu sign´alu IRC a IRQ z motoru.
4.2
Propojen´ı s Raspberry Pi
Logika RPi je 3.3 V bez tolerance pro 5 V logiku a RPi m´a pouze jeden v´ ystup schopn´ y generovat sign´al s pulznˇe ˇs´ıˇrkovou modulac´ı (PWM). Z tˇechto d˚ uvodu je nutn´e navrhnout propojovac´ı periferii mezi motorkem a RPi.
4.2.1
PWM a GPIO
Pro u ´ˇcel ˇr´ızen´ı servomotoru obsahuje RPi jiˇz hardwarovou podporu PWM, kter´a nezatˇeˇzuje procesor samotn´ ym vytv´aˇren´ım sign´alu. Je tˇreba ji jen spr´avnˇe nastavit a pouˇz´ıt. Dostupn´ y je pouze jeden kan´al schopn´ y generovat PWM sign´al a to konkr´etnˇe na rozhran´ı GPIO. Vlastn´ı ˇcip obsahuje i dalˇs´ı PWM periferie, ale ty nejsou pˇr´ımo pˇr´ıstupn´e na vnˇejˇs´ıch konektrorech. Pro v´ıce motor˚ u se d´a pomoc´ı ˇradiˇce DMA vytvoˇrit dalˇs´ı PWM, kter´e opˇet nebudou zatˇeˇzovat procesor samotnou generac´ı sign´alu, ale pouze jeho zmˇenou. Na toto rozˇs´ıˇren´ı je jiˇz pˇripraveno nˇekolik hotov´ ych ˇreˇsen´ı. Jedno z nich se jmenuje PiBlaster (viz. zdroj [25]). Rozhran´ı GPIO je na RPi realizov´ano nˇekolika konektory. Hlavn´ı konektor oznaˇcen´ y jako P1 je jiˇz pˇripraven k pouˇzit´ı. U ostatn´ıch se mus´ı pˇrip´ajet piny. Konektor P1 m´a vˇse, co je potˇreba pro ˇr´ızen´ı servomotoru. Kompletn´ı pˇrehled rozhran´ı typu GPIO a alternativn´ıch funkc´ı RPi se nach´az´ı na internetov´e adrese ve zdroji [10].
32
Kapitola 4 - Stejnosmˇern´ y motorek
Obr´azek 4.4: Rozhran´ı GPIO konektor P1 na Raspberry Pi.
Funkce
HW oznaˇ cen´ı
Funkce
3.3 V GPIO 2 GPIO 3 GPIO 4 GND GPIO 17 GPIO 27 GPIO 22 3.3 V GPIO 10 GPIO 9 GPIO 11 GND
P1-01 P1-03 P1-05 P1-07 P1-09 P1-11 P1-13 P1-15 P1-17 P1-19 P1-21 P1-23 P1-25
5V 5V GND GPIO 14 GPIO 15 GPIO 18 GND GPIO 23 GPIO 24 GND GPIO 25 GPIO 8 GPIO 7
P1-02 P1-04 P1-06 P1-08 P1-10 P1-12 P1-14 P1-16 P1-18 P1-20 P1-22 P1-24 P1-26
Tabulka 4.2: Rozhran´ı GPIO, konektor P1 na Raspberry Pi.
Konektor GPIO P1 je ploch´ y dvouˇrad´ y konektor (2x13 pin˚ u) s rozteˇc´ı 2,54 mm ’ mezi jednotliv´ ymi piny a tlouˇst kou pinu 0,6 mm. Zobrazen´ y je na obr´azku 4.4. Tabulka 4.2 obsahuje jm´ena pin˚ u shodn´a s dokumentac´ı [12]. Propojovac´ı periferie by mˇela m´ıt na jedn´e stranˇe tento typ konektoru, kter´ y je na obr´azku 4.7a, pro pˇripojen´ı k RPi. Na stranˇe druh´e konektor CANON 25 zobrazen´ y na obr´azku 4.7c pro pˇripojen´ı k motoru. D´ale mus´ı zajistit ovl´ad´an´ı s jednou PWM na oba smˇery a pˇrevod napˇet´ı z 5 V na 3.3 V. ˇ ızen´ı v obou smˇerech jsem realizoval vyuˇzit´ım dalˇs´ıho GPIO pinu, kter´ R´ y slouˇz´ı k volbˇe smˇeru ot´aˇcen´ı. Pro pˇrevod logick´ ych u ´rovn´ı jsem pouˇzil s´eriov´ y odporov´ y dˇeliˇc. V´ ybˇer vhodn´eho logick´eho ˇclenu byl konzultov´an s vedouc´ım pr´ace a sch´ema ˇreˇsen´ı ukazuje obr´azek 4.6.
Obr´azek 4.5: Zjednoduˇsen´e sch´ema ovl´ad´an´ı.
Smˇ er
PWM
L
R
0 0 1 1
0 1 0 1
0 0 0 1
0 1 0 0
Tabulka 4.3: Pravdivostn´ı tabulka.
V´ ysledn´e ˇreˇsen´ı je sloˇzeno z hradel typu NOR, z toho dvˇe jsou pouˇzit´a jako invertor spojen´ım vstup˚ u. Zjednoduˇsen´ y logick´ y obvod ukazuje obr´azek 4.5 s pravdivostn´ı tabulkou 4.3. Slovnˇe se d´a interpretovat jako: Pokud je hodnota smˇeru ” 33
Kapitola 4 - Stejnosmˇern´ y motorek v logick´e jedniˇcce a PWM generuje sign´al, motor se ot´aˇc´ı vlevo. Pokud je hodnota smˇeru v logick´e nule a PWM generuje sign´al, motor se ot´aˇc´ı vpravo. A v pˇr´ıpadˇe, ˇze sign´al PWM nen´ı generov´an, neot´aˇc´ı se motor na ˇza´dnou stranu.“ Zdvojen´ı sign´alu IRC1 a IRC2 na dva r˚ uzn´e piny GPIO bylo provedeno pˇri snaze o vylepˇsen´ı z´ısk´av´an´ı informace ze zpˇetn´e vazby motoru. Podrobnosti o tomto kroku jsou zm´ınˇeny d´ale v sekci 5.2.
Obr´azek 4.6: Sch´ema rozhran´ı mezi Raspberry Pi a motorem. V´ ysledn´e ˇreˇsen´ı v podobˇe ruˇcnˇe nap´ajen´eho obvodu, zobrazuje obr´azek 4.7.
(a) Konektor GPIO. (c) Konektory CANON 25. (b) Obvod.
Obr´azek 4.7: Propojovac´ı obvod.
34
ˇ ıdic´ı software Kapitola 5 - R´
ˇ ´IDIC´I SOFTWARE 5. R 5.1
Z´ akladn´ı popis
ˇ ıdic´ı software je navrˇzen tak, jak ukazuje diagram na obr´azku 5.1. Jm´eno proR´ gramu je servoPi a v z´akladu je rozdˇelen na ˇsest komponent. Prvn´ı komponentou je servoPi modul, kter´ y zpracov´av´a zpˇetnou vazbu z motoru. S vysokou prioritou bˇeˇz´ı vl´akno threadRT control, kter´e zajiˇst’uje periodick´e ˇr´ızen´ı. D´ale je navrˇzeno grafick´e rozhran´ı servoPi gui pro ovl´ad´an´ı a to vyuˇz´ıv´a program˚ u servoPi send a servoPi server. Program servoPi send bˇeˇz´ı jako periodick´e vl´akno s niˇzˇs´ı prioritou a je urˇceno k odes´ıl´an´ı aktu´aln´ı pozice natoˇcen´ı hˇr´ıdele motoru v ˇcase. K u ´ˇcelu zobray umoˇzn ˇuje jednozov´an´ı zpˇetn´e vazby tak´e slouˇz´ı program servoPi webserver, kter´ duch´e sledov´an´ı pˇres internetov´ y prohl´ıˇzeˇc. Posledn´ı program servoPi server pˇrijme poˇzadovanou hodnotu, na kterou m´a regul´ator regulovat ot´aˇcky a pˇred´a ji programu servoPi control, konkr´etnˇe vl´aknu thread readValue, kter´e bˇeˇz´ı s norm´aln´ı prioritou. Vˇsechny zdrojov´e k´ody programu se nach´azej´ı v pˇr´ıloze A ve sloˇzce servoPi a na odkazu ve zdroji [26]. Kaˇzd´a funkce je opatˇrena struˇcn´ ym koment´aˇrem, kter´ y vysvˇetluje u ´ˇcel funkce. Pokud jsou nˇekter´e ˇra´dky k´odu podstatn´e, ˇci neobvykl´e, jako nastaven´ı PWM, je koment´aˇr um´ıstˇen i u dan´eho ˇr´adku. Zdroje pro psan´ı programu jsou [1], [2], [3], [10], [13], [12] a [18]. Ze zdroj˚ u [1] a [2] jsem ˇcerpal pˇri tvorbˇe soketov´e komunikace program˚ u. Zdroj [3] jsem prostudoval a inspiroval se pro vytvoˇren´ı modulu do j´adra a tak´e obsahuje informace ohlednˇe Linuxu a syst´emov´eho ˇcasu. Namapov´an´ı adres registr˚ u vlastn´ıho ˇcipu RPi a potˇrebn´e makra pro pr´aci s GPIO periferi´ı obsahuje zdroj [10]. Pˇr´ıklad s jednoduch´ ym realtime vl´aknem je obsaˇzen ve zdroji [13]. Adresy registr˚ u s popisem funkc´ı se nach´azej´ı v dokumentaci [12]. A zdroj [18] odkazuje na obdobnou pr´aci, ze kter´e byl ˇcerp´an pˇr´ıklad s webov´ ym rozhran´ım.
5.2
Ovladaˇ c
Tato ˇca´st je implementovan´a jako modul, kter´ y se d´a zav´est do j´adra syst´emu. Pojmenovan´ y je servoPi modul a slouˇz´ı jako ovladaˇc, kter´ y um´ı pˇreˇc´ıst polohu natoˇcen´ı hˇr´ıdele v aktu´aln´ım ˇcase. Ovladaˇc bˇeˇz´ı v syst´emov´em reˇzimu (kernel space) a vyuˇz´ıv´a ke sv´e ˇcinnosti podp˚ urn´ ych funkc´ı a mechanizm˚ u j´adra Linuxu. Zapne potˇrebn´e GPIO piny pro vstup sign´alu. Provede registraci pˇreruˇsen´ı v procesoru na sign´al a pˇrev´ad´ı sign´al z motoru na polohu. Modul vyuˇz´ıv´a GPIO piny 7, 8, 23 a 24. Piny nakonfiguruje do funkce logick´eho vstupu a zaregistruje pro nˇe i pˇreruˇsen´ı na jednotliv´e n´abˇeˇzn´e a sestupn´e hrany. Sign´al IRC1, kter´ y je pˇriveden na GPIO pin 7 a 8, je zdvojen, aby bylo moˇzn´e rozliˇsit mezi vyvol´an´ım pˇreruˇsen´ı sestupnou, ˇci n´abˇeˇznou hranou. Stejnˇe tak je to se sign´alem IRC2 a GPIO piny 23 a 24. Provede se registrace ˇctyˇrech funkc´ı na 35
ˇ ıdic´ı software Kapitola 5 - R´
Raspberry Pi (C) servoPi_control
Motor
IRC
servoPi_modul
threadRT_control
thread_readValue
PWM PIPE servoPi_send servoPi_webserver
servoPi_server
PC pro ovladani (Java)
servoPi_gui
Prohlížeč
Obr´azek 5.1: Diagram ˇr´ıdic´ıho softwaru. pˇreruˇsen´ı vyvolan´em dvˇema sign´aly IRC. Kaˇzd´a z funkc´ı v´ı, jakou ud´alost´ı je vyvol´ana a neztr´ac´ı zjiˇstˇen´ım zdroje a stavu pin˚ u ˇcas d´ıky t´eto informaci. Zdvojen´ı je provedeno, protoˇze nelze zaregistrovat dvoj´ı pˇreruˇsen´ı (na sestupnou a na n´abˇeˇznou hranu) zvl´aˇst’ pro jeden GPIO pin. Procesor nedok´aˇze v jednom ˇcase vyvolat v´ıce funkc´ı pro zpracov´an´ı pˇreruˇsen´ı souˇcasnˇe a pˇrijet´ı pˇreruˇsen´ı a i vlastn´ı funkce urˇcitou dobu trv´a. Pokud pˇrich´az´ı ud´alosti o zmˇen´ach v rychlejˇs´ım sledu, neˇz odpov´ıd´a dobˇe nutn´e na jejich zpracov´an´ı, zaˇcne doch´azet ke ztr´at´am informace o poloze. V´ yˇse zm´ınˇenou optimalizac´ı funkc´ı a jejich vol´an´ı doˇslo k v´ yrazn´emu zv´ yˇsen´ı frekvence, do kter´e nedoch´az´ı ke ztr´at´am polohov´ ych inkrement˚ u oproti ˇreˇsen´ı ve zdroji [18], kter´e pokaˇzd´e poˇc´ıt´a smˇer ze znalosti pˇredeˇsl´eho stavu a aktu´aln´ıho stavu. V m´em ˇreˇsen´ı je potˇreba zjisti pouze aktu´aln´ı stav u druh´eho IRC sign´alu, jeˇz nevyvolal pˇreruˇsen´ı. Tabulka 5.1 ukazuje jak lze urˇcit smˇer pohybu. K zlepˇsen´ı pˇrisp´ıv´a i ukl´ad´an´ı informace o pˇredeˇsl´e hranˇe a smˇeru aktu´aln´ıho ot´aˇcen´ı. Pokud souhlas´ı poˇrad´ı v jak´em jsou hrany v dan´em smˇeru za sebou, nemus´ı se ani volat funkce pro zjiˇstˇen´ı hodnoty druh´eho sign´alu a rovnou se urˇc´ı smˇer. Funkce pro zjiˇstˇen´ı hodnoty druh´eho sign´alu, se vol´a vˇzdy na zaˇc´atku a pouze v pˇr´ıpadˇe vynech´an´ı informace pˇredeˇsl´eho inkrementu, protoˇze zpomaluje rychlost modulu a t´ım zp˚ usobuje nepˇresnosti. Jak je zm´ınˇeno v sekci 4.1, dan´ y motor m´a 200 sestupn´ ych a 200 n´abˇeˇzn´ ych hran, pˇri jedn´e ot´aˇcce hˇr´ıdele. Kaˇzd´e zjiˇstˇen´ı smˇeru (doprava/doleva) znamen´a posun o 1/400 ot´aˇcky. Informace se uchov´a v promˇenn´e datov´eho typu uint32 t. Tento 36
ˇ ıdic´ı software Kapitola 5 - R´ Sign´ al
Hrana
IRC1 IRC1
Sestupn´a Sestupn´a
IRC1 IRC1
N´abˇeˇzn´a N´abˇeˇzn´a
IRC2 IRC2
Sestupn´a Sestupn´a
IRC2 IRC2
N´abˇeˇzn´a N´abˇeˇzn´a
Druh´ e IRC (hodnota) Funkce 1 1 0 Funkce 2 1 0 Funkce 3 1 0 Funkce 4 1 0
Smˇ er LEVO PRAVO PRAVO LEVO PRAVO LEVO LEVO PRAVO
Tabulka 5.1: Tabulka pro urˇcen´ı smˇeru. datov´ y typ je bez znam´enkov´ y, celoˇc´ıseln´ y a m˚ uˇze nab´ yvat hodnot 0 aˇz (232 − 1). Nen´ı probl´em s pˇreteˇcen´ım, takˇze je to vhodn´ y datov´ y typ pro z´ısk´av´an´ı informace o rychlosti. Informaci o poloze, m˚ uˇze tak´e uchov´avat, pouze vˇzdy pˇri pˇreteˇcen´ı dojde ke ztr´atˇe pˇredeˇsl´e informace o absolutn´ı poloze. Pˇri zavol´an´ı ˇcten´ı ze souboru /dev/irc0“, modul vr´at´ı informaci o poloze. Jindy ” se poloha nevypisuje. Zdrojov´ y k´od modulu je obsaˇzen v pˇr´ıloze A (na DVD). N´azev souboru je ser” voPi modul.c“ a je um´ıstˇen v adres´aˇri servoPi/kernel modul“. Spoleˇcnˇe s n´ım je ” pˇripraven skript build.sh“, v kter´em je nutn´e zmˇenit spr´avnˇe cesty k um´ıstnˇen´ı ” dan´ ych soubor˚ u a n´asledn´ ym spuˇstˇen´ım se provede kompilace. Po u ´spˇeˇsn´em proveden´ı kompilace se v adres´aˇri objev´ı soubor typu kernel object s koncovkou .ko“. Pokud ponech´ate n´azvy, tak cel´ y n´azev vytvoˇren´eho souboru ” bude servoPi modul.ko. Ten se d´a do j´adra zav´est n´asleduj´ıc´ım pˇr´ıkazem. sudo insmod servoPi_modul . ko
Kontrola u ´spˇeˇsn´eho zaveden´ı se provede pˇr´ıkazem, kter´ y vytiskne na obrazovku v´ ypis z j´adra: dmesg
A pokud chceme modul odebrat, staˇc´ı zadat tento pˇr´ıkaz. sudo rmmod servoPi_modul
5.3
ˇ ıdic´ı program R´
Tento program se skl´ad´a ze dvou vl´aken. Prvn´ı je urˇceno pro ˇr´ızen´ı a druh´e pˇrij´ım´a hodnotu, kterou poˇzadujeme pro ˇr´ızen´ı. N´azev programu je servoPi control a m˚ uˇze
37
ˇ ıdic´ı software Kapitola 5 - R´ bˇeˇzet i samostatnˇe s modulem. Bude pak regulovat ot´aˇcky na pˇrednastavenou hodnotu 75 ot/min. Pokud chceme regulovat ot´aˇcky na jinou hodnotu, mus´ıme pouˇz´ıt ostatn´ı ˇca´sti. ˇ ıdic´ı program obsahuje funkce, kter´e pouˇzij´ı GPIO piny 14 a 18. Pin 14 pro R´ urˇcen´ı smˇeru ot´aˇcen´ı a pin 18 pro generov´an´ı sign´alu PWM. Piny jsou nakonfigurov´any pro funkci logick´eho v´ ystupu. Sign´al PWM je generov´an automaticky bez zat´ıˇzen´ı procesoru. V dokumentaci [12] je pops´ano, do kter´ ych registr˚ u je tˇreba zapsat konkr´etn´ı hodnoty, aby byl PWM sign´al specifikov´an. Nab´ız´ı nˇekolik r˚ uznˇe rychl´ ych zdroj˚ u hodinov´eho sign´alu, jejichˇz frekvence se d´a zmenˇsit pomoc´ı dvou dˇeliˇcek. Zvolil jsem frekvenci 25 kHz a podaˇrilo se mi nastavit rozliˇsen´ı stˇr´ıdy sign´alu na 0,025 %, neboli mohu zvolit hodnotu od 0 do 4000, kde 4000 se rovn´a 100 % stˇr´ıdˇe sign´alu.
5.3.1
Hlavn´ı vl´ akno
Vl´akno, kter´e obstar´av´a ˇr´ızen´ı, bˇeˇz´ı s vysokou real-time prioritou 95 a pl´anovac´ı politikou FIFO. Aktivovan´e je s frekvenc´ı 1 kHz. Vˇzdy zjist´ı novou hodnotu polohy natoˇcen´ı hˇr´ıdele ze souboru /dev/irc0“, kte” rou zpˇr´ıstupˇ nuje ovladaˇc servoPi modul. Motor dosahuje maxim´alnˇe 4200 ot/min a kaˇzd´a ot´aˇcka m´a 400 rozliˇsiteln´ ych stupˇ n˚ u polohy. S frekvenci 1 kHz m˚ uˇze nab´ yvat rychlost hodnot od -28 aˇz 28 v cel´ ych ˇc´ıslech. Takto rozdˇelen´ y rozsah poˇzadovan´e rychlosti je pˇr´ıliˇs hrub´ y. Proto je poˇc´ıt´an umˇel´ y vektor polohy. S kaˇzdou periodou se spoˇc´ıt´a hodnota umˇel´eho vektoru a n´aslednˇe se porovn´a s re´alnou polohou. Je t´ım dosaˇzen jemnˇejˇs´ı rozsah pro nastaven´ı rychlosti ot´aˇcen´ı. Princip tohoto rozˇs´ıˇren´ı je takov´ y, ˇze hodnota umˇel´eho vektoru je uchov´ana u vyˇsˇs´ıho v´ yznamu obsahuje v promˇenn´e datov´eho typu uint64 t. Prvn´ıch 32 bit˚ skuteˇcnˇe mˇeˇritelnou a z´aroveˇ n poˇzadovanou hodnotu polohy. Zbyl´ ych 32 bit˚ u obsahuje desetinnou ˇca´st. D´ale je zavedena promˇenn´a typu int64 t, kter´a obsahuje zmˇenu polohy za ˇcas s periodou 1 ms. Na zaˇc´atku kaˇzd´e periody se pˇriˇcte poˇzadovan´a zmˇena k umˇel´e poloze. Pot´e se chyba pouˇzit´a pro regulaci spoˇcte porovn´an´ım prvn´ıch nejvyˇsˇs´ı 32 bit˚ u z umˇel´eho vektoru polohy a skuteˇcnou polohou vr´acenou modulem. Tato chyba je d´ale posl´ana do funkce, kter´a obstar´av´a v´ ypoˇcet akˇcn´ıho z´asahu. Regul´ator je typu PID a protoˇze jsem nemˇel konkr´etn´ı poˇzadavky na chov´an´ı, je zvolen metodou pozorov´an´ı a manu´aln´ıho ladˇen´ı tak, aby byl syst´em stabiln´ı s co nejrychlejˇs´ım ust´alen´ım. Je pouˇzit jeden regul´ator na rychlost i na polohu. Poloha se reguluje pˇri nastaven´ı nulov´e rychlosti. Grafy ukazuj´ıc´ı pr˚ ubˇeh regulace ot´aˇcek jsou k vidˇen´ı na obr´azc´ıch 6.3a a 6.4a.
5.3.2
Nastavov´ an´ı hodnoty
Druh´e vl´akno, bˇeˇz´ıc´ı s niˇzˇs´ı prioritou, je urˇcen´e k pˇrijet´ı hodnoty z takzvan´e roury“, ” neboli PIPE. Hodnotu oˇcek´av´a ve form´atu int64 t s obsahem popsan´ ym v´ yˇse. Je to proto, aby nemusela b´ yt poˇc´ıt´ana v programu, kter´ y obstar´av´a ˇr´ızen´ı. Zamez´ı se t´ım pouˇz´ıv´an´ı datov´eho typu double, kter´ y vyˇzaduje matematicky koprocesor. 38
ˇ ıdic´ı software Kapitola 5 - R´ Hodnotu lze pos´ılat i jin´ ym programem a soubor obsahuj´ıc´ı rouru se nach´az´ı v um´ıstnˇen´ı /media/ramdisk/otackyFIFO“ 1 . ”
5.4
Server pro nastaven´ı hodnoty
Aplikace jako celek byla navrˇzena pro ˇr´ızen´ı pˇres s´ıt’. Pˇrijmut´ı poˇzadovan´e hodnoty, na kterou m´a b´ yt rychlost motoru regulov´ana, je na stranˇe RPi realizov´ano pomoc´ı ´ cel t´eto ˇca´sti je pˇrijmut´ı hodnoty t´eto ˇc´asti, kter´a je pojmenov´ana servoPi server. Uˇ yˇse typu double v ot/min, n´asledn´e pˇreveden´ı do datov´eho typu int64 t podle v´ zm´ınˇen´ ych poˇzadavk˚ u a odesl´an´ı do ˇc´asti servoPi control za pomoc´ı roury. Soubor se zdrojov´ ym k´odem obsahuje pˇr´ıloha A, pojmenovan´ y jako servoPi server.c“. ”
5.5
Klient pro pos´ıl´ an´ı hodnoty
Tato ˇc´ast je urˇcen´a k odes´ıl´an´ı hodnoty polohy a ˇcasu, kdy byla hodnota zaznamen´ana ze strany RPi. Je pos´ıl´ana na jin´ y poˇc´ıtaˇc v s´ıti a ten se n´aslednˇe star´a o dalˇs´ı zpracov´an´ı. Perioda vol´an´ı je zvolena tak, aby se st´ıhalo bez probl´em˚ u vykreslovat v dalˇs´ı ˇc´asti programu na 50 Hz. Vl´akno se tedy nemus´ı starat o pˇrevod z polohy na rychlost, ˇci vykreslov´an´ı, pouze pˇreˇcte a odeˇsle hodnotu, aby zbyteˇcnˇe nezatˇeˇzovalo RPi. Bˇeˇz´ı s norm´aln´ı prioritou a n´azev t´eto ˇc´asti je servoPi send. Zdrojov´ y k´od je k nalezen´ı v pˇr´ıloze A, pojmenovan´ y jako servoPi send.c“. ”
5.6
Webov´ e rozhran´ı
Podle vzoru pˇredmˇetu Programov´an´ı syst´emu re´aln´eho ˇcasu, jsem pˇridal k pr´aci webov´e rozhran´ı. Postupoval jsem podle n´avodu, kter´ y je urˇcen student˚ um tohoto pˇredmˇetu (viz. [18]). Na webovou str´anku, kter´a obsahuje informace v podobˇe grafu rychlosti ot´aˇcen´ı motoru, se dostanete zad´an´ım IP adresy RPi do adresn´ıho ˇr´adku prohl´ıˇzeˇce a pro komunikaci vyuˇz´ıv´a portu 8080. Str´anka se automaticky obnovuje po 0,2 s a jednotky grafu jsou na horizont´aln´ı ose v ms a na vertik´aln´ı ose v ot/s. Program jsem pojmenoval servoPi webserver. Soubor se zdrojov´ ym k´odem je k nalezen´ı v pˇr´ıloze A, konkr´etnˇe na cestˇe servoPi/servoPi webserver.c“. ”
5.7
Grafick´ y program
Posledn´ı ˇca´st´ı celku je aplikace servoPi gui. Jako jedin´a ze zm´ınˇen´ ych ˇca´st´ı byla naprogramov´ana v jazyce Java. Volba zm´ınˇen´eho jazyka byla pouˇzita z d˚ uvodu 1
K sloˇzce ”/media/ramdisk”je pˇripojen svazek, kter´ y je realizovan´ y souborov´ ym syst´emem tmpfs, kter´ y data ukl´ ad´ a pouze do pamˇeti RAM (nastaven´ y limit 10 MB). Nen´ı vˇsak nutn´e m´ıt toto rozˇs´ıˇren´ı, program bude fungovat i bez nˇej.
39
ˇ ıdic´ı software Kapitola 5 - R´
Obr´azek 5.2: Webov´e rozhran´ı. jednoduch´e objektov´e implementace grafick´eho panelu i s plynul´ ym vykreslov´an´ım. Program je urˇcen k pouˇzit´ı na jin´em poˇc´ıtaˇci na s´ıti, tedy nezatˇeˇzuje vykreslov´an´ım a pˇrepoˇc´ıt´av´an´ım RPi. Realizov´ana je struktura objekt˚ u, kter´e uchov´avaj´ı informaci o poloze v ˇcase a tak´e um´ı vr´atit pr˚ umˇern´e rychlosti v ˇcasech. Tyto informace jsou pouˇzity pro vykreslen´ı na bˇeˇzn´em formul´aˇri v podobˇe grafu. Graf obsahuje moˇznost nahl´ıˇzet do historie 1 s aˇz 20 s. Aktu´aln´ı data se vykresluj´ı v lev´e ˇc´asti a jsou posouv´any vpravo. Pˇri zpomalen´ı ot´aˇcek na rychlost -199 ot/min aˇz 199 ot/min se zaˇcne jeˇstˇe vykreslovat koleˇcko zn´azorˇ nuj´ıc´ı natoˇcen´ı hˇr´ıdele (viz. obr´azek 5.3a). Cel´ y graf se d´a pozastavit a n´aslednˇe opˇet pustit. Formul´aˇr d´ale obsahuje posuvn´ık, kter´ ym se nastavuje rychlost ot´aˇcen´ı. Pro pˇresnˇejˇs´ı nastaven´ı je urˇceno textov´e pole s tlaˇc´ıtkem k odesl´an´ı. V lev´e doln´ı ˇca´sti se nach´az´ı ˇc´ıselnˇe vyj´adˇren´a hodnota aktu´aln´ı rychlosti v jednotk´ach ot/min pr˚ umˇerov´ana za posledn´ıch 5 vzork˚ u. Pˇr´ıklad vykreslen´eho grafu je vidˇet na obr´azku 5.3b a jednotky horizont´alnˇe oddˇelen´ ych u ´rovn´ı jsou v ot/min. Zdrojov´ y k´od ˇca´sti obsahuje pˇr´ıloha A, konkr´etnˇe v archivu zip se jm´enem souboru servoPi gui.zip“. ”
5.8
Porovn´ an´ı zobrazovac´ıch program˚ u
Pravdˇepodobnˇe by se dal s nˇekterou z dneˇsn´ıch webov´ ych technologi´ı vytvoˇrit plynule se vykresluj´ıc´ı graf, ale poˇra´d je tu probl´em, ˇze se o vytv´aˇren´ı grafu mus´ı postarat server. Coˇz je v tomto pˇr´ıpadˇe RPi, kter´e je t´ımto zatˇeˇzov´ano dalˇs´ı u ´lohou pˇrepoˇc´ıt´av´an´ı polohy na rychlost atd. Zbyteˇcn´e pˇrenosy cel´e webov´e str´anky a komunikace s prohl´ıˇzeˇcem, jsou tak´e dalˇs´ı pˇr´ıtˇeˇz´ı. 40
ˇ ıdic´ı software Kapitola 5 - R´
(a) Vykreslen´ı polohy.
(b) Vykeslen´ı grafu rychlosti.
Obr´azek 5.3: Program servoPi gui. Oproti tomu m´e ˇreˇsen´ı s grafick´ ym rozhran´ım, kter´e pˇrij´ım´a pouze statick´a data (ˇcas a polohu v ˇcase), nezatˇeˇzuje RPi niˇc´ım jin´ ym neˇz odesl´an´ım p´ar bajt˚ u informac´ı. Nav´ıc je graf vykreslov´an pr˚ ubˇeˇznˇe a je moˇzn´e jej pozastavit, ˇci zvolit ˇcasov´ y rozsah. V neposledn´ı ˇradˇe pˇrepoˇcty z polohy na rychlost, prov´ad´ı poˇc´ıtaˇc, kter´ y se nestar´a o ˇr´ızen´ı motoru.
41
Kapitola 6 - Ovˇeˇren´ı a moˇznosti RPi
ˇ REN ˇ ´I A MOZNOSTI ˇ 6. OVE RPI 6.1
Frekvenˇ cn´ı moˇ znosti sn´ım´ an´ı zpˇ etn´ e vazby
Funkce modulu, neboli urˇcen´ı aktu´aln´ı rychlosti, byla ovˇeˇrena pomoc´ı osciloskopu. V´ ysledek je zobrazen v grafu (viz. obr´azek 6.1). Na osciloskopu byl mˇeˇren sign´al IRQ a RPi mˇeˇrilo sign´al z dvoukan´alov´eho IRC senzoru. Hodnoty frekvenc´ı se i pˇri nastaven´ı urˇcit´e pevn´e stˇr´ıdy nepatrnˇe mˇenily a protoˇze bylo vˇse odeˇcteno ruˇcnˇe, mˇeˇren´ı podl´eh´a t´eto chybˇe. Frekvence byla pˇrepoˇc´ıt´ana na ot´aˇcky za vteˇrinu a vˇetˇs´ı patrnost rozd´ılu je vidˇet v grafu na obr´azku 6.2, kter´ y zobrazuje rozd´ıl ot´aˇcek za vteˇrinu.
80 70
Rotace[ot./s]
60 50 40 30 20 10 0 −100
RPi Osciloskop −50
0 Výkon[%]
50
100
Obr´azek 6.1: Graf z´avislosti stˇr´ıdy a namˇeˇren´ ych ot´aˇcek. Stˇr´ıda v rozsahu od -50 % do 50 % (to odpov´ıd´a asi ±35 ot./s) je mˇeˇrena pˇresnˇeji. Od vyˇsˇs´ıch ot´aˇcek vznik´a chyba, kter´a jeˇstˇe v´ıce vzroste pˇri zat´ıˇzen´ı RPi. Nemoˇznost mˇeˇrit spr´avnˇe ot´aˇcky od vyˇsˇs´ıch frekvenc´ı zapˇr´ıˇcin´ı, ˇze ani regul´ator nem˚ uˇze regulovat ot´aˇcky na spr´avnou hodnotu. Pro tento konkr´etn´ı motor je tedy relativn´ı chyba kolem jednoho procenta, ale bez zat´ıˇzen´ı syst´emu. Pˇri zat´ıˇzen´ı syst´emu, hlavˇe vstupn´ıch a v´ ystupn´ıch periferi´ı, je chyba n´ahodn´a a vˇetˇs´ı. Zat´ıˇzen´ı procesoru mˇeˇren´ı neˇcin´ı nepˇresn´ ym.
42
Kapitola 6 - Ovˇeˇren´ı a moˇznosti RPi
0.8 0.7
Rotace[ot./s]
0.6 0.5 0.4 0.3 0.2 0.1 0 −100
−50
0 Výkon[%]
50
100
Obr´azek 6.2: Graf rozd´ılu namˇeˇren´ ych ot´aˇcek s RPi oproti osciloskopu.
6.2
Zhodnocen´ı ˇ r´ızen´ı motoru
Vzhledem k pˇredchoz´ımu mˇeˇren´ı, je dan´e, ˇze RPi nem˚ uˇze pˇresnˇe regulovat ot´aˇcky, protoˇze je nestihne bezchybnˇe mˇeˇrit pro vyˇsˇs´ı frekvence. Tedy regulov´an´ı ot´aˇcek velk´ ych rychlost´ı nen´ı pro samotn´e RPi vhodn´a u ´loha, pˇri potˇrebˇe vyˇsˇs´ı rychlosti a pˇresnosti. Pokud nen´ı potˇreba ˇr´ıdit rychlost na vyˇsˇs´ı ot´aˇcky nebo pˇri ˇr´ızen´ı polohy bude zajiˇstˇeno, ˇze referenˇcn´ı poloha se bude mˇenit maxim´alnˇe 14 IRC/ms, tak bude syst´em plnˇe pouˇziteln´ y. S ˇr´adovˇe poloviˇcn´ımi ot´aˇckami oproti maxim´aln´ım dan´eho motoru, je jiˇz rychlost regulovateln´a s relativnˇe velkou pˇresnost´ı. Vylepˇsen´ı, kter´e umoˇzn ˇuje zvolit mezi mnoha u ´rovnˇemi rychlost´ı, z´aroveˇ n zapˇr´ıˇcin´ı, ˇze je regulovan´a pr˚ umˇern´a rychlost a nikoliv aktu´aln´ı. M´a to za n´asledek, ˇze pokud na hˇr´ıdel p˚ usob´ı delˇs´ı dobu s´ıla, kterou akˇcn´ı z´asah nezvl´adne vyregulovat, potom pˇri uvolnˇen´ı t´eto s´ıly se regul´ator bude snaˇzit prodlevu dohnat a to 100% silou, aˇz dokud nevyrovn´a pr˚ umˇernou rychlost a pot´e se opˇet vr´at´ı ke spr´avn´emu regulov´an´ı rychlosti. Regulov´an´ı polohy je moˇzn´e pˇri nastaven´ı nulov´e rychlosti. Syst´em je vcelku schopn´ y vr´atit polohu pˇri vych´ ylen´ı do spr´avn´e pozice. Ale opˇet zde hraje roli mˇeˇren´ı z pˇredchoz´ı sekce. Tedy pokud se pˇri vych´ ylen´ı dos´ahne akˇcn´ıho z´asahu, kter´ y zp˚ usob´ı, ˇze rychlost motoru nebude kompletnˇe mˇeˇriteln´a, potom se ztrat´ı neurˇcit´ y poˇcet inkrement˚ u a poloha bude o tuto ztr´atu posunuta. Obr´azek 6.3a ukazuje regulaci ot´aˇcek na hranici bez ztr´atov´e oblasti mˇeˇren´ı pro 43
Kapitola 6 - Ovˇeˇren´ı a moˇznosti RPi 2100 ot/min a s nastaven´ım pevn´e stˇr´ıdy PWM, v pˇribliˇznˇe stejn´e oblasti rychlosti ot´aˇcen´ı, zobrazuje pr˚ ubˇeh obr´azek 6.3b. Podobnˇe pak obr´azeky 6.4a a 6.4b ukazuj´ı mˇeˇren´ı s regul´atorem a mˇeˇren´ı pevn´e stˇr´ıdy PWM v oblasti 4000 ot/min.
ˇ ızen´ı rychlosti pro 2100 ot/min. (a) R´
(b) Mˇeˇren´ı rychlosti s pevnˇe nastaven´ ym v´ ykonem motoru 48 %.
Obr´azek 6.3: Grafy rychlosti v oblasti s pˇresn´ ym mˇeˇren´ım.
44
Kapitola 6 - Ovˇeˇren´ı a moˇznosti RPi
ˇ ızen´ı rychlosti pro 4000 ot/min. (a) R´
(b) Mˇeˇren´ı rychlosti s pevnˇe nastaven´ ym v´ ykonem motoru 93 %.
Obr´azek 6.4: Grafy rychlosti v oblasti s nepˇresn´ ym mˇeˇren´ım. 45
Kapitola 7 - N´avrh u ´prav a zlepˇsen´ı
´ ´ ˇ ´I 7. NAVRH UPRAV A ZLEPSEN 7.1
Priority
Pˇri ovˇeˇrov´an´ı syst´emu a hled´an´ı moˇznost´ı, jak zpˇresnit mˇeˇren´ı, bylo zjiˇstˇeno, ˇze v j´adˇre Linuxu, rozˇs´ıˇren´eho o real-time pl´anovac´ı algoritmy, je moˇzn´e urˇcovat prioritu i pro vl´akna obsluhuj´ıc´ı pˇreruˇsen´ı. Pomoc´ı extern´ıho n´astroje schedtool byla zmˇenˇena priorita obsluˇzn´ ych vl´aken IRC sign´alu ze pˇrednastaven´e priority 50 na prioritu 90. D´ale pak byly pouˇzity jednotliv´e priority podle tabulky 7.1. Komponenta Priorita servoPi modul 90 servoPi control 89 servoPi send 55 servoPi server 51 Tabulka 7.1: Zvolen´e priority. Zaznamen´ano bylo v´ yrazn´e zlepˇsen´ı, jak mˇeˇren´ı, tak ˇr´ızen´ı. Mˇeˇren´ı jiˇz pravdˇepodobnˇe nepodl´ehalo procentu´aln´ı chybˇe a nejvyˇsˇs´ı zaznamenan´e ot´aˇcky pˇresahovaly hranici 4200 ot/min. Mˇeˇren´ı nebylo otestov´ano za pomoc´ı extern´ıho ovˇeˇren´ı, ale pouze za pomoc´ı programu servoPi. Prvn´ı test ukazuje obr´azek 7.1, kde byla nastavena pevn´a stˇr´ıda sign´alu PWM na hodnotu pˇribliˇznˇe 98 %. Mˇeˇren´ı se jev´ı jako stabiln´ı, aˇz na drobn´e v´ ykyvy, kter´e se projevovaly i pˇri mˇeˇren´ı osciloskopem v pˇredchoz´ı sekci 6.1. Kol´ıs´an´ı m˚ uˇze zp˚ usobovat nerovnomˇern´e rozloˇzen´ım tˇren´ı hˇr´ıdele motoru, ˇci nerovnomˇernost vynut´ı, nebo tak´e nestabilita zdroje energie pˇri zat´ıˇzen´ı. Druh´ y test byl proveden se zapnut´ ym regul´atorem ve ztr´atov´e oblasti zjiˇstˇen´e v pˇredchoz´ı kapitole 6. Pr˚ ubˇeh testu ukazuje obr´azek 7.2. O regulaci se d´a konstatovat, ˇze se jev´ı jako stabilnˇejˇs´ı a bez kol´ıs´an´ı, ale nebyla ovˇeˇrena extern´ımi mˇeˇr´ıc´ımi pˇr´ıstroji.
7.2
Webov´ e rozhran´ı
Jako lepˇs´ı implementaci webov´eho rozhran´ı by mohl b´ yt pouˇzit applet. Z programu servoPi gui by jiˇz nebylo obt´ıˇzn´e prov´est dˇedˇen´ı z tˇr´ıdy JApplet. ˇ sen´ı by zatˇeˇzovalo RPi pouze prvotn´ım nahr´an´ım grafick´e aplikace do proReˇ hl´ıˇzeˇce na stranu klienta, ale jinak by zachovalo vˇsechny v´ yhody n´avrhu programu servoPi. Nev´ yhodou oproti jednoduch´emu webov´emu rozhran´ı ze sekce 5.6 je nutnost m´ıt na klientsk´e stanici nainstalov´anu podporu pro jazyk Java.
46
Kapitola 7 - N´avrh u ´prav a zlepˇsen´ı
Obr´azek 7.1: Test mˇeˇren´ı pevnˇe nastaven´e stˇr´ıdy PWM na 98 %.
7.3
Regul´ atory
Rozˇs´ıˇren´ı na mnoho u ´rovn´ı nastaviteln´e rychlosti (viz. sekce 5.3.1) z´aroveˇ n zp˚ usobuje pˇresah pˇri zmˇenˇe poˇzadovan´e hodnoty. Obr´azek 7.3 ukazuje zelenˇe vyznaˇcenou barvou poˇzadovanou hodnotu, ˇcerven´e plochy ukazuj´ı hodnotu, jeˇz zp˚ usobuje akumulov´an´ı st´ale horˇs´ı pr˚ umˇern´e rychlosti a ˇzlut´e u ´seky, kter´e se naopak snaˇz´ı kompenzovat ztr´atu rychlosti. Proto m´a tak´e zmˇena pˇribliˇznˇe 50% pˇrekmitnut´ı oproti poˇzadovan´e hodnotˇe. Rozˇs´ıˇren´ı je ale potˇrebn´e, jinak by moˇznosti volby rychlost´ı byly pˇr´ıliˇs hrub´e. Zachov´an´ı t´eto jemnosti volby a z´aroveˇ n dosaˇzen´ı lepˇs´ı odezvy na zmˇenu je moˇzn´e s pˇrep´ın´an´ım regul´ator˚ u. Prvn´ı regul´ator reguluje aktu´aln´ı rychlost do pˇribliˇzn´e poˇzadovan´e rychlosti. N´aslednˇe se pˇrepne na regul´ator, kter´ y vyuˇz´ıv´a umˇel´ y vektor ˇ polohy. Reˇsen´ı nebylo odladˇeno do fin´aln´ı podoby. Probl´em je v spr´avn´em nastaven´ı jiˇz naintegrovan´e sloˇzky, kter´a zp˚ usobuje, ˇze po pˇrepnut´ı regul´ator˚ u se objev´ı kol´ıs´an´ı. Pokus zobrazuje obr´azek 7.4, kde je vidˇet nejprve lepˇs´ı pr˚ ubˇeh ust´alen´ı, ale po pˇrepnut´ı n´asleduje zm´ınˇen´e kol´ıs´an´ı.
47
Kapitola 7 - N´avrh u ´prav a zlepˇsen´ı
Obr´azek 7.2: Test regulace na 4050 ot/min.
Obr´azek 7.3: V´ yˇrez programu servoPi.
48
Kapitola 7 - N´avrh u ´prav a zlepˇsen´ı
Obr´azek 7.4: Pokus s pˇrep´ın´an´ım regul´ator˚ u.
49
Kapitola 8 - Z´avˇer
´ ER ˇ 8. ZAV Pr´ace ovˇeˇrila, ˇze je moˇzn´e pouˇz´ıt levnou platformu RPi pro zpˇetnovazebn´ı ˇr´ızen´ı rychlosti s inkrement´aln´ım senzorem ˇcistˇe softwarovˇe bez nutnosti n´avrhu periferie pro hardwarov´e zpracov´an´ı a ˇc´ıt´an´ı inkrement˚ u polohy. Pouˇzitelnost je ovˇsem limitov´ana maxim´aln´ı frekvenc´ı inkrement˚ u, kter´e je RPi a j´adro syst´emu Linux schopn´e zpracovat. Pro pouˇzit´ y motor (400 inkrement˚ u na ot´aˇcku, maxim´aln´ı rychlost 4200 ot/min) je ˇr´ızen´ı pˇri maxim´aln´ıch ot´aˇck´ach na hranici propustnosti syst´emu a pro v´ıce neˇz 2100 ot/min doch´az´ı jiˇz k obˇcasn´e ztr´atˇe inkrementu. Do frekvence 14 kHz byl kontroln´ım pozorov´an´ım na osciloskopu ovˇeˇren souhlas s rychlost´ı ot´aˇcen´ı mˇeˇrenou RPi. Od vyˇsˇs´ıch frekvenc´ı neˇz 14 kHz byl jiˇz rozd´ıl pozorovateln´ y t´ım v´ıce, ˇc´ım vyˇsˇs´ı byla frekvence (a rychlost ot´aˇcen´ı). Relativn´ı chybovost pro tento motor, kter´a dosahuje nejvyˇsˇs´ıch hodnot pˇri nejvˇetˇs´ı rychlosti ot´aˇcen´ı motoru, je s nezat´ıˇzen´ ym syst´emem kolem 1 % a pˇri zat´ıˇzen´ı syst´emu je u ´mˇern´a m´ıˇre zat´ıˇzen´ı pˇredevˇs´ım vstupnˇe v´ ystupn´ıch periferi´ı. Moˇznost regulovat ot´aˇcky je z´avisl´a od moˇznosti ot´aˇcky urˇcit. Pro prvn´ı polovinu rozsahu ot´aˇcek (tj. do 2100 ot/min) s pouˇzit´ ym motorem je regulace pˇresn´a a bez v´ ykyv˚ u (viz. 6.3a). Zbyl´ y rozsah vyˇsˇs´ıch ot´aˇcek je do urˇcit´e m´ıry regulovateln´ y (viz. 6.4a), ale n´ahodn´e chyby mˇeˇren´ı zp˚ usobuj´ı, ˇze regul´ator se snaˇz´ı chybu kompenzovat i pokud je re´aln´a rychlost spr´avn´a a to vede k dalˇs´ım chyb´am. Bˇehem posledn´ı f´aze ovˇeˇrov´an´ı syst´emu byly i znova hled´any moˇznosti sn´ıˇzen´ı poˇctu nezapoˇc´ıtan´ ych inkrement˚ u. Jako nejv´ yhodnˇejˇs´ı se uk´azalo ˇreˇsen´ı, kdy byly zv´ yˇseny priority pˇr´ısluˇsn´ ych vl´aken pro obsluhu pˇreruˇsen´ı. Toto ˇreˇsen´ı bylo nalezeno relativnˇe pozdˇe a potˇrebovalo by dalˇs´ı kolo d˚ ukladn´eho testov´an´ı. Ale i na z´akladˇe zbˇeˇzn´eho testov´an´ı lze pˇredpokl´adat odstranˇen´ı procentu´aln´ı chyby mˇeˇren´ı pˇri vysok´e rychlosti ot´aˇcen´ı. Za pˇredpokladu, ˇze v´ yˇse zm´ınˇen´a u ´prava opravdu vylepˇsila mˇeˇren´ı i ˇr´ızen´ı, se d´a konstatovat, ˇze Raspberry Pi je vhodn´e k ˇr´ızen´ı cel´eho rozsahu pouˇzit´eho motoru. Pravdˇepodobnˇe umoˇzn ˇuje i zpˇetnovazebn´ı ˇr´ızen´ı pro jin´e u ´lohy o jeˇstˇe vyˇsˇs´ıch frekvenc´ıch sn´ıman´ı zpˇetn´e vazby. Ale tyto skuteˇcnosti je nutn´e ovˇeˇrit.
50
Kapitola 8 - SEZNAM ZDROJ˚ U
Seznam zdroj˚ u
Seznam zdroj˚ u Knihy [1] MITCHELL, Mark; OLDHAM Jeffry; SAMUEL Alex. Pokroˇcil´e programov´an´ı v operaˇcn´ım syst´emu Linux. Praha : SoftPress s. r. o. 2002. 320 s. ISBN 80-8649729-1. [2] STONES Richard; MATTHEW Neil. Linux : Zaˇc´ın´ame programovat. Praha : Computer Press. 2000. 897 s. ISBN 80-7226-307-2. [3] JEL´INEK Luk´aˇs. J´adro syst´emu Linux : kompletn´ı pr˚ uvodce program´atora. Praha : Computer Press. 2008. 686 s. ISBN 978-80-251-2084-2. [4] MEMBRAY Peter; HOWS David. Learn Raspberry Pi with Linux. New York : Apress. 2013. 249 s. xix. ISBN 978-1-4302-4821-7. [5] UPTON Eben; HALFACREE Gareth. Raspberry Pi : User Guide. Chichester : Wiley. 2012. xiv. 248 s. ISBN 978-1-118-46446-5.
Internetov´ e zdroje [6] NOOBS setup | Raspberry Pi [online]. [cit. 2014-05-05]. Dostupn´e z: http:// www.raspberrypi.org/help/noobs-setup/ [7] Raspberry Pi · View topic - CONFIG PREEMPT RT on Raspberry Pi [online]. [cit. 2014-05-05]. Dostupn´e z: http://www.raspberrypi.org/forums/ viewtopic.php?t=39951 [8] RPi Kernel Compilation - eLinux.org [online]. [cit. 2014-05-05]. Dostupn´e z: http://elinux.org/RPi_Kernel_Compilation [9] INSTALLING OPERATING SYSTEM IMAGES ON LINUX [online]. [cit. 2014-05-05]. Dostupn´e z: http://www.raspberrypi.org/documentation/ installation/installing-images/linux.md [10] RPi Low-level peripherals [online]. [cit. 2014-05-05]. Dostupn´e z: http:// elinux.org/RPi_Low-level_peripherals [11] Raspberry Pi - Wikipedia [online]. [cit. 2014-05-05]. Dostupn´e z: http://cs. wikipedia.org/wiki/Raspberry_Pi [12] Broadcom - BCM2835 ARM Peripherals [online]. [cit. 2014-05-05]. Dostupn´e z: http://www.raspberrypi.org/wp-content/uploads/2012/02/ BCM2835-ARM-Peripherals.pdf 51
Kapitola - SEZNAM ZDROJ˚ U [13] Real-Time Linux Wiki [online]. [cit. 2014-05-05]. Dostupn´e z: https://rt. wiki.kernel.org/index.php/Main_Page [14] Cyclictest - RTwiki [online]. [cit. 2014-05-05]. Dostupn´e z: https://rt.wiki. kernel.org/index.php/Cyclictest [15] motor controller scheme [online]. 2004. [cit. 2014-05-05]. Dostupn´e z: https: //rtime.felk.cvut.cz/psr/cviceni/semestralka/sch-controller.pdf [16] Zapojeni konektoru [online]. 2004. [cit. 2014-05-05]. Dostupn´e z: https:// rtime.felk.cvut.cz/psr/cviceni/semestralka/sch-connectors.pdf ˇ [17] SOJKA Michal; SPINKA Ondˇrej. RTLinux Motor Controller [online]. [cit. 2014-05-05]. Dostupn´e z: https://rtime.felk.cvut.cz/psr/cviceni/ semestralka/slides-motor.pdf [18] Semestral Work - Motor Control [online]. [cit. 2014-05-05]. Dostupn´e z: https: //rtime.felk.cvut.cz/psr/cviceni/semestralka/ [19] WiringPi [online]. [cit. 2014-05-05]. Dostupn´e z: http://wiringpi.com/ [20] FrontPage - Raspbian [online]. [cit. 2014-05-05]. Dostupn´e z: www.raspbian. org
Seznam zdroj˚ u soubor˚ u a zdrojov´ ych k´ od˚ u [21] 2014-01-07-wheezy-raspbian [online]. [cit. 2014-05-05]. Dostupn´e z: http:// downloads.raspberrypi.org/raspbian_latest [22] raspberrypi/linux [online]. [cit. 2014-05-05]. Dostupn´e z: https://github.com/ raspberrypi/linux [23] Index of /pub/linux/kernel/projects/rt [online]. [cit. 2014-05-05]. Dostupn´e z: https://www.kernel.org/pub/linux/kernel/projects/rt/ [24] raspberrypi/tools [online]. [cit. 2014-05-05]. Dostupn´e z: https://github.com/ raspberrypi/tools [25] sarfata/pi-blaster [online]. [cit. 2014-05-05]. Dostupn´e z: https://github.com/ sarfata/pi-blaster/ [26] Ramese/servoPi [online]. [cit. 2014-05-05]. Dostupn´e z: https://github.com/ Ramese/servoPi/
52
Pˇr´ıloha A - DVD
Pˇr´ıloha A - DVD
A. DVD (Pro zdrojov´e k´ody je pouˇzita zkratka ZK.) Pˇriloˇzen´e DVD obsahuje n´asleduj´ıc´ı soubory: servoPi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adres´aˇr obsahuj´ıc´ı program servoPi kernel modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adres´aˇr obsahuj´ıc´ı modul · build.sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pomocn´ y skript · Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pomocn´ y skript · servoPi modul.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ZK modulu spustiteln´ e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zkompilovan´e soubory · servoPi control.run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Regulaˇcn´ı program · servoPi modul.ko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modul do j´adra · servoPi send.run . . . . . . . . . . . . . . . . . . . . . . . . . Program pos´ılaj´ıc´ı hodnoty · servoPi server.run . . . . . . . . . . . . . . . . . . . . . . .Program pro pˇrijet´ı hodnoty · servoPi webserver.run . . . . . . . . . . . . . . . . . . . . . . . . . . . Program webserveru · servoPi send.c . . . . . . . . . . . . . . . . . . . . . . . . . ZK programu pro pos´ıl´an´ı hodnoty · servoPi server.c . . . . . . . . . . . . . . . . . . . . . . . . . ZK programu pro pˇrijet´ı hodnoty · servoPi control.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ZK programu regul´atoru · servoPi gui(Java).zip . . . . . . . . . . . NetBeans projekt zobrazovac´ıho programu · servoPi webserver.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ZK webserveru Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adres´aˇr s OS Linux · linux-rpi-3.10.y.zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ZK Linuxu pro RPi · patch-3.10.26-rt24.patch.gz . . . . . . . . . . . . . . . . . . . . . . . . . . . . Real-time rozˇs´ıˇren´ı · tools-master.zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cross kompilaˇcn´ı n´astroj test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Adres´aˇr s testem · vlakno test planovani 1kHz.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ZK testu · vlakno test planovani 1kHz.run . . . . . . . . . . . . . . . . . . . . . . . . . . . Spustiteln´ y test Text pr´ ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Adres´aˇr obsahuj´ıc´ı text pr´ace · radek meciar BP tisk.pdf . . . . . . . . . . . . . . . . . . . . . . . . . Soubor vhodn´ y pro tisk · radek meciar BP eview.pdf . . . . . . . . . . . . . . . . . Soubor vhodn´ y pro prohl´ıˇzen´ı
53
Pˇr´ıloha B - Seznam zkratek
Pˇr´ıloha B - Seznam zkratek
B. SEZNAM ZKRATEK Zkratka
Anglick´ y v´ yznam
ˇ y v´ Cesk´ yznam
DMA GPIO GPL GUI HDMI HW IRC IRQ OS PWM RAM RPi SSH SW USB
Direct Memory Access General-purpose input/output General Public License Graphical user interface High-Definition Multimedia Interface Hardware Incremental Rotary Encoder Interrupt Request Operating System Pulse Width Modulation Random Access Memory Raspberry Pi Secure Shell Software Universal Serial Bus
Pˇr´ım´ y pˇr´ıstup do pamˇeti Z´akladn´ı vstupnˇe v´ ystupn´ı rozhran´ı Vˇseobecn´a veˇrejn´a licence Grafick´e uˇzivatelsk´e rozhran´ı Vysoko kvalitn´ı multimedi´aln´ı rozhran´ı Technick´e vybaven´ı Inkrement´aln´ı rotaˇcn´ı sn´ımaˇc ˇ adost o pˇreruˇsen´ı Z´ Operaˇcn´ı syst´em Pulznˇe ˇs´ıˇrkov´a modulace Pamˇet’ s pˇr´ım´ ym pˇr´ıstupem Raspberry Pi Zabezpeˇcen´ y komunikaˇcn´ı protokol Programov´e vybaven´ı Univerz´aln´ı s´eriov´a sbˇernice
54
Obr´azek C.1: Sch´ema motoru ze zdroje [16]
55
A
B
C
D
5
ENCODER GND
INKR_2
5
2 4 6 8 10 12 14
1 3 5 7 9 11 13
4
HEADER 7X2
J3
OUT1
D5
OUT2
D4
Vcc
D3
FAZE_2
D2
FAZE_1
D1
4
3
ENCODER +5V
INKR_1
3
2 4 6 PC
J2
1 3 5
Date:
Size A
Title
2
Wednesday, February 04, 2004
Document Number 1
Zapojeni konektoru
2
J1
Sheet
1
CANNON25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
1
1
of
2
R ev 1
A
B
C
D
Pˇr´ıloha C - Sch´ema motoru Pˇr´ıloha C - Sch´ema motoru
´ C. SCHEMA MOTORU
Obr´azek C.2: Sch´ema motoru ze zdroje [15]
56
A
B
C
4
5
1
2
napajeni
5
74HCT14
9
10
74HCT14
U4D
8
74HCT86
8
U3C
MOTOR+
VCC
9
R13
+
3
2
4
C7 10n
R9 1k8
6N137
ISO1
C1 100M/35V
MOTORFAZE_2
390R
1N4007
1
2
U1
74HCT86
11
U3D
2 4 6
J2
PC
C10
3
4
R7
12
FAZE_2
1k
C4
C8
1k
4
5
9
3
U4B
74HCT14
12
U4F
74HCT14
10
U4E
74HCT14
4
13
11
3
14
1
74HCT14
7
U4A
2
22n
R10
10n
3
1k
U5
IN
10
C3 200n
R2
C2 47M/10V
1
7 6
MOTOR+ FAZE_1 INT_RQ
+
VCC
8
13
FAZE_1
1 3 5
100n
-Vout
+Vout
CH12405
-Vin
+Vin
78L05
OUT
3
2
2
Date:
Size
Title
10R/2W
R11
L6203
SENSE
OUT1
BOOT1
IN1
Vref
GND 2
D1
5
1.5A
U4C
5
6
3
F1
6
INT_RQ
74HCT86
74HCT86 U3B
U3A
+24V -24V
3
10n
C5
11
1
8
7
2
J4
2 4 6 8 10 12 14
J3
Thursday, April 01, 2004
Document Number 1
1 3 5 7 9 11 13
1k
R3
100n
2 8
Sheet
MOTOR
R4 1R/2W
R12
390R C9
IRC+LED
VCC
motor controller scheme
U2
ENABLE
OUT2
BOOT2
IN2
Vs
R1 1k
R14
2 1
D
1 2
4
GND 6
1
3 1
1
1k
R5 8k2
2N3904
R8
1k
7 6
J1
5
of
Q1
1
Rev 1
VCC
R6 8k2
10n
C6
6N137
ISO2
5
MOTOR-
A
B
C
D
Pˇr´ıloha C - Sch´ema motoru Pˇr´ıloha C - Sch´ema motoru