Budapesti Műszaki és Gazdaságtudományi Egyetem Automatizálási és Alkalmazott Informatikai Tanszék
Autonóm robot vonalkövetése, különböző szabályozó algoritmusok vizsgálata TDK dolgozat
Készítette Beck Zoltán, Szalóki Dávid
Konzulens Kiss Domokos, Varga Dániel
2010. október 21.
Tartalomjegyzék
Tartalomjegyzék Tartalomjegyzék
1
Bevezető
3
1. Differenciális hajtású robot 1.1. Mechanika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1. RobonAUT 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Hardver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1. Tápfeszültség előállítása . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2. A vonal érzékelése . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3. Az oldalfalak érzékelése . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.4. Tápfelügyelet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.5. A jelző LED sor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.6. Motorvezérlés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.7. Visszacsatolás a kerekekről . . . . . . . . . . . . . . . . . . . . . . . 1.2.8. Felhasználói felület . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.9. Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. Szoftver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1. Felépítés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2. Az érzékelés folyamata . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3. A beavatkozás folyamata . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.4. Felső logika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.5. A jelző LED sor vezérlése . . . . . . . . . . . . . . . . . . . . . . . . 1.3.6. Felhasználói felület . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.7. A szoftver futása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.8. Összefoglalás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4. A differenciális hajtás szabályozása . . . . . . . . . . . . . . . . . . . . . . . 1.4.1. A lánctalp, mint szabályozási szakasz . . . . . . . . . . . . . . . . . . 1.4.2. A két lánctalp együttes mozgása: a görbület . . . . . . . . . . . . . . 1.4.3. Első szabályozási felépítés: egyszintű rendszer . . . . . . . . . . . . . 1.4.4. Második szabályozási felépítés: többszintű felosztott rendszer . . . . 1.4.5. Harmadik szabályozási felépítés: többszintű rendszer MIMO sebességszabályozóval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5. Eredmények . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6. Konklúzió . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6.1. Hardverrel kapcsolatos tapasztalatok . . . . . . . . . . . . . . . . . . 1.6.2. Szoftverrel kapcsolatos tapasztalatok . . . . . . . . . . . . . . . . . .
5 5 5 9 9 10 12 13 14 14 15 16 17 18 18 20 22 25 26 26 27 27 28 28 28 30 30 31 34 37 37 37
2. Autómodell 39 2.1. Mechanika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 1
Tartalomjegyzék
2.1.1. RobonAUT 2011 . . . . . . . . . . . . . . . . 2.2. Hardver . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1. Tápellátás . . . . . . . . . . . . . . . . . . . . 2.2.2. A motorvezérlő áramának megszakítása . . . 2.2.3. Szervó jelek . . . . . . . . . . . . . . . . . . . 2.2.4. Vonalérzékelés . . . . . . . . . . . . . . . . . 2.2.5. Sharp távolságérzékelők . . . . . . . . . . . . 2.2.6. Ultrahangos távolságérzékelő illesztése . . . . 2.2.7. Reed kapcsoló . . . . . . . . . . . . . . . . . . 2.2.8. 3 tengelyes MEMS gyorsulásérzékelő illesztése 2.2.9. Bluetooth modul . . . . . . . . . . . . . . . . 2.2.10. Dekorációs LED-ek . . . . . . . . . . . . . . . 2.3. Szoftver . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1. Felépítés . . . . . . . . . . . . . . . . . . . . . 2.3.2. Analóg vonalak beolvasása . . . . . . . . . . . 2.3.3. Pozíciószámítás . . . . . . . . . . . . . . . . . 2.3.4. Görbület szabályozása . . . . . . . . . . . . . 2.3.5. Ütemezés . . . . . . . . . . . . . . . . . . . . 2.3.6. Távolságmérés . . . . . . . . . . . . . . . . . 2.3.7. Sebességszabályozás . . . . . . . . . . . . . . 2.3.8. RC távirányító jele . . . . . . . . . . . . . . . 2.3.9. Felhasználói felület . . . . . . . . . . . . . . . 2.4. Eredmények . . . . . . . . . . . . . . . . . . . . . . . 2.5. Konklúzió . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . .
39 43 44 45 46 46 47 48 48 49 49 50 52 52 52 53 53 53 54 54 55 55 56 60
Függelék F.1. A homlokrakodó modell kártyáinak kapcsolási rajza . F.2. A modellautó kártyáinak kapcsolási rajza . . . . . . F.3. A homlokrakodó modell kártyáinak huzalozási rajza . F.4. Fényképek a lánctalpas modellről . . . . . . . . . . . F.5. Fényképek a modellautóról . . . . . . . . . . . . . . F.6. Videók . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
61 61 69 73 74 77 79
Ábrák jegyzéke
81
Táblázatok jegyzéke
85
Irodalomjegyzék
87
2
Bevezető
Bevezető A vonalkövetés a legegyszerűbb feladat, amit egy autonóm mobil robottal végezni lehet, ezért is gyakran alkalmazzák az oktatásban az autonóm robot rendszerekkel való ismerkedéshez. Ebből kifolyólag bő forrást találhatunk mind magyar, mind angol nyelven. Persze a vonalkövető mobil robot alkalmazására az iparban is találunk példát, a raktárakon belüli szállítmányozás feladatának automatizálására. Mi ezt a feladatot a RobonAUT 2010 [1] verseny kiírása alapján választottuk. A vonalkövetés problémája gyakorlatilag három feladat megoldását igényli: a vonal érzékelése, a beavatkozók megválsztása és a szabályozás megvalósítása. Körbetekintve az interneten megtalálható anyagok között, mindhárom feladatra számtalan különböző megoldást találtunk. A vonalérzékeléshez láttunk egyetlen egy, kettő, vagy akár 8 diszkrét érzékelőt használó rendszert, de láttunk olyat is, ahol egy kamera képe szolgált bemenetként. Az érzékelők szempontjából láttunk fényellenállással, fotodiódával, diszkrét fototranzisztorral megoldott rendszereket, de a leggyakoribb megoldás a reflexiós infravörös érzékelők alkalmazása. Ennek használatakor előnyt jelent az egyszerű szerelés, valamint a fototranzisztor nagy érzékenysége. Ezekből az okokból ezt a megoldást alkalmaztuk mi is. A beavatkozás rendszerére láttunk differenciális, kerékkel hajtott, lánctalpas, de négykerekű kormányzott verziót, sőt olyan megoldást is, amelyben a robot 4 × 3 láb segítségével mozog. A RobonAUT 2010 versenzhez egy lánycalpas differenciális hajtású távirányítású játékot boztosítottak a csapatok számára a rendezők, így ennek megválasztása nem volt feladatunk. A szabályzás jellegére is láttunk mirkokontrollerrel megvalósított bang-bang rendszerű (csak kétféle beavatkozás közül választó), P szabályozás jellegű (csak a vonal pillanatnyi pozíciója határozza meg a beavatkozás mértékét), ennél sokkal célravezetőbb PID szabályozást (amely a vonal helyzetének múltját és tendenciáját is figyelembe veszi), de láttunk páldát tanuló, neurális hálót alkalmazó robotra valamint teljes mértékben analóg irányításúra. A mi esetünkben a szabályozás módjára a klasszikus szabályozási módok mellett próbáltunk saját ötlet alapján tervezett szabályozást megvalósítani.
3
4
1. fejezet
Differenciális hajtású robot Vonalkövetés autonóm módon többféle szabályozási körrel megvalósítható. A lentebb ismertetésre kerülő differenciális hajtású roboton döntési alapú, valamint egy- és többszintű szabályozásokat is megvalósítottunk, hogy mérési adatokkal alátámasszuk azt, hogy ebben a konkrét esetben mely szabályzás a legcélravezetőbb, melyik követi jobban az egyenes vonalat, a kanyart, melyik stabilabb, robosztusabb.
1.1. Mechanika A robot mechanikája a RobonAUT 2010 versenyben adott lánctalpas homlokrakodó modell. (1.8. ábra)
1.1.1. RobonAUT 2010 A RobonAUT MSc robotverseny feladata egy autonóm robot megalkotása volt, amely egy a földre ragasztott fekete csík követésével teljesíti a meghatározott elemekből felépülő pályát, miközben minél több pontot gyűjt össze. A külön pontokért elvégezhető feladat két pingponglabda összegyűjtése és egy tárolóban való elhelyezése volt. A pálya a következő elemekből áll:
1.1. ábra. A vezetővonal
• A pályaelemeket összekötő egyszerű vezetővonal (1.1. ábra) Egy 19 mm széles fekete, sík terepre ragasztott csík, melynek görbületi sugara legalább 250 mm, és legfeljebb 35◦ -os törés lehet benne. • Start- és célmező (1.2. ábra) 5
1. Differenciális hajtású robot
1.2. ábra. A start- és célmező
Egy T-formával kezdődik és végződik a vezetővonal, a célon való túlfutásért pontlevonás jár.
1.3. ábra. Az alagút
• Alagút (1.3. ábra) Egy egyenes pályaszakasz, amely két oldalt vezető falakkal rendelkezik, a vezetővonal pedig szaggatott.
1.4. ábra. Az elágazás
• Elágazás-becsatlakozás (1.4. ábra) Az elágazást a leágazó iránnyal ellentétes oldalon található sima fal jelzi, és itt az egyenes irány egy kerülőútra visz, tehát célszerű ilyenkor leágazni. A becsatlakozás egyszerű találkozása a vezetővonalaknak.
1.5. ábra. Az extra elágazás
• Extra elágazás (1.5. ábra) Az extra elágazást a leágazó iránnyal ellentétes oldalon található bordázott fal jelzi, 6
1.1. Mechanika
itt az egyenes irány pingponglabda begyűjtő illetve lerakó helyhez vezet. Itt először célszerű egyenesen haladni a plusz pontokat jelentő begyűjtő/lerakó helyhez, majd meg kell oldani a visszajutást az elágazáshoz, hogy letérve folytathassuk utunkat a célhoz.
1.6. ábra. A begyűjtőhely
• Begyűjtőhely (1.6. ábra) A begyűjtőhely kezdetekor a vezetővonal megszűnik, és a két oldalt található vezetőfalra kell támaszkodni a navigáció során. Ezeken a falakon szabadon elhelyezhető két jelző fadarab, amelynek segítségével érzékelheti a robot, hogy meg kell állnia. A vezetőfalak egy billenő labdakiadó szerkezethez vezetnek, amelynek segítségével egy jól időzített megállással felszedhetjük a labdákat.
1.7. ábra. A lerakóhely
• Lerakóhely (1.7. ábra) A lerakóhely a begyűjtőhelyhez hasonlóan van kialakítva, csak a véget érő vezetővonal után a vezetőfalak egy kerethez vezetnek, amibe kell elhelyezni a pingponglabdákat. A falak mentén ez esetben is elhelyezhetjük a jelzőket. A lerakás folyamata sem sokkal bonyolultabb a labda felvételénél. A jól időzített megállás után a labdákat kiborítva azok a keretbe kerülnek.
7
1. Differenciális hajtású robot
1.8. ábra. A homlokrakodó modell
1.9. ábra. Az STM32 ComStick
A versenyhez kézhez kaptunk egy homlokrakodó távirányítós játékot (1.8. ábra), amit egyéni hardver hozzáadásával alakítottunk át autonóm robottá. Kézhez kaptunk továbbá egy STM32 ComStick eszközt (1.9. ábra, [2]), amely egy ARM Cortex M3 mikrokontroller mellett egy, a teljes debug funkciót ellátó mikrokontrollert is tartalmaz.
8
1.2. Hardver
1.2. Hardver A feladathoz két NYÁK-ot és egy próbapanelen megvalósított kiegészítő kártyát készítettünk: • Felső kártya Erre csatlakozik: – STM32 ComStick, – 4 db motor (két lánctalp, billentő és emelő), – 5 db végálláskapcsoló (2 emelő, 2 billentő, 1 extra), – 4 db oldalsó távolságérzékelő, melyből kettőt használtunk fel, – az alsó kártya, – a próbapanel. • Alsó kártya Ezen találhatók: – a vonal érzékelésére alkalmas 13 db reflexiós infravörös optoérzékelő, – a program tesztelését megkönnyítő és látványelemeket megvalósító LED-ek. • Próbapanel Ezen találhatók: – nyomógombok, – egy benyomható végtelenített potenciométer. Erre csatlakozik: – LCD kijelző, – a lánctalpakról való pozíció-visszacsatolást megvalósító optokapu.
1.2.1. Tápfeszültség előállítása A homlokrakodóban elhelyeztünk egy 12 V-os akkumulátort. Azonban a ComStick 5 V-ot igényel, így ezt egy fix, 5 V kimeneti feszültségű, 1 A terhelhetőségű kapcsolóüzemű táppal előállítjuk az 1.10. ábrán látható módon a felső kártyán. A kapcsolóüzemű táp működéséhez szükség van két pufferkondenzátorra, egy schottky diódára, és egy tekercsre. A kimeneti kondenzátor megválasztásakor a kis soros ellenállás (ESR) volt a szempont, így egy 0,34 Ω-os soros ellenállású alumínium elektrolit kondenzátort választottunk. Ennek soros ellenállásán csökkenteni próbáltunk, így egy kerámia kondenzátort kötöttünk vele párhuzamosan. Elhelyeztünk egy, a táp meglétét visszajelző LED-et, melyet egy 220 Ω-os ellenállással 15 mA körüli áramra állítottunk. 9
1. Differenciális hajtású robot
1.10. ábra. A kapcsolóüzemű tápegység bekötése
1.2.2. A vonal érzékelése A ComStick-en 7 analóg bemenet van. Az ezeken megjelenő 0..3,3 V-os feszültségű jelet a 12 bites ADC egy 0 és 4095 közötti számmá konvertálja. A 7 analóg bemenetnél viszont többre van szükségünk, így ezen analóg vonalak közül az 1.11. kapcsolási rajz szerint a felső kártyán 6 db vonalat 3 db dupla 4-ből 1 analóg multiplexer által (típusa: CD4052B) 24 vonallá osztottunk.
1.11. ábra. Egy analóg multiplexer bekötése
Mindhárom multiplexernek két választó jellel lehet a négy állás közül választani. Az első áramkör kiválasztó jelei fixen a mikrokontroller két lábára vannak kötve, míg a másik két áramkör kiválasztó jelei egy kétállású tolókapcsolóra csatlakoznak, amellyel vagy újabb 2-2 mikrokontroller lábat foglalnak el, vagy ugyanazt a kiválasztó jelet kapják, mint az első áramkör a kapcsoló állásának megfelelően. A próbapanel elkészültekor ezt a lehetőséget ki is használtuk, ugyanis közös választójelre kellett kapcsolnunk az összes multiplexert, hogy legyen két timer bemenetünk amivel a lánctalpon levő enkódert olvashattuk, valamint elegendő IO lábunk az LCD kijelző kezeléséhez. 10
1.2. Hardver
1.12. ábra. Egy reflexiós potokapu bekötés
Az alsó kártyán - melynek kapcsolási rajza a 62. oldalon található - elhelyeztünk 13 db CNY70-es tipusú reflexiós optoérzékelőt. Ezek egy infravörös tartományban világító LEDből és egy fototranzisztorból állnak. LED-jei két körben sorosan vannak meghajtva. Az első 7 LED 160 Ω, a többi 6 220 Ω ellenálláson keresztül van a 12 V-os tápfeszültségre kötve fixen. Ezt a DC/DC konverter minél kisebb terhelése céljából végeztük így. Viszont ennek az a hátránya, hogy a két kör árama erősen függ a tápfeszültség mértékétől. Esetünkben ezt egy ólomzselés akkumulátor biztosítja, melynek kapocsfeszültsége jelentősen változhat. A gyakorlat azt mutatja, hogy az akkumulátor feszültsége 9-15 V között mozog. 45 40 35 30 I[mA]
25 20 15 10 5 0 9
10
11
12
13
14
15
U táp (V)
1.13. ábra. A LED-eken folyó áram az akkumulátor feszültségének függvényében a két LED-körben
Az 1.13. grafikon szemlélteti az egyes körökben az áram mértékét a tápfeszültség függvényében. Láthatjuk, hogy a tápfeszültséggel erősen változik a LED-ek árama, ami megnehezíti az eredmény kiértékelését, valamint a két sor árama is változik egymáshoz képest, ami akár hibás eredményt is adhat. Azonban ezzel a módszerrel csak kisebb LED áram folyhat normál üzemben rajtuk (esetünkben 20 mA) mert ez az áram a tápfeszültség növekedtével (frissen töltött akkumulátor esetében) a kétszeresére is növekedhet, és az adatlapon [3] jelzett 50 mA-es felső határt be kellett tartanunk. Természetesen a kisebb LED áram rövidebb érzékelési távolságot eredményez, ami gondot jelentett a lánctalpas jármű 11
1. Differenciális hajtású robot
gyorsulásakor tapasztalt billegésének hatására túlzottan felelemelkedő, vagy a földet érintő érzékelő sor miatt. Az optoérzékelők fototranzisztorai kollektorát 3,3 V-os tápfeszültségre, míg az emitterét egy-egy 10 kΩ-os ellenállással földre kötöttük (1.12. ábra). Ezt az értéket az előzetes mérések alapján határoztuk meg. Az emitterekhez csatlakoznak az analóg vonalak, ahonnan a felső kártyán található analóg multiplexerekre kapcsolódnak. A 7. analóg vonalat megkülönböztettük, mert ezt a ComStick-en belül 10 kΩ-mal a földre húzták, így ezt nem vezettük át multiplexeren, és nem is földeltük le. Az 1.14. fénykép az optoérzékelők elrendezését szemlélteti.
1.14. ábra. Az optoérzékelők elrendezése robot alján (sárgával jelölt területeken)
Az elülső 11 érzékelővel a lehető legkorábban érzékelhetjük a vonal esetleges irányváltásait. Egy, a vonal elülső helyzetét hibajelnek tekintő szabályozási kör már ezekkel is megvalósítható. Ezeket viszont a forgástengelyre szimmetrikusan elhelyezett két érzékelővel kiegészítve prediktív szabályozás megvalósítására lehetünk képesek. A vonal pontos helyzete a két érzékelő analóg értékéből kiértékelhető.
1.2.3. Az oldalfalak érzékelése Az oldalfalak érzékelésére négy Sharp infravörös távolságérzékelőnek (típusa: GP2D120XJ00F [4]) helyeztünk el csatlakozót, ugyanis első terveink szerint elöl két oldalt helyeztünk volna el érzékelőt, valamint hátul is ugyanígy jártunk volna el a tolatás közbeni szabályozásnál a faltávolság meghatározásához. Később a távolságérzékelők magas ára miatt csak az elülső kettőt építettük a robotba. A szenzorok egy földpotenciált és egy 5 V-os tápfeszültséget igényeltek, és egy analóg lábon adtak vissza az érzékelt tárgy távolságával arányos, 0..3,3 V-os feszültségjelet. Bekötésük 12
1.2. Hardver
a 63. oldali kapcsolási rajzon található. Távolság-feszültség karakterisztikájuk nemlinearitása leolvasható az 1.15. grafikonról. A verseny során a falak távolsága legtöbbször a pirossal jelzett tartományon mozgott, így ezen határok között lineárisnak tekintettük a karakterisztikát, a nemlinearitásával nem foglalkoztunk. Mind a négy csatlakozónál az érzékelők távolságot jelző vonalait a fent említett analóg multiplexerek egy-egy lábára kötöttük. 3,5 3 2,5 2 U (V) 1,5 1 0,5 0 0
5
10
15
20
25
30
35
40
d (cm)
1.15. ábra. Az infrás távolságérzékelő távolság-feszültség karakterisztikája
1.2.4. Tápfelügyelet
1.16. ábra. Az tápfelügyeletet megvalósító ellenállásosztó
A tápfelügyelet céljára a tápfeszültséget az 1.16. ábrán szereplő nagy pontosságú ellenállásosztóval 1:6 arányban leosztottuk. Így az akkumulátor maximális feszültsége, a 15 V is, 2,5 V-ra leosztva kényelmesen belefér a 0..3,3 V-os mérési tartományba. Az ellenállásosztó 100 kΩ, illetve 20 kΩ méretű ellenállásokból áll, így ez átlagosan 0,1 mA áramot jelent az analóg földvezetéken, ami a tipikusan néhány Ω-os vezetékeken körülbelül LSB/4 mértékű hibát okozhat. Azonkívül ekkora ellenállások mellett megfelelő mintavételi időt választva a beolvasás hibáját a terheletlen ellenállásosztóhoz képest könnyedén LSB/4 alá szoríthatjuk. Ezzel a megoldással szoftverből meg tudjuk oldani a tápfelügyeletet, illetve regisztrálni tudjuk a motorok hirtelen kivezérlésénél fellépő tápfeszültség ingadozást. 13
1. Differenciális hajtású robot
1.17. ábra. A LED-vezérlő
1.2.5. A jelző LED sor Az elülső 11 optoérzékelő mindegyike felett elhelyeztünk egy-egy LED-et, melyekkel megkönnyítettük a tesztelést, és a későbbiekben látványelemeket valósítottunk meg. A jelző LED sor bekötése az 1.17. ábrán látható. A LED-ek anódjai a 12 V-os tápfeszültségre, katódjaik pedig egy szalagkábelen keresztül a felső NYÁK-on található LED meghajtó egy-egy aktív alacsony kimenetére csatlakoznak. Ez a 16 csatornás Texas Instruments TLC5925 [5] tipusú LED meghajtó képes akár 20 mArel meghajtani az összes LED-et. A csatornánkénti maximum elnyelt áram egy ellenállás segítségével állítható. Mi egy 1,3 kΩ-os ellenállást terveztünk be, melynek hatására csatornánként aktív állapotban 17 mA folyik. A meghajtó egy 16 bites shiftregisztert tartalmaz, amelyet egy soros interfészen keresztül írhatunk egy órajel és egy adat vonalon keresztül. A shiftregiszter tartalma egy latch-en keresztül jut a kimenetre. A latch-be történő beírást egy alacsony aktív engedélyező jellel időzíthetjük. A kimeneten a latch megfelelő bitjének 1 értéke esetén a kimenet magas impedanciás állapotba, 0 értéke esetén pedig aktív állapotba kerül. Így ha azt szeretnénk, hogy egy LED világítson, akkor a hozzá tartozó bitnek 0-nak kell lennie. Mindentől függetlenül a kimenetek az alacsony aktív Output Enable bemenettel tilthatóak ill. engedélyezhetőek. A kimenetek tiltása esetén az összes csatorna kimenete magas impedanciás állapotba kerül, így egyik LED sem világít. A ledvezérlő 16 csatornájából szabadon maradó 5-öt egyéb LED-ek meghajtásához egy csatlakozóra vezettük.
1.2.6. Motorvezérlés A homlokrakodó modellen 4 motor található: • 2 db a lánctalpak hajtására, • 1 db a rakodó emelésére, 14
1.2. Hardver
• 1 db a rakodó billentésére.
1.18. ábra. A motormeghajó áramkör bekötése
Ezekhez 4 db Texas Instruments DRV8800 [6] típusú motorvezérlőt helyeztünk el (1.18. ábra), melyek mindegyike egy teljes H-hidat tartalmaz. A négy motorvezérlő bekötése a 66. oldali kapcsolási rajzon látható. Vezérlésük egy PWM és egy DIR jellel történik, mellyel beállíthatjuk, hogy a motorra mekkora átlagértékű és milyen polaritású feszültség jusson. Ezen kívül még rendelkeznek egy-egy nSLEEP jellel, mellyel letiltható a kimenetük. A hajtás két motorvezérlőjének nSLEEP jelei és a rakodó mozgatásához szükséges motorvezérlők nSLEEP jelei közösek, így csak 2 további lábat igényelnek a ComStick-től, és külön tiltható ill. engedélyezhető a hajtás és a rakodó mozgatása. Mindegyik motorvezérlő rendelkezik még egy MODE lábbal, mellyel be tudjuk állítani, hogy „fast decay” vagy „slow decay” üzemmódban működjön. Ez annyit jelent, hogy a motor fékezésekor a H-hídban keringeti az áramot (slow), vagy sem (fast). Ez a lába mind a 4 motorvezérlőnek közös, mert nem tudtuk, hogy szükségünk lesz-e a rá, de a tesztelés során semmi lényeges különbséget nem tapasztaltunk a két üzemmód között.
1.2.7. Visszacsatolás a kerekekről A lánctalpakat feszítő kerékre körbe 60 lyukat fúrtunk, nagyjából 1 mm távolságra, így alakítottuk ki az enkóderkerekeket. Mindkét kerékhez tettünk egy-egy rés optokaput. Az infravörös LED-eket nagyjából 20 mA árammal hajtottuk meg az 5 V-os tápfeszültségről. A fototranzisztor kollektorát 5 V-ra kötöttük, emitterét 10 kΩ méretű ellenálláson keresztül kapcsoltuk az analóg földhöz. Az emittereket egy-egy műveleti erősítővel megvalósított hiszterézises komparátoron (lásd 1.19. ábra) keresztül egy timer két bemenetére kötöttük, hogy majd azzal input capture módban érzékeljük a lánctalpakkal együtt mozgó kerék mozgását. 15
1. Differenciális hajtású robot
1.19. ábra. A hiszterézises komparátor megvalósítása
Mivel a kollektort 5 V-os tápfeszültségre kötöttük, az emitter feszültsége is legfeljebb 5 V lehet, ez egy 5 V-os tápfeszültséggel ellátott műveleti erősítőn keresztül jut a mikrokontrollerhez, de ez egy olyan lábára jut, ami 5 V toleráns. Így nem szükséges szintillesztés.
1.2.8. Felhasználói felület
1.20. ábra. Az LCD kijelző bekötése
A hibakeresés, paraméterállítás és a felhasználó informálása céljából elhelyeztünk a homlokrakodón egy alfanumerikus 4 soros LCD kijelzőt. A kijelző párhuzamos adatátvitellel kommunikál, viszont ez meglehetősen sok vonalat - 3 vezérlő jel, és 8 adatvezeték - foglal el a mikrokontroller felől. Így az 1.20. ábrán látható módon a 8 adatvezetéket egy soros bemenetű, párhuzamos kimenetű shiftregiszterről hajtjuk meg, mely csak 2 vonalat foglal el a mikrokontroller részéről, így az LCD kommunikációs jeleinek száma 11-ről 5-re csökkent. 16
1.2. Hardver
Ezen kívül az LCD környékén elhelyeztünk egy benyomható végtelenített potenciométert, és két egyszerű nyomógombot, melyekkel így könnyedén megvalósítható a menük kezelése. Mindezek bekötése a 68. oldalon látható.
1.21. ábra. A hexadecimális kódkapcsoló
A felső NYÁK-on elhelyeztünk még egy hexadecimális kódkapcsolót (1.21. ábra), mellyel gyorsan tudunk váltani egyes módok között a szoftverben. A kapcsolónak 16 állása van, és négy lábán keresztül binárisan kódolva olvashatjuk ki az állását. Bekötése a 64. oldalon található.
1.22. ábra. A Bluetooth modul csatlakozása
A próbapanelra kivezettük a mikrokontroller egyik UART soros kommunikációs interfészének Tx és Rx vonalait, melyekhez egy vezeték nélküli kommunikációt biztosító Bluetooth chip-et [7] kapcsoltunk, így lehetővé téve a vezeték nélküli elérését a robotnak identifikáció elvégzése, és egyéb mérések céljából, amikor fontos, hogy a robot minden paraméterében üzemszerűen működjön (ne lógjon ki belőle semmilyen kábel, akkumulátorról üzemeljen). A Bluetooth chip illesztése az 1.22. ábrán látható.
1.2.9. Összefoglalás A hardvertervezés során szem előtt tartottuk a rendszer bővíthetőségét. Így sikerült a későbbiekben hozzáadnunk mind a lánctalp visszacsatolást, mind a felhasználói felületet. Ezen bővítések megvalósításához a az 1.2.2 fejezetben ismertetett tolókapcsolók által biztosított négy vonalra is szükségünk volt, mert az összes funkció beépítése után mindössze egy szabad vonal maradt.
17
1. Differenciális hajtású robot
1.3. Szoftver A szoftverből a hardverbeli módosítások miatt különböző verziók készültek. Ezen leírás a legfrissebb, legtöbb funkciót tartalmazó verziót írja le.
1.3.1. Felépítés A szoftver felépítésében alapvetően 4 szintet különböztethetünk meg: • legfelső logika, amely a versenybeli szituációkat kezeli, • a vonalkövetés szabályzója, amely az érzékelt vonalpozíciók alapján alapjelet állít elő a haladáshoz, • a középső szint, amely az érzékelt jelet kondicionálja a felsőbb szintek számára, valamint a kiadott alapjelet alakítja át hardver-szintű értékekké, • a legalsó szint, amely közvetlen kapcsolatot létesít a hardverrel. A felépítés a 19. oldalon látható.
18
19
led.c
HW
TIM3
led_Custom()
led
lcd.c
TIM6
lcd_control() lcd_action()
sense.c
-
voltage_Control() increment_filter()
process.c
ADC, TIM2
analog_Read() mux_Set()
analog.c
-
wall_Event() position_Process()
TIM5
robonAUT
intelligence.c RobonAUT()
controller.c
TIM1
motor_Set() motor_Dir() motor_status() til_set() tilt_filter()
motor.c
-
drive_Stop() drive crawler_Control() increment_Control() drive_Control()
drive.c
-
position_Get() control controller_Watch() controller()
decision.c
wait_ms()
RTC
time
clock.c
-
track_loadPD()
1.3. Szoftver
1. Differenciális hajtású robot
1.3.2. Az érzékelés folyamata Az érzékelés folyamata az 1.23. ábrán látható. robonAUT
positionHist
position_Process()
speed_Sense()
drive
wall
wall_Event()
incrementFilter()
voltage_Control()
device
analog_Read()
IT
HW 1.23. ábra. Az érzékelés folyamata
Az analóg vonalak olvasása Az analóg vonalak olvasásához az alapvető feladatok a következők: • a megfelelő és stabil multiplexer vonal biztosítása, • az analóg érték kiolvasása megfelelő átlagolás biztosításával, • a folyamatot minél gyorsabban elvégezni. 1.1. táblázat. A „device” struktúra felépítése
elem line mux group value treshold_lo treshold_hi compare
tartalom az analóg vonal száma melyik multiplexeren van az analóg eszkoz az olvasáshoz szükséges multiplexerállás utoljára kiolvasott értékekből átlagolassal kapott értek az analóg eszköz alsó küszöbértéke az analóg eszköz felsó küszöbértéke az utoljára kiolvasott érték hol van a küszöbértékekhez képest
Ehhez a feladathoz létrehoztunk analóg eszköz (device) struktúrákat (1.1. táblázat), amelyben tároljuk mind a vonal eléréséhez szükséges multiplexerállást, mind azt, hogy melyik analóg vonalon kell konverziót végrehajtani valamint a legfrissebb kiolvasott értéket is. Létre hoztunk továbbá analóg vonal kiolvasási szekvencia struktúrákat is, amely a kezelhetőség kedvéért több analóg eszköz olvasását gyűjti össze, a sorrendjüket és az átlagolás mértékét is magában foglalva. 20
1.3. Szoftver
Az olvasás folyamata a következő: a kiolvasási szekvenciával meghívjuk az analog_Read() függvényt. Ez a helyes multiplexer állás biztosításához meghívja minden ADC konverzió indítása előtt a mux_Set() függvényt, ami jó multiplexer állás esetén azonnal visszatér, ellenkező esetben pedig beállítja az új vonalválasztó jeleket, és megvárja a mutiplexer kapcsolási idejét. Ez után indulhat az analóg konverzió. A vonalakat végigolvassuk az átlagolás mértékének megfelelően, majd az eredmények összegét az átlagolás nagyságának megfelelően shifteljük jobbra1 . Az olvasás további funkciója, hogy ha látja, hogy a következő analóg olvasás egy, az aktuálistól függetlenül vezérelt multiplexeren található akkor azt előre beállíja a megkívánt állásba, így a multiplexer beállási idejének kivárását megspórolhatjuk. Fontos továbbá, hogy az analóg vonalak olvasása preemptív megszakításokon is végbe megy, így garantálnunk kell a multiplexerállítás és az analóg konverzió egységét, nem megszakíthatóságát. Ezt az érintett megszakítások lehető legrövidebb időre történő tiltásával, majd engedélyezésével oldottuk meg. Jelfeldolgozás voltage_Control() Ez a függvény egy lényeges funkciót implementál, miszerint a tápfeszültség visszamérésével a motorra eső feszültség értékét azonos szinten tartja különböző tápfeszültség szintek esetén. Erre azért van szükség, mert a tápfeszültséget egy meglehetősen tág határok közt mozgó feszültségű (9-15 V) akkumulátorról biztosítjuk. A megvalósítás egyszerű: a megkívánt feszültségszintet a PWM impulzushosszával állítjuk, a mért tápfeszültség szerint pedig a periódusidőt állítjuk (esetünkben a mért analóg értékkel egyenlő lesz a periódus értéke számlálási egységekben). A különböző jelek feldolgozására két függvény szolgál: • position_Process() Ez a függvény a megfelelő szekvenciával2 beolvasott reflexiós optoérzékelők analóg jeleiből meghatározza a vonal helyzetét az érzékelősor alatt, melyet szintén letárol. A pozíció számítását úgy végzi, hogy meghatározza, melyik optoérzékelő alatt helyezkedik el vonal, majd balról vagy jobbról megkeressük a vonalat jelentő egybefüggő érzékelt pozíciókat, és a két széle helyének a számtani közepe adja ki a vonal pozícióját. Ezen kívül a távolságérzékelők jeleiből is meghatároz egy pozícióértéket, melyet szintén letárol. A falakból számított pozíció arányos a két oldalsó távolságérzékelő analóg jelének különbségével, mert a karakterisztikát a működési tartományban lineárisnak tekintettük. Annak meghatározására, hogy melyik optoérzékelő alatt helyezkedik el vonal, több módszert kipróbáltunk, és a következő bizonyult a legsikeresebbnek: 1 Az átlagolás lehetséges mértékei: 1, 2, 4, 8, 16, mert a 12 bites ADC konverzió-eredményt 16 biten kell összegeznünk, így 16-ot összeadva még elfér egy 16 bites változóban. 2 A szekvenciát a szabályzó határozza meg, lehet az elülső 11, csak az elöl középső 3, vagy akár mind a 13 érzékelő.
21
1. Differenciális hajtású robot
Mérésekkel minden egyes optoérzékelőhöz meghatároztunk egy küszöbértéket, melynél ha kisebb az így kiszámolt érték, akkor vonalat érzékel, ha nagyobb, akkor pedig nincs alatta a vonal. A küszöbértékek meghatározásának mérései úgy zajlottak, hogy keresztben áthúztuk az autót a vonal felett, miközben regisztráltuk az analóg vonalak értékeit. Ezután mindegyik optoérzékelőhöz megállapítottunk egy köszöbértéket, hogy mindig legalább egy opoérzékelő érzékelje a vonalat, de maximum három. • wall_Event() A wall_Event() a távolságérzékelők jeleit feldolgozó függvény. A távolságérzékelők jeleit kiértékeli, majd egy globális struktúrában jelzi a felső logikának, hogy történt-e valamilyen lényeges esemény (elágazás vagy lerakóhely jelző fadarabja). Ennek eldöntéséhez folyamatosan a mintavételezett faltávolságokat kiolvassa a körpufferből, majd egy FIR szűrő segítségével kondicionálja a mért értékeket. A falak által meghatározott helyzet, valamint a fontos esemény bekövetkezését jelző flag (a wall_Event() állítja, a felső logika törli) egy globális struktúrában (wall) található. Az optoérzékelők, és az oldalsó távolságérzékelők analóg értékeit mindig meghatározott távolság megtétele után olvassuk be (22 mm). Ezt a távolságot az inkrementumok számából határozzuk meg, és mindig megvárjuk, hogy az előző olvasás óta kétszer ennyi inkrementet haladjon összesen a két lánctalp. Az inkrement megjelenési idejének érzékelését egy timer input capture módban való működése által pontosan, kevés processzor erőforrás felhasználásával határozzuk meg. A timer az inkrement megjelenésének hatására egy megszakítást generál, melyben lementjük az inkrement irányát és időpontját. Az irányát a motorra kiadott irányjelből határozzuk meg. Minden egyes ciklusban meg kell hívnunk az incrementFilter() függvényt, mely érzékeli a lánctalpak által az előző analóg olvasás óta megtett út hosszát, és ha szükséges, elvégzi az előírt beolvasásokat, majd meghívja a position_Process() függvényt. Minden egyes ciklusban meg kell hívnunk a speed_Sense() függvényt is, mely a lánctalpak sebességeit számolja ki az inkrementváltozások idejeiből.
1.3.3. A beavatkozás folyamata A beavatkozás folyamata az 1.24. ábrán látható. Motorvezérlés A motorvezérlést teljes H hidat tartalmazó DC motorvezérlő IC-k segítségével valósítottuk meg. Ezeket 3 digitális jellel vezéreljük: • egy irány jel segítségével megszabjuk a DC motor forgási irányát, • egy PWM jel kitöltési tényezőjével szabhatjuk meg a motorra adott feszültség mértékét, 22
1.3. Szoftver
robonAUT
control
positionHist
controller()
drive
drive_Control()
increment_Control()
crawler crawler_Control()
motor_Set()
HW 1.24. ábra. A beavatkozás folyamata
• egy sleep jel segítségével közvetlenül megszüntethetjük a motor vezérlését. A motorvezérlő jeleit a motor_Set() függvénnyel állítjuk, kivéve a sleep jelet, azt a szabályzóktól függetlenül a felső logika végzi. A felső logika beállítja, hogy milyen sebességgel szeretnénk haladni, a megkívánt görbületet pedig a 1.3.3 részben ismertetett controller() függvény meghívásával számoljuk és tároljuk le. Ezután a drive_Control() függvény kiszámolja, hogy melyik lánctalpnak milyen sebességgel kell haladni, miközben tartja a megkívánt görbületet (a pálya görbületi sugarának reciproka), és megpróbálja elérni a meghatározott haladási sebességmaximumot. A drive_Control() függvény további szolgáltatása, hogy egy átlagos görbületi értéket biztosít a felső logika számára, amely ez alapján esetleg megváltoztatja a haladási sebesség maximumát, vagy a vonalkövetési algoritmust. A drive_Control() függvény bemeneti paramétereit, valamint a fent említett átlagot egy globális struktúra (drive) tartalmazza. (1.2. táblázat) 1.2. táblázat. A „drive” struktúra felépítése
elem absolute_maxU curve_stat to_speed curve order left right
tartalom maximális kivezérelhetőség a tápfeszultség miatt, PWM periódusideje görbületi statisztika robot sebesseg alapjele, elojele a haladasi irányt határozza meg robot görbület alapjele, elojele a kanyarodási irányt határozza meg meghatározza, hogy melyik szabályzó van engedélyezve(1.24. ábra) a bal lánctalp struktúrája a jobb lánctalp struktúrája 23
1. Differenciális hajtású robot
A drive_Control() alatti, alacsonyabb szintű függvényekben kétféle szabályozást valósítottunk meg: • pozíciószabályozás: előnyös, amikor fix útvonalakat betöltve haladunk (például tolatáskor), • sebességszabályozás: gyorsabban reagált a rendszer, mint pozíciószabályozás esetén. Pozíciószabályozás esetén az increment_Control() függvény abból, hogy melyik lánctalpnak milyen sebességgel kell haladnia, kiszámolja, és egy-egy körpufferbe letárolja, hogy a következő inkrementnek melyik időpillanatban kell megérkeznie. A crawler_Control() egy-egy lánctalpra ezen körpuffer legújabb bejegyzéséből és abból, hogy összesen mennyit futott eddig a lánctalp, generál egy hibajelet, mely jelzi, hogy hány inkrementtel van elmaradva, illetve mennyivel siet az éppen vizsgált lánctalp. Sebességszabályozás esetén az increment_Control() függvény egy-egy körpufferbe letárolja, hogy melyik időpillanattól kezdve milyen sebességgel kell haladni az egyes lálnctalpaknak. A crawler_Control() egy-egy lánctalpra ezen körpuffer legújabb bejegyzéséből, és az aktuális mért lánctalpsebességből generál egy hibajelet. Pozíciószabályzás és sebességszabályzás esetén is a crawler_Control() belső szabályzója az általa számított hibajellel számol. A belső szabályzó kimenetét lekorlátozva megkapjuk az aktuális lánctalpra kiadott PWM jel komparálási szintjét. A lánctalpak belső szabályzója egy PD szabályzó, mert méréseink igazolták, hogy induláskor, valamint menet közbeni sebesség- vagy görbületváltáskor is nagyon pontosan követi a megkívánt inkrementértékeket illetve sebességet (lásd 1.4.4 fejezet). A lánctalpakra külön-külön vonatkozó adatokat a 1.3. táblázat. A „crawler” struktúra felépítése
elem motor increment to_speed history target order PrevErr Sum u_PID u_real
tartalom melyik lánctalp struktúrája (bal vagy jobb) előjeles egész, mennyi inkrementet haladt a lánctalp előjeles sebesség alapjel körpuffer, inkrement iránya és pillanatának ideje körpuffer, sebesség alapjel és pillanatának ideje ezen keresztül írhatjuk a target elemet lánctalpszabályozó hibajele az előző ütemben PID szabályozó integrátor tagja ebben integrál PID szabályozó kimenete lánctalpra adott feszültség (antiwinduphoz megvalósításához)
drive struktúrán belüli két crawler struktúra (1.3. táblázat) tartalmazza. Szabályozás A szabályzó feladata, hogy az érzékelt vonalpozíció bemenet szerint változtassa a robot pályájának görbületét (a pálya görbületi sugarának reciprokát). Terveinkben többféle szabályzó megvalósítása, és összehasonlítása szerepel, ezek közül az alábbiakat valósítottuk meg: 24
1.3. Szoftver
• hagyományos P és PID szabályzók: a szabályzó paramétereket próbálgatásos úton beállítva, • pontról pontra követés pozíció és irány figyelembe vételével: ez a módszer megvizsgálja a vonal pozícióját és a robothoz viszonyított irányát, majd eszerint választ az előre letárolt útvonalszakaszok közül. Eközben a vonal elvesztése esetén korrigál. A fenti funkciókat a controller_P(), cotroller_PID(), illetve controller_decisionPD() függvények valósítják meg. Az, hogy melyik szabályozót használjuk vonal- ill. falkövetésre, egy globális struktúrában (control) szerepel. A position_Process() függvény a balról olvasott vonalpozíciókat, a jobbról olvasott vonalpozíciókat, és a falak által meghatározott pozíciókat is letárolja egy-egy körpufferben. A controller_Watch() függvény megvizsgálja, hogy hányszor szerettük volna követni a vonalat, ill. falat, és ha sokszor nem volt érvényes pozíció, akkor átvált a másik követésére. Ez például az alagútba való beérkezéskor fontos, hisz ekkor a vonal eltűnése esetén automatikusan a két oldalt levő fal által meghatározott útvonalat követjük, és erről csak akkor váltunk vissza vonalkövetésre, ha eltűnik a két fal. Így a szaggatott vonal zavaró hatását teljesen kiküszöböltük. Az, hogy falat vagy vonalat kell követni, illetve a vonalat milyen irányba (balról vagy jobbról keresve), szintén a control struktúrában szerepel. A controller() függvény pedig megszerzi a kívánt pozíciókat, melyek ha érvényes pozíciót jelölnek, akkor meghívja a megfelelő szabályozót megvalósító függvényt.
1.3.4. Felső logika A felső logika a RobonAUT() függvény ciklikus lefuttatásával érvényesül. A lefutás során először beállítja a menetsebességet, ezt jelenleg egy fix értékre teszi, a későbbiekben figyelembe vehetjük a görbület statisztikát3 valamint az aktuális szabályzó típusát. Ezután a szabályzó állapota szerint avatkozunk közbe: • keresztvonal jelzés esetén megállunk, és egy LED-et kigyújtva jelezzük, hogy végeztünk, • vonal és fal hiánya jelzés esetén (azaz nincs mit követnie a szabályzónak) visszakeressük a lementett pozícióértékek közül az utolsó valósat, és annak megfelelően, hogy melyik széléhez volt közelebb a robotnak egy fix íven kanyarodunk vissza a vonal felé, amíg újra rá nem találunk a vonalra, majd visszaadjuk az irányítást a szabályzónak, • más állapotakor a szabályzónak nem avatkozunk közbe. Ezután a wall globális struktúra változást jelző flagjét4 ellenőrizzük. Hogyha változás történt az új állapot szerint cselekszünk: 3 4
A drive_Control() függvény állítja elő. Lásd 1.3.3. A wall_Event() függvény állítja. Ld. 1.3.2 fejezet.
25
1. Differenciális hajtású robot
• elágazás esetén a handle_Bypass(), • begyűjtő/lerakóhely jelző esetén a handle_CollectOrScore() függvény hívása, • egyéb esetben hibajelzés. A handle_Bypass() biztosítja a tárolt menetirány és a paraméterben megkapott elágazástípus szerint a helyes irányba való letérést, amelyet végső soron a szabályzó hajt végre, mert a vonalnak vagy a bal szélét, vagy a jobb szélét fogja követni. A függvény továbbá megvárja, amíg az elágazáson túl érünk, addig a felső logika szünetel, és ha meg kell fordulnunk az elágazás után, azt is megteszi, majd ismét túlhalad az elágazáson. Erre azért van szükség, hogy az elágazást jelző fal melletti visszafele történő elhaladást ne érzékelje a felső logika (tévesen) új elágazásként. A handle_CollectOrScore() függvény a kétoldalt elhelyezett jelző fadarabok hatására a következő két lehetőség közül választ: • ha még nem voltunk begyűjtőhelyen (nincs nálunk labda) egyszerűen megáll, és megvárja, amíg a labdák a lapátba pottyannak, • ha már voltunk begyűjtőhelyen (minden bizonnyal van nálunk labda) megáll, majd kiborítja a labdákat, megvárja, amíg a lapát megint felső pozícióba kerül.
1.3.5. A jelző LED sor vezérlése A robot elején egy 11 LED-ből álló LED sor található (minden optoérzékelő fölött egy) ezeket egy 16 kimenettel rendelkező LED meghajtó IC-vel vezéreljük. Ehhez az áramkörhöz soros vonalon tudunk hozzáférni. Ezt a kommunikációt valósítja meg a led_Set() függvény. A led_Control() egy olyan függvény, amely a LED-ek kapcsolgatásával fényerő szabályozást hoz létre. Ezt nem egy lineáris kitöltési karakterisztika megvalósításával, hanem egy logaritmikus skála szerinti állítással éri el. Ezt úgy valósítja meg, hogy beállítja a fényesség értékek szerint a LED-eket a led_Set() függvény segítségével, majd beállítja a TIM3-as időzítőt, hogy a megfelelő idő múlva (tipikusan az előző intervallum kétszerese) üssön be a megszakítás, ekkor a függvény újra meghívásra kerül. Ezzel a módszerrel sikerült egy 10 fokozatú, látványra egyenletes fényesség skálát létrehozni a processzor lényeges lefoglalása, vagy a LED-ek zavaró villogása nélkül. A LED sor vezérlése gyakorlatilag független a programrendszer többi részétől. Mivel ennek a funkciónak a legfontosabb a pontos időzítése, neki a legmagasabb a prioritása, így akármelyik másik megszakítás futását megszakíthatja. A LED-eken kijelezni kívánt értékeket egy globális struktúra tartalmazza, (led) ezen keresztül jelezhetünk ki valamit a LED soron.
1.3.6. Felhasználói felület Az lcd_Send függvény az LCD-nek küldendő bájtot eljuttatja a shiftregiszter lábaira, és emellett jelzi az LCD-nek, hogy adatbájt, vagy parancsbájt fog érkezni. 26
1.3. Szoftver
Az lcd_WriteStr() kiír egy adott szöveget az adott pozícióba a kijelzőre úgy, hogy a szükséges parancs és adatbájtokat az lcd_Send() függvény használatával küldi el. A felhasználói felület beviteli eszközeinek változásait az lcd_action() függvény figyeli, melyet mindig meg kell hívnunk a főciklusban. Ez a függvény globális változókban jelzi, hogy milyen állapotban vannak a beviteli eszközök. Az lcd_control() függvény pedig az lcd_action() által jelzett eseményektől függően és a kijelzőn szereplő tartalomtól függően cselekszik, például megszorozza 10-zel az állított paramétert. Ezt a függvényt szintén ciklikusan meg kell hívnunk.
1.3.7. A szoftver futása A felső logikát kivéve minden folyamat megszakításon keresztül lép érvényre. A rendkívül időkritikus LED fényerőszabályozás saját időzítővel rendelkezik, a többi feladat a felső logika által meghatározott gyakorisággal fut le az 1 ms-onként megszakítást kérő TIM4 időzítő megszakításakor(1.4. táblázat). 1.4. táblázat. Megszakítások összefoglalása
prioritás 0 1 2
megszakítás szerepe ms felbontású idő léptetése lánctalpakon bekövetkezett inkrement pillanatának mentése LED-vezérlés tápfeszültség beolvasása lánctalpak sebességeinek számítása analóg eszközök beolvasása, értékek kiértékelése controller_Watch() és controller() függvények lefuttatása drive_Control() lefuttatása increment_Control() függvény mindkét lánctalpra crawler_Control() függvény lefuttatása mindkét lánctalpra lcd_action() függvény lefuttatása
gyakoriság 1 ms-onként változó változó 1 ms-onként 20 ms-onként 22 mm-enként 20 ms-onként 20 ms-onként 20 ms-onként 20 ms-onként 20 ms-onként
A 22 mm-enkénti futási gyakoriság úgy jöhet létre, hogy minden ms-ban vizsgáljuk, hogy haladt-e összesen a két lánctalp 44 mm-t, és eszerint futtatjuk vagy sem.
1.3.8. Összefoglalás A megvalósítás során egyre bővülő, bonyolódó rendszer elkészítése során gyakran ütköztünk olyan problémákba, amelyről később az operációs rendszerekkel kapcsolatban tanultunk, így újra nekivágva a feladatnak biztosan egy megfelelő operációs rendszer segítségével kezelnénk az ütemezést és erőforrás elosztást, de így megismerkedtünk a beágyazott operációs rendszerek létrejöttének okaival, megvalósításuk mikéntjével.
27
1. Differenciális hajtású robot
1.4. A differenciális hajtás szabályozása A vonalon haladás megvalósításához a differenciális hajtás segítségével folyamatosan előre haladó, ívesen kanyarodó járművet kellett létre hoznunk. A következőkben ennek a strukturális megvalósításait mutatjuk be. A szabályozástechnikai megvalósítást Lantos Béla Irányítási rendszerek elmélete és tervezése [8] könyvében olvasottak alapján vittük véghez.
1.4.1. A lánctalp, mint szabályozási szakasz Először külön megvizsgáltuk a lánctalpakat, mint szakaszokat, melyek karakterisztikája az 1.25. ábrán látható. Láthatjuk, hogy ezen szakaszok nemlinearitást mutattak, ugyanis 0,8 0,7
y = 0,073x - 0,042
0,6 0,5 sebesség 0,4 [m/s] 0,3 0,2 0,1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 feszültség átlagérték [V]
1.25. ábra. A lánctalpak nemlinearitása
egy küszöbfeszültség alatt nem mozdulnak meg a lánctalpak. Ezen holtsávon kívül azonban lineárisan közelíthető az ábrán látható egyenlettel, melyből kiszámítható a küszöbfeszültség nagysága: 0, 042 = 0, 58 V 0, 073
(1.1)
A szakaszokat úgy linearizáltuk, hogy ezzel a küszöbfeszültséggel megnöveltük a ráadott feszültséget (1.26. ábra). Az így kapott lánctalp-modell már lineáris. A lánctalpsebesség-hajtás motor feszültség karakterisztika ezúton történő linearizálása után tekintsük mindkét lánctalp sebességét és az egész jármű mozgását.
1.4.2. A két lánctalp együttes mozgása: a görbület Azt láthatjuk, hogy a két lánctalp sebességének összege az előrehaladási sebesség mértékével arányos. De vajon mit jelent a két lánctalp sebességének különbsége? 28
1.4. A differenciális hajtás szabályozása
U [V]
U [V]
DC motor áttétel lánctalp
sebesség
lánctalp-modell
1.26. ábra. A lánctalpak meghajtásának linearizálása
dr
rjobb rbal
1.27. ábra. A lánctalpas jármű pályája
Tekintsünk egy állandósult vbal > vjobb > 0 lánctalpsebességgel haladó járművet. Természetesen körben fog haladni folyamatos jobbra kanyarodás mellett. A jobb lánctalp és a bal lánctalp pályája koncentrikus körök lesznek, és a két sugár különbsége dr pedig a jármű tengelytávolságával lesz egyenlő (1.27. ábra). Mivel a két lánctalp azonos idő alatt tesz meg egy teljes fordulatot a körpályán, így tkor = , ahol r =
rbal +rjobb 2
2π ∗ rjobb 2π ∗ rbal 2π ∗ r = = vjobb vbal v
a robot középvonalának pályáját leíró kör sugara, v =
(1.2) vbal +vjobb 2
pedig
a robot haladási sebessége. (Az 1.2) egyenletből átrendezve kapjuk, hogy vbal dr = rbal = r + v 2 vbal dr r( − 1) = . v 2
r
(1.3) (1.4)
Hasonlóképpen r(−
vjobb dr + 1) = . v 2 29
(1.5)
1. Differenciális hajtású robot
(Az 1.4) és (az 1.5) egyenletek összegéből r
vbal − vjobb = dr. vatlag
(1.6)
1 ∆v = . r v ∗ dr
(1.7)
Innen a görbület
Tehát a görbületet a görbületi sugár reciprokjaként definiálva állandónak tekintve a haladási sebességet (a két lánctalp sebességének átlagát) arányos mennyiséget kapunk a két lánctalp sebességének különbségével.
1.4.3. Első szabályozási felépítés: egyszintű rendszer
haladási sebesség Szabályozott szakasz
Szabályzó
++ -
görbület
DC motor
ADC és 11 feldolgozó
+ +
+
vonal pozíció [-100, 100]
DC motor
1.28. ábra. Az egyszintű rendszer felépítése
Az 1.28. ábrán látható felépítés szerint alakult az első szabályzott rendszerünk. Ebben a rendszerben a szabályzott szakasz bemenő görbületéből az 1.4.1 részben leírt linearizáció segítségével jön létre motorokra kapcsolt feszültség. A jármű vonalon tartását ez esetben egyetlen SISO (Single Input - Single Output: egy bemenetű, egy kimenetű) szabályzó végzi, amely sajnos a kiszámított görbületet sok esetben nem fogja tökéletesen követni, hiszen fordulás közben a két lánctalp eltérő sebességükből eredően fékező, vagy húzó hatást eredményez a másik lánctalp szempontjából. Ez azt jelenti, hogy a DC motor nyomatéka megváltozik, ami azonos tápfeszültség mellett eltérő fordulatszámot eredményez a terheletlen állapothoz képest. Így a két lánctalp sebessége el fog térni a lineáris modellből számolt értéktől.
1.4.4. Második szabályozási felépítés: többszintű felosztott rendszer Az eltérésnek a csökkentésére terveztük meg az 1.29. ábrán látható szabályozási felépíést. Ebben a két lánctalp álltal megtett út hosszát egy inkrementális jeladó segítségével visszacsatoltuk egy PID szabályzóba. A szabályzó alapjele a lánctalp megkívánt sebessége, hibajele a megkívánt és az inkrementgyakoriságból számított sebességének különbsége, be30
1.4. A differenciális hajtás szabályozása
haladási sebesség
+ Szabályzó
Szabályozott szakasz sebesség seb. PID alapjel DC poz. d/dt + motor
-
görbület
ADC és feldolgozó 11
+ +
+
DC motor
sebesség alapjel
poz.
PID
vonal pozíció
d/dt seb.
1.29. ábra. A többszintű felosztott rendszer felépítése
avatkozó jele pedig a DC motorra kapcsolt feszültség. Sebességszabályozás helyett pozíciószabályozás alkalmazása esetén a rendszer alapjele a megkívánt pozíció, hibajele pedig a valós pozíció késése ehhez képest. A két szabályzókör felelős az egyes lánctalpak megkívánt sebességen tartásáért, így a megkívánt sebességre való beállás sebességét is növelni tudtuk, valamint a sebesség megtartásának pontosságán is javítottunk (1.30. ábra és 1.31. ábra). A szabályzott esetben láthatjuk, hogy nagyságrendekkel gyorsabban beáll a lánctalp sebessége a megkívánt sebességre, azonban ezesetben a nagyobb beavatkozó jelek miatt sokkal jobban billeg a homlokrakodó, aminek hatása periodikus lengésként jelentkezik. A görbületet meghatározó szabályozó felépítése nem változott az előző struktúrához képest, csak a szabályozott rendszer viselkedése került közelebb az ideális modellhez.
1.4.5. Harmadik szabályozási felépítés: többszintű rendszer MIMO sebességszabályozóval Az előző felépítést továbbfejlesztve terveztünk egy, a két külön sebességszabályozót egyesítő MIMO (Multple Input - Multple Output: több bemenetű, több kimenetű) szabályozót, amit az 1.32. ábrán látható módon illesztettünk a rendszerbe. A sebességszabályozó alapjelként a két megkívánt sebességet kapja, valamint a két sebességjel kerül visszacsatolásra a lánctalpak felől. Kimenő jele a lánctalpakra adott feszültség. A felépítés megegyezik az előző részben bemutatottal, de ebben az esetben a két lánctalp egymásra gyakorolt zavaró hatása közvetlenül, a szabályzón belül semlegesíthető, így pontosabb és gyorsabb szabályozást megvalósítva.
31
1. Differenciális hajtású robot
1 0.9 0.8
sebesség [m/s]
0.7 0.6 0.5 0.4 0.3 0.2 0.1 0
0
200
400
600 idő [ms]
800
1000
1200
1.30. ábra. A lánctalp sebessége szabályozás nélkül 1 0.9 0.8
sebesség [m/s]
0.7 0.6 0.5 0.4 0.3 0.2 0.1 0
0
200
400
600 idő [ms]
800
1000
1200
1.31. ábra. A lánctalp sebessége szabályozással
Sajnos az identifikáció során komoly akadályokba ütköztünk. Az 1.33. ábrán láthatjuk az egyik identifikációs gerjesztés-válasz felvételt. Ezen megtalálhatóak a rendszer silány mechanikai kialakításából adódó furcsa viselkedés jelei. Az 1-es számmal jelölt helyen azt figyelhetjük meg, ahogy az egyik lánctalpra adott pozitív gerjesztés a másik lánctalpon negatív, visszafogó hatást eredményez, míg minden más esetben az egyik lánctalp pozitív változása a másik lánctalpon pozitív hatást kelt. (Megfigyelhetjük ezt például a 8000. ms-ban kiadott változás hatásakor.) A 2-es számmal jelölt részen pedig azt figyelhetjük meg, hogy a két hajtás motor változatlan gerjesztése mellett a két lánctalp sebessége drasztikusan lecsökken. (Röviddel ezután a gerjesztés is alacsonyabb szintre került, de persze ezt a lánctalpak nem „tudhatták” előre.) Az ehhez hasonló mérési bizonytalanságok miatt nem tudtunk jól illeszkedő lineáris állapotváltozós modellt felállítani a rendszerhez, így ezt a szabályzási rendszert nem tudtuk megvalósítani.
32
1.4. A differenciális hajtás szabályozása
haladási sebesség
seb. DC
++ -
görbület
Szabályzó
motor
MIMO szabályzó
+ +
poz.
+
d/dt ADC és 11 feldolgozó
DC motor
poz.
d/dt
seb.
1.32. ábra. A többszintű rendszer MIMO sebességszabályozóval
bal oldal
sebeség [m/s]
0.6 0.4 ubal
0.2
y bal
0 -0.2
0
2000
4000
6000 8000 idő [ms]
1
10000
12000
14000
2
jobb oldal
sebeség [m/s]
0.4 0.3 ujobb
0.2
y jobb
0.1 0
0
2000
4000
6000 8000 idő [ms]
10000
12000
14000
1.33. ábra. MIMO identifikációs adatok
33
vonal pozíció
1. Differenciális hajtású robot
20 0 -20 -40 0.5
1 idő [ms]
1.5
2 x 10
0.5
1 idő [ms]
1.5
2 x 10
20 0 -20 -40 0
4
0 -100 0
40
[%]
0 100
Uj o b b - Ub a l Uj o b b + Ub a l
vonalpozíció [mm]
40
5000 idő [ms]
10000
5000 idő [ms]
10000
100
Uj o b b - Ub a l Uj o b b + Ub a l
[%]
vonalpozíció [mm]
1.5. Eredmények
0
-100 0
4
1.34. ábra. Vonalkövetés P szabályozóval, ha a hajtásmotorok átlagfeszültsége
vonalpozíció [mm]
40 20 0 -20 -40 5000 idő [ms]
10000
[%]
0 100
Uj o b b - Ub a l Uj o b b + Ub a l
Uj o b b - Ub a l Uj o b b + Ub a l
[%]
vonalpozíció [mm]
3 V (balra) illetve 5,4 V (jobbra)
0
-100 0
5000 idő [ms]
10000
40 20 0 -20 -40 0
5000 idő [ms]
10000
5000 idő [ms]
10000
100
0
-100 0
1.35. ábra. Vonalkövetés P szabályozóval, ha a hajtásmotorok átlagfeszültsége 7,8 V (balra) illetve 10,2 V (jobbra)
Az 1.4.3 részben ismertetett egyszintű szabályozási rendszerhez egy P szabályzót terveztünk, amelynek ugyanazon a pályaszakaszon mért teljesítménye különböző haladási sebességek (azaz hajtásmotor átlagos feszültsége mellett, hiszen itt nincs információnk a lánctalp sebességéről) mellett az 1.34. és az 1.35. ábrákon láthatjuk. Alacsonyabb sebességnél a vonalérzékelési hibáktól eltekintve láthatjuk, hogy a vonal pozíciója többnyire a ±20 mm-es tartományon belül marad. Nagyobb sebességek esetén jól láthatóan oszcillál a rendszer, a stabilitás határán mozog. Az 1.35. ábra jobb oldalán látható esetben gyakran van a rendszer a kivezérlés maximum pontján, ami azt eredményezi, hogy az egyik lánctalp megáll, vagy már hátrafelé indul el, miközben csak a másik lánctalp motorját hajtjuk. Ez a pályaszakaszon való végighaladás sebességének csökkenésével járt. Az 1.4.4 fejezetben tárgyalt, már sebesség visszacsatolással rendelkező szabályozási rendszerhez összehasonlításképp egy P, valamint egy PI szabályzót terveztünk, amelyek teljesítménye azonos pályaszakaszokon az 1.36. és az 1.37. ábrákon követhető nyomon. 34
40
40
20
20
vonalpozíció [mm]
vonalpozíció [mm]
1.5. Eredmények
0
-20
-40
0
-20
-40 0
2000 4000 megtett út [mm]
6000
0
2000 4000 megtett út [mm]
6000
1.36. ábra. Vonalkövetés P (balra) illetve PI (jobbra) szabályozóval 0,26 m/s
40
40
20
20
vonalpozíció [mm]
vonalpozíció [mm]
sebesség alapjellel
0
-20
-40
0
-20
-40 0
2000 4000 megtett út [mm]
6000
0
2000 4000 megtett út [mm]
6000
1.37. ábra. Vonalkövetés PI szabályozóval 0,4 m/s (balra) illetve 0,46 m/s (jobbra) sebesség alapjellel
Az 1.36. ábrán láthatjuk, hogy a szabályzó integrátora mennyivel csökkenti az oszcillációt a pálya elején található „S” kanyaron való végighaladás során. Az 1.37. ábrán láthatjuk, hogy 0,4 m/s-os haladási sebesség mellett, még stabil, viszont ennél gyosrsab sebességgel már épphogy csak a vonalon marad a jármű.
35
1. Differenciális hajtású robot
1.38. ábra. A döntés alapú szabályzó működése
A sebességvisszacsatolt rendszerhez terveztünk továbbá egy döntés alapú szabályzót, amely két olvasott vonalérték alapján választ 25 előre rögzített útvonal közül. A döntést a vonal pozíciója (ötféle lehet) és a vonal robothoz viszonyított iránya (szintén ötféle) alapján végzi. Hogyha egy útvonal teljesítése közben elvesztené a vonalat, egy vész fordulással tér vissza rá, megszakítva az eredeti betöltött pályáját. Az 1.38. ábrán követhetjük nyomon a működést. Itt a fenti mérésekhez használt útvonalon mutatjuk be a mozgását. A zölddel jelölt pozícióban elvesztette a vonalat, így a piros pozícióba vezető pálya helyett egy egyhelyben fordulást jelentő pályát teljesít. Minden pályaszakasz egy rövid egyenes résszel zárul, hogy a vonal irányát megfelelően mérhessük. A szabályzó megvalósítása végül nem sikerült működőképesre, ennek kijavítását a jövőben tervezzük.
36
1.6. Konklúzió
1.6. Konklúzió Ezzel a hardverrel és szoftverrel indultunk a RobonAUT 2010 versenyen, amelyen holtvresenyben negyedik helyezést értünk el, ugyanis egy végálláskapcsoló szerencsétlen meghibásodása miatt a billentő szerkezetet nem tudtuk működésre bírni. A homlokrakodó modellel végzett munkánk során rengeteg tapasztalatra tettünk szert vonalkövető autonóm robot építése terén. A homlokrakodó modell hibáiból levonva a tanulságot tértünk át az autómodell tervezésére. Az autómodell mechanikai kialakítása is lényegesen leegyszerűsíti egy vonalkövető robot létrehozását (lásd 2. fejezet). A homlokrakodó modell mechanikai kialakítása nem tette lehetővé fejlettebb állapotvisszacsatolt szabályozás megvalósítását, egy differenciális hajtás szabályozása lényegesen nehézkesebb erre a feladatra, viszont egy közvetlen beavatkozón keresztül(kormányzott kerék) állítható görbületen haladó autómodell sokkal alkalmasabb a feladatra.
1.6.1. Hardverrel kapcsolatos tapasztalatok A hardverben a vonal érzékelése jelentette számunkra a szűk keresztmetszetet. Több hiányosságra is fény derült a hardver használata során, az optoérzékelők: • LED-jei egymás alá világítottak, ezt egyesével kapcsolás segítségével küszöböltük ki a modellautóban, • LED áramai függtek a tápfeszültségtől, ezt a problémát állandó áramú LED meghajtó áramkörök segítségével javítottuk, • mindegyikének analóg vonal biztosítása nehézkes vezetékezést, és analóg multiplexelést eredményezett, ezt a fototranzisztorok párhuzamosan kapcsolásával, és a LED-ek vezérlésével kerültük meg, • túl messze kerültek egymástól a vonal tendenciájának megfelelő követését lehetetlenné téve.
1.6.2. Szoftverrel kapcsolatos tapasztalatok A szoftver bővülése közben gyakran gondot jelentett az áttekinthetetlenség, így a jövő évi versenyre készülő robot szoftverének fejlesztése során komoly hangsújt fektetünk az áttekinthető, moduláris felépítésre. A szoftver ütemezését is máshogy tervezzük a jövőben megvalósítani, mert az, hogy a legtöbb funkció megszakításból hívódott meg, gyakran jelentett kényelmetlenséget.
37
1. Differenciális hajtású robot
38
2. fejezet
Autómodell A fentebb ismertetett differenciális hajtású robottól egy nagy mértékben eltérő (kormányzott) kialakítású járműből is anutonóm vonalkövető robotot készítettünk. Ez az előző kialakítással szemben sok előnnyel járt: • A legfontosabb előny, hogy a kormányzás mechanikailag elkülönül a sebességtől. • Sokkal szélesebb érzékelősor kialakítására kaptunk lehetőséget, a kerekek elé helyezve az érzékelősort. A homlokrakodó modellnél egy felső korlátot jelentett a lánctalpak távolsága. Így a két szélső optoérzékelő távolságát 90 mm-ről 129 mm-re növelhettük. • A modellautó tartalmaz egy motorszabályzót, így nem kellett végfokot terveznünk. • A modellautó nagyobb sebességre, maximálisan 8 m/s-ra képes, míg a homlokrakodó maximális sebessége alig haladta meg az 1 m/s-ot. • A négykerekű jármű nem billeg, míg a lánctalpas jármű gyorsulás hatására hátrabillent, lassulás hatására előrebillent, így az érzékelősor távolsága a talajtól nem volt állandó. • A kerékkel gördülés lényegesen egyenletesebb sebességet erdményezett a lánctalp nehézkes mozgásához képest.
2.1. Mechanika A második robot alapja a 2.1. ábrán látható, 1:10-es méretarányú pályaautó modell, mely összkerékmeghajtású, beépített motorszabályzóval és kormányszervóval rendelkezik.
2.1.1. RobonAUT 2011 A RobonAUT 2011 MSc robotverseny feladata - a korábbi évhez hasonlóan ismét - egy autonóm robot megalkotása volt, amely egy a földre ragasztott fekete csík követésével teljesíti a meghatározott pályaelemekből felépülő pályát, miközben minél több pontot gyűjt össze. A külön pontokért elvégezhető feladat egy garázsba való beállás, majd onnan történő kitolatás. A pálya a következő elemekből áll: 39
2. Autómodell
2.1. ábra. Az autómodell
• A pályaelemeket összekötő egyszerű vezetővonal Egy 19 mm széles fekete, padlóra ragasztott csík, melynek görbületi sugara legalább 1 m. • Start- és célmező (2.2. ábra)
2.2. ábra. A start- és célmező
A tavalyi évhez hasonlóan T-formával kezdődik és végződik a vezetővonal, a célon való túlfutásért levonás jár. • Elágazás-becsatlakozás, extra elágazás (2.3. ábra)
2.3. ábra. Az extra elágazás
A tavalyitól eltérően idén a nagyobb sebesség miatt nem egy töréssel ágazik el az útvonal, hanem a felragasztott vonal mellett, vele párhuzamosan megjelenik egy második 40
2.1. Mechanika
vezetővonal. A kétféle elágazás megkülönböztetésében ezúttal is az oldalt elhelyezett falak nyújtanak segítséget. • Garázs (2.4. ábra)
2.4. ábra. A garázs
Az extra elágazásnál a megfelelő irányba hajtva egy garázst szimbolizáló U alakú falelemhez jutunk, melybe orral beállva, majd visszatolatva, plusz pontokra tehetünk szert. A garázstól az út folytatásához célszerű visszatolatni egészen az elágazásig. • Úttorlasz (2.5. ábra)
2.5. ábra. Az úttorlasz
Az úton elhelyezett akadály, melyet valamelyik oldala mentén elhaladva kerülhetünk ki, és térhetünk vissza a vezetővonalra. • Vonalhiány (2.6. ábra)
Vonalhiány esetén a vezetővonallal párhuzamosan egy fal jelenik meg, és a vezetővonal véget ér. Innentől kezdve a fal mentén kell haladni, amíg a vonal újra meg nem jelenik. A fal egy ponton megtörik, és az eredeti haladási iránytól távolodva folytatódik. • Gyorsasági szakasz (2.7. ábra) A gyorsasági szakasz hosszú, egyenes vonalszakaszt jelent, ahol nagyobb sebességgel haladhatunk. Elejét falak, végét pedig tripla vezetővonal jelzi. 41
2. Autómodell
2.6. ábra. A vonalhiány
2.7. ábra. A gyorsasági szakasz kezdete és vége
A versenyhez minden csapat kézhez kapott egy autómodellt (2.1.), és egy STM32 ComStick eszközt (1.9.), így a fejlesztést az előző verseny során megszokott környezetben folytathattuk.
42
2.2. Hardver
2.2. Hardver A feladat megoldásához felhasználtuk az STM32 ComStickhez a tanszék által biztosított bővítő kártyát, amely az akkumulátorfeszültségből egy kapcsolóüzemű tápegység segítségével stabil 5 V-os tápfeszültséget hoz létre, és emellett a mikrokontroller ComSticken kivezetett lábai egy 20-as és egy 34-es szalagkábel csatlakozón kerülnek kivezetésre. Ezeken a szalagkábeleken csatlakoztattuk az általunk készített hardvereket, amelyeket a szabályozás méréséhez először próbapaneleken valósítottunk meg, amely a következő funkciókat tudta ellátni: • a vonal olvasásához 18 optoérzékelő kezelése, amely 2 analóg bemenet segítségével történik (bal oldalsó 9 érzékelő, valamint a jobb oldalsó 9 érzékelő a két bemeneten), • a távirányítóból érkező két PWM jel fogadása, • a kormányszervóhoz és a motorvezérlőhöz jutó PWM jelek kiadása, • Bluetooth kapcsolat biztosítása, • az ultrahangos távolságérzékelő illesztése. A továbbiakban egy, a RobonAUT 2011 versenyhez tervezett hardver leírása következik, amely a következő funkciókat látja el: • a vonal érzékeléséhez 32 optoérzékelő kezelése, amelyek 4 analóg vonalra kapcsolódnak, és bármely két azonos analóg vonalra csatlakozó érzékelő 4 érzékelőnyi távolságra helyezkedik el egymástól, • a távirányító felől érkező két PWM jel fogadása, • a kormányszervóhoz és a motorvezérlőhöz jutó PWM jelek kiadása, valamint egy extra modellszervó esetleges vezérlése, • a motorvezérlő tápjának megszakítása, • Bluetooth kapcsolat biztosítása, • az ultrahangos távolságérzékelő illesztése, • egy 3 tengelyes MEMS gyorsulásérzékelő illesztése, • a sebesség visszacsatolás megvalósításához egy reed cső illesztése, • két Sharp távolságérzékelő illesztése, • dekorációként szolgáló nagy- és kisteljesítményű LED-ek meghajtása, • bővíthetőség biztosítása. 43
2. Autómodell
Tehát a szoftver és a mérések a próbapanelen összeállított hardveren történtek, amely funkciókat az itt leírt hardver is képes ellátni. Emellett számos egyéb funkcióval egészíti ki, aminek segítségével egy, a RobonAUT 2011 versenyen induló autonóm robotot hozhatunk létre. Az érzékelősor a próbapanelen 139 mm szélességben, míg az új hardveren 217 mm szélességben tervezzük megvalósítani, valamint az analóg vonalak kiosztása is különböző, ezen tapasztalataink alapján változtattunk. A tervezett hardver két NYÁK-ból áll, az egyik a jármű aljára helyezett érzékelősort tartalmazza, míg a felső panelen a többi funkció került megvalósításra.
2.2.1. Tápellátás
2.8. ábra. Az akkumulátor, az indítókuls. és a ComStick bővítő kártya bemenő tápjának csatlakozása
A robot energiaellátása egy 7,2 V névleges feszültségű Ni-Cd akkumulátorról történik, amelynek két kivezetése a felső kártyára csatlakozik. A negatív pólusa az indítókulcs kapcsolójának zárásával kapcsolódik a földpotenciálhoz, tehát az indítókulcs elfordításáig semmilyen eszköz nem kap tápellátást (lásd 2.8. ábra). A földpotenciál és az akkumulátor pozitív pólusa csatlakozik a ComStick bővítő kártyájához, amelyen található kapcsolóüzemű tápegység stabil 5V-os tápfeszültséget állít elő belőle. Ez a 34 pólusú szalagkábelen jut el a felső kártyára, amelyen egy 3,3 V-ot előállító feszültségstabilizátor (2.9. ábra) hozza létre a LED meghajtók, analóg vonalak, Bluetooth rádiós modul, valamint a gyorsulásérzékelő tápfeszültségét.
2.9. ábra. A 3,3 V-ot előállító feszültségstabilizátor
A szalagkábeleken jövő föld és tápvonalak közül csak az analóg földet hoztuk át a 34 pólusú csatlakozón, valamint a fent leírt vezetéken a +5 V-os tápfeszültséget, így megaka44
2.2. Hardver
dályozva a földhurkok képződését. A modellautó rendelkezik egy DC motor vezérlő egységgel, amely az akkumulátorfeszültséget megkapva létrehozza a kormányszervó és a rádió vevő tápfeszültségét, amelyet az egyéb tápfeszültségektől elszigetelten minden szervó csatlakozóra rákötöttünk (ez nyomon követhető a 2.10. ábrán). Ez a vezérlő egység a felső kártyáról kapja a tápfeszültségét,
2.10. ábra. A szervó vonalak illesztése
mert azt a mikrokontroller által megszkaíthatóvá és engedélyezhetővé tettük (lásd 2.2.2).
2.2.2. A motorvezérlő áramának megszakítása A próbapanelen megvalósított hardver használata során gyakran gondot jelentett, hogy a modellautó motorvezérlő áramköre megkapta a tápfeszültséget minden olyan esetben, hogyha a tápkapcsolót bekapcsoltuk. Ezért a versenyre készülő hardveren a motorvezérlő föld vonalát megszkíthatóvá tettük egy N csatornás nagyáramú MOSFET segítségével, melynek kapcsolása a 2.11. ábrán látható. Így a gate elektródára adott 0 vagy 5 V-os fe-
2.11. ábra. A MOSFET megszakító kapcsolása
szültséggel tudjuk elérni azt, hogy a motorvezérlő kapjon tápot, vagy sem. A FET 40 A-es terhelhetősége a DC motor vezérlőnek elég. 45
2. Autómodell
Emellett a 40 A-es terhelés mellett a kimeneti karakterisztikából leolvashatóan 0,6 V feszültség esik a FET drain és source elektródája között. Ez a motorvezérlő föld szintjének eltolódását eredményezheti magas áramfogyasztás esetén. Ez azért lehet veszélyes mert a szervó egységek logikai komparálási szintje is megváltozik. Mivel a mikrokontroller felőli kommunikáció jelszintje 5 V-os, ami eltűri ezt a zavart nem túl magas zajszint mellett. Komolyabb problémát eredményezhet a távirányító felől érkező jel szintje, amely alacsony feszültsége egy 3,3 V tápszeszültségű mikrokontroller bemenetre kerül, így már közelebb van az 1 V-os alacsony komparálási szinthez. Gondot jelenthet továbbá az 5V-os szint 5,6 V-ra emelkedése. Ezeket a működési feltételeket úgy tervezzük a megvalósítás előtt ellenőrizni fogjuk.
2.2.3. Szervó jelek 2 ms
1 ms 20 ms
2.12. ábra. A szervójel
A modellautó rádió vevője felől érkező jelek, valamint a modellautó kormányszervójának illetve motorvezérlőjének adott jelek úgynevezett szervó jel (lásd 2.12. ábra) formátumúak. Ez egy nagyjából 50 Hz frekvenciájú periodikus jel, mely olyan impulzusokt tartalmaz, amelynek az impulzushossza 1 ms és 2 ms között mozoghat. Az impulzus ideje alatt +5 V, egyébként 0 V-os feszültségszint jelenik meg a vonalon. Ez azt jelenti, hogy a mikrokontroller 3,3 V-os jelszintjét korrigálni szükséges a kimenő szervójelek lértehozásához. A szintillesztést egy 74HCT125-ös négyes buszmeghajtó áramkörrel végeztük (2.10. ábra), amely fix 2 V-os komparálási szintje lehetővé teszi a szintillesztést. A bejövő szervójelek semmilyen kondícionálást nem igényelnek, ugyanis a mikorkontroller 5 V toleráns bemeneteire vannak kötve.
2.2.4. Vonalérzékelés A 70. oldali kapcsolási rajzon láthatjuk az érzékelősor megvalósítását. A vonal érzékeléséhez ebben az esetben is CNY70 tipusú reflexiós optoérzékelőket használtunk. Az érzékelők kiolvasása alapvetően úgy történik, hogy az optoérzékelőkben található infravörös ledeket egyesével felkapcsoljuk, majd több érzékelő fototranzisztorán folyó áram összegét olvassuk egy analóg vonalon. Persze minden esetben csak az egyik érzékelő LED-je van felkapcsolva, így gyakorlatilag a kiválasztott érzékelő alól visszaverődő fény mennyiségét tudjuk mérni. Az összes optoérzékelő infravörös LED-jének anódja +7,2 V-os tápfeszültségre, katódja pedig egy konstans áramú LED meghajtó áramkör egy csatornájára van kötve (2.13. ábra). 46
2.2. Hardver
2.13. ábra. A kaszkádosított LED-vezérlők
A LED meghajtó áramkör megegyezik a differenciális hajtású robot visszajelző LED sorának áramkörével. Működése az 1.2.2 fejezetben olvasható. A használatban annyi az eltérés, hogy itt kaszkádosítva két eszközt használunk, amelyet az áramkör azzal támogat, hogy az SOUT lábon a körpufferéből túlcsorduló jeleket továbbítja, így arra egy másik eszköz soros bemenetét kötve egy 32 bites körpuffert kapunk. Így ezzel a köpufferrel állíthatjuk be, hogy melyik érzékelő infravörös LED-jét szeretnénk felgyújtani.
2.14. ábra. A CNY70-es szenzor bekötése, az analóg csatornák földelése
A 2.14. ábra szerint bekötött érzékelőkben található fototranzisztorok négy csoportban párhuzamosan vannak kapcsolva. Mindegyik fototranzisztor kollektora 3,3 V-os tápfeszültségre van kötve, emittere pedig négy csoportban össze van kötve, és 2 kΩ precíziós ellenálláson kereszül kapcsolódik az analóg földre. A négy analóg vonal az emitterekhez kapcsolódik, így a feszültsége arányos lesz a csoportban párhuzamosan kötött fototranzisztorok emitteráramának összegével. Az egyes csoportban levő érzékelők elzendezése úgy lett kialakítva, hogy azonos analóg vonalra kapcsolt érzékelők távolsága legalább 4 érzékelőnyi legyen. Így a szomszédos érzékelőkhöz való fény átszűrődés hibáját csökkentettük. Az alsó és felső kártya közötti kapcsolatot 12 vezetéken oldottuk meg, amelyből 4 adatvezeték, 4 analóg vonal, a maradék 4 pedig táp és föld vezetékek.
2.2.5. Sharp távolságérzékelők Az oldalsó jelző falak érzékelésére ismét két Sharp GP2D120 analóg távolságérzékelőt használunk (lásd 1.2.3). Gondoskodnunk kellett az 5 V-os tápfeszültségről. Az érzékelőktől jövő analóg jelet köz47
2. Autómodell
vetlenül a mikrokontroller analóg bemenetére kötöttük.
2.2.6. Ultrahangos távolságérzékelő illesztése
2.15. ábra. Az ultrahangos távolságérzékelő csatlakoztatása
A pályán található úttorlasz érzékeléséhez egy PING))) tipusú ultrahangos távolságérzékelőt terveztünk a rendszerbe, ami 3 cm és 3 m közötti távolságú tárgyakat érzékel. A működtetéséhez az adatvezetékén egy impulzust kell küldenünk, hogy a készülék ugyanazon a vezetéken egy impulzussal válaszolva jelezze a mért távolságot. Ennek megvalósításához az adatvezetéket egy mikrokontroller bementre kötöttük, valamint egy kimenet 10 kΩ ellenálláson keresztül csatlakozik a vonalra, így elérhetjük, hogy ki tudjuk adni a gerjesztő impulzust, valamint a vissza küldött jelet be is olvashatjuk (lásd 2.15. ábra). A PING))) tipusú ultrahangos távolságérzékelő 5 V-os jelet ad ki, és ezt a mikrokontroller 5 V toleráns bemenetére kötöttük, mely tudja fogadni. A mikrokontroller pedig 3,3 V-os jelet küld a távolságérzékelőnek, ami fix 2 V-on komparál. Így semmilyen szintillesztés nem szükséges.
2.2.7. Reed kapcsoló Tapasztalataink alapján a motorvezérlő különböző akkumulátorfeszültségek esetén különböző sebességgel hajtja meg az autómodellt, így szükséges visszamérni a haladási sebességet ahhoz, hogy a kívánt sebességen tudjunk haladni. Erre a célra legyegyszerűbben állandó mágnesekből és egy reed-kapcsolóból álló rendszert terveztünk. A reed-kapcsoló az állandó mágnes közeledésekor a mágneses mező hatására zár, eltávolodása után a mágneses mező hiányában megszakít. Ezzel a metódussal érzékelhetjük a kerék pozícióját, lényegében egy inkrementális jelet kell feldolgoznunk. A mágnesekből 6 darabot tervesztünk egy 105 mm átmérőjű kerékre, ami azt jelenti, hogy
105×π 6
= 55 mm távolságot tesz meg az autó, két inkrement között.
Az autó általunk mért maximális sebesége körülbelül 8 m/s. Ezzel a sebességgel az inkrementek gyakorisága
8000 mm/s 55 mm
= 145 Hz. Az alkalmazott reed kapcsoló maximális kapcsolá-
si frekvenciája 200 Hz, így nem léphet elő hibás működés a kapcsoló kapcsolási sebességéből eredően. A kapcsoló egyik pólusát 3,3 V potenciálra, a másikat egy mikorkontroller bemenetre kötöttük, így a megkívánt működéshez belső lehúzást kell beállítanunk a bemenet iniciali48
2.2. Hardver
zálásakor.
2.2.8. 3 tengelyes MEMS gyorsulásérzékelő illesztése
2.16. ábra. A MEMS gyorsulásérzékelő bekötése
Az STMicroelectronics rendelkezésre bocsájtott egy MEMS gyosrulásérzékelőt tartalmazó kártyát, amely a felületfémezett tokozású gyorsulásérzékelőt DIL24-re alakítja. Kompatibilitási okok miatt így rengeteg bekötetlen láb keletkezik, ahogy azt a 2.16. ábrán láthatjuk. A 19-es láb logikai magas szintre kötésével jelöltük azt, hogy a gyorsulásérzékelőt I 2 C kommunikáción keresztül érjük el. Ennek megvalósításához egy SCL (Serial Clock: soros órajel ) és egy SDA (Serial Data: soros adat) vonalat 4,7 kΩ ellenállásokon tápfeszültségre húzva kell biztosítanunk. A gyorsulásérzékelő meghajt két megszakítás vonalat is, ezeket a mikorkontroller bemeneteire csatlakoztattuk. A tápellátás és a logikai magas jelszint feszültsége is 3,3 V. Az eszköz címének legalacsonyabb bitjét 1-re állítottuk.
2.2.9. Bluetooth modul
2.17. ábra. A Bluetooth modul illesztése
A mikrokontrollerhez egy BlueGiga WT12 [7] tipusú Bluetooth kommunikációs modult illesztettünk (2.17. ábra), amit egyszerűen a 3,3 V és földpotneciál valamint UART küldő (TX - Transfer ) és fogadó (RX - Receive) vonalak csatlakoztatásával értünk el. 49
2. Autómodell
2.2.10. Dekorációs LED-ek Az autómodell díszítését LED-ek segítségével tettük látványosabbá.
2.18. ábra. A felső kártyán helyet foglaló PWM LED vezérlő kapcsolása
Egy, az autó alá világító 3 W teljesítményű RGB teljesítmény LED-et, egy a felső nyákra forrasztott nagyfényerejű RGB LED-et és további 4 LED sor számára csatlakozást terveztünk a rendszerbe. A ledek állítható áramú meghajtásához a Texas Instruments TLC59401 típusú áramkörét [9] használtuk. Ennek a 2.2.4 részben említett LED meghajtó áramkörhöz hasonló soros elérési felülete van, de lényegesen több funkció érhető el ezen keresztül (két körpufferének mérete 96, illetve 192 bit). Bekötését a 2.18. ábrán követhetjük nyomon. Külön-külön állítható 63 lépésben az egyes csatornák maximális árama, valamint egy PWM funkciót bekapcsolva és egy fix PWM órajelet biztosítva az egyes csatornák kapcsolgatásával 12 bites finomsággal állíthatjuk az egyes csatornák fényerejét. Ez a fix PWM órajel legfeljebb 20 MHz frekvenciájú lehet, és érdemes nem túl alacsonyra választani, ugyanis például 205 kHz esetén a LED-ek villogásának frekvenciája a még épp elfogadható 50 Hz lesz. Ezért ezt egy egyszerű kimenettel - a processzor különösebb lefoglalása nélkül - nem lehet vezérelni, így ezt a jelet a mikrokontroller MCO (Main Clock Output: fő órajel kimenet) vonalára kötve egyszerűen egy stabil 8 MHz frekvanciájú órajellel hajthatjuk meg. A HPB8F-4K3RGBx típusú teljesítmény LED három diódáján átmenő maximális áram 350 mA. A TLC59401 áramkör 3,3 V-os tápfeszültség mellett maximális csatornánkénti árama 80 mA. Az áramkör adatlapjában található ajánlás szerint a teljesítmény LED ka50
2.2. Hardver
tódjait 3-3 csatornára kötöttem rá, hogy 240 mA-es áramot tudjunk elérni csatornánként, de ez a szám 4-4-re bővíthető egy hármas jumper (rövidzár dugó) aljzat segítségével. Így 320 mA maximális áramot érhetünk el. A felső NYÁK lemezre szerelt RGB LED további 3 vonalat foglal el, így maradt 4 vonal, amit egyéb dekorációs LED sorok meghajtására használhatunk. Ebből a négy vonalból használunk fel hármat, amikor a teljesítmény LED maximális áramát megnöveljük, így csak egy szabadon felhasználható vonal marad.
51
2. Autómodell
2.3. Szoftver 2.3.1. Felépítés A szoftver felépítésében különböző szinteket találhatunk az egyes modulokon belül: • Mozgás Az felső szint a bemenetként kapott sebesség és pozícióértékeket kondícionálja, tipikusan lekorlátozza, majd a hardver megfelelő formátumába konvertálja. (PWM kitöltési tényezővé) A legalsó szint kapcsolatot létesít a hardverrel, beállítja a PWM kitöltési tényezőjét. • Vonalérzékelés, vonalkövetés A legalsó szintje kapcsolatot létesít a hardverrel, képes letárolni az optoérzékelők által szolgáltatott analóg jelek digitalizált értékeit. Az erre épülő középső szint a nyers értékeket kondicionálja, majd kiszámolja a robot pozícióját a vonal felett. Az efölötti szinten a megfelelő formátumba konvertált pozícióérték a kanyarodás szabályzójának hibajele lesz. A szabályzó kimenete az előző pontbeli modul legfelső szintjéhez kerül, hogy beállítsa a kormányállást. • Távolságérzékelés, sebességszabályozás A legalsó szintje kapcsolatot létesít a hardverrel, képes letárolni az elülső ultrahangos távolságérzékelő által jelzett akadály távolságát. Az erre épülő szint egy egyszerű szabályzó, mely ezt a távolságot használja, hogy meghatározza a megengedett maximális sebességet. Ezen szabályzó kimenete a legelső modul legfelső szintjéhez kerül, hogy beállítsa a sebességet.
2.3.2. Analóg vonalak beolvasása A 18 db optoérzékelőt két csoportba osztottuk, a bal és jobb oldali 9-9 érzékelő emittere van egy-egy analóg bemenetre kötve. Minden egyes olvasáskor fel kell villantanunk a megfelelő optoérzékelő LED-jét, és beolvasni az analóg vonal feszültségét. Azért, hogy a párhuzamosan kapcsolt fototranzisztorok összeadódó emitter-kollektor kapacitásának kiürülésére a lehető legkevesebbet kelljen várnunk, ezért felváltva olvasunk a két csoport optoérzékelői közül, így amíg az egyik vonalról olvasunk, van ideje kiürülni a másiknak. Az optoérzékelő adatlapjában semmi adatot nem találunk a dinamikus viselkedéssel kapcsolatban. A piacon fellelhető hasonló fototranziszor 6,5 pF emitter-kollektor kapacitásával számolva az időállandó: T =
p
15 kΩ ∗ 9 ∗ 6, 5pF = 0, 937 ms
(2.1)
A kollektor 5 kΩ ellenálláson keresztül 5V-ra, az emitter 10 kΩ ellenálláson keresztül az analóg földre van kötve, és 9 fototranzisztor található prhuszamosan kötve. Méréseink során megállapítottuk, hogy a két olvasás közötti várásnak minimum 400 usnak kell lennie, különben az előző olvasás nagyjából 10-20%-ban torzítja az aktuális olvasás 52
2.3. Szoftver
eredményét (ez nagyságrendileg egyezik (a 2.1) eredményével). Így ezt az értéket 1 ms-nak választottuk. Azért, hogy a két csoport érzékelőibe beszűrődő külső fényből keletkező offszethibát kompenzáljuk, beolvastuk mindkét analóg vonal értékét úgy is, hogy egyetlen egy érzékelő LED-je sem világít és az egyes olvasások nullpontját ezekkel az értékekkel korrigáltuk. Ezt az egész beolvasást az analog_read() függvény végzi, mely a megadott sorrendben felvillantja az optoérzékelők LED-jeit, majd beolvassa az analóg vonal feszültségét, és egy tömbben tárolja. Ezek az értékek a mikrokontroller 12 bites ADC egységének eredményei, így 0..4095 értékeket vehetnek fel.
2.3.3. Pozíciószámítás A beolvasás után következik a kiértékelés. Kezdésnek minden optoérzékelő értékéből levonjuk az analóg vonalának azt az értékét, amikor nem világít semelyik LED sem, így ellensúlyozva a környezetből beszűrődő fény hatását. Mérésekkel minden egyes optoérzékelőhöz meghatároztunk egy küszöbértéket, melynél ha kisebb az így kiszámolt érték, akkor vonalat érzékel, ha nagyobb, akkor pedig nincs alatta a vonal. A mérések az előző robot mérési módszereivel (22. oldal) megegyeznek. A position_get() függvény végzi el a fent leírt jelkondícionálást, majd a küszöbértékek segítségével a kiértékelést, és végül letárol egy vonalpozíciót és visszatér azzal, hogy sikeres volt a kiértékelés - valóban vonalat érzékelünk - vagy valamilyen hiba következett be, nem tudjuk a vonal pozícióját egyértelműen megállapítani. Ez a vonalpozíció egy [-102; 102] intervallumbeli értéket vehet fel, ahol a 0 jelenti azt, hogy pontosan középen alattunk található a vonal. A 102-es intervellumhatár a 18 érzékelő közti 17 köz azonos 12 egység méretéből adódik. Ezt az előző robothoz való minél nagyobb kompatibilitás miatt választottuk 100 körüli értékre.
2.3.4. Görbület szabályozása Ha a vonal pozícióját sikeresen meghatároztuk, akkor ezen pozíció és az alapjel különbsége lesz a szabályzó kör hibajele. A szabályzó alapjele, ha azt szeretnénk, hogy középen alattunk legyen a vonal, akkor 0. A szabályzó a hibajelből és a belső állapotaiból generál egy kimenetet, melyet egy globális változóban letárol. Ezen értéket a „Mozgás” modul (52. oldal) felső szintjének curve() függvénye korlátozza, majd kiadja a szervónak, ami pedig beállítja a megfelelő kormányállást. A korlátozásra azért van szükség, mert mechanikai sajátosságokból eredően csak a kormány egy bizonyos határok közötti állása biztosít szabad gördülést a kormányzott kerekeken.
2.3.5. Ütemezés A szabályzó működéséhez megfelelő ütemezésre van szükség. A kerekeket mozgató szervó és a motorvezérlő is 20 ms-os periódusú, nagyjából 1ms és 2ms 53
2. Autómodell
közti impulzushosszúságú periodikus jelet igényel (úgynevezett szervó jel, jelalakja a 2.12. ábrán látható), amelynek impulzushossza hordozza az információt. A timer, mely ezt a PWM jelet folyamatosan generálja, az impulzus kezdete után 3 ms-mal, amikor már az impulzus biztosan véget ért, egy jelző bitet „1” értékre állít, majd az új impulzus kezdetekor nullázza azt. Így amíg ez a bit „1” logikai értéket vesz föl, addig lehet a beavatkozó jelet (impulzusszélesség) változtatni, ugyanis az impulzus közbeni változtatás hibás jelet eredményezhet. A főciklusban figyeljük ezt a jelző bitet, és hatására futtatjuk az analog_Read() függvényt, azután a position_get() függvényt, a görbületszabályzót, és végül a curve() függvényt. Így megvalósítottunk egy 20 ms-os mintavételi idejű diszkrét szabályzást.
2.3.6. Távolságmérés A főciklusban, minden egyes ütemben meghívjuk a sonar_measure() függvényt is, mely kiad egy impulzust az ultrahangos távolságérzékelőnek, ezzel mérést kezdeményezve. Az érzékelőtől ugyanezen a vonalon egy impulzus érkezik vissza, melynek hossza arányos az érzékelt távolsággal (lásd 2.19. grafikon). Az impulzus hosszát egy timer input capture nevű funkciójának segítségével pontosan mérjük, és tároljuk. 300
period (us)
250 200 150 100 50 Táv (m)
0 0
0,5
1
1,5
2
2,5
3
3,5
2.19. ábra. Az ultrahangos távolságérzékelő távolság-impulzusszélesség karakterisztikája
Arra azonban figyelnünk kellett, hogy ha az ultrahangos távolságérzékelő nem érzékel akadályt 3 méteren belül, akkor egy 20 ms-nál hosszabb impulzust küld vissza. Ha ez az eset áll fenn, akkor nem tudjuk minden ütemben mérésre utasítani, így valójában minden távolságmérés befejeződése utáni ütemben mérjük újra az előttünk levő akadály távolságát.
2.3.7. Sebességszabályozás Szintén a főciklusban, minden egyes ütemben az ultrahangos távolságérzékelő által szolgáltatott távolság jelet megkapja a sebességszabályzó, mely letárolja a maximális megengedhető sebességet. Ezután ezt a sebességet beállítjuk a „Mozgás” (52. oldal) modul felső szintjének speed() függvényével. 54
2.3. Szoftver
2.3.8. RC távirányító jele Egy különálló timer teljesen megszakításosan, a főciklustól függetlenül méri az rc távirányító által küldött sebességnek és a kanyarodásnak megfelelő pwm jelek kitöltési tényezőit, és letárolja egy-egy globális változóban.
2.3.9. Felhasználói felület A modellautón elhelyezett Bluetooth modul használatakor a számítógép felől egy virtuális soros portot, míg a mikrokontroller felől egy soros adatátvitelre alkalmas eszközt látunk, így a számítógépen indított terminál program segítségével képesek vagyunk adatot cserélni a mikrokontrollerrel. Ahhoz, hogy ezt a kiépített kapcsolatot a lehető legjobban kihasználjuk, írtunk egy monitorprogramot, melyben az erre a célra megírt függvényeket hívhatjuk meg a terminálban begépelt parancsok segítségével. Ezen modul működéséhez a monitor_state() függvényt a főciklusban rendszeresen meg kell hívnunk. Ez a függvény fogadja a bejövő karaktereket, azok függvényében állapotot vált, és az „enter” billentyű lenyomására meghívja a cmd_evaluate() függvényt, mely kiértékeli a begépelt sort. Ez a kiértékelés úgy zajlik, hogy először a szóközök mentén feldarabolja a szöveget, majd megkeresi azt a függvényt, amihez az első szövegdarab nevű parancsot rendeltük. Ezt a függvényt meghívja a többi szövegdarabbal, mint argumentumokkal. Minden egyes ilyen meghívható függvény elején egy paraméterellenőrzés következik, melynek folyamán egy függvény megvizsgálja, hogy megfelelő számú paramétert kapott-e a függvény, és azok típusa is megegyezik-e a várttal (például ha egy hexadecimális számot várunk, akkor abban nem lehet „t” betű). Ha mindez teljesül, akkor következhet az általunk lefuttatásra szánt kódrészlet, mellyel akár hibakeresést, akár paraméterállítást, akár parancskiadást is megvalósíthatunk.
55
2. Autómodell
2.4. Eredmények A modellautón megvalósítottunk P és PID görbületszabályozást is. Mindegyik szabályozás esetén több sebességen regisztráltunk egy-egy kört egy felragasztott pályán. A pálya alakja a 2.20. ábrán követhető nyomon.
2m
Start és Cél
2.20. ábra. A teszteléshez használt körpálya alakja
Minden egyes mérési eredmény két grafikonból áll: • Idő-vonalpozíció grafikon: az autó által érzékelt vonalpozíció az idő függvényében. A vonalpozíció [-64,5 mm ; +64,5 mm] tartományon mozog, mert 129 mm széles érzékelősorral rendelkezik az autó. A grafikonon a piros „x”-ek a vonalérzékelésbeli hibákat jelzik, mely például akkor léphet fel, ha az autó elhagyta a vezetővonalat. • Idő-kormánykerékszög grafikon: a kormányműnek kiadott kormánykerékszög látható az idő függvényében. A kormányszög a [-20◦ ; +20◦ ] tartományon mozog a mechanikai korlátok miatt. A 2.21. és a 2.22. ábrán a P szabályzóként implementált görbületszabályzóval tett meg az autó egy kört. Láthatjuk, hogy a vonalpozíció grafikon görbe integrálja pozitív, amiből arra következtethetünk, hogy az autó az általunk pozitív iránynak definiált irányba tette meg az egy kört a pályán. Ez igaz is, hisz mi a bal irányt választottuk a pozitív iránynak, és tényleg az óramutató járásával ellentétes irányban haladtunk. Megfigyelhetjük azt is, hogy a kormánykerékszög valóban az érzékelt vonalpozíciónak egy konstansszorosa, valamint azt is, hogy a nagyobb sebességnél gyorsabban körbeér az autó, hisz rövidebb a regisztrátum. Mindkét sebességnél megállapíthatjuk, hogy a vonalról nem tért le az autó, és a beavatkozó jel csak ritkán haladta meg a mechanikai korlátot. 56
vonalpozíció [mm]
2.4. Eredmények
50
0 -50
kormánykerékszög [°]
0
0.5
1 idõ [ms]
1.5
1 idõ [ms]
1.5
2 x 10
4
20 10 0 -10 -20
0
0.5
2 x 10
4
vonalpozíció [mm]
2.21. ábra. Vonalkövetés P szabályzóval, 1,14 m/s sebességgel 50
0
-50 0
5000
10000
15000
10000
15000
kormánykerékszög [°]
idõ [ms] 20 10 0 -10 -20
0
5000 idõ [ms]
2.22. ábra. Vonalkövetés P szabályzóval, 1,21 m/s sebességgel
Minőségbeli javulást eredményezett a PID szabályzó (grafikonjai: 2.23., 2.24., 2.25., 2.26., 2.27. ábrák), ugyanis a P szabályzó már az 1,21 m/s-os sebességnél a nagyobb kilengések esetén majdnem elveszítette a vezetővonalat, míg a PID szabályzó nagyjából 1,5-szer nagyobb sebesség esetén is hasonló biztonsággal követte a vezetővonalat. A PID szabályzó beavatkozó jele (főként a derivátor tag miatt) nagyon gyakran túllépné a mechanikai korlátot, így az integrátor tag megfelelő működése érdekében a szabályzót elláttuk antiwinduppal, melyet úgy valósítottunk meg, hogy a szabályzó kimenetének, és a lekorlátozott értékének különbségét levontuk az integrátor azon változójából, ahol összegzett. 1,95 m/s-os sebességnél azonban már ezen szabályzó is többször, hosszabb időre elvesztette a vezetővonalat.
57
kormánykerékszög [°]
vonalpozíció [mm]
2. Autómodell
50
0
-50 0
2000 4000 6000 8000 10000 12000 14000 16000 idõ [ms]
0
2000 4000 6000 8000 10000 12000 14000 16000 idõ [ms]
20 10 0 -10 -20
kormánykerékszög [°]
vonalpozíció [mm]
2.23. ábra. Vonalkövetés PID szabályzóval, 0,93 m/s sebességgel
50
0
-50 0
2000
4000
6000 8000 idõ [ms]
10000 12000 14000
0
2000
4000
6000 8000 idõ [ms]
10000 12000 14000
20 10 0 -10 -20
kormánykerékszög [°]
vonalpozíció [mm]
2.24. ábra. Vonalkövetés PID szabályzóval, 1,16 m/s sebességgel
50
0
-50 0
2000
4000
6000 idõ [ms]
8000
10000
0
2000
4000
6000 idõ [ms]
8000
10000
20 10 0 -10 -20
2.25. ábra. Vonalkövetés PID szabályzóval, 1,76 m/s sebességgel
58
kormánykerékszög [°]
vonalpozíció [mm]
2.4. Eredmények
50
0
-50 0
2000
4000
6000 idõ [ms]
8000
10000
0
2000
4000
6000 idõ [ms]
8000
10000
20 10 0 -10 -20
kormánykerékszög [°]
vonalpozíció [mm]
2.26. ábra. Vonalkövetés PID szabályzóval, 1,83 m/s sebességgel
50
0
-50 0
2000
4000 6000 idõ [ms]
8000
10000
0
2000
4000 6000 idõ [ms]
8000
10000
20 10 0 -10 -20
2.27. ábra. Vonalkövetés PID szabályzóval, 1,95 m/s sebességgel
59
2. Autómodell
2.5. Konklúzió Az autómodellen próbapanelon létrehozott kaapcsoláshoz készítettük el a 2.3 fejezetben ismertetett szoftvert. A RobonAUT 2011 versenyen szeretnénk indulni egy hasonló járművel, melyhez komplexebb hardverre lesz szükségünk. Ezen hardver leírása található a 2.2 fejezetben. A versenyre a következők a terveink: • elkészíteni a 2.2 fejezetben ismertetett hardver huzalozási rajzát, • a teljes hardvert beültetni, éleszteni, • ehhez alakítani a szoftver hardverspecifikus részein, • egy újabb szabályzó alkalmazása, ami egy felső, a pálya becsült görbületét kimenetül adó szabályzóból, és egy alárendelt, lényegesen gyorsabb, az autót a vonalon tartásért felelős szabályzóból áll, ugyanis tapasztalataink szerint egy egyenes vonalon lényegesen magasabb sebességgel is rajta lehet tartani a járművet.
60
Függelék
Függelék F.1. A homlokrakodó modell kártyáinak kapcsolási rajza • Alsó kártya kapcsolási rajzai „Alsó kártya” kapcsolási rajza: 62. oldal • Felső kártya kapcsolási rajzai „Analóg” kapcsolási rajz: 63. oldal „ComStick csatlakozó” kapcsolási rajz: 64. oldal „LED meghajtó és DC/DC konverter” kapcsolási rajz: 65. oldal „Motor meghajtók” kapcsolási rajz: 66. oldal • Próbapanel kapcsolási rajzai „Bővítő csatlakozó és kerékvisszacsatolás” kapcsolási rajz: 67. oldal „LCD és gombok” kapcsolási rajz: 68. oldal
61
62
D
C
B
A
K
Opto
Opto
GND
160RPIR801
1
C PIO70C
K PIO70K
E
C
PIO60C
PIO70E
A
Opto
E PIO60E
PIO70A
COO7 O7
PIO60K
K
COO6 O6 A PIO60A
C PIO50C
K PIO50K
E
C
PIO40C
E PIO40E
C
PIO30C
E PIO30E
C
PIO20C
E PIO20E
C
PIO10C
PIO50E
A
Opto
Opto
Opto
Opto
E PIO10E
VCC33
PIO50A
COO5 O5
PIO40K
K
A PIO40A
COO4 O4
PIO30K
K
A PIO30A
COO3 O3
PIO20K
K
A PIO20A
COO2 O2
PIO10K
PIR802
COR8 R8
COO1 O1
A PIO10A
VCC12
1
AN_5A
AN_4A
AN_3A
AN_2A
AN_1A
AN_4B
AN_3B
COR1 R1
PIR502
PIR402
PIR302
PIR202
PIR102
10k
PIR701
COR7 R7
10k
PIR601
AGND
PIR702
PIR602
COR6 R6
10k
PIR501
COR5 R5
10k
PIR401
COR4 R4
10k
PIR301
COR3 R3
10k
PIR201
COR2 R2
10k
PIR101
A
COO8 O8
COO9 O9
COO10 O10
COO11 O11
COO13 O13
GND
220RPIR1501
COR15 R15
PIR1502
2
K
PIO130K
PIO130A
A
K PIO120K
COO12 O12
A PIO120A
K
PIO110K
PIO110A
A
K PIO100K
PIO100A
A
K PIO90K
PIO90A
A
K PIO80K
PIO80A
VCC12
2
Opto
Opto
Opto
Opto
Opto
Opto
E
C
PIO130C
E
PIO130E
C PIO120C
E PIO120E
C
PIO110C
E
PIO110E
C PIO100C
E
PIO100E
C PIO90C
E
PIO90E
C PIO80C
PIO80E
VCC33
AN_2B
AN_1B
AN_6B
AN_5B
AN_7A
AN_6A
COR9 R9 PIR902
PIR1002
PIR1102
PIR1202
PIR1302
10k
PIR1401
AGND
PIR1402
COR14 R14
10k
PIR1301
COR13 R13
10k
PIR1201
COR12 R12
10k
PIR1101
COR11 R11
szakadás
PIR1001
COR10 R10
10k
PIR901
COD1
COD3
COD10 D10 PID1002
Date: File:
A4
AN_2B NLAN02B AN_2A NLAN02A NLAN01B AN_1B NLAN01A AN_1A
AN_3A NLAN03A
NLAN04A AN_4A NLAN03B AN_3B
NLAN04B AN_4B
NLAN06A AN_6A NLAN05B AN_5B NLAN05A AN_5A
NLAN06B AN_6B
NLAN07A AN_7A
4
5 6 7
COJ2 J2 1 1 2 2 3 PIJ203 3 4 PIJ204 4 5 PIJ205 5 6 PIJ206 6 7 PIJ207 7 8 PIJ208 8 9 PIJ209 9 10 PIJ2010 10 11 PIJ2011 11 12 PIJ2012 12 13 PIJ2013 13 14 PIJ2014 14 15 PIJ2015 15 16 PIJ2016 16
4
version 2.3 Beck Z. & Szalóki D.
Revision
ANALOG
Sheet 5 of 5 Drawn By:
AGND
PIJ202
PIJ201
LEDs
PIJ3010
10 11 PIJ3011 12 PIJ3012 13 PIJ3013 14 PIJ3014
PIJ307 8 PIJ308 9 PIJ309
PIJ306
PIJ305
3 PIJ303 4 PIJ304
1 2 3 4 5 6 7 8 9 10 11 12 13 14
COJ3 J3 2 PIJ302
PIJ301
1
TAP
1 2
COJ1 J1 2 PIJ102
1 PIJ101
VCC33
GND
VCC12
2010.10.20. D:\Asztal\TDK\FINAltium\also2.SchDoc
Number
Alsó kártya
LED_GREEN
Title
Size
COD8 D8
PID802
LED_GREEN
PID1001
COD11 D11 PID1102
LED_GREEN
PID1101
3
COD9 D9
LED_GREEN
PID901 PID902
COD6 D6
PID602
LED_GREEN
PID801
LED_GREEN
COD7
D7 PID701 PID702
PID601
LED_GREEN
COD5
D5 PID501 PID502
COD4 D4
PID402
LED_GREEN
PID401
LED_GREEN
D3 PID301 PID302
COD2 D2
PID202
LED_GREEN
PID201
LED_GREEN
D1 PID101 PID102
VCC12
3
D
C
B
A
D
C
B
A
3 4 PIJ1204 5 PIJ1205 6 PIJ1206 7 PIJ1207 8 PIJ1208 9 PIJ1209 10 PIJ12010
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
AN_1D
AN_1C
1 2
VCC33
AGND
1
TAV3
PIJ1502
PIJ1503
3 3 2 2 1 PIJ1501 1
AN_2D
3 3 2 2 1 PIJ1701 1
AGND
TAV1
PIJ1702
PIJ1703
J17 COJ17
1 PIJ1601
3 2 1
COJ16 J16
J15 COJ15
AN_2C
3
PIJ1603 2 PIJ1602
TAV2
3 2 1
VCC5
AN_6C
1%
COR19 R19
AGND
PIR1901
PIR120k 902
PIR1801
1%
COR18 R18
PIR1100k 802
VCC12
TAV4
1 PIJ1401
AGND
AN_6B AN_6A AN_5B AN_5A AN_4B AN_4A AN_3B AN_3A AN_2B AN_2A AN_1B AN_1A
AN_7A
AN_5D AN_5C AN_4D AN_4C AN_3D AN_3C
COJ14 J14
PIJ1403 2 PIJ1402
3
AGND
PIJ1305
5 6 PIJ1306 7 PIJ1307 8 PIJ1308 9 PIJ1309 10 PIJ13010 11 PIJ13011 12 PIJ13012 13 PIJ13013 14 PIJ13014 15 PIJ13015 16 PIJ13016
PIJ1302 3 PIJ1303 4 PIJ1304
PIJ1301
VCC5
ANALOG
COJ13 J13
EXP_ANALOG
PIJ1203
AN_6D
2
Y0 X3 X2 X1 X0
COMUX2 MUX2
Y0 X3 X2 X1 X0
Y3 Y2 Y1 Y0 X3 X2 X1 X0
AN_5C POAN05C
PIMUX3016
GND
PIMUX307 PIMUX308 PIMUX306 AGND
GND
NLMUX30A 10 MUX3_A A PIMUX3010 9 MUX3_B NLMUX30B B PIMUX309
PIMUX3013
100nF
PIC802
NLMUX20A 10 MUX2_A NLMUX20B 9 MUX2_B PIMUX209 PIMUX2010
13 ANALOG5 OUTX 3 ANALOG6 OUTY PIMUX303
PIC801
COC8 C8
A B
GND 13 ANALOG3 3 ANALOG4 PIMUX203 PIMUX2013
100nF
PIC702
OUTX OUTY
PIC701
GND
VCC33
AGND
4CHMUX
AN_5B 14 NLAN05B PIMUX3014 NLAN05A AN_5A 12 PIMUX3012
AN_5C 15 NLAN05C PIMUX3015
AN_6D 4 NLAN06D PIMUX304 AN_6C 2 NLAN06C PIMUX302 NLAN06B AN_6B 5 PIMUX305 NLAN06A AN_6A 1 PIMUX301 NLAN05D AN_5D 11 PIMUX3011
PIMUX2016
GND
10 MUX1_A A PIMUX1010 9 MUX1_B B PIMUX109
COC7 C7
GND
VCC33
100nF
PIC602
13 OUTX PIMUX1013 3 OUTY PIMUX103
PIMUX207 PIMUX208 PIMUX206
MUX3 COMUX3
POAN03C AN_3C
4CHMUX
NLAN03C AN_3C 15 PIMUX2015 NLAN03B AN_3B 14 PIMUX2014 NLAN03A AN_3A 12 PIMUX2012
NLAN03D AN_3D 11 PIMUX2011
NLAN04D AN_4D 4 PIMUX204 Y3 NLAN04C AN_4C 2 PIMUX202 Y2 NLAN04B AN_4B 5 PIMUX205 Y1 NLAN04A AN_4A 1 PIMUX201
PIMUX106
COC6 C6 PIC601
PIMUX107 PIMUX108 PIMUX106
AGND
4CHMUX
NLAN01C AN_1C 15 PIMUX1015 NLAN01B AN_1B 14 PIMUX1014 NLAN01A AN_1A 12 PIMUX1012
NLAN01D AN_1D 11 PIMUX1011
NLAN02D AN_2D 4 PIMUX104 Y3 NLAN02C AN_2C 2 PIMUX102 Y2 NLAN02B AN_2B 5 PIMUX105 Y1 NLAN02A AN_2A 1 PIMUX101
COMUX1 MUX1
VCC33
16 VDD
1
PIJ1201 2 PIJ1202
7
7
7
VEE
1 2 3 4 5 6 7 8 9 10 VEE VEE
16 VDD 16 VDD
VCC33
VSS 8
VSS
COJ12 J12
2
INH 6
INH 6
INH
8
VSS 8
63 6
1
3
3
Date: File:
A4
Size
Title
POANALOG2 ANALOG2
2010.10.20. D:\Asztal\TDK\FINAltium\analog2.SchDoc
Number
Analóg
PISW304
MUX3_TOLO
PISW305
PISW303
PISW301
5
MUX1_B POMUX10B
4
Sheet 3 of 5 Drawn By:
version 2.1 Beck Z. & Szalóki D.
Revision
NLMUX30A EXP3 POMUX30A & EXP3 3 MUX3_A & &EXP3 MUX3_A & EXP3 1 NLMUX30B & EXP4 (I2C0SCL) 6 MUX3_B & EXP4 (I2C_SCL) PISW306 POMUX30B EXP4 MUX3_B &&EXP4 4
SW3 COSW3 PISW302
2
NLMUX10A MUX1_A NLMUX10B MUX1_B
POMUX10A MUX1_A
EXP1(I2C_SDA) (I2C0SDA) 3 NLMUX20A MUX2_A &&EXP1 POMUX20A EXP1 MUX2_A &&EXP1 1 NLMUX20B & EXP2 (CAN0RX)POMUX20B & EXP2 6 MUX2_B & EXP2 (CAN_RX) PISW206 MUX2_B & EXP2 4 PISW204 PISW201
PISW203
MUX2_TOLO
PISW205
5
POANALOG7 ANALOG7
POANALOG6 ANALOG6
POANALOG5 ANALOG5
POANALOG4 ANALOG4
COSW2 SW2 PISW202
2
NLAN07A AN_7A
NLANALOG6 ANALOG6
NLANALOG5 ANALOG5
NLANALOG4 ANALOG4
NLANALOG3 ANALOG3 POANALOG3 ANALOG3
NLANALOG2 ANALOG2
NLANALOG1 ANALOG1 POANALOG1 ANALOG1
4
D
C
B
A
F.1. A homlokrakodó modell kártyáinak kapcsolási rajza
64
D
C
B
A
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
EXP_GPIO
COJ7 J7
1 2
emel_high
billent_low
billent_high
1
GND
POAN05C AN_5C
POAN03C AN_3C
GND
EXP8 (USART_RX) EXP9 (CAN_TX)
EXP6 (USART_RTS) EXP5 (USART_CTS)
PIC102
0.1uF
PIC101
COC1 C1
RESET
PIBTN102
COBTN1 BTN1
PIBTN101
MUX3_B & EXP4 (I2C_SCL) MUX2_A & EXP1 (I2C_SDA) MUX2_B & EXP2 (CAN_RX) MUX3_A & EXP3 EXP7 (USART_TX)
VCC33 VCC5
AGND
front
NLemel0low emel_low
GND
PIJ602 3 PIJ603
PIJ601
16 15 PIJ7015 14 PIJ7014 13 PIJ7013 12 PIJ7012 11 PIJ7011 10 PIJ7010 9 PIJ709 8 PIJ708 7 PIJ707 6 PIJ706 5 PIJ705 4 PIJ704 3 PIJ703 2 PIJ702 1 PIJ701
1 2 3
PIJ7016
EMEL
COJ6 J6
1 2
PIJ402
PIJ401
1 1 PIJ501 2 2 PIJ502 3 PIJ503 3
1 2
BILLENT
COJ5 J5
FRONT
COJ4 J4
1
POANALOG1 ANALOG1
POANALOG3 ANALOG3
POMODE1 MODE1 POANALOG4 ANALOG4
PODIR0M1 DIR_M1
NLbillent0low billent_low
NLRESET RESET NN
2
TAP
COJ9 J9
NLEXP6 (USART0RTS) EXP6 (USART_RTS)
NLEXP5 (USART0CTS) EXP5 (USART_CTS)
POMUX30A & EXP3 EXP3 MUX3_A &
NLMUX30A EXP3 MUX3_A &&EXP3
POMUX20B EXP2 MUX2_B &&EXP2 emel_low
1 2
POLED00OE LED_/OE POMUX10A MUX1_A POMUX10B MUX1_B
GND
0R
1
AGND
GND
GND
ADC12_IN7 - PA7 TIM3_CH4(rm) PC9
GNDA
GND ADC12_IN15 - PC5 PD6 OSC_OUT - PD1
PE2
GND
TIM1_CH1 - PA8
TIM4_CH2 - PB7
3
PE10 - remap: TIM1_CH2N PE11 - remap: TIM1_CH2 TIM1_CH3N - PB15 PD3 remap: TIM1_CH3 - PE13 PD4 TIM4_CH1 - PB6 PE12 - remap: TIM1_CH3N PE5 PE0 - TIM4_ETR GND PE1 ADC12_IN14 - PC4 (földre 10k) VCC VCC
PE14 - remap: TIM1_CH4 PB14 - TIM1_CH2N PC6 - remap: TIM3_CH1
PE8 - remap: TIM1_CH1N BOOT0 PD2 - TIM3_ETR remap: TIM1_CH1 - PE9 PC7 - remap: TIM3_CH2 RTC_OUT - PC13 GND GND
GND PC8 - remap: TIM3_CH3 PD15 - remap: TIM4_CH4 PD14 - remap: TIM4_CH3 PC12 - remap: TIM4_CH1
PB2 PD0 - OSC_IN
GND PD5
3
+3V3 ENUM N ADC12_IN4/DACOUT1 PA4
PE4 PE6 PE3 PA5 - ADC12_IN5/DAC_OUT2 PA6 - ADC12_IN6
CONN80
5 PIJ805 7 PIJ807 9 PIJ809 11 PIJ8011 13 PIJ8013 15 PIJ8015 17 PIJ8017 19 PIJ8019 21 PIJ8021 23 PIJ8023 25 PIJ8025 27 PIJ8027 29 PIJ8029 31 PIJ8031 33 PIJ8033 35 PIJ8035 37 PIJ8037 39 PIJ8039 41 PIJ8041 43 PIJ8043 45 PIJ8045 47 PIJ8047 49 PIJ8049 51 PIJ8051 53 PIJ8053 55 PIJ8055 57 PIJ8057 59 PIJ8059 61 PIJ8061 63 PIJ8063 65 PIJ8065 67 PIJ8067 69 PIJ8069 71 PIJ8071 73 PIJ8073 75 PIJ8075 77 PIJ8077 79 PIJ8079
3 PIJ803
+3V3 RESET N PC0 ADC12_IN10
COJ8 J8
PIJ801
VCC33
VCC5
VCC12 1 COR16 R16 2 PIJ902 PIR1601 PIR1602 PIJ901
POLED0DATA LED_DATA POLED0CLK LED_CLK POLED0LE LED_LE
PODIR0M3 DIR_M3 POPWM0M4 PWM_M4
PODIR0M4 DIR_M4
POPWM0M3 PWM_M3 PONSLEEP0M3&M4 POnSLEEP0M3&M4 nSLEEP_M3&M4
NLemel0high emel_high
PODIR0M2 DIR_M2
POnSLEEP0M1&M2 nSLEEP_M1&M2 NLMUX20B EXP2 (CAN0RX)PONSLEEP0M1&M2 MUX2_B & & EXP2 (CAN_RX)
NLEXP7 (USART0TX) EXP7 (USART_TX)
2
Date: File:
A4
Size
Title
GND
2010.10.20. D:\Asztal\TDK\FINAltium\exp2.SchDoc
Number
1 0F
8 C 2
POMUX20A EXP1 MUX2_A &&EXP1
4
Sheet 1 of 5 Drawn By:
GND
NLKOD2 KOD2
NLKOD8 KOD8
version 2.4 Beck Z. & Szalóki D.
Revision
POMUX30B EXP4 MUX3_B &&EXP4
NLMUX30B& &EXP4 EXP4(I2C_SCL) (I2C0SCL) MUX3_B
APISW108 B C D EPISW102
KODKAPCSOLO
4 3 PISW1042
8 9
COSW1 SW1 PISW1016 7 C 45 PISW10C
1
KOD2
KOD8
KOD1
NLEXP8 (USART0RX) EXP8 (USART_RX) NLEXP9(CAN_TX) (CAN0TX) EXP9
NLMUX20A& &EXP1 EXP1(I2C_SDA) (I2C0SDA) MUX2_A
NLbillent0high billent_high
NLfront front
KOD4
AGND
GND
GND
NLKOD4 KOD4
NLKOD1 KOD1
POANALOG7 ANALOG7
POPWM0M1 PWM_M1
POPWM0M2 PWM_M2
POANALOG6 ANALOG6
POANALOG5 ANALOG5
POANALOG2 ANALOG2
ComStick csatlakozó
6 PIJ806 8 PIJ808 10 PIJ8010 12 PIJ8012 14 PIJ8014 16 PIJ8016 18 PIJ8018 20 PIJ8020 22 PIJ8022 24 PIJ8024 26 PIJ8026 28 PIJ8028 30 PIJ8030 32 PIJ8032 34 PIJ8034 36 PIJ8036 38 PIJ8038 40 PIJ8040 42 PIJ8042 44 PIJ8044 46 PIJ8046 48 PIJ8048 50 PIJ8050 52 PIJ8052 54 PIJ8054 56 PIJ8056 58 PIJ8058 60 PIJ8060 62 PIJ8062 64 PIJ8064 66 PIJ8066 68 PIJ8068 70 PIJ8070 72 PIJ8072 74 PIJ8074 76 PIJ8076 78 PIJ8078 80 PIJ8080
4 PIJ804
PIJ802
2
VCC5 VCC33
4
D
C
B
A
65
D
C
B
NLLED0CLK LED_CLK
Leds
1
COJ10 J10
1 2 3 4 5 6 7 8 9 10 11 12 13 14
1 2 PIJ1002 3 PIJ1003 4 PIJ1004 5 PIJ1005 6 PIJ1006 7 PIJ1007 8 PIJ1008 9 PIJ1009 10 PIJ10010 11 PIJ10011 12 PIJ10012 13 PIJ10013 14 PIJ10014
PIJ1001
NLLED0LE LED_LE POLED0LE LED_LE
POLED0CLK LED_CLK
NLLED0DATA LED_DATA POLED0DATA LED_DATA
LED10 NLLED10
NLLED8 LED8 NLLED9 LED9
NLLED7 LED7
NLLED4 LED4 NLLED5 LED5 NLLED6 LED6
NLLED3 LED3
NLLED0 LED0 NLLED1 LED1 NLLED2 LED2
GND
OUT0 OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7
LEDmeghajto
5 6 PILED0DRV106 7 PILED0DRV107 8 PILED0DRV108 9 PILED0DRV109 10 PILED0DRV1010 11 PILED0DRV1011 12 PILED0DRV1012
PILED0DRV105
PILED0DRV101
1 GND 2 PILED0DRV102 SDI 3 PILED0DRV103 CLK 4 PILED0DRV104 LE
OUT15 OUT14 OUT13 OUT12 OUT11 OUT10 OUT9 OUT8
VDD R-EXT SDO /OE
COLED0DRV1 LED_DRV1
20 19 PILED0DRV1019 18 PILED0DRV1018 17 PILED0DRV1017 16 PILED0DRV1016 15 PILED0DRV1015 14 PILED0DRV1014 13 PILED0DRV1013 PILED0DRV1020
2
GND
24 COR17 R17 23 PIR1701 PILED0DRV1023 PIR1702 22 PILED0DRV1022 1k3 21 PILED0DRV1021 PILED0DRV1024
VCC33
2
NLLED11 LED11
NLLED12 LED12
NLLED15 LED15 NLLED14 LED14 NLLED13 LED13
LED_/OE
NLLED00OE LED_/OE POLED00OE
100uF
COC2 C2
PIC302 PIC301
2
100nF 50V
EXP_LED
3
Vin
GND
PIU103
3
GND
PIU105
Output
1 PIU101
4 Feedback PIU104
COU1 U1 KAPCSUZEMU 5V PIU102
COC3 C3
COJ11 J11 1 1 2 PIJ1102 2 3 PIJ1103 3 4 PIJ1104 4 5 PIJ1105 5 6 PIJ1106 6 7 PIJ1107 7 8 PIJ1108 8 9 PIJ1109 9 10 PIJ11010 10
GND
PIJ1101
VCC12
GND
PIC20A PIC20K
VCC12
GND 3
_ON/OFF 5
A
1
Date: File:
A4
Size
Title
GND
PID120A
PID120K
PIL102
COC4 C4 220uF
GND
PIC40K
PIC40A
GND
PIC501
PIC502
100nF 50V
COC5 C5
2010.10.20. D:\Asztal\TDK\FINAltium\LED2.SchDoc
Number
4
Sheet 4 of 5 Drawn By:
LED meghajtó és DC/DC konverter
COD12 D12 Schottky
100uH
PIL101
COL1 L1
VCC5
4
version 2.0
COD13 D13 LED_BLUE
Beck Z. & Szalóki D.
Revision
GND
PID1302
PID1301
COR28 R28 220RPIR2801
PIR2802
VCC5
D
C
B
A
F.1. A homlokrakodó modell kártyáinak kapcsolási rajza
66
D
C
B
A
NLPWM0M1 PWM_M1
NLDIR0M2 DIR_M2
NLMODE1 MODE1
NLnSEP0M1&2
1
NLPWM0M2 PWM_M2 POPWM0M2 PWM_M2
PODIR0M2 DIR_M2
POMODE1 MODE1
POnSLEEP0M1&M2 PONSLEEP0M1&M2 nSLEEP_M1&M2
POPWM0M1 PWM_M1
NLDIR0M1 DIR_M1 PODIR0M1 DIR_M1
VCC33
3k3
3k3
VCC33
GND
PIR2101
3k3
PIM10
GND
DRV8800
4 PIM104 5 PIM105 6 PIM106 7 PIM107 8 PIM108
3 PIM103
2 PIM102
nFAULT MODE2 MODE1 VPROPI PHASE VCP GND GND nSLEEP CP2 ENABLE CP1 OUT+ OUTSENSE VBB
COM1 M1
PIPIM101 R2 01 1
GND
PIR2301
3k3
PIM20
GND
DRV8800
COM2 M2 1 PIM201 nFAULT MODE2 2 PIM202 MODE1 VPROPI 3 PIM203 PHASE VCP 4 PIM204 GND GND 5 PIM205 nSLEEP CP2 6 PIM206 ENABLE CP1 7 PIM207 OUT+ OUT8 PIM208 SENSE VBB
R23 PIRCOR21 21R21 02 PIR23COR23 02
VCC33
PIR20 1
PIRCOR20 20R20 2 PIR2COR22 02 R22
VCC33
PIC120K
2
1
MOTOR_2
M2_OUT+ 1 NLM20OUT0 PIJ1901
2 1
COJ19 J19
GND
MOTOR_1
NLM20OUT0 M2_OUT- PIJ1902 2
GND
PIC140.1uF 02
100uF 16V
COC14 C14
PIC1450V 01
COC12 C12
GND
COJ18 J18
PIC1650V 02 COC16 C16 PIC160.1uF 01
PIC120A
COC10 50V C10 PIC1001 PIC1002 0.1uF
GND
16 PIM2016 15 PIM2015 14 PIM2014 13 PIM2013 12 PIM2012 11 PIM2011 10 PIM2010 9 PIM209
GND
PIC1350V 01 COC13 C13 PIC130.1uF 02
PIC150.1uF 01
COC15 C15 GND
PIC1550V 02
NLM10OUT0 M1_OUT- PIJ1802 2 2 NLM10OUT0 M1_OUT+ PIJ1801 1
100uF 16V
COC11 C11
GND
PIC1 0A PIC1 0K
VCC12
COC9 50V C9 PIC901 PIC902 0.1uF
GND
13 PIM1013 12 PIM1012 11 PIM1011 10 PIM1010 9 PIM109
14 PIM1014
15 PIM1015
16 PIM1016
VCC12
2
PWM_M4 POPWM0M4
PODIR0M4 DIR_M4 NLPWM0M4 PWM_M4
NLDIR0M4 DIR_M4
NLnSEP0M3&4
NLPWM0M3 PWM_M3
NLDIR0M3 DIR_M3
POnSLEEP0M3&M4 PONSLEEP0M3&M4 nSLEEP_M3&M4
POPWM0M3 PWM_M3
PODIR0M3 DIR_M3
nSLEEP_M3&M4
1
nSLEEP_M1&M2
PWP
PWP
PIR2401
3k3
3k3 1
VCC33
GND
PIR2501
3k3
PIM30
GND
DRV8800
5 PIM305 6 PIM306 7 PIM307 8 PIM308
4 PIM304
3 PIM303
nFAULT MODE2 MODE1 VPROPI PHASE VCP GND GND nSLEEP CP2 ENABLE CP1 OUT+ OUTSENSE VBB
COM3 M3
2 PIM302
PIM301
PIR2601
3k3
GND
Date: File:
A4
Size
Title
PIM40
16
16 15 14 13 PIM4013 12 PIM4012 11 PIM4011 10 PIM4010 9 PIM409
2010.10.20. D:\Asztal\TDK\FINAltium\motor2.SchDoc
Number
GND
PIC0.1uF 2102
COC21 C21
PIC50V 2101
4
Sheet 2 of 5 Drawn By:
version 2.1 Beck Z. & Szalóki D.
Revision
MOTOR_4
GND COJ21 J21 NLM40OUT0PIJ2102 M4_OUT2 2 NLM40OUT0PIJ2101 M4_OUT+ 1 1
PIC0.1uF 2 02
GND
MOTOR_3
PIC50V 2402 COC24 C24 PIC0.1uF 2401
COC22 C22
PIC50V 2 01
GND
COJ20 J20
PIC50V 2302 COC23 C23 PIC0.1uF 2301
NLM30OUT0PIJ2002 M3_OUT2 2 NLM30OUT0PIJ2001 M3_OUT+ 1 1
COC20 C20 100uF 16V GND
PIC20 K
PIC20 A
COC18 50V C18 PIC1801 PIC1802 0.1uF
GND
PIM4014
PIM4015
PIM4016
VCC12
GND
PIC190K
PIC190A
4
COC19 C19 100uF 16V
VCC12
COC17 50V C17 PIC1701 PIC1702 0.1uF
GND
12 PIM3012 11 PIM3011 10 PIM3010 9 PIM309
13 PIM3013
14 PIM3014
15 PIM3015
PIM3016
Motor meghajtók
GND
DRV8800
PIM401
PIR2701
COM4 M4 1 nFAULT MODE2 2 PIM402 MODE1 VPROPI 3 PIM403 PHASE VCP 4 PIM404 GND GND 5 PIM405 nSLEEP CP2 6 PIM406 ENABLE CP1 7 PIM407 OUT+ OUT8 PIM408 SENSE VBB
PIR2R25 5COR25 02 PIR2R27 7COR27 02
VCC33
3
VCC33
PIR2R24 4COR24 02 PIR2R26 6COR26 02
VCC33
3
PWP
PWP
D
C
B
A
67
D
C
B
A
5 4
PIBlueTooth01
PIBlueTooth02
2 1
PIBlueTooth04 3 PIBlueTooth03
PIBlueTooth05
1
BT CONNECTOR
BT_TX RST BT_RX GND 3V3
COBlueTooth BlueTooth
CONN_EXP
GND
USART_RX
USART_TX
VCC33
GND
VCC33
AGND
20 AN_3D PIJ2020 19 AN_4D PIJ2019 18 PIJ2018 AN_5D 17 AN_6D PIJ2017 16 PIJ2016 AN_3C 15 VCC33 PIJ2015 14 VCC5 PIJ2014 13 VCC12 PIJ2013 12 MUX3_B & EXP4 (I2C_SCL) PIJ2012 11 PIJ2011 MUX2_A & EXP1 (I2C_SDA) 10 MUX2_B & EXP2 (CAN_RX) PIJ2010 9 PIJ209 MUX3_A & EXP3 8 EXP7 (USART_TX) PIJ208 7 LED11 PIJ207 6 EXP6 (USART_RTS) PIJ206 5 EXP5 (USART_CTS) PIJ205 4 PIJ204 GND 3 AGND PIJ203 2 EXP8 (USART_RX) PIJ202 1 EXP9 (CAN_TX) PIJ201
COJ2 J2
1
VCC5
POLCD0RS LCD_RS
POENC0B ENC_B
POMULT0BTN MULT_BTN POENC0A ENC_A
PODIV0BTN DIV_BTN
POOK0BTN OK_BTN
Cap 330nF
COC3 C3
GND
PIC302 PIC301
VCC5
NLRESERVED RESERVED
NLUSART0RX USART_RX
PIC101 PIC102 Cap Pol2 1uF
COC1 C1
POLED LED POshiftreg0CLK POSHIFTREG0CLK shiftreg_CLK POshiftreg0DATA POSHIFTREG0DATA shiftreg_DATA
POLCD0CLK LCD_CLK NLUSART0TX USART_TX
TIM1 TIM2
VCC12
2
2
Cap 100nF
COC2 C2
GND
PIC202 PIC201
R? Res2 PIR?01 13k9
PIR?02
VCC5
VCC AVCC OUT AGND GND
5 4 3 PIKEREK0203 2 PIKEREK0202 1 PIKEREK0201 PIKEREK0204
PIKEREK0205
R? Res2
U_ref
COKEREK02 KEREK_2
PIR?01 10k
PIR?02
5 4 PIKEREK0104 3 PIKEREK0103 2 PIKEREK0102 1 PIKEREK0101 PIKEREK0105
COKEREK01 KEREK_1
VCC AVCC OUT AGND GND
GND
VCC5
AGND
3
3
PIR?02
Date: File:
A4
Size
Title
Res2 33k
PIR?01
U_ref
PIR?02
R?
Res2 33k
PIR?01
R?
PIAR104
PIAR207
PIAR204
PIAR101
PIAR106
PIAR108
Res2 300k
Res2 300k
PIR?02
COR? R?
PIAR201
PIAR206
PIAR208
VCC5
PIR?01
GND
Op Amp
PIAR205
PIAR203
PIAR202
COAR2 AR2
GND
Op Amp
PIAR105
PIAR103
PIAR107
COAR1 AR1 PIAR102
R? PIR?01
PIR?02
NLTIM2 TIM2
NLTIM1 TIM1
2010.10.20. D:\Asztal\TDK\LCD\CONN.SchDoc
Number
4
Sheet 1 of 2 Drawn By:
version 1.0 Beck Z. & Szalóki D.
Revision
Bővítő csatlakozó és kerékvisszacsatolás
NLU0ref U_ref
VCC5
4
D
C
B
A
F.1. A homlokrakodó modell kártyáinak kapcsolási rajza
D
C
B
VCC33
COE1
PIR302
PIR402 PIR502
PIR401 PIR501
1
GND GND GND GND GND
PIR101 PIR201
PIR301
COR1 COR2 COR3 COR4 COR5
POENC0B ENC_B
POENC0A ENC_A
POOK0BTN OK_BTN
PODIV0BTN DIV_BTN
PIS202
10k
POMULT0BTN MULT_BTN
10k
PIS102
PIR102 PIR202
PIE10 PIE102 PIE103
1
PIE104 PIE105
÷ button
2
4
PIS201
COS2
× button
PIS101
COS1
encoder+push
10k
A
10k
5
3
1
10k
68
GND
LCD
2
VSS (logic föld) VDD (táp) V0 (lcd drive föld) RS R/negW CLK D0 D1 D2 D3 D4 D5 D6 D7 VLED (backlight táp) VLSS (backlight föld)
COJ2
2
Q4 Q5 Q6 Q7 Q0 Q1 Q2 Q3
100nF
PIC401
1 PIJ201 2 PIJ202 3 PIJ203 4 PIJ204 5 PIJ205 6 PIJ206 7 PIJ207 8 PIJ208 9 PIJ209 10 PIJ2010 11 PIJ2011 12 PIJ2012 13 PIJ2013 14 PIJ2014 15 PIJ2015 16 PIJ2016
PIC402
COC4 C4
VCC12
GND
POLED LED
VCC5
POLCD0CLK LCD_CLK
POLCD0RS LCD_RS
COR?poti 10k
4k7
GND
PIR?01
PIR?01 PIR?02
PIR?02
VCC5
3
3
NLQ7 Q7
NLQ5 Q5 NLQ6 Q6
NLQ4 Q4
VCC33
14 13 PIU1013 12 PIU1012 11 PIU1011 10 PIU1010 9 PIU109
Date: File:
A4
Size
Title
3 4 5 PIU105 6 PIU106 7 PIU107 8 PIU108
GND
PIU104
PIU103
1 PIU101 2 PIU102
NLQ0 Q0 NLQ1 Q1 NLQ2 Q2 NLQ3 Q3
2010.10.17. D:\RobonAUT\..\LCD.SCHDOC
Number
LCD és gombok
shiftreg.
PIU1014
VDD STR OE DATA Q4 CLK Q5 Q0 Q6 Q1 Q7 Q2 QS' Q3 QS VSS
COU1 16 PIU1016 15 PIU1015
VCC33
4
Sheet 2 of 2 Drawn By:
POshiftreg0CLK POSHIFTREG0CLK shiftreg_CLK
POshiftreg0DATA POSHIFTREG0DATA shiftreg_DATA
4
version 1.0 Beck Z. & Szalóki D.
Revision
D
C
B
A
F.2. A modellautó kártyáinak kapcsolási rajza
F.2. A modellautó kártyáinak kapcsolási rajza • Alsó kártya kapcsolási rajzai Az „Érzékelősor” kapcsolási rajza: 70. oldal • Felső kártya kapcsolási rajzai A „Kis csatlakozó és perifériái” kapcsolási rajz: 71. oldal A „Nagy csatlakozó és perifériái” kapcsolási rajz: 72. oldal
69
D
C
A
AN1
PIO170E
PIO170A
AN2
PIO20E
C18
PIO20C
O2 Opto
AN3
PIO30E
PIO20K COO2 PIO30A
GND
C19
PIO30C
O3 Opto
AN4
PIO40E
PIO30K COO3 PIO40A
C03
Opto
O18 COO18
Opto
O19 COO19
AN2
1
AN3
AN4
PIO170C PIO180E PIO180C PIO190E PIO190C PIO20 E PIO20 C
Opto
O17 COO17
Opto
O5 Opto
Opto
AN2
PIO2 0E PIO2 0C
Opto
1
3 4
OUT0 OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7
TLC5925
AN4
PIO80E
AN3
2
AN4
PIO230E PIO230C PIO240E PIO240C
Opto
O23 COO23 Opto
3V3
PIR32k 01
COR3 R3
PIR101
PIR102
PIR2k 501
COR5 R5
AN3
+7V2
GND
PIR502
GND
COR1 R1 499R
COR6 R6
PIR62k 01
PIR602
AN4
PIC202 COC2 C2 PIC201 100nF
+7V2
GNDA
PIR42k 01
COR4 R4
AN2
PIR402
AN1
PIR302
3V3
3V3
20 C16 PIU1020 19 C15 PIU1019 18 C14 PIU1018 17 C13 PIU1017 16 C12 PIU1016 15 C11 PIU1015 14 C10 PIU1014 13 C09 PIU1013
PIU1021
PIU1022
22 21
24
PIU1024 23 PIU1023
O24 COO24
C24
PIO80C
O8 Opto
PIO80K COO8
C08
OUT15 OUT14 OUT13 OUT12 OUT11 OUT10 OUT9 OUT8
VDD R-EXT SDO OE
PIO230A PIO230K PIO240A PIO240K
C23
PIO70C
O7 Opto
PIO70K COO7 PIO80A
C07
C01 5 PIU105 C02 6 PIU106 C03 7 PIU107 C04 8 PIU108 C05 9 PIU109 C06 10 PIU1010 C07 11 PIU1011 C08 12 PIU1012
PIU104
GND SDI CLK LE
COU1 U1
PIU103
AN3
PIO70E
O22 COO22
C22
PIO60C
O6 Opto
PIO60K COO6 PIO70A
C06
PIO2 0A PIO2 0K
AN2
PIO60E
O21 COO21
C21
PIO50C
PIO210E PIO210C AN1
GND
PIO50K COO5 PIO60A
C05
PIO210A PIO210K
AN1
PIO50E
O20 COO20
C20
PIO40C
O4 Opto
PIO40K COO4 PIO50A
C04
PIO170K PIO180A PIO180K PIO190A PIO190K PIO20 A PIO20 K
C17
PIO10C
C
AN1
E
PIO10E
O1 Opto
PIO10K COO1 PIO20A
C
PIO10A
C02
E
B
C01
GNDA
C
E
CONN12
C
A
E
K
C
K
K
C
K
A
E
A
A
E
A
K
C
K
K
C
K
A
E
A
E
A
E
K C K
C
A
E
A E
A
E A
K C
PIU101 2 PIU102
C
CLK LE OE DATA AN1 AN2 AN3 AN4
E
K
C
K C K
A
E A
A
E
1 2 3 PIJ103 4 PIJ104 5 PIJ105 6 PIJ106 7 PIJ107 8 PIJ108 9 PIJ109 10 PIJ1010 11 PIJ1011 12 PIJ1012 1
C25
PIO90C
O9 Opto
PIC101
OUT0 OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7
OUT15 OUT14 OUT13 OUT12 OUT11 OUT10 OUT9 OUT8
VDD R-EXT SDO OE
C26
PIO10 C
O10 Opto
AN3
PIO1 0E
PIO10 K COO10PIO1 0A
C10
TLC5925
GND SDI CLK LE
AN2
PIO10 E
PIO90K COO9 PIO10 A
C09
C17 5 PIU205 C18 6 PIU206 C19 7 PIU207 C20 8 PIU208 C21 9 PIU209 C22 10 PIU2010 C23 11 PIU2011 C24 12 PIU2012
PIU204
PIU203
3 4
PIU201 2 PIU202
COU2 U2 3V3
C27
PIO1 0C
O11 Opto
AN4
PIO120E
PIO1 0K COO11PIO120A
C11
20 C25 PIU2020 19 C26 PIU2019 18 C27 PIU2018 17 C28 PIU2017 16 C29 PIU2016 15 C30 PIU2015 14 C31 PIU2014 13 C32 PIU2013
PIU2021
PIU2022
22 21
24
PIU2024 23 PIU2023
499R
COR2 R2
C28
PIO120C
O12 Opto
AN1
PIO130E
PIO120K COO12PIO130A
C12
GND
PIR201
PIR202
Opto
O26 COO26
Opto
O27 COO27
O28 COO28 Opto
AN1
3
AN2
Date: File:
A4
Size
Title
AN3
2010.10.18. \\..\also.SchDoc
Number
Érzékelősor
AN4
AN1
PIO250E PIO250C PIO260E PIO260C PIO270E PIO270C PIO280E PIO280C PIO290E
Opto
O25 COO25
PIO250A PIO250K PIO260A PIO260K PIO270A PIO270K PIO280A PIO280K PIO290A
AN1
PIO90E
PIO90A
E
PIJ102
C
PIJ101
E
7V2 3V3 CLK LE OE DATA AN1 AN2 AN3 AN4 GND GNDA
C
A
E
100nF PIC102
E
K
COC1 C1
C
C
3
C
2
E
K
C
A E A
K C K
K C K
A
E A
A
E A
K C K
K C
K
A
E A
A
E
1
C13
AN2
PIO140E
C30
PIO140C
O14 Opto
AN3
PIO150E
PIO140K COO14PIO150A
C14
4
O30 COO30 Opto
AN2
4
Sheet 1of 3 Drawn By:
AN3
PIO290C PIO30 E PIO30 C PIO310E
O29 COO29 Opto
PIO290K PIO30 A PIO30 K PIO310A
C29
PIO130C
O13 Opto
PIO130K COO13PIO140A
C
+7V2 3V3
E
COJ1 J1
C
A
E
K
C
K
K
C
K
A
E
A
A
E
A
E
K C K
AN4
PIO160E
PIO320C
PIO320K Opto
O32 COO32
C32
PIO160C
O16 Opto
PIO160K COO16
C16
Beck Z. & Szalóki D.
version 2.0
AN4
PIO310C PIO320E
Opto
O31 COO31
PIO310K PIO320A
C31
PIO150C
O15 Opto
PIO150K COO15PIO160A
C15
Revision
C
A
E
A
E
K
C
K
C
70
D
C
B
A
D
C
B
A
3
1
INT1 INT2
I2C/SPI SA0/SDO SCL/SPC SDA/SDI
VDD VDD_IO GND
MEMS g-sensor
PIU207
7 8 PIU208 9 PIU209 10 PIU2010 11 PIU2011 12 PIU2012 16 PIU2016 17 PIU2017 18 PIU2018 23 PIU2023 24 PIU2024
5 PIU205 6 PIU206
N/C N/C N/C N/C N/C N/C N/C N/C N/C N/C N/C N/C N/C N/C N/C
COU2 U2
4 PIU204
PIU203
GND I2C_SCL I2C_SDA
PIR701
PIR702
PIU2014
3 2 1
PIJ1501
PIJ1502
PIJ1503
PIR601
4k7
PIJ1601
3 2 PIJ1602 1 PIJ1603
SHARP connenctor
+5V GND SIG
COJ16 J16
20k
COR5 R5
A PC4-es láb 10k-val földre van húzva a ComSticken
LED2_MODE LED2_XERR NLDIST2 DIST2 NLMEMS0IT1 MEMS_IT1 NLI2C0SDA I2C_SDA NLMEMS0IT2 MEMS_IT2 NLI2C0SCL I2C_SCL NLVOLTAGE VOLTAGE
DIST2
DIST1
GNDA
+5V
COR6 R6 PIR501
PIR502
+7V2
SHARP connenctor
+5V GND SIG
COJ15 J15
4k7
PIR602
3V3
COR7 R7
3V3
14 MEMS_IT1 15 MEMS_IT2 PIU2015
PIU2021
21
19
PIU2019 22 PIU2022 20 PIU2020
2 PIU202 13 PIU2013
1 PIU201
3V3
2
CONN20
nENUM PA4 PE2 PC5 PD6 PD1 PA7 PC9 PE9 PC13 PB7 PA8 PB15 PE13 PB6 PE5 PC4 GNDA +5V GND
COJ17 J17 3 5 PIJ1705 7 PIJ1707 9 PIJ1709 11 PIJ17011 13 PIJ17013 15 PIJ17015 17 PIJ17017 19 PIJ17019 PIJ1703
1 PIJ1701
GND
2
4 6 PIJ1706 8 PIJ1708 10 PIJ17010 12 PIJ17012 14 PIJ17014 16 PIJ17016 18 PIJ17018 20 PIJ17020 PIJ1704
2 PIJ1702
NLAN4 AN4 POAN4 AN4 NLDIST1 DIST1 LED2_BLANK NLXT0OUT XT_OUT POXT0OUT XT_OUT LED2_LE LED2_PWM LED2_SCK LED2_SIN COD1 D1
3
LED_EXP
6
PID106
5
PID105
4
PID104
RGB_LED COJ18 J18 1 PIJ1801 A1 3 PIJ1803 A2 5 PIJ1805 A3 7 PIJ1807 A4
3
PID103
2
PID102
PID101
1
+7V2
3
Date: File:
A4
Size
Title
OUT0 OUT1 OUT2 OUT3 OUT4 OUT5 OUT6 OUT7
PIJ1904
PIJ1906
PIJ1903
PIJ1905
JUMPERSOR
PIJ1902
PIJ1901
COJ19 J19
7 8 PILED0DRV108 9 PILED0DRV109 10 PILED0DRV1010 11 PILED0DRV1011 12 PILED0DRV1012 13 PILED0DRV1013 14 PILED0DRV1014 PILED0DRV107
2010.10.18. \\..\kiscsati.SchDoc
Number
COR8 R8
4
Sheet 2of 3 Drawn By:
version 2.0 Beck Zoltán
Revision
COJ21 J21 Power LED connector
GND
499R
PIJ210 PIJ210 PIJ2103 PIJ2104
+7V2
22 21 PILED0DRV1021 20 PILED0DRV1020 19 PILED0DRV1019 18 PILED0DRV1018 17 PILED0DRV1017 16 PILED0DRV1016 15 PILED0DRV1015
PIR801
NLLED20XERR LED2_XERR NLLED20PWM LED2_PWM PIR802 PILED0DRV1022
NLPW0RED PW_RED NLPW0GRN PW_GRN NLPW0BLU PW_BLU
OUT15 OUT14 OUT13 OUT12 OUT11 OUT10 OUT9 OUT8
TLC59401
GND BLANK 3 XLAT 4 PILED0DRV104 SCLK 5 PILED0DRV105 SIN 6 PILED0DRV106 MODE PILED0DRV103
3V3 28 PILED0DRV1028 26 PILED0DRV1026 24 PILED0DRV1024 23 PILED0DRV1023 25 PILED0DRV1025 27 PILED0DRV1027
Kis csatlakozó és perifériái
NLLED20LE LED2_LE NLLED20SCK LED2_SCK NLLED20SIN LED2_SIN NLLED20MODE LED2_MODE
VCC TEST SOUT XERR GSCLK IREF
COLED0DRV1 LED_DRV1
NLLED20BLANK LED2_BLANK PILED0DRV102 2
2 K1 PIJ1802 4 K2 PIJ1804 6 K3 PIJ1806 8 K4 PIJ1808
GND
COC5 C5
1 PIC501 100nF PILED0DRV101
PIC502
3V3
4
1 2 3 4
71
AK KR KG KB
1
D
C
B
A
F.2. A modellautó kártyáinak kapcsolási rajza
D
C
B
A
EXP
COJ2 J2
1 2 3 4 5 6 7 8 9 10 11 12 13 14
1
1
GND
PIJ203
3 4 PIJ204 5 PIJ205 6 PIJ206 7 PIJ207 8 PIJ208 9 PIJ209 10 PIJ2010 11 PIJ2011 12 PIJ2012 13 PIJ2013 14 PIJ2014
2 PIJ202
PIJ201
+5V 3V3
PB2
GNDA
PD5 PD0 PD15 PE8 PD4 PE0
PE3 PE6
+7V2
+ -
CONN12
7V2 3V3 CLK LE OE DATA AN1 AN2 AN3 AN4 GND GNDA
REED_IN
PIR401
PIR402
GND
AN1 AN2 AN3 NLAN4 AN4
PIC202 COC2 C2 PIC201 1uF
+5V
2
NLLED10DATA LED1_DATA
GNDA
PIJ1203
PIJ1202
10k
COR4 R4
NLLED10CLK LED1_CLK NLLED10LE LED1_LE NLL\E\D\1\0\O\E\ LED1_OE
+7V2 3V3 1 2 3 4 PIJ1204 5 PIJ1205 6 PIJ1206 7 PIJ1207 8 PIJ1208 9 PIJ1209 10 PIJ12010 11 PIJ12011 12 PIJ12012
GND
PING_SIG
+5V
3V3
PIJ1201
PIJ1401
PIJ1403 PIJ1402
PIJ802
PIJ801
COJ12 J12
PING)))
GND(bl) VCC(r) SIG(w)
COJ14 J14
REED_SW
COJ8 J8
PIR302
GND
LDO3V3
4
PIV105
5
PIV104
GND
1 IN OUT 2 PIV102 GND 3 PIV103 EN NC/F
V1 COV1 PIV101
POAN4 AN4
PIC302 COC3 C3 PIC301 4.7uF
3V3
nRESET PC0 PE4 PE6 PE3 PA5 PA6 PD5 PB2 PD0 PC8 PD15 PD14 PC12 PE8 PD2 PC7 PE14 PB14 PC6 PE10 PE11 PD3 PD4 PE12 PE0 PE1 N/C +5V GNDA +5V GND +5V GND
CONN34
Input pull-down PIJ1301 1 NLREED0IN REED_IN 3 PIJ1303 NLPE3 PE3 5 PIJ1305 NLAN3 AN3 7 PIJ1307 NLPB2 PB2 9 PIJ1309 NLPING0OUT PING_OUT PIJ13011 11 NLPING0SIG PING_SIG PIJ13013 13 NLPE8 PE8 15 PIJ13015 TH_OUT 17 PIJ13017 LED1_CLK PIJ13019 19 LED1_LE 21 PIJ13021 LED1_OE PIJ13023 23 LED1_DATA PIJ13025 25 NLMOTOR0EN MOTOR_EN PIJ13027 27 +5V PIJ13029 29 PIR301 COR3 R3 31 PIJ13031 10k 33 PIJ13033
COJ13 J13 2 4 6 8 PIJ1308 10 PIJ13010 12 PIJ13012 14 PIJ13014 16 PIJ13016 18 PIJ13018 20 PIJ13020 22 PIJ13022 24 PIJ13024 26 PIJ13026 28 PIJ13028 30 PIJ13030 32 PIJ13032 34 PIJ13034
3
Date: File:
A4
Size
PIC402
GND
3V3 GND BT_RX RST BT_TX
2010.10.18. \\..\nagycsati.SchDoc
Number
4
NLSST0OUT
11
PIR102
PIR101
PIQ101
PIJ10 PIJ102 PIJ901 PIJ902 PIJ10 PIJ102
NLACCU0GND ACCU_GND
+7V2
4
Revision
IGNI_KEY
COJ9 J9
Sheet 3of 3 Drawn By:
ACCU
Beck Zoltán
version 2.0
IC_BOARD
COJ10 J10
GND
DRIVER
PIJ1102
+ -
COJ11 J11 PIJ1101
+7V2
PIJ701 PIJ702 PIJ703
Extra OUT
COJ7 J7 SIG(w) VCC(r) GND(bl)
MOSFET-N
COQ1 Q1
PIQ103
10k
COR1 R1
GND
COJ1 J1
PIU1011
8 NLSXT0OUT SXT_OUT PIU108
PIQ102
GND
PIC102 COC1 C1 PIC101 100nF
+5V
PIJ601 PIJ602 PIJ603
Steering OUT
6 SST_OUT PIU106
3
PIU103
7 PIU107
14 PIU1014
BT CONNECTOR
PIJ2002
PIJ2001
COJ20 J20 1 2 NLUART0TX UART_TX PIJ2003 3 4 PIJ2004 NLUART0RX UART_RX PIJ2005 5
3V3
VCC GND
74HCT125
COJ6 J6
NLSTH0OUT STH_OUT
Nagy csatlakozó és perifériái
100nF
PIC401
COC4 C4
PIR202
PIU109
PIU1010
13 PIR201 PIU1013 12 PIU1012
COR2 R2 0R
GND
COU1 U1
4 PIU104 NLST0OUT ST_OUT 5 PIU105 10 9
Throttle OUT
NLSERVO0VCC SERVO_VCC NLSERVO0GND SERVO_GND
1 PIU101 NLTH0OUT TH_OUT 2 PIU102
MOTOR_EN
NLST0IN ST_IN
Steering IN
SIG(w) VCC(r) GND(bl)
PIJ301 PIJ302 PIJ30
PIJ501 PIJ502 PIJ503
COJ5 J5
PIJ401 PIJ402 PIJ403
COJ4 J4 SIG(w) VCC(r) GND(bl)
Throttle IN
COJ3 J3 SIG(w) VCC(r) GND(bl)
NLTH0IN TH_IN
Title
NLAN1 AN1 NLPE6 PE6 NLAN2 AN2 NLPD5 PD5 NLPD0 PD0 NLPD15 PD15 UART_TX UART_RX ST_IN ST_OUT TH_IN NLPD4 PD4 3V3 NLPE0 PE0
GNDA
PIJ1306
PIJ1304
PIJ1302
POXT0OUT XT_OUT
3 SIG(w) VCC(r) GND(bl)
+ -
2
+ -
1
+ -
72
D
C
B
A
F.3. A homlokrakodó modell kártyáinak huzalozási rajza
F.3. A homlokrakodó modell kártyáinak huzalozási rajza
PAJ7015 PAJ7013 PAJ7011 PAJ709 PAJ707 PAJ705 PAJ703 PAJ701 COJ7
PAJ603COJ6 PAJ602 PAJ601
PAJ1801 COJ18
PAC1302
COC13PAC1301
PAJ1802
COJ4 PAJ7016 PAJ7014 PAJ7012 PAJ7010 PAJ708 PAJ706 PAJ704 PAJ702 F.3.1. ábra. A felső kártya huzalozási rajza
PAJ503COJ5 PAJ502 PAJ501
PAC110K COC11
PAJ402 PAJ401
PAM108PAM107PAM106PAM105PAM104 PAM103PAM102PAM101 COM1 PAM100
PAC110A
PAM109PAM1010PAM101 PAM1012PAM10 3 PAM10 4PAM1015PAM1016
PAMUX101
COR22 PAR2201 PAR2202
PAMUX102
COR20 PAR2001 PAR2002
PAMUX104
PAMUX103
PAMUX105
PAC901COC9PAC902
PAC1501 COC15 PAC1502
PAC120K PAJ1901 COJ19 PAJ1902
PAM208PAM207PAM206PAM205PAM204 PAM203PAM202PAM201
PAC1402 COC12 PAM200 COM2
COC14PAC1401
PAC120A
PAM209PAM2010PAM201 PAM2012PAM2013 PAM2014PAM2015PAM2016
COR23 PAR2301 PAR2302 PAR2101 COR21 PAR2102
PAMUX1016
PAMUX1015
COMUX1
PAMUX106 PAMUX107
PAMUX1010
PAJ13014 PAJ13013 PAJ13012 PAJ13011 PAJ13010 PAJ1309 COJ13 PAJ1308 PAJ1307 PAJ1306 PAJ1305
PAMUX108
PAMUX109
PAMUX201
PAMUX2016
PAMUX202 PAMUX203 PAMUX204 PAMUX205 PAMUX206
COMUX2
PAC2102
COC21PAC2101
PAJ2101 PAC2202
COJ21 PAJ2102
COC2
PAM308PAM307PAM306PAM305PAM304 PAM30 PAM302PAM301
COC20 PAM400 COM4
PAMUX2013 PAMUX2012
COR16 PAR1601 PAR1602 PAC102COC1PAC101 COBTN1 PABTN102 PABTN101
PAC701
COC7
PAC702
PAMUX2011
PAMUX2010
PAMUX208
PAMUX209
PAMUX304 PAMUX305
PAMUX306
PAJ1401COJ14 PAJ1402 PAJ1403
PAMUX3016 PAMUX3015
COMUX3
PAMUX307 PAMUX308
PAMUX3014 PAMUX3013
PAC801
COC8 PAC802
PAJ12010 PAJ1209 PAJ1208 PAJ1207 PAJ1206 PAJ1205 COJ12
PAJ801
PAJ802
PAJ803
PAJ804
PAJ805
PAJ806
PAJ807
PAJ808
PAJ809 PAJ8011
PAJ8010 PAJ8012
PAJ8013
PAJ8014
PAJ8015
PAJ8016
PAJ8017 PAJ8019
PAJ8018 PAJ8020
PAJ8021 PAJ8023
PAJ8022 PAJ8024
PAJ8025
PAJ8026
PAJ8027
PAJ8028
PAJ8029 PAJ8031
PAJ8030 PAJ8032
PAJ8033
PAJ8034
PAJ8035
PAJ8036
PAJ8037 PAJ8039
PAJ8038 PAJ8040
PAJ8041
PAJ8042
PAJ8043
PAJ8044
PAJ8045
PAJ8046
PAJ8047
PAJ8048
PAMUX3012
PAJ8049
PAJ8050
PAMUX3011
PAJ8051 PAJ8053
PAJ8052 PAJ8054
PAJ8055
PAJ8056
PAMUX3010 PAMUX309
PAJ1204 PAJ1203 PAJ1202 PAJ1201
PAJ8057
PASW303 PASW302 PASW301
PAJ8075
COSW3
PAJ1501COJ15 PAJ1502 PAJ1503
PASW306 PASW305 PASW304
PAJ1601COJ16 PAJ1602 PAJ1603
PASW203 PASW202 PASW201 COSW2
PAL102
PALED0RV124PALED0 RV1023PALED0 RV102 PALED0 RV1021PALED0RV120 PALED0RV1 9PALED0 RV10 8PALED0 RV10 7 PALED0RV1 6PALED0RV1 5 PALED0 RV10 4PALED0RV1 3
PAJ10013 PAJ10011 PAJ1009 PAJ1007 PAJ1005 PAJ1003 PAJ1001
PALED0RV1 PALED0 RV102PALED0 RV103PALED0 RV104PALED0RV15 PALED0RV16PALED0 RV107PALED0 RV108 PALED0RV19PALED0RV1 0 PALED0 RV10 PALED0RV1 2
PAJ10014 PAJ10012 PAJ10010 PAJ1008 PAJ1006 PAJ1004 PAJ1002
COL1
PAL101
PAJ8072 PAJ8074
PAJ8076
PAJ8077
PAJ8078 PAJ8080
COR28 PAR2802 PAR2801 PAC502
PAU105 PAU104 PAU103 PAU102 PAU101
COC5 PAC501 PAD120A
COJ10
PAJ8068 PAJ8070
COJ8
PAJ8079
PASW206 PASW205 PASW204 PAJ1701COJ17 PAJ1702 PAJ1703
COLED0DRV1
PAJ8064 PAJ8066
PAJ8067 PAJ8069 PAJ8073
PAC200A PAM409PAM4010PAM401 PAM4012PAM4013 PAM401PAM4015PAM4016 PAC1801 COC18 PAC1802 COC24 PAC2402 PAJ1102 PAJ1104 PAJ1106 PAJ1108 PAJ11010 PAC2401 PAJ1101 PAJ1103COJ11 PAJ1105 PAJ1107 PAJ1109 PAR1901 PAR1902 PAR1801 PAR1802 COR19 COR18
PAJ8060 PAJ8062
PAJ8063
PAJ8071
COR27 PAR2701 PAR2702 COR25 PAR2501 PAR2502
PAJ8058
PAJ8059 PAJ8061 PAJ8065
PAC2201
PAR1702 PAR1701 COR17
PAMUX2015 PAMUX2014
PAMUX207
PAMUX303
PAM408PAM407PAM406PAM405PAM40 PAM403PAM402PAM401
COC6 PAC602
PAMUX1011
PAJ1302 PAJ1301
COR26 PAR2601 PAR2602 COM3 COC19 PAM300 COR24 PAR2401 PAR2402 P A M 3 0 9 P A M 3 0 1 0 P A M 3 0 1 P A M 3 0 1 2 P A M 3 0 1 P A M 3 0 1 4 P A M 3 0 1 5 P A M 3 0 1 6 PAC190A COC17 PAC1701 PAC1702 COC23 PAC2301 PAC2302 PAC200K
PAC601
PAMUX1012
PAJ13016 PAJ13015
PAMUX301 PAMUX302
PAJ2001 COJ20 PAJ2002
PAMUX1013
PAJ1304 PAJ1303
PAC1001 COC10 PAC1002
PAC1601 PAC1602 COC16
PAC190K
PAMUX1014
COD12 PAD120K
COU1
PAC40A COC4
PAC40K PAC20A COC2
PAC20K
PASW102
COD13PAD130APAD130K
PASW104 PASW10C COSW1
PASW108
PASW101
PAC302
COC3 PAC301
COJ9 PAJ901 PAJ902
COJ3
F.3.2. ábra. Az alsó kártya huzalozási rajza
PAO10A PAO10E
PAD10A COD1
PAO10K PAO10C
PAD10K
PAO20A PAO20E
COO2
PAD20A COD2
PAO20K PAO20C
PAD20K
COO1
PAJ301 PAJ302 PAJ303 PAJ304 PAJ305 PAJ306
PAJ307 PAJ309 PAJ3011 PAJ3013
PAJ308 PAJ3010 PAJ3012 PAJ3014
PAO30A PAO30E PAD30A COO3 COD3 PAO30K PAO30C PAD30K
PAO40A PAO40E
COO4
PAD40A COD4
PAO40K PAO40C PAD40K
PAO120A PAO120E
COO12
PAR1301 PAR1302 COR13
PAO50A PAO50E
COO5
PAO120K PAO120C
COJ1
PAR801COR8PAR802 PAJ101 PAJ102
PAO130A PAO130E COO13 PAO130K PAO130C
PAD50A COD5
PAO50K PAO50C PAD50K
PAO60A PAO60E
COO6
PAR1501 COR15 PAR1502
PAR102COR1PAR101 PAR202COR2PAR201
PAD70A COO7 COD7 PAO70K PAO70C PAD70K PAO70A PAO70E
PAR1401
COR14
PAR302COR3PAR301
PAR1402
PAR402COR4PAR401
COJ2
PAD80A COO8 COD8 PAO80K PAO80C PAD80K PAO80A PAO80E
PAR502COR5PAR501 PAJ201 PAJ202 PAJ203 PAJ204
COR6PAR601 PAR602
PAD90A COO9 COD9 PAO90K PAO90C PAD90K PAO90A PAO90E
PAJ205 PAJ206
PAJ207 PAJ209 PAJ2011 PAJ2013 PAJ2015
PAD60A COD6
PAO60K PAO60C PAD60K
PAR702COR7PAR701
PAJ208 PAJ2010 PAJ2012 PAJ2014 PAJ2016
PAR902COR9PAR901 PAO100A PAO100E
PAD100A
PAO100K PAO100C
PAD100K
PAO110A PAO110E
PAD110A
PAO110K PAO110C
PAD110K
COO10 COD10 PAR1002 PAR1001 COR10
COR11PAR1101 PAR1102
73
COO11 COD11
COR12 PAR1202 PAR1201
F.4. Fényképek a lánctalpas modellről
F.4.1. ábra. A homlokrakodó elektronikája
F.4.2. ábra. A homlokrakodó szemből
F.4.3. ábra. A próbapanel beépítve
74
F.4. Fényképek a lánctalpas modellről
F.4.4. ábra. Az enkóderkerék
F.4.5. ábra. A felhasználói felület
F.4.6. ábra. A homlokrakodó összeszerelt állapotban
75
F.4.7. ábra. Érzékelő- és LED-sor
F.4.8. ábra. A felső kártya és a ComStick
76
F.5. Fényképek a modellautóról
F.5. Fényképek a modellautóról
F.5.1. ábra. A modellautó belső kialakítása
F.5.2. ábra.
F.5.3. ábra.
A felső próbapanel
ComStick és bővítőkártya a modellautón
77
F.5.4. ábra.
Ultrahangos távolságérzékelő és Bluetooth modul
F.5.5. ábra.
F.5.6. ábra.
Érzékelősor a modellautón
A modellautó összeszerelt állapotban
78
F.6. Videók
F.6. Videók RobonAUT RobonAUT RobonAUT RobonAUT
2010 2010 2010 2010
-
Teszt videó 1 Teszt videó 2 Verseny videó BSS video
http://www.youtube.com/watch?v=ETwH9n7Q8kA http://www.youtube.com/watch?v=qOphtulT4yo http://www.youtube.com/watch?v=-zbkBk9gNAQ http://www.youtube.com/watch?v=nyvdH98dQyc
79
80
Ábrák jegyzéke
Ábrák jegyzéke 1.1. A vezetővonal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.2. A start- és célmező . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.3. Az alagút . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.4. Az elágazás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.5. Az extra elágazás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.6. A begyűjtőhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.7. A lerakóhely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.8. A homlokrakodó modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.9. Az STM32 ComStick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.10. A kapcsolóüzemű tápegység bekötése . . . . . . . . . . . . . . . . . . . . . . 10 1.11. Egy analóg multiplexer bekötése . . . . . . . . . . . . . . . . . . . . . . . . 10 1.12. Egy reflexiós potokapu bekötés . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.13. A LED-eken folyó áram az akkumulátor feszültségének függvényében a két LED-körben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.14. Az optoérzékelők elrendezése robot alján (sárgával jelölt területeken) . . . . 12 1.15. Az infrás távolságérzékelő távolság-feszültség karakterisztikája . . . . . . . . 13 1.16. Az tápfelügyeletet megvalósító ellenállásosztó . . . . . . . . . . . . . . . . . 13 1.17. A LED-vezérlő . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.18. A motormeghajó áramkör bekötése . . . . . . . . . . . . . . . . . . . . . . . 15 1.19. A hiszterézises komparátor megvalósítása
. . . . . . . . . . . . . . . . . . . 16
1.20. Az LCD kijelző bekötése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.21. A hexadecimális kódkapcsoló . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.22. A Bluetooth modul csatlakozása . . . . . . . . . . . . . . . . . . . . . . . . 17 1.23. Az érzékelés folyamata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.24. A beavatkozás folyamata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 1.25. A lánctalpak nemlinearitása . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.26. A lánctalpak meghajtásának linearizálása . . . . . . . . . . . . . . . . . . . 29 1.27. A lánctalpas jármű pályája . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.28. Az egyszintű rendszer felépítése . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.29. A többszintű felosztott rendszer felépítése . . . . . . . . . . . . . . . . . . . 31 1.30. A lánctalp sebessége szabályozás nélkül . . . . . . . . . . . . . . . . . . . . . 32 1.31. A lánctalp sebessége szabályozással . . . . . . . . . . . . . . . . . . . . . . . 32 81
Ábrák jegyzéke
1.32. A többszintű rendszer MIMO sebességszabályozóval . . . . . . . . . . . . . . 33 1.33. MIMO identifikációs adatok . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 1.34. Vonalkövetés P szabályozóval, ha a hajtásmotorok átlagfeszültsége 3 V (balra) illetve 5,4 V (jobbra) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 1.35. Vonalkövetés P szabályozóval, ha a hajtásmotorok átlagfeszültsége 7,8 V (balra) illetve 10,2 V (jobbra) . . . . . . . . . . . . . . . . . . . . . . . . . . 34 1.36. Vonalkövetés P (balra) illetve PI (jobbra) szabályozóval 0,26 m/s sebesség alapjellel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 1.37. Vonalkövetés PI szabályozóval 0,4 m/s (balra) illetve 0,46 m/s (jobbra) sebesség alapjellel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 1.38. A döntés alapú szabályzó működése . . . . . . . . . . . . . . . . . . . . . . . 36 2.1. Az autómodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.2. A start- és célmező . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.3. Az extra elágazás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.4. A garázs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.5. Az úttorlasz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.6. A vonalhiány . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.7. A gyorsasági szakasz kezdete és vége . . . . . . . . . . . . . . . . . . . . . . 42 2.8. Az akkumulátor, az indítókuls. és a ComStick bővítő kártya bemenő tápjának csatlakozása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.9. A 3,3 V-ot előállító feszültségstabilizátor . . . . . . . . . . . . . . . . . . . . 44 2.10. A szervó vonalak illesztése . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.11. A MOSFET megszakító kapcsolása . . . . . . . . . . . . . . . . . . . . . . . 45 2.12. A szervójel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2.13. A kaszkádosított LED-vezérlők . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.14. A CNY70-es szenzor bekötése, az analóg csatornák földelése . . . . . . . . . 47 2.15. Az ultrahangos távolságérzékelő csatlakoztatása . . . . . . . . . . . . . . . . 48 2.16. A MEMS gyorsulásérzékelő bekötése . . . . . . . . . . . . . . . . . . . . . . 49 2.17. A Bluetooth modul illesztése . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.18. A felső kártyán helyet foglaló PWM LED vezérlő kapcsolása . . . . . . . . . 50 2.19. Az ultrahangos távolságérzékelő távolság-impulzusszélesség karakterisztikája
54
2.20. A teszteléshez használt körpálya alakja . . . . . . . . . . . . . . . . . . . . . 56 2.21. Vonalkövetés P szabályzóval, 1,14 m/s sebességgel . . . . . . . . . . . . . . . 57 2.22. Vonalkövetés P szabályzóval, 1,21 m/s sebességgel . . . . . . . . . . . . . . . 57 2.23. Vonalkövetés PID szabályzóval, 0,93 m/s sebességgel . . . . . . . . . . . . . 58 2.24. Vonalkövetés PID szabályzóval, 1,16 m/s sebességgel . . . . . . . . . . . . . 58 2.25. Vonalkövetés PID szabályzóval, 1,76 m/s sebességgel . . . . . . . . . . . . . 58 2.26. Vonalkövetés PID szabályzóval, 1,83 m/s sebességgel . . . . . . . . . . . . . 59 2.27. Vonalkövetés PID szabályzóval, 1,95 m/s sebességgel . . . . . . . . . . . . . 59 F.3.1.A felső kártya huzalozási rajza . . . . . . . . . . . . . . . . . . . . . . . . . . 73 F.3.2.Az alsó kártya huzalozási rajza . . . . . . . . . . . . . . . . . . . . . . . . . 73 82
Ábrák jegyzéke
F.4.1.A homlokrakodó elektronikája . . . . . . . . . . . . . . . . . . . . . . . . . . 74 F.4.2.A homlokrakodó szemből . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 F.4.3.A próbapanel beépítve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 F.4.4.Az enkóderkerék . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 F.4.5.A felhasználói felület . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 F.4.6.A homlokrakodó összeszerelt állapotban . . . . . . . . . . . . . . . . . . . . 75 F.4.7.Érzékelő- és LED-sor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 F.4.8.A felső kártya és a ComStick . . . . . . . . . . . . . . . . . . . . . . . . . . 76 F.5.1.A modellautó belső kialakítása . . . . . . . . . . . . . . . . . . . . . . . . . 77 F.5.2. A felső próbapanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 F.5.3. ComStick és bővítőkártya a modellautón . . . . . . . . . . . . . . . . . . . 77 F.5.4. Ultrahangos távolságérzékelő és Bluetooth modul . . . . . . . . . . . . . . 78 F.5.5. Érzékelősor a modellautón . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 F.5.6. A modellautó összeszerelt állapotban . . . . . . . . . . . . . . . . . . . . . 78
83
Ábrák jegyzéke
84
Táblázatok jegyzéke
Táblázatok jegyzéke 1.1. A „device” struktúra felépítése . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.2. A „drive” struktúra felépítése . . . . . . . . . . . . . . . . . . . . . . . . . . 23 1.3. A „crawler” struktúra felépítése . . . . . . . . . . . . . . . . . . . . . . . . . 24 1.4. Megszakítások összefoglalása . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
85
Táblázatok jegyzéke
86
Irodalomjegyzék
Irodalomjegyzék [1] A RobonAUT verseny hivatalos honlapja: http://www.aut.bme.hu/VillamosSzakiranyMSc/robonaut.aspx [2] STM32F107 Reference Manual Document ID: 13902, Revision 9 [3] Vishay Semiconductors: CNY70 Reflective Optical Sensor with Transistor Output Document number 83751 Rev. A4, 05-Apr-00 [4] Sharp: Analog Output Type Distance Measuring Sensor Model No. GP2D120XJ00F SPEC. No. ED-05G061 March 1, 2005 [5] Texas Instruments: TLC5925 LOWPOWER 16-CHANNEL CONSTANT CURRENT LED SINK DRIVER SLVS765 - OCTOBER 2008 [6] Texas Instruments: DRV8800 DMOS FULL-BRIDGE MOTOR DRIVERS SLVS855C - JULY 2008 - REVISED JUNE 2009 [7] Bluegiga Technologies: WT12 DataSheet, Version 2.1 Friday, October 06, 2006 [8] Lantos Béla, Irányítási rendszerek elmélete és tervezése I. egyváltozós szabályozások, Akadémiai kiadó, 2001. [9] Texas Instruments: TLC59401 16-CHANNEL LED DRIVER WITH DOT CORRECTION AND GRAYSCALE PWM CONTROL SBVS137 - DECEMBER 2009
87