Debreceni Egyetem Informatikai Kar
Négy szabadságfokú robotkar és vezérlése
Témavezetı:
Készítette:
Dr. habil. Fazekas Attila
Sándor Ákos
Egyetemi docens
Programtervezı matematikus
Debrecen 2006
Tartalomjegyzék 1. Irodalmi áttekintés ...............................................................................................................5 1.1. Az ipari robot .................................................................................................................5 1.2. A robotok használatának okai és elınyei ....................................................................5 1.3. Bıvítési lehetıségek, rendszerintegrálás .....................................................................6 1.4. Az ipari robotok felépítése, mőködése.........................................................................9 1.4.1. A robotkar felépítése ..............................................................................................9 1.4.2. Motortípusok.........................................................................................................10 1.4.3. Hajtómővek...........................................................................................................14 1.4.4. A vezérlı felépítése ...............................................................................................17 2. Robotkar építése .................................................................................................................19 2.1. Mechanikus robotkar..................................................................................................20 2.1.1. Tervezési meggondolások ....................................................................................20 2.1.2. Mechanikai konstrukció ......................................................................................21 2.1.3. Elektromossági meggondolások ..........................................................................26 2.2. Vezérlıegység ...............................................................................................................27 2.2.1. Oszcillációs panel..................................................................................................29 2.2.1.1. Az oszcillátor ..................................................................................................29 2.2.1.2. Frekvenciaosztó .............................................................................................33 2.2.1.3. Érzékelıkkel kapcsolatos jelgenerátorok....................................................35 2.2.1.4. Az oszcillációs panel megépítése...................................................................36 2.2.2. Motormeghajtó panel ...........................................................................................36 2.2.2.1. Teljesítménymeghajtó fokozat......................................................................37 2.2.2.2. Motorok finomindítása .................................................................................40 2.2.2.3. A motormeghajtó panel megépítése.............................................................41 2.2.3. Központi feldolgozópanel.....................................................................................42 2.2.3.1. Integrált logikai áramkörök megjelenésének története .............................43 2.2.3.2. A központi feldolgozópanel tervezése ..........................................................47 2.2.3.3. Egy ízület vezérlése........................................................................................48 2.2.3.4. Memóriaegység ..............................................................................................58 2.2.3.5. Számítógépes interfész ..................................................................................62 2.2.3.6. Bıvítı interfész ..............................................................................................64 2.2.3.7. Szoftverhitelesítı egység ...............................................................................66 2.2.3.8. Megfogó-vezérlıpanel ...................................................................................71 2.2.3.9. Motorvezérlı panel........................................................................................73 2.2.3.10. Ciklusszervezı egység .................................................................................79 2.2.3.11. Eredményregiszter tömb.............................................................................85 2.2.3.12. A központi feldolgozópanel és a vezérlı megépítése ................................87 2.3. Számítógépes szoftver .................................................................................................90 2.3.1. A párhuzamos port...............................................................................................90 2.3.2. Memória-hozzáférés .............................................................................................94 2.3.3. Ízületi célpozíció beírása ......................................................................................95 2.3.4. Állapotbitek lekérdezése ......................................................................................97 2.3.5. Motormőködés engedélyezése/tiltása..................................................................98 2.3.6. Robot rögzítése, kioldása .....................................................................................98 3. Összefoglalás .....................................................................................................................100
2
Köszönetnyilvánítás Szeretnék köszönetet mondani elsısorban édesapámnak, aki hosszú és keserves munkájával segített elkészíteni a szakdolgozatom hátterében levı mőködı robotkart. Továbbá, köszönöm Dr. Fazekas Attila tanár Úrnak, amiért elvállalta szakdolgozatom témavezetését, és munkájával, tanácsaival nagyban segítette annak elkészítését.
3
Bevezetés Gyerekkorom óta foglalkoztat, a különbözı játékmodellek számítógéppel, vagy számítógép nélkül történı vezérlése, és tanulmányaim során, Hajdú András tanár Úr révén találkoztam az egyetem robotsakkozó projektjével. A projekt részét képezi, egy mechanikus robotkar, amely sakkfigurák mozgatását, sakklépések végrehajtását végzi. Hirtelen felindulásból elvállaltam ennek a robotkarnak az elkészítését. A robotkarral szemben olyan követelmények születtek, hogy legyen majdnem egy méter hosszú, képes legyen néhány dkg tömegő, tetszıleges formájú sakkfigurát megemelni, majd centiméter pontossággal, egy adott pozícióban tudja letenni azt, és mindezt kellı gyorsasággal hajtsa is végre. Továbbá, követelmény az is, hogy teljesen mechanikus legyen, és villanymotorok hajtsák. A robotnak számítógéppel vezérelhetınek kell lennie. A kivitelezésre rendkívül szoros anyagi keretek álltak rendelkezésre. Édesapámmal folytatott körülbelül egy évi közös munka során, elkészült a robotkar, és sikeresen elértük a kívánt eredményt. A dolgozatomban, egy ilyen robotkar legyártásának menete, és elektronikus vezérlıjének tervei, valamint a számítógéprıl történı vezérlését szolgáló programkódok kerülnek tárgyalásra. A dolgozatban közölt kapcsolási rajzok, a robot legyártását követıen készültek a fejlesztés során ejtett hibák kijavításával, ami azt jelenti, hogy helyenként elıfordulnak apró eltérések a valódi mőködı robotkarral szemben.
4
1. Irodalmi áttekintés Az elsı fejezetben teszünk egy rövid betekintést a robotok területére. Megnézzük, hogy pontosan mit is nevezünk ipari robotnak, mire használják ıket, és milyen alkalmazási, bıvítési lehetıségeket kínálnak. Majd ezeket követıen, ismertetem a robot fı alkotóelemeit, és a különbözı konstrukciós lehetıségeket. Az irodalmi áttekintést, a Villanyszerelık Lapján megjelent, Kovács Gábor által írt cikkekbıl, és Csáki Tibor egyetemi docens, Robottechnika címő elıadásvázlatai alapján készítettem. Ezek az irodalmak 8-as, illetve 9-es sorszám alatt szerepelnek az irodalmi jegyzékben.
1.1. Az ipari robot Ipari robotoknak általában az olyan programozottan mozgatható berendezéseket nevezzük, amelyek legalább négy szabadságfokkal rendelkeznek. Feladatok széles skálája oldható meg segítségükkel, a precíziós szereléstıl, a palettázáson és festésen át, a hegesztésig. Ahhoz azonban, hogy egy a kereskedelmi forgalomban kapható robotból mőködı alkalmazás legyen, a roboton kívül további eszközökre és ezek megfelelı összeillesztésére van szükség. Az eszközök az alkalmazási területtıl függenek, egy részük a daraboknak, a robot munkaterébe juttatását és pozicionálását szolgálja, mint a szállítószalagok, adagolók stb., más részük magában a manipulációban vesz részt, mint a megfogók és a különbözı fejegységek. A robotból és a fenti eszközökbıl összeálló egész rendszert hívhatjuk robotcellának.
1.2. A robotok használatának okai és elınyei Tipikus alkalmazás azon automatizálható feladatok megoldása, ahol négy, öt, illetve hat szabadságfokra, és nagy pontosságra van szükség a sorozatosan ismétlıdı, monoton feladatok elvégzéséhez. Ilyen feladatok például a szerelési feladatok, melyekben a munkadaraboknak nem csak a pozícióját, de az orientációját is meg kell változtatni szerelés közben, tehát fordítani, dönteni kell valamerre a munkadarabot a pozícióváltoztatással szinkronban, interpoláltan. Hasonló bonyolultságú feladat a robotkar külsı géppel történı interpolált együttmozgatása, vagy a szállítószalag követése, amely funkciók támogatását a mai robotok vezérlıi már tartalmazzák. Ezeknek a feladatoknak a megoldására az ember, illetve a manipulátor már bonyolultság, megbízhatóság és pontosság szempontjából sem alkalmas,
5
azonban a robot alkalmazása költség szempontjából is kedvezıbb. Ha a beruházás során felmerülı költségek közel azonosak is, a robot kompaktságából és megbízhatóságából, könnyő átprogramozhatóságából adódóan a szervizigény és ezzel arányosan a szervizköltség is töredéke a modulokból összeépített manipulátorokénak, és a gyakorlatilag legjelentısebb költségként jelentkezı termeléskiesés valószínősége is jóval kisebb. Mindemellett merevségének köszönhetıen a robot nem csak pontosabb, de gyorsabb is tud lenni a manipulátoroknál és az embereknél, mely a termelékenység, és így az egy termékre vetített költségek szempontjából is jelentıs elınyt jelent.
1.3. Bıvítési lehetıségek, rendszerintegrálás A robotok – a robotkar sajátosságai miatt – a saját munkaterük határait leíró gömb vagy henger közepében helyezkednek el, ezáltal többé-kevésbé gömbhéj vagy győrő alakú munkateret hoznak létre. Emiatt a gyakorlatban többször megesik, hogy még az ipari robotok – általában maximum hat – szabadságfoka is kevésnek bizonyulhat egy-egy feladat megoldásához, és a megfelelı mozgástér kialakításához plusz tengely hozzáadására van szükség. Más esetekben pedig, a pótlólagos tengely egyszerően a robotot körülvevı, egyéb mechanizmusokkal való jobb szinkronizációs – együtt mozgatási – lehetıség miatt válik szükségessé. A robotok általában adott határok közti munkatér/terhelhetıség aránnyal rendelkeznek, ennek megfelelıen a nagyobb munkatérrel arányosan nagyobb terhelhetıség van megkövetelve, így robusztusabb, ennek következményeképp drágább robot szükséges. Ha azonban kis terhelhetıség is elegendı de nagy munkatér szükséges, akkor ez egy kismérető robot és lineáris tengely alkalmazásával is megoldható. A lineáris tengely egy olyan eszköz, amely képes a tengelye mentén pozícionálni a rászerelt robotot. A robot lineáris tengelyre szerelésével egyszerően, és a robot árának töredékéért kiterjeszthetı a munkatér, hiszen egy ilyen konfiguráció megépítéséhez a lineáris tengely mechanikáján kívül csak egy helyzetadós szervomotor erısítıszett és egy, a robot vezérlıegységébe építhetı pótlólagos tengely illesztıkártya szükséges. Ez a megoldás különösen jól használható egyes gyártók kisebb mérető robotjai esetén, mivel ezekhez könnyőszerrel találhatunk megfelelı paraméterekkel (teherbírás stb.) rendelkezı lineáris tengelyt. Ugyanakkor kis tömege miatt a robot gyorsan mozgatható. A konfiguráció további elınye, hogy míg a lineáris tengelyen mozogva a robot viszonylag egymástól távoli pontok
6
közt képes dolgozni, a robotkar – mérete miatt – a szők helyekhez is hozzá tud férni. Egy ilyen konfigurációval például megoldható nagyobb, bonyolult tárgyak teljes „körüljárása” vizsgálathoz, vagy egyéb feladatokhoz. Ilyen feladat például egy autó végszerelés utáni vizsgálata, ahol a robotkarnak mind az autó belsejében, mind kívülrıl vizsgálatokat kell végeznie. Ha a robotot egy x-y „asztalra”, tehát egy, két szabadságfokú lineáris tengelypárra helyezzük, akkor a robot egésze – a lineáris tengelyek együttes pozícionálásával – akár körívek mentén is mozgatható. A robotkar végén lévı megfogó egység ezzel egy idıben még további, akár hat szabadságfokú mozgást hajthat végre. Az elıbbi vizsgálati feladatokon kívül ez az összeállítás bonyolult geometriájú, nagymérető munkadarabok festésére is jól használható. A robotot lineáris tengelyre helyezve a robot munkatere és mozgási lehetısége az evidens tengelyirányú elmozdulási lehetıségen kívül még azért is nı, mert a szabadságfok növelésével a munkatér legtöbb pontja több irányból is megközelíthetıvé válik. Ezáltal az adott mozgások – a lineáris tengelynek köszönhetıen – többféleképpen is kivitelezhetıek lesznek. Napjainkban általános feladatnak számít a különbözı megmunkáló gépek robotok segítségével történı kiszolgálása is. Ilyen esetben a robot – saját mechanikájának és a lineáris tengely gyorsaságának köszönhetıen – egy gép megmunkálási ideje alatt megoldhatja más gépek kiszolgálását is. A lineáris tengely alkalmazásával tehát csökkenthetı a szükséges kiszolgálórobotok száma. Plusz tengely hozzáadásával azonban nemcsak lineáris tengellyel, hanem bármely abszolút helyzetadós, szervóval rendelkezı mechanizmus mozgatható, ami által – a tengelymozgások interpolálási lehetıségeinek következményeként – a robot és környezete között tökéletes szinkron érhetı el. Jó példa a szinkronizációs feladatra a futószalag robothoz kapcsolása, pótlólagos tengelyként. Az interpoláció segítségével e konfigurációban a robot úgy tud a szállítószalagra helyezni, vagy arról elvenni dolgokat, hogy a robotkar a szalaggal együtt mozogva annak megállítása nélkül dolgozik. További, a robottal gyakran együttmőködı mechanika a körasztal, amelyet pótlólagos tengelyként a robothoz kapcsolva – az elıbbiekben már sokszor említett interpolációs lehetıség miatt – újabb felhasználási módok válnak lehetségessé. Ez a plusz szabadságfok szerelési, festési és vizsgálati, minıségellenırzési feladatok esetén az elızıkhöz hasonlóan könnyíti meg a bonyolult geometriájú munkadarabokhoz való hozzáférést.
7
Összességében tehát, az a következtetés vonható le, hogy bonyolultabb mozgást vagy nagyobb munkateret igénylı, de a munkatér arányaihoz képest kisebb teher mozgatásával járó feladatok esetén is, jó megoldás lehet pótlólagos robottengely felszerelése. A rendszer kamera hozzáadásával intelligenssé tehetı. A képfeldolgozó kamerás alkalmazások jelentıs elınye, hogy az alkatrész helyzetének és méretének azonosításával képesek a rendezetlenül érkezı, vagy rendelkezésre álló alkatrészeket is megfogni, fı méreteit megmérni, és az aktuális munkadarab vizsgálatával, különbözı tulajdonságai – például, szín, forma, mérettőrés, alkatrészek hibátlan beültetése, egyes részegységek helyes állása, jelenléte – alapján szelektálni, szortírozni azt, amely feladatok egyéb módszerrel csak nehézkesen vagy egyáltalán nem oldhatók meg. Ennek köszönhetıen a képfeldolgozó kamerás automatizálási rendszerek száma jelentısen növekszik az iparban. A „látó” robot képes alkalmazkodni a megváltozott feltételekhez, az esetleges méretváltozásokhoz. A sorozatgyártásban a „gyártani, majd válogatni” módszert felválthatja a „jót gyártani és ellenırizni” módszer, azaz a szerelıgépek pontos beállítását segítve, a gép egyes szerelési fázisaiban, a megmunkálandó alkatrész kiszedése nélkül kamerával megmérjük a jellemzıket, a gép beállítója e méretek ismeretében pontosítja a beállításokat. Ha a gép minden szerelıállomásán ezeket a beállításokat méréssel visszaellenırizve végrehajtjuk, akkor a gép által elıállított selejtes alkatrészek száma drasztikusan csökken. A robot egyes esetekben a kamera intelligens tartószerkezete is lehet, amely minden beállításkor „emlékszik” a korábbi mérési pozícióra, így a beállítást gyorsan, pontosan lehet végrehajtani. A kamerás alakfelismerés a feladattól és az igényektıl függıen többféle rendszerfelépítésben is megvalósítható, többféle kameratípussal. A fix pozícióban lévı munkadarabok vizsgálatához – például, minıségellenırzés, megfogás pontosítás, kontúrkövetés – egy kamerás rendszer alkalmazása is elegendı lehet. A rendszerezetlenül érkezı alkatrészek robotos kezelése, válogatása is megoldható kamera segítségével. A rendszerben a kamerák egy számítógéphez kapcsolódnak, mely elemzi a kamerák képét. A képek elemzése után a számítógép adja a robot vezérléséhez szükséges koordinátákat valamilyen megfelelıen gyors hálózaton keresztül a robot vezérlıjének, a robot koordinátarendszerének és a kamerából kapott képek alapján meghatározott koordinátarendszernek az összehangolásával. A külön számítógépes képfeldolgozások lényeges elınye a kamerába épített képfeldolgozó rendszerekkel szemben, hogy míg ugyancsak megfelelı sebességő képfeldolgozás érhetı el velük,
8
ugyanakkor bonyolultabb, speciálisabb feladatokra is jól használhatók. Az elıbbiekben említett kamera felhasználások egy rendszerben, egymásután is megoldhatók a számítógépes képfeldolgozó rendszer flexibilitásának köszönhetıen. Ilyen rendszerekkel bonyolult gyártási, szerelési, vagy egyéb automatizálási feladatok is sokszor 100 százalékosan automatizálhatók, így biztosítva a gyártás sebességét, pontosságát, és a minimális selejtszámot, amely emberi munkavégzés használatával, általában a feladat monotonitása, és az ember fizikai korlátai miatt nem garantálható. Példaként hozható fel a következı szituáció: egy termék egyes alkatrészei rendszertelenül érkeznek a cellába. Azonosításuk, majd fix pozícióba vitelük után vizsgálatuk és mérésük alapján a robot szortírozza a munkadarabokat. Ezzel a selejt alkatrészek már itt kiszőrhetık, jelentısen lecsökkentve a selejtes végtermékek gyártását, ami idı, energia és alapanyag pazarlás. Végül a megfelelı alkatrészek precíz összeszerelése után a késztermék ismételt mérése, vizsgálata következhet a minıség teljes körő biztosítására.
1.4. Az ipari robotok felépítése, mőködése Az ipari robotok általában két jól elkülönülı egységbıl épülnek fel. Egyik a robotkar, mely a rászerelt megfogó eszköz segítségével a munkafolyamatot végzi. A másik a vezérlıegység, amely a robotkar mozgását vezérli. A következıkben ezeknek a részletesebb felépítésével ismerkedhetünk meg.
1.4.1. A robotkar felépítése Az 1. ábrán látható robotkar humanoid típusú, amely elnevezést az emberi kéz összetettségéhez hasonló felépítésérıl kapta. Ez a típus az ipari robotok egyik legelterjedtebb fajtája, hiszen legtöbbször a robotokat az emberek által végzett munkafolyamatok kiváltására használják, így a robotnak is képesnek kell lennie az emberi kéz által végzett bonyolult mozgások véghezvitelére, ami legegyszerőbben hasonló felépítéssel sikerülhet. A humanoid robotok 5 vagy 6 szabadságfokúak, amit 5 vagy 6, egy szabadságfokú csukló egymásra építésével érnek el. A hat szabadságfok azt jelenti, hogy a robot munkaterének pontjait képes elérni – 3 szabadságfok –, és ezekben a pontokban a kar végén lévı megfogó, bármely orientációban képes állni – további 3 szabadságfok.
9
1. ábra: Humanoid típusú robotkar
Az elıbb említett egy szabadságfokú csuklók szabadságfoka a szögelfordulás, tehát mindegyik csukló a saját síkjában képes elfordulni. Mivel a csuklók síkjai egymással szöget zárnak be – az elsı, második és negyedik tengely a robotkar bármely pozíciójában merılegesek egymásra, míg a harmadik tengely egy síkba esik a másodikkal, így szintén merıleges az elsı és negyedik tengely síkjára, az utolsó két tengely síkjának szöge, pedig a pozíciótól függ –, így a robotkar végén lévı megfogó, már 6 szabadságfokban képes mozogni. Az egyes csuklók alapvetıen három további részegységre bonthatók: motorra, áthajtásra és csapágyazásra.
1.4.2. Motortípusok A robotokban általában villanymotorok szolgáltatják a mechanikát mozgató erıt. Az elektromos hajtómotorok területén igen széles a választék. Minden típusnak megvan a maga elınye és hátránya. A robot alkalmazási területe határozza meg, hogy melyik motortípus lesz számunkra a megfelelı. A következıkben megismerkedünk pár fontosabb hajtómotor kategóriával. Forgómozgást megvalósító villamos motorok A különbözı forgató motorok közötti eltérés fordulatszámban, nyomatékban és az áramellátás jellegében mutatkozik meg. Két fontos kategória az elektromos forgómozgást megvalósító motorok között a szervomotor és a léptetı motor. A szervomotorokat nagy
10
fordulatszám, kis forgatónyomaték, kis energiafogyasztás és egyszerő vezérlés jellemez, míg a léptetımotorokat – hasonló teljesítményő szervomotorokhoz viszonyítva – kis fordulatszám, nagy pontosság, nagy forgatónyomaték és bonyolult vezérlés jellemez. Az egyenáramú szervomotor Legegyszerőbben az egyenáramú szervomotor vezérelhetı. A rákapcsolt feszültség nagysága határozza meg az elérni kívánt fordulatszámot, a feszültség iránya a forgásirányt, az áramerıség, pedig a nyomatékot. Az „egyszerő vezérlés” természetesen alkalmazási területtıl függ, hogy mennyire egyszerő. Ha valamilyen jármő hajtását szeretnénk megvalósítani, akkor az egyenáramú szervomotor igen egyszerő megoldást jelent. Pozícionálási feladatra viszont rendkívül bonyolult vezérlést követel. Robothajtásokban gyakoriak a tárcsamotorok. A forgórész egy vékony szigetelıtárcsa, amelynek homlokfelületén helyezkednek el a vezetık. Az ilyen motorok axiális mérete meglehetısen kicsi. A vezetık radiális elhelyezése miatti jó hıvezetésnek köszönhetıen, rövid ideig igen nagy áramtúlterhelés lehetséges. A motor fordulatszámát a terhelı nyomaték és a kapocsfeszültség határozza meg. A 2. ábrán egy tárcsamotor modelljét láthatjuk.
2. ábra: A tárcsamotor szerkezeti felépítése
11
A tárcsamotor jellemzıi: •
nincs gerjesztı tekercs, a gerjesztést permanens mágnes biztosítja,
•
kis forgórész inercia, nagy szöggyorsulás,
•
nagy indítónyomaték. Mindent egybevetve a motor dinamikai tulajdonságai kedvezıek, de a kommutátor, és
a kefe miatt kényes, ugyanis hamar elkopnak. Léteznek kefe nélküli, egyenáramú szervomotorok is. Viszont, ennél a típusnál a forgórészen drága, ritkaföldfém mágnest kell alkalmazni a kis tehetetlenségi nyomaték elérése céljából, amely következményeként a motor elıállítási költsége drasztikusan nı. Váltóáramú szervomotor Megbízható, kedvezı dinamikai tulajdonságokkal rendelkezı motorok, azonban drágák. A forgásirány tápfeszültség szinten nem vezérelhetı. Egyéb alkatrészek – például kondenzátor – döntik el, hogy merre induljon meg a motor. A fordulatszám a tápfeszültség váltakozási frekvenciájától, míg nyomaték az amplitúdójától függ. Aszinkron változat esetén a nyomatékot még a fordulatszám is befolyásolja. Léptetımotorok Többfázisú, sokpólusú, különleges motorok, melyek fázistekercseit meghatározott kombináció szerint gerjesztve, a motor tengelye diszkrét szögelfordulásokat tesz. E szögelfordulások a motor konstrukciójától függıen 0.5°-2° értékőek, és frekvenciájuk nulla és több 10 kHz között változhat. Régebben ezeket a motorokat a kis kimenınyomaték jellemezte. Ez nem mindig tette lehetıvé a robotkar közvetlen mozgatását, így alakultak ki a követırendszer elvén alapuló elektrohidraulikus léptetımotorok. A villamos és mágneses anyagok, valamint a gyártási technológiák fejlesztése lehetıvé tette a nagy nyomatékú, kis lépésszögő, gyors mőködéső villamos léptetımotorok kialakítását. Ezek már alkalmasak robotkarok közvetlen hajtására is, azaz a léptetımotorok tengelykapcsolóval közvetlenül a hajtandó egységhez kapcsolhatók.
12
A léptetımotorok jellemzı tulajdonságai: •
Digitális vezérlésekhez egyszerően illeszthetı,
•
külön útmérı nem szükséges,
•
a mozgások sebessége könnyen és pontosan szabályozható (frekvenciaszabályozás),
•
közvetlenül indítható, megállítható,
•
nem igényel különösebb karbantartást, rossz környezeti feltételek közt is üzemeltethetı.
3. ábra: A léptetı motor felépítése
Az A, és B tekercseket egymás után 90°-kal eltolt fázisú impulzusokkal gerjesztve az állórészben forgó fluxus alakul ki. A számok a motor szöghelyzetét mutatják. Ha két pólust egyszerre gerjesztünk, a szögosztást 45°-ra finomítjuk. A motor póluspár számának növelésével a lépésszög csökken, ennek azonban határt szab a motor radiális méreteinek növekedése. Ezért axiális irányban alakítanak ki egymástól független póluspár rétegeket, a lépésszögnek megfelelı egymáshoz képesti elfordítással. A gerjesztések hatására a permanens mágnes rotor az eredı fluxus irányába akar beállni. Üzemmódok: •
START-STOP üzem: akkor alkalmazható, ha 1000 Hz alatti lépésfrekvenciánál viszonylag kicsik a gyorsítandó tehetetlenségi nyomatékok.
•
Gyorsítás, lassítás: egyenletes frekvencia felfutás és lefutás eredményezi. Viszonylag nagy tehetetlenségi nyomatékok gyorsításakor, vagy olyan esetben alkalmazzuk, amikor az üzemi frekvencia magasabb, mint a maximális startfrekvencia.
13
A mai ipari robotok legnagyobb része váltóáramú szervomotorokat használ, amelyek speciális háromfázisú motorok, fékkel és inkrementális jeladóval egybeépítve. A fékek a tengelyek pozíciójának megırzését szolgálják a kar kikapcsolása esetén – összecsuklás elleni védelem –, míg a jeladók a motor tengelyének pozícióját csatolják vissza a vezérlıegységbe a mozgás szabályzásához. A motorok hajtómőveket hajtanak, melyek a motor nyomatékának növelését szolgálják.
1.4.3. Hajtómővek A hajtómővek feladata az energia és mozgás átalakítás, melynek célja a nyomatékillesztés, illetve a fordulatszám illesztés, azaz a motor nagy fordulatszámának áttranszformálása a robotkarnak megfelelı kis fordulatszámmá. Ez a feladat lassító hajtómővel megoldható. Forgó – forgó mozgás átalakítást megvalósító hajtómővek •
Fogaskerekes hajtómővek: felépítésük egyszerő, de az egy fokozatban megvalósítható hajtóviszony kicsi. Hatásfoka nem túl jó, és kicsi az elérhetı pozícionálási pontosság.
•
Csigahajtómővek: alkalmazásukkal egy fokozatban nagyobb lassítás valósítható meg, mint a fogaskerekes hajtómővekkel, de hatásfokuk meglehetısen rossz, gyártási pontosságuk nehezen valósítható meg, és beépítési helyigényük nagy.
•
Bolygómővek: felépítésük bonyolult, beépítési helyigényük nagy, hátrányai azonosak a fogaskerék hajtómővekével.
•
Hullámhajtómővek: kis befoglaló mérető, nagy áttételő – nagy nyomatékot elıállító – hajtómővek, melyek fejlesztése a holdjármővek tervezése során valósult meg. A hajtómő méretének és tömegének csökkentése nagyon fontos a robotkar
mőködésének szempontjából. Az elıbb felsorolt hajtómőtípusok mindegyikére jellemzı, hogy minél nagyobb áttételt szeretnénk elérni, annál nagyobb lesz a mérete. A nagy áttétel – 1:100 – és a kis méret tulajdonsága viszont egyedül a hullámhajtómőrıl mondható el. Robotkarok gyártásában a hullámhajtómő vált igazán elterjedté, és a dolgozat hátterében levı mőködı robotkar is ilyen hajtómőveket használ. A 4. ábrán egy hullámhajtómő modellje látható.
14
4. ábra: A hullámhajtómő felépítése.
Ennek lényeges tulajdonsága, hogy egy elliptikus korong – hullámgenerátor – által deformált, kívülrıl fogazott „lemezharangból” és egy belülrıl fogazott fogaskerékbıl áll. A két fogaskerék közti fogkülönbség tipikusan két fog, míg nagyságrendileg 200 foggal rendelkeznek. A hullámgenerátor egy körbefordulása, a fogazat összenyomódásának körülfordulásával jár, így a két fogkülönbség miatt, a fogaskerekek egymáshoz képest két foggal, tehát nagyságrendileg egy század körrel – a fogszámok függvénye – fordulnak el. A hajtómőtípus további elınye, hogy a fogkülönbségek miatti folyamatos „elıfeszítés” miatt gyakorlatilag nincs holtjátéka, egy szögpercnyi a pozicionálási pontossága, míg ismétlési pontossága néhány szögmásodpercnyi. •
Ciklohajtómővek: jellemzıik a hullámhajtómővekéhez hasonlóak. Hatásfokuk jó, kis beépítési méret mellett nagy áttétel – egy fokozatban megközelítıleg 90 fok – megvalósítására képesek. Tehetetlenségi nyomatékuk kicsi, élettartamuk magas. Az 5. ábrán egy ilyen hajtómő modellje látható.
15
5. ábra: A ciklohajtómő felépítése.
A külsı csapot fogazat fogszáma Z+1, a keréken kialakított cikloisfogazat fogszáma Z. A két fogazat excentricitása miatt, a cikloisfogazat legördül a görgıkön. Mivel a ciklotárcsa fogszáma egyel kisebb, mint a csapot fogazaté, egy körülfordulás alatt 1/Z elfordulást tesz az ellenkezı irányba, ez tehát egyben az áttétele. Haladó – forgó mozgás átalakítást megvalósító hajtómővek Itt a cél a fordulatszám, illetve a nyomatékillesztéssel ellentétben, a mozgás jellegének megváltoztatása. Szokásos megoldásai: Fogasléc - fogaskerék, szalaghajtómő, lánc, forgattyús mechanizmus. Ezekre a hajtómővekre jellemzı, hogy nincs komolyabb teljesítmény-átvitel. Haladó – haladó mozgás átalakítást megvalósító hajtómővek Ék és gördülıvezeték együttese. Nem túl gyakori megoldás. Forgó – haladó mozgás átalakítást megvalósító hajtómővek •
Menetes orsó – anya,
•
Fogaskerék – fogasléc,
•
Szalag.
16
Forgó – haladó – forgó mozgás átalakítást megvalósító hajtómővek Alkalmazásuk célja fıleg a helyszőke okozta problémák kiküszöbölése. Fıleg régebbi konstrukciók jellegzetessége. Lehetséges konstrukciói: •
Menetes orsó – anya – forgattyús mechanizmus,
•
fogaskerék – fogasléc – forgattyús mechanizmus.
Csapágyazás A csukló harmadik fontos egysége a speciális csapágyazás, amelynél az egyik legfontosabb kritérium a szögmerevség, hiszen a robotkar végének pontos pozicionálásához a csuklóknak a saját elfordulási síkjukban kell maradniuk a terhelés gyors változása, a robotkar gyors mozgása közben is. A nagy szögmerevséget keresztgörgıs csapágyazással érik el: ez olyan görgıs csapágy, melyekben a hengeres görgık felváltva egyik, illetve a másik irányban ferdén állnak elıfeszítve. A speciális csapágytípus a nagy terhelhetıség szempontja miatt is szükséges a csuklókban való alkalmazáskor. A szögmerevségnek viszont ára van: ha egy csapágyat két irányban elıfeszítünk, akkor nagyok lesznek a benne keletkezı súrlódási erık, így a hajtómotornak, a teher cipelése mellett, még a veszteségi erıket is le kell gyıznie. A robotkar tehát, 5-6 egymásra épülı speciális precíziós szervóhajtásból áll, melyet a vezérlı tesz egy kompletten mozgó rendszerré. A robotkarban a vázon és a felsorolt csukló részegységeken kívül, az elektromos jeleket – robot I/O, motor jeladók, kamerakábelezés – és tápellátást – motorok, fékek számára – közvetítı elektromos vezetékeket, és a megfogót mozgató pneumatikus kábelezést találjuk általában.
1.4.4. A vezérlı felépítése A vezérlı feladata, hogy az elıbb felsorolt hajtások szabályzásával a bejövı jeleknek és a beprogramozott utasításoknak megfelelıen mozgassa a robotot. Ehhez egyrészt szüksége van a szervók hajtását közvetlenül végzı szervo egységekre, a programot értelmezı és futtató processzorra, és általában a robot tengelymozgásait összehangoló másik mozgató processzorra, mivel a hat tengely mozgásának szabályozott interpolálása speciális és jelentıs számításigényő feladat.
17
A programot futtató processzor általában egy CISC vagy RISC processzor – gyártótól függıen –, míg a mozgató processzor speciális feladatát egy DSP szokta betölteni. A rendszer mőködéséhez természetesen további hardverelemek is szükségesek, mint a belsı vezérlı elektronika egyenáramát elıállító szőrı- és kapcsolóüzemő tápegység, és a robotokra jellemzı vészleállító elektronika, mely a vészkör megszakítása esetén a robotkart feszültségmentesíti. A környezettel való kommunikációt lebonyolító eszközök – 24V I/O, RS232, RS485, Ethernet, Profibus stb. – is szükségesek a robot mőködéséhez, valamint nélkülözhetetlen a motorok háromfázisú tápellátását elıállító inverteregység is, mivel a változtatható nyomaték és sebesség eléréséhez a motorok táplálásának feszültségét vagy frekvenciáját, kapcsoló üzem esetén az energiaimpulzusok kitöltési tényezıjét változtatni kell. Természetesen a vezérlı lelkét képezı, a robot mozgását szabályzó processzor szabályzási algoritmusai meglehetısen bonyolultak, és a gyártók ipari titkai közé tartoznak, hiszen a robotkarba épített hardver mellett ez teszi a robotkart pontossá. A vezérlés bonyolultságát szemléltetendı kiemeljük, hogy a mai modern ipari robotok, miközben egyenes- vagy körinterpolációt végeznek, a vezérlı a hat tengely szabályzása mellett – pozíció interpoláció, sebesség interpoláció, gyorsulás interpoláció – már számol a karra ható gravitáció hatásával – robotpozíció és installálás függı –, és a robotkar gyorsulását és lassulását is képes optimalizálni, amely szintén robotpozíció és installálás függı. A vezérlık természetesen további számítási kapacitástartalékkal is rendelkeznek, ezt jól mutatja, hogy általában két további külsı tengelyt képesek a robotkar tengelyeinek mozgásához interpolálni. Emellett akár képesek a robotkart úgy szabályozni, hogy annak merevsége a mozgatás közben lecsökkenjen egy elıre megadott értékre – például összeszerelési alkalmazások –, hogy a robot például a munkadarab sajátosságainak megfelelıen megvezethetı legyen. Az említett funkciók mellett egyes típusú robotok operációs rendszere például alapkonfigurációban képes az érzékelı nélküli ütközés-felismerésre is. Bekapcsolt ütközésfelismeréskor a rendszer a fent említett számítási feladatok mellett szimulálja a saját mőködését – tengelypozíciók, sebességek, nyomatékok, motoráramok –, és az ütközés elsı pillanatában érzékeli a tényleges és a szimulált rendszer viselkedésének – motor áramfelvétel – eltérését, ennek megfelelıen leállítja a robotot, mielıtt nagyobb kár keletkezne a karban,
18
vagy a környezetében. Ehhez természetesen a szimulált robotkarnak nagyon jól meg kell közelítenie a valós robot mőködését, valamint a szimulációnak valós idejőnek kell lennie. Ez ugyancsak jelentıs számítási kapacitást igényel. A vezérlık mérete nagyon gyártó specifikus, de a miniatürizálás itt is jól tetten érhetı. Míg akár egy-két évtizeddel ezelıtt is ruhásszekrény mérető vezérlıegységek voltak az átlagosak, addig manapság a kisebb robotokhoz – 1-3 kg terhelhetıség – már cipıdoboz mérető vezérlıegységek is elıfordulnak, amelyekbe a korábban említett összes elektronikai egységet képesek belesőríteni.
2. Robotkar építése Ebben a fejezetben egy konkrét humanoid robotkar építésének menete kerül ismertetésre. A robotkar feladata: sakkbábok mozgatása, sakklépések végrehajtása. A feladatkör részletesebben a következı: •
A robot képes legyen elérni a sakktábla legtávolabb esı mezejét,
•
a kijelölt sakkfigurához a környezı bábok drasztikus érintése nélkül férjen hozzá,
•
tudjon megfogni bármilyen alakú sakkfigurát,
•
a bábot függılegesen emelje föl, illetve tegye le,
•
a bábok áthelyezését alkalmas idın belül hajtsa végre,
•
legyen lehetıség a táblán kívüli pozícionálásra! Technikai és anyagi okok miatt megköveteljük, hogy a robot kizárólag elektromos és
mechanikai alkatrészekbıl álljon. Tehát, a meghajtást villanymotorok, az erıtovábbítást pedig, bowden huzalok végezzék! Ezzel a technológiával bár zajosabb, pontatlanabb – de kielégítı pontosságú –, robotot kapunk a hidraulikus változathoz képest, de lényegesen olcsóbb, és az üzemeltetése, karbantartása is egyszerőbb. Hidraulikus rendszereknél gondot jelent a kompresszor és a jól szigetelı dugattyúk gyártása, ugyanakkor ügyelni kell arra is, hogy a folyadékot vezetı csövek ne legyenek rugalmasak, de mégis hajlékonyak legyenek. A hidraulikából bármikor szivároghat, esetleg kifolyhat az olaj, ami komoly gondot okozhat a sakkozó asztalon.
19
A pneumatikus változattal pedig, az a gond, hogy az erıt továbbító anyag légnemő, ami összenyomható, tehát rugalmas. Ez drasztikusan növeli a robot pozícionálási idejét – a célpozíció körüli rugózás miatt –, és csökkenti a pontosságát. A kívánságlistának eleget tevı robotnak három fı komponense lesz: mechanikus robotkar, vezérlı, és a szoftver. A komponenseket egyenként tárgyaljuk.
2.1. Mechanikus robotkar Ebben a részben, a robot mechanikus része – megfogótól az ízületeken át, egészen a vezérlı csatlakozójáig – kerül tárgyalásra. A robotkar mechanikus részének gyártásában nem vettem részt, ugyanis a mechanikai és fémipari kérdések nem tartoznak a szakterületembe, így a szakdolgozatom témája sem foglalkozik mechanikával. Viszont a mechanikus és az elektronikus rész tervezése között volt némi visszacsatolás, emiatt a vezérlı tárgyalása elıtt nagyvonalakban ismertetem a mechanikus karral kapcsolatos fontos tudnivalókat, amelyeket a vezérlı építésekor késıbb fel kell használni. Elsı lépésként rögzítjük, hogy a mechanikának milyen követelményeknek kell eleget tennie, és teszünk némi meggondolást a tervezésre vonatkozóan.
2.1.1. Tervezési meggondolások Mivel szabvány 56 mm2 mezımérettel rendelkezı sakktáblán kell a robotnak mőködnie, ezért nem követelünk meg túl nagy pontosságot. Ugyanakkor, a tábla teljes területe igen nagy – 448 mm2 – továbbá, a robotnak a táblán kívül is kell operálnia – például leütött bábok táblán kívüli elhelyezése –, és figyelembe vesszük, hogy a robotok munkaterülete – mechanikai nehézségek miatt – általában nem közvetlenül a robot mellett kezdıdik, így egy igen hosszú kart kell terveznünk. A kar hosszát célszerően úgy határozzuk meg, hogy a sakktábla átlójának hossza – 634 mm – plusz az a minimális távolság – mechanikától függı, a mi esetünkben ez 200 mm –, ahová a kar még képes nyúlni, és számolunk némi ráhagyást is – 10-20% –. Mindent összevetve kb. 90-100 cm maximális kinyúlási távolságra lesz szükség.
20
A legegyszerőbb az, ha úgy tervezzük a robotot, hogy negyedgömb alakú legyen a munkaterülete. Ennek a negyedgömbnek csak az alsó rétegét – tábla magassága, plusz a bábok emelési magassága, amely összesen megközelítıleg 10-15cm – fogjuk használni, vagyis a maximális kinyúlási távolságot elég, ha csak az alsó rétegben teljesítjük. Ezek alapján, a karnak a talajból kell kiindulnia, tetszıleges magasságra és távolságra – bizonyos korlátokon belül – legyen képes pozícionálni, és tudjon függıleges tengely mentén fordulni. Négy szabadságfokra van szükség. Két szabadságfokot valósít meg a vállízület, és egy-egy szabadságfokot, pedig a könyök- és a csuklóízület. A vállban levı jobbra-balra forgást megtestesítı szabadságfokra a továbbiakban torony-, vagy törzsízület néven fogok hivatkozni. A negyedgömb alakú munkaterület teljes bejárhatóságához a torony-, váll- és könyökízületeknek 180 fokos szögben kell tudniuk mozogni. A csuklóízület a célpozíció megközelítésének irányát befolyásolja – orientáció –, túl nagy szögre nincs szükség, mivel általában függılegesen lefelé nyúlunk a sakkbábokhoz, de a csukló viseli a legkevesebb terhet, a csuklóban van a legkevesebb alkatrész, nem fut át rajta keresztül semmilyen bowden huzal, amely további ízületek felé vezetné a mechanikus erıt, így ebben az ízületben nem jelent gondot a nagy látószög kialakítása. Így a csukló is mozoghat 180 fokos szögben. Az ízületek látószögének meghatározásában szerepet játszik az alkalmazott jeladók látószöge is. Jelenleg minden ízület 180 fokos mozgásteret igényel, az általunk alkalmazott jeladó – amely késıbb az érzékelıknél kerül tárgyalásra – ennél lényegesen többre, 270 fokra is képes, így ez nem fog gondot jelenteni a számunkra.
2.1.2. Mechanikai konstrukció A robotkar tartópillére egy tıkének nevezett szerkezet lesz. A tıke tartalmazza a mechanikus erıket létrehozó motorokat, a szükséges áttételeket, amely a mi esetünkben fogaskerék-áttételbıl és csigamőbıl áll. A csigamő menetes orsóból és vándoranyából épül fel. A motor fogaskerék-áttétel segítségével forgatja az orsót, amely a forgásirány függvényében, nagy mechanikai áttételt tanúsítva húzza, vagy tolja a ráhelyezett vándoranyát. A vándoranyához van erısítve a bowden huzal, amely az ízületek felé továbbítja az erıt.
21
A kar „csontjait” alumíniumból, vagy üvegszálas acélból célszerő készíteni, hogy erıs, de könnyő szerkezetet kapjunk. Tervezés során az egyik fı célunk, a robot súlyának minimalizálása. Emiatt, a hajtómotorokat nem az ízületekben helyezzük el, hanem a robot tıkéjében, ahonnan bowden huzalok vezetik az erıt az ízületekbe. A huzalokat a tıkétıl nem lehet közvetlenül az ízületekbe vezetni. Egyrészt esztétikailag rendkívül csúnya lenne, másrészt nehézségekbe ütközik a huzalok feszességének biztosítása. Például, a csuklót mozgató huzal feszítéséhez szükséges erı behajlított könyök esetén, magára a könyökízületre nehezedne, és megnehezítené, vagy akár lehetetlenné tenné a könyök mozgását. Ugyanakkor nem lenne túl szerencsés, ha egy távoli bábra történı pozícionáláskor, a leereszkedı csuklóhuzal lesöpörné a sakktáblát. Más konstrukciót kell alkalmaznunk! A huzalokat a kar mentén, a tıkétıl a megfogó felé haladva, ízületrıl ízületre kell vezetni. Mivel a váll az elsı ízület, így oda közvetlenül vezethetı a huzal, a könyökbe csak a vállon keresztül, a csuklóba pedig, a tıkétıl elindulva, a vállon átfőzve, a könyökön keresztül történhet a huzalvezetés. Ebbıl következik, hogy az ízületek nem függetlenek egymástól. A törzsízületet kivéve, minden ízület, a mozgásával befolyásolja a megfogó felıli szomszédízületét. Azaz, ha a könyök mozog, mozog a csukló is. Ha a váll mozog, akkor mozog a könyök, melynek következtében mozog a csukló is. Tehát, kialakult az ízületek között egy alárendeltségi sor: váll, könyök, csukló, ahol a váll szerepel a legfelsı pozícióban. Ennek vannak elınyei. A robotnak egy igen szép mozgást kölcsönöz az ízületek ilyen formájú együttmőködése. Például, kikapcsolom a könyök és a csukló motorját, ezt követıen elkezdem a vállízületet nyújtás irányba – lefele, vagy elıre – mozgatni. A váll, ahogy dönti lefelé a kart, úgy nyúlik a könyök is, továbbá a csuklóízület is változtatja a szögét, éppen úgy, hogy a megfogó orientációja a mozgatás elıtti állapothoz képest változatlan maradjon. Tehát, ha a vállmővelet elıtt a megfogó függılegesen lefele nézett, akkor bárhova forgatjuk a vállat, a megfogó mozgás közben is végig lefele fog nézni. Ebbıl az következik, hogy a sakkozáshoz gyakorlatilag nincs szükség csuklómotorra, ugyanis a megfogónak, végig függılegesen lefele kell néznie. A szakdolgozatom hátterében levı robotnak van csuklómotorja amiatt, hogy egyéb mőveletek végrehajtására is képes legyen. Sakkozásban például, a meccs végén a robot, megfogójának vízszintesbe forgatásával, elegánsan lefektetheti a királyt.
22
Érzékelık A robot vezérlıegységének mőködéséhez nélkülözhetetlen a mechanikai oldal felıli támogatás. A vezérlınek szüksége van bizonyos információkra a mechanika állapotáról, akár a környezetrıl is. A mi esetünkben ez utóbbit hanyagoljuk. A sakkbábok elhelyezkedésének meghatározása egy kamera segítségével történik, de ez nem a robot feladatkörébe tartozik. A képfeldolgozáson alapuló gépi látást, a robotsakkozó egy másik komponense valósítja meg. Maradtak a mechanikai állapotot leíró információk. Mikor a vezérlı kap egy parancsot, hogy pozícionáljon be valahova, csak úgy tudja eldönteni, hogy melyik ízület motorját melyik irányba kell forgatnia, ha ismeri az ízületek aktuális szögállását. A szögállás meghatározására forgatható potenciamétert – késıbb potméter – alkalmazunk. Ezek a helyzetérzékelık olcsók, viszont a pontosságuk erısen korlátolt, de számunkra elegendı. A potméter bekötés függvényében változtatható értékő ellenállásként, vagy változtatható arányú feszültségosztóként mőködik. A roboton feszültségosztóként alkalmazzuk a potmétereket. Ezeknek az eszközöknek lényeges tulajdonsága, a teljes vagy maximális ellenállás, amelynek értékét nem egyszerő meghatározni. Ha túl nagy értéket választunk, akkor túl kicsi lesz a rajta átfolyó áram, és összemérhetıvé válik a környezetbıl származó elektromágneses zajokkal, pontatlanná és bizonytalanná téve a robot pozíciótartását. A maximális ellenállás értékének alsó korlátját a potméterhez kapcsolódó áramkörök szabják meg. Ez a kérdés részletesebben a vezérlı címő résznél kerül tárgyalásra. A potmétereket az ízületek forgástengelyéhez, kotyogásmentes áttétellel kell illeszteni. Azaz, ha fordul az ízület, vele együtt azonnal forduljon a potméter tengelye is. Kotyogás alatt, a mechanikai rendszer alkatrészei között, irányváltáskor fellépı holtjátékot értjük. Ha az ízület tengelye, és a potméter tengelye között holtjáték alakul ki, akkor a potméter, az ízület mozgásának, a holtjáték ideje alá esı szakaszát nem tudja érzékelni. Tehát, eltérés keletkezik a valós, és az érzékelt ízületi pozíció között. Többszöri irányváltás esetén a hiba nem halmozódik. Újabb irányváltás esetén, az elızı hibával megközelítıleg azonos nagyságú, de ellentétes irányú érzékelési hiba keletkezik, amely kioltja azt. A jelenség ennek ellenére, drasztikusan csökkentheti a pozícionálási pontosságot, és a pozíciótartás képességét is. Ahogy a hajtómőveknél említettük, a kotyogásmentes áttétel biztos, hogy nem súrlódásmentes, így a hajtómotornak erısnek kell lennie.
23
Hajtómotorok Az irodalmi áttekintésben számos motorfajtával ismerkedhettünk meg, de számunkra a legalkalmasabb a kefés motor lesz. Rendkívül pontatlanok, de a vezérlésük egyszerő, olcsók, erısek, és nagyfordulatszámúak. A sakkozó robotnak nem kell századmilliméter pontossággal pozícionálnia, viszont gyorsnak kell lennie, hogy a sakkjátszma során ne azzal töltsük az idınket, hogy nézzük, ahogy a robot végrehajtja a lépéseket, hanem élvezhetı legyen a játék. A kefés motor pontatlansága abban nyilvánul meg, hogy semmilyen visszajelzést nem ad arra vonatkozóan, hogy mennyit fordult a tengelye. Ezt a korábban említett helyzetérzékelık segítségével kompenzáljuk. További pontatlanságra adhat okot az, hogy a kefés motor a saját lendülete miatt, nem képes azonnal megállni. A feszültség lekapcsolását követıen pár fordulatot még megtesz a tengelye. A túlpörgést mágnesfékekkel akadályozzuk meg. A mágnesféket egy rugóval megfeszített elektromágnes mőködteti, melyet párhuzamosan kötünk a motorral. Ha a motor áramot kap, akkor az elektromágnes behúz, ezzel kioldja a féket, és a motor szabadon foroghat. Ha lekapcsoljuk a motorról az áramot, akkor ezzel kikapcsoljuk az elektromágnest is, melynek következtében a fék rugója zárja a féket. Természetesen, a rugónak is van némi reakcióideje, de ez nagyságrendekkel rövidebb, mint a motor túlpörgési ideje. A mágnesfék reakcióidejét erısebb rugó, és nagyobb teljesítményő elektromágnes alkalmazásával tudjuk csökkenteni, ha szükséges. Tehát, a robotban a mechanikai erık létrehozására, szénkefés villanymotorokat használunk, melyek tengelyére, a túlpörgés csökkentése érdekében, felszerelünk egy-egy elektromos mágnesféket. Végállás kapcsolók A mechanika mozgástere véges. Vannak olyan pozíciók, amelyek nem, vagy komoly meghibásodás árán érhetıek el. Az ilyen szituációk kiküszöbölésére, el kell helyezni a karon olyan kapcsolókat, melyek a mechanika jól definiált végállásaiban aktiválódnak – például, a menetes orsón mozgó vándoranya útjában elhelyezett mikrokapcsoló –, megszakítva a véghelyzetet elıidézı motor áramkörét.
24
Kábelezés Az érzékelık elektromos jelét szállító vezetékeket hajlékony szalagkábel formájában célszerő kivitelezni amelyet, a kart alkotó zártszelvény falához ragasztunk. A szalagkábel végigfut a karon, a tıkétıl egészen a megfogóig, és az egyes érzékelıknél a szalagból ki vannak hasítva a neki megfeleltetett erek. A szalagkábelt a zajok csökkentése és a pontosság növelése érdekében árnyékolni kell. A szalag egyik oldalát már árnyékolja a zártszelvény, a másik oldalára pedig, derékszögben meghajlított alumíniumlapot erısítünk. A szalagkábel a tıkébe fut be, tıkén belül pedig, a vezérlı kábelét fogadó csatlakozóra van forrasztva. A robotkar megfogójának motorja a megfogóba van beépítve, így ennek a motornak is biztosítani kell egy érpárt. Ezt az érpárt érdemes az érzékelık szalagkábelétıl külön árnyékolva szerelni, bár a mi esetünkben ez nem így történt. A megfogó tápellátását biztosító érpár az említett szalagkábel része. Mőszeres méréseim szerint, kis mértékő zaj keletkezik az érzékelık vezetékeiben, ha áram alatt van a megfogó. A gyakorlatban ennek a jelenségnek csak a megfogó teljesen kinyitott állapotában van látványos hatása: apró eltérés keletkezik a valós és az érzékelt pozíció között. Ha a maximálistól egy egységnyivel kisebb átmérıre nyitjuk a megfogót, akkor már nincs pozícionálási hiba. A többi ízületet mozgató motorkészlet a tıkében helyezkedik el, így az azok kábelezése egyszerő feladat. A robotnak célszerően, pontosan egy csatlakozóval kell rendelkeznie, amely egy csoportba rendezi az érzékelık jelét szállító vezetékeket, a motorok áramellátását szolgáló vezetékeket, és egyéb technikai, például földelı és árnyékoló vezetékeket. A csatlakozó a külsı zajokkal szemben árnyékolt, de csatlakozón belül nincs biztosítva az erek közti áthallást fékezı árnyékolás. Különösen, a nagyáramú vezetékek – például motorvezetékek – elektromágneses sugárzása okozhat problémát. A motor indítása és leállítása esetén, valamint a motor mőködése közben, a szénkeféken keletkezı apró elektromos ívkisülések következtében, nagymértékő áramerıség ingadozás lép föl a motor vezetékein, erıs elektromágneses impulzusokat gerjesztve, amelyek elektromos impulzusok formájában megjelennek a csatlakozó többi vezetékén, köztük az érzékelık vezetékein is. Ez a jelenség analóg rendszerő helyzetadók esetén, komoly érzékelési anomáliákat okozhat. Sajnos, az általunk alkalmazott potméterek is analóg helyzetadók.
25
2.1.3. Elektromossági meggondolások Az áthallás jelenségére nézzünk egy példát! A vállízület motorja viseli a legnagyobb terhet, így annak megindításához nagy energia szükséges. Az indításkor, a motor vezetékében ütésszerően megjelenı erısáram egy elektromágneses impulzust gerjesztve, egy tőimpulzust hoz létre a környezı gyengeáramú – érzékelı – vezetékeken. A tőimpulzust a vezérlı úgy értelmezi, mintha a robot ízületei egy pillanatra átkerültek volna egy másik – a jelenlegitıl nagymértékben eltérı – pozícióba, és erre reagálva, ki is adja az ízületek motorjainak a pozíció visszaállításához szükséges forgásirányt. Ezáltal újabb – feltehetıen ellentétes irányú – motorindítások sorozata következik be, amely további elektromágneses impulzusokkal, és az érzékelık vezetékein megjelenı tőimpulzusokkal jár. Ez a folyamat végtelenségig ismétlıdhet, miközben a robot motorjai, véletlenszerően oda-vissza rángatják a tengelyüket, és a pozícionálás akár teljesen lehetetlenné válhat. A jelenség mechanikai károkat is okozhat. A zajok csökkentésre a következı módszereket lehet alkalmazni: •
A motor kapcsaira közvetlenül csatolunk egy kis értékő – 1 nf – kondenzátort,
•
gondoskodunk róla, hogy a motor indításakor ne tudjon ütésszerően nagy áramot felvenni, illetve leállításkor fokozatosan vegyük el tıle az energiát,
•
nagyáramú és gyengeáramú vezetékeket egymástól elszigetelten, külön árnyékoljuk,
•
esetleg külön csatlakozóra szereljük. A valóságban az elsı két szempontnak tettünk eleget, a nagy- és gyengeáramú
vezetékek elkülönítése a mechanika jellegébıl adódóan megoldott, ugyanis a motorvezetékek a tökében vannak, míg az érzékelı vezetékek a karon futnak végig. Csatlakozónak egy DB-25 típusú szabvány kétsoros 25 pólusú csatlakozót választottunk, amely biztosítja a külsı árnyékolást, de az erek közti belsı árnyékolást nem. Külön csatlakozóra nem volt szükség, az áthallást sikerült a megengedett legnagyobb szint alá csökkenteni. A robotot a vezérlıvel összekötı kábel, egy egyenes kötéső, árnyékolt, sodrott kivitelő – hosszirány mentén összecsavart –, legfeljebb 2 méter hosszúságú kábel lehet. A kábel burkolatán belül, az erek külön árnyékolása nem szükséges. A sodrásnak köszönhetıen az áthallás mértéke csekély.
26
Tapasztalataim szerint, a kábel külsı árnyékolása jelentıs szerepet játszik. A kábel két végén levı csatlakozókat két-két csavarral lehet rögzíteni a robothoz, illetve a vezérlıhöz. Az árnyékolás elvileg már akkor létrejön, mikor a kábelt becsatlakoztatjuk, de a robot mozgása mégis bizonytalan mindaddig, amíg a csavarokat meg nem húzzuk.
2.2. Vezérlıegység Ebben a részben, egy olyan eszköz szerkezeti felépítése kerül tárgyalásra, amely a robotnak, a mechanikán kívüli hardveres részét képezi. Egyszerre kapcsolódik a robotkarhoz és a számítógéphez. A számítógéptıl várja az utasításokat, állandó idıközönként értelmezi az érzékelıkrıl érkezı jeleket, döntést hoz arra vonatkozóan, hogy a kívánt célpozíció beállítása érdekében, melyik ízület motorját kell bekapcsolni, merre kell forgatni a tengelyét, illetve melyik motort kell leállítani. Ennek megfelelıen, az egyes motorokra rákapcsolja a megfelelı irányú feszültséget, illetve a leállítandó motorokról lekapcsolja. A döntés eredményét visszajelzésként közli a számítógéppel. Ezekbıl az adatokból a számítógépen futó szoftver egyértelmően meg tudja állapítani, hogy a robot, mozgásban van-e, továbbá következtetni tud az esetleges mechanikai és elektromos meghibásodásból eredı mozgási hibákra. Például, ha az egyik ízület már túl régóta mozog, az jelentheti azt, hogy a motor meghibásodott, beakadt az ízület, vagy esetleg a vezérlıben lépett föl üzemzavar. A vezérlınek fel kell ismernie, ha nem a hozzá tartozó szoftver fut azon a gépen, amelyhez csatlakozik, a géptıl érkezı utasítást nem a robotvezérlı szoftvere adta ki, vagy az utasítás szintaktikai szempontból helytelen. Bármelyik eset elıfordulásában, a vezérlı figyelmen kívül hagyja az utasítást. A késıbbiekben, ezt a mechanizmust fogjuk szoftverhitelesítésnek nevezni, amelynek elvégzése, a vezérlıben, az eddig felsorolt feladatokat is ellátó, központi feldolgozó panelen elhelyezett szoftverhitelesítı egység feladata lesz. Szintén a vezérlı részét képezi az az áramköri egység – késıbb motormeghajtó –, amely a döntés alapján, nagyteljesítményő kapcsolóáramkörök segítségével, indítja és leállítja a motorokat. Ennek az egységnek kell gondoskodnia a zajcsökkentésrıl is, a mechanikai részben említett módszer alkalmazásával, amely a motor növekvı feszültséggel történı indítását, és csökkenı feszültséggel történı leállítását foglalja magában. A szénkefés villanymotorokra jellemzı, hogy mőködésük közben a kommutátoron apró ívkisülések keletkeznek,
27
leállításuk pillatanában pedig, a motor tekercsei körül, a még mőködése közben gerjesztett mágneses fluxus, elektromos energiává alakul vissza, amely erıs induktívlökésekkel jár. Ezek a jelenségek igen nagy feszültségő – a motor meghajtására használt feszültségszintnek akár több tízszerese is lehet – elektromos impulzusok formájában jelennek meg a motor kapcsain, amelyet a motor vezetékei egyenesen a motormeghajtóba vezetnek vissza. A motormeghajtónak védekeznie kell az ilyen impulzusokkal szemben. A vezérlıben a parancsvégrehajtón, és a motormeghajtón kívül egyéb áramköri egységek is szerepelnek. A vezérlı ismétlıdı tevékenységet végez, ezért szüksége van egy órajelre, amely a parancsvégrehajtás és az egyéb tevékenységek ütemezését szolgálja. Késıbb látni fogjuk, hogy a vezérlı az ízületek szögállásának meghatározását négyszögjelek impulzushosszának mérésével végzi, azaz idıt mér. Szükség van egy idıalapra, amely rögzíti, hogy egy idıegység a valóságban milyen hosszú idınek felel meg. Az idıalapot szintén egy rögzített periódusidejő órajel fogja biztosítani, amely származtatható a parancsvégrehajtást ütemezı órajelbıl is. Ahhoz, hogy négyszögjelek impulzushosszát tudjuk mérni, valahogyan elı is kell állítani ezeket a négyszögjeleket. Az elıállítás módszerét késıbb tárgyaljuk. Mindent összevetve, a vezérlıbe kell egy olyan részegység, amely órajelet, referencia jelet, és egyéb négyszögjeleket szolgáltat. Erre a részegységre késıbb oszcillációs panelként fogok hivatkozni. A vezérlı építése során úgy határoztam, hogy a megfogónak legyen külön vezérlıpanelje, amelyet egy alkalmas illesztési felületen csatlakoztatunk a robotvezérlıhöz. Ez az elhatározás részben azért született, hogy ne legyen rögzített a megfogó típusa, és igény szerint lehessen másfajta megfogót, vagy egyéb eszközt szerelni a csuklóra. Másrészt pedig, a rendelkezésemre álló alkatrészek kínálta lehetıségek alapján, a vezérlı logikai áramköreit és kombinációs hálózatát, négy ízület vezérlésére volt a legegyszerőbb kialakítani. A megfogó, mint esetleges ötödik ízület, csak abban az esetben fért volna bele, ha nyolc ízület meghajtására alkalmas architektúrát fejlesztünk ki. A nyolcízületes változat kifejlesztése több idıt és áramköri elemet vett volna igénybe, mint a négyízületes vezérlıáramkör és a megfogó panel együtt véve.
28
A leírtak alapján négy részegységet számolhattunk össze, amelyek a robot teljes vezérlıegységét együttesen képezik. A részegységek tehát, a következık: •
Oszcillációs panel,
•
motormeghajtó panel,
•
központi feldolgozó panel,
•
megfogó vezérlı panel. A panelek felírásának sorrendje bonyolultság szerint növekvı. Gyártáskor nem
szükséges feltétlenül ezt a sorrendet követni, ugyanis az egyes részegységek között felléphetnek bizonyos visszacsatolások a tervezés során. Az én esetemben például, a központi feldolgozó panel gyártása után derült ki, hogy az eredetileg tervezett 1mhz-es alap-órajel frekvenciáját meg kell duplázni. A dolgozatomban a részegységek tárgyalását a legegyszerőbbel kezdem.
2.2.1. Oszcillációs panel Ahhoz, hogy egy összetett kombinációs hálózat, vagy szekvenciális áramkör – például, mikroprocesszor – mőködni tudjon, valamilyen ütemet kell neki diktálni, hogy milyen idıközönként hajtson végre egy-egy lépést, azaz szükség van egy lehetıleg állandó frekvenciájú órajelre – késıbb alap-órajel –. Ennek az órajelnek az elıállítása lesz az oszcillációs panel egyik fı feladata. A késıbbiekben majd kiderül, hogy a vezérlınek egyéb órajelekre is szüksége lesz, melyeket szintén az oszcillációs panel szolgáltat. Lássuk a panel áramköreinek megépítéséhez szükséges elektronikai ismereteket! 2.2.1.1. Az oszcillátor Oszcilláció magyarul rezgéskeltést jelent. [1] Az oszcillátorok vagy rezgéskeltık olyan elektronikus áramkörök, amelyek egyenáramú tápenergiát felhasználva, csillapítatlan periodikus elektromos feszültséget vagy áramot állítanak elı. Az elıállított periodikus jel vagy rezgés alakja lehet: •
nem szinuszos, összetett, nagy felharmonikus tartalmú jel;
•
szinuszos idıbeli lefolyású.
29
A szinuszos elektromos rezgéseket elıállító áramköröket harmonikus, vagy szinuszos oszcillátoroknak nevezzük. Bármilyen oszcillátornál szükség van egy frekvencia meghatározó elemre, amely megszabja az elıállított rezgés frekvenciáját, és a frekvencia idıbeli stabilitását. Ha egy feltöltött kondenzátor energiája egy induktivitáson keresztül kisül – LC rezgıkör –, csillapított elektromos rezgések keletkeznek. A rezgıkör energiatartalma a veszteségek következtében folyamatosan csökken. A rezgések fenntartása – vagyis, csillapítatlan rezgések elıállítása – csak úgy lehetséges, ha a rezgıkör egy aktív elektronikus elem áramkörébe kerül, amely képes a veszteségek kompenzálására. [1] A digitális technikában az órajel négyszög alakú csillapítatlan impulzusok sorozatát jelenti, tehát négyszöggenerátorokkal kell dolgoznunk, amelyek a nem szinuszos oszcillátorok körébe tartoznak. Az alap-órajelnek tehát, négyszög alakúnak, és stabil frekvenciájúnak kell lennie. Olcsó anyagi kereteken belül, a legstabilabb frekvenciát a kvarcoszcillátorok szolgáltatják. Kvarc vezérelt oszcillátor Kvarcoszcillátort építeni a korábban említett LC rezgıkör bıvítésével lehet. LC rezgıkörnek, vagy LC oszcillátornak azokat az oszcillátorokat nevezzük, amelyeknél frekvencia meghatározó elemként induktivitásokat – tekercseket – és kondenzátorokat használunk. A tekercsek és a kondenzátorok vagy soros, vagy párhuzamos rezgıkört alkotnak, amelyet az oszcillátor elıírt mőködési frekvenciáján kell rezonanciára hangolni. Az LC oszcillátorok lehetnek kristályvezérlésőek is. Ez azt jelenti, hogy a mőködési frekvencia beállítására rezgıkristály alkalmazható, és az oszcillátor kimenetének a pontos frekvenciára való beállítására hangolható LC rezgıkört lehet használni.[1] A kvarcoszcillátor frekvencia meghatározó elemként egy kvarckristályt használ. A kvarckristály vagy rezgıkvarc – piezoelektromos kristály – nagyon jó frekvencia meghatározó elem, mivel minden kvarcnak van egy „veleszületett” sajátfrekvenciája. Ez a méreteitıl, és a kristály irányítottságától függ. Frekvencia tekintetében nagyon széles a választék a kvarckristályok piacán, de ha mégse találnánk olyat, mint amilyenre szükségünk
30
van, akkor a gyártótól tetszıleges frekvenciájú kvarckristály rendelhetı. Ha a kvarcra olyan váltakozó feszültséget kapcsolunk, amelynek frekvenciája megegyezik a kvarc sajátfrekvenciájával, akkor a kvarc, rezgésbe jön. A rezgés oka a piezoelektromos hatás. A kvarc a rezgıkörhöz hasonló viselkedést mutat – induktivitás és kapacitás –, a rezgések frekvenciája azonban igen stabil. [3] Négyszögjel generátor Eljutottunk oda, hogy van egy rendkívül nagy frekvenciastabilitású oszcillátorunk, azonban ez az oszcillátor szinuszos. Szükségünk lesz egy jelátalakító áramkörre. Szinuszból négyszögjel kialakításának legegyszerőbb módja az, ha rögzítünk egy küszöbfeszültséget, amely feszültségnek egyeznie kell azzal a szinttel, amely körül a szinusz „hullámzik”, vagyis a szinuszosan váltakozó feszültség középértékével. A négyszöggenerátor összehasonlítja a szinusz feszültség pillanatnyi értékét, a küszöbfeszültséggel. Ha a szinusz a küszöb fölött van, akkor logikai magas szintet kapcsol a kimenetére, ha a szinusz a küszöbön van, vagy az alá esik, akkor logikai alacsony szintet szolgáltat a kimenetén. Ez a gyakorlatban sajnos nem mőködik. Ugyanis, az elektromágneses zajok mindenhol jelen vannak, még a legjobban árnyékolt laboratóriumi helyiségekben is. Zajt maguk az elektronikus alkatrészek is termelhetnek. Tehát, zaj kerül a küszöbfeszültséget szolgáltató referenciajelre is, és zaj kerül a szinuszra is. Ebbıl kifolyólag, ha a szinusz, a jelenlegi fázisában épp a küszöbfeszültség közelében jár, azaz kisebb a feszültségkülönbség, mint az összehasonlítandó jeleken levı zajok amplitúdójának összege, akkor az összehasonlítás eredménye a zajok hatására véletlenszerően váltakozik, így azt mondjuk, hogy az eredmény határozatlan. Az elıbbi jelenség elkerülése végett, két küszöböt rögzítünk. Egy alsó, és egy felsı küszöbszintet, melyekkel kijelölünk egy holtsávot. A holtsáv szélességének némi ráhagyással nagyobbnak kell lennie, mint a zajok amplitúdójának összege. A négyszöggenerátor a bejövı szinusz jel pillanatnyi feszültségét mindkét küszöbbel összehasonlítja. Ha a szinusz feszültsége kisebb, mint az alsó küszöb, akkor a kimeneten logikai alacsony szint jelenik meg, ha a szinusz feszültsége nagyobb, mint a felsı küszöb, akkor a kimeneten logikai magas szint jelenik meg. Egyébként, a négyszöggenerátor kimenetének feszültségszintje változatlan marad.
31
A digitális technikában Schmitt-trigger néven vált ismeretessé az ilyen jelátalakítást végzı áramkör. A Schmitt-trigger olyan bistabil multivibrátor, melynek kimenı jele a bemenı jel amplitúdójának nagyságától függ. A kimenı jel két diszkrét értéket vehet fel – melynek értékei áramköri elemektıl függıek – miközben a bemeneti jel két érték között – például -3V és +3V – folyamatosan változik. A két diszkrét érték közötti átmenet elvileg végtelen gyors, ugrásszerő.[2] A bistabil multivibrátor olyan áramkör, amely két stabil állapottal rendelkezik. Az egyik állapotát ha felvette, tetszıleges ideig megtartja. Ezen állapotát csak külsı jel hatására változtatja meg. [2] A kvarcoszcillátor és a Schmitt-trigger megfelelı összekapcsolásával, egy stabil frekvenciájú négyszög órajel generátort kapunk, amely az alap-órajelet fogja szolgáltatni a vezérlı számára. Az oszcillációs panelen ez az áramkör fogja alkotni az egész vezérlıegység „szívét”. Egyéb jelgenerátorok az oszcillációs panelen További jelgenerátorokra is szükségünk lesz. Késıbb a megfogót vezérlı panel tárgyalásakor kiderül, hogy annak a panelnek is szüksége van egy stabil frekvenciájú órajelre, de lényegesen alacsonyabb frekvenciájút igényel. Esetleg építhetünk másik kvarcvezérelt négyszög generátort, de olcsóbb és egyszerőbb, ha a már meglévı nagy frekvenciájú kvarcoszcillátorunk órajelébıl származtatjuk az alacsonyabb frekvenciájú órajelet, egy frekvenciaosztó segítségével. A frekvenciaosztó és egyéb digitális eszközök tárgyalása elıtt nem árt tisztáznunk pár fogalmat. Egy négyszög alakú impulzus két részbıl áll: van logikailag magas „H” szintő szakasza, és a közvetlenül utána következı logikailag alacsony „L” szintő szakasza. Az egyes szakaszokat jelátmenetek választják el egymástól. Amikor az impulzus a magas szintrıl végtelen nagy sebességgel átvált alacsony szintre, akkor magas-alacsony, vagy H-L átmenetrıl beszélünk, mikor alacsony szintrıl magas szintre történik jelváltás, azt az eseményt, pedig alacsony-magas, vagy L-H átmenetnek nevezzük.
32
A digitális áramkörök az egymással történı kommunikáció során, valamint a bemeneteiken, és a kimeneteiken is, két diszkrét értéket különböztetnek meg: 0 és 1. Ezeket az értékeket valamilyen formában leképezik elektromos jelekre, amely leképezés eltérı lehet a különbözı technológián alapuló digitális áramkörök között. A leképezés során a két értéknek egy-egy jól megkülönböztethetı feszültségszintet feleltetünk meg, általában a 0-hoz rendeljük az alacsonyabbat és 1-hez a magasabbat. Így a késıbbiekben, a két diszkrét értékre helyenként hivatkozhatok 0 esetén logikai alacsony vagy „L” szintként, 1-es érték esetén pedig, logikai magas vagy „H” szintként is. Kitöltési tényezı: az impulzus magas szintő szakaszának hossza osztva az impulzus teljes hosszával. Az órajel, a digitális áramkörök számára feldolgozhatóság szempontjából akkor a legjobb, ha a kitöltési tényezı 50%, vagyis az impulzus magas és alacsony szintő szakaszának hossza azonos. Ilyen kitöltési tényezı mellett a legkisebb annak az esélye, hogy az órajelet fogadó áramkörök eltévesszenek egy-egy impulzust. 2.2.1.2. Frekvenciaosztó A frekvenciaosztó feladata az, hogy a kimenetén jelátmenetet produkáljon a bemenetre érkezı minden N-edik rögzített irányú jelátmenet után, ahol az N az osztó. Tetszıleges osztási arányú frekvenciaosztót nullázható számlálóregiszter – más néven bináris számláló –, bináris komparátor és bistabil multivibrátor segítségével építhetünk. A bináris számláló olyan impulzusszámláló, amelynek a bemenetére adott impulzusok száma binárisan kódolt alakban jelenik meg a kimeneten. A számláló valamilyen irányú – általában H-L – jelátmenet hatására léptet. A nullázható tulajdonság annyit jelent számlálók esetén, hogy van egy olyan vezérlı bemenete a számlálóegységnek, amelyen egy bizonyos logikai szintet vagy jelátmenetet képezve, a regisztert nullázásra utasíthatunk. [4] A bináris komparátor pedig, két kettes számrendszerbeli – késıbb bináris – számot hasonlít össze. Van neki két darab n pólusú bemenete, amelyeken fogadja a két összehasonlítandó n bites – vagy n számjegyő – bináris számot, és van egy vagy több kimenete, amelyeken az összehasonlítás eredményét adja ki. Általában három kimenetük van a komparátoroknak: kisebb, egyenlı, nagyobb. Amelyik állítás igaz, az annak megfelelı kimenetet logikai magas szintre, a többi kimenetet pedig, logikai alacsony szintre állítja. [4]
33
A komparátoros frekvenciaosztóban, a számlálóregiszter fogadja az osztandó órajelet, és folyamatosan számlálja az impulzusokat. A regiszter kimenetét – amelyen folyamatosan látható a számlálóban tárolt aktuális érték –, rákapcsoljuk a komparátor elsı bemenetére, a második bemenetére pedig, a frekvenciaosztáskor használatos osztó értékét vezetjük be fixen. A komparátor egyenlıség kimenetét rá kell kapcsolni a számláló nullázó – reset – bemenetére, hogy amikor elértük az N-edik impulzusszámot elölrıl kezdje az impulzusszámlálást, ugyanakkor rá kell kapcsolni a bistabil multivibrátor vezérlı bemenetére is, hogy az N-edik impulzus beérkezése pillanatában, a multivibrátor megváltoztassa a kimenetén levı jel logikai szintjét. A bistabil multivibrátor kimenete szolgáltatja a leosztott frekvenciájú órajelet. A megfogót vezérlı panelnek egy stabil, az alap-órajeltıl alacsonyabb frekvenciájú órajel szükséges, viszont nincs szigorú megszorítás arra vonatkozóan, hogy mennyire kell leosztani az alap-órajelet. Számunkra elegendı, ha kettı valamelyik hatványát választjuk osztónak. Bináris frekvenciaosztó A korábban említett számlálóregiszter, ha rendelkezik olyan kimenetekkel, amelyeken a regiszterben levı aktuális érték bitjei – számjegyei – jelennek meg, akkor az az áramkör nem más, mint egy kettı hatványaival osztó frekvenciaosztó. Az ilyen áramkört nevezhetjük bináris frekvenciaosztónak is. Mivel, a számlálóregiszter kettes számrendszerben számol, így az elsı számjegy kimenetén minden második, a második kimeneten minden negyedik, a harmadik kimeneten minden nyolcadik stb. óraimpulzus hatására változik meg a jel logikai szintje. Vagyis, az elsı kimeneten, a bemeneti órajel frekvenciájának pontosan a fele, a második kimenetén a negyede, harmadik kimenetén a nyolcada jelenik meg, és így tovább. Ennek a regiszternek nem szükséges nullázhatónak lennie. A TTL digitális integrált áramkörcsaládban SN 7493N típusszámmal szerepel a 4 bites számlálóregiszter. [4] Ezzel a 14 pólusú integrált áramkörrel egy olyan frekvenciaosztót kapunk, amely egyszerre szolgáltatja nekünk a bemenetére kapcsolt órajel frekvenciájának, 2vel, 4-gyel, 8-cal, és 16-tal osztott frekvenciájú órajelet. Az oszcillációs panelen egy ilyen számlálóregiszter beiktatásával, az alap-órajel generátorral azt összekötve, máris négy újabb négyszöggenerátort kaptunk.
34
Az említett TTL – tranzisztor-tranzisztor logika – technológián alapuló digitális integrált áramkörök jelentısége a központi feldolgozópanel építésekor válik nyilvánvalóvá. A frekvenciaosztót nem kell feltétlenül TTL áramkörökkel készíteni, de mivel a robotban számos ilyen áramkört fogunk használni, és ez az áramkörcsalád tartalmaz frekvenciaosztásra is alkalmas elemeket, emiatt esett a választás ennél a részegységnél is a TTL-re. A TTL technológia részletes ismertetésére, a központi feldolgozó panelnél kerül sor. 2.2.1.3. Érzékelıkkel kapcsolatos jelgenerátorok Késıbb azt is látni fogjuk, hogy a vezérlı az ízületi szögállások meghatározását, az érzékelık által szolgáltatott jelek alapján elıállított négyszögjelek impulzushosszának mérésével végzi. Mint említettem, az érzékelık analóg potméterek, amelyek a szögállás függvényében
valamilyen
feszültségszintet
szolgáltatnak.
Olyan
jelgenerátorra
van
szükségünk, amely ennek a feszültségnek a függvényében szabályozott hosszúságú négyszögjelet állít elı. Ahhoz, hogy ezt a négyszögjelet a lehetı legpontosabban tudjuk megmérni, az idımérı áramkört az impulzussal egyszerre kell indítani, vagyis szükség van szinkronizációra. Vagy az idımérı áramkör igazodik a négyszöggenerátorhoz, vagy a négyszöggenerátor olyan, hogy „vezényszóra” indítható. Az utóbbit célszerő alkalmazni. Vezérlıjelre indítható négyszöggenerátor monostabil multivibrátor néven ismeretes. A monostabil multivibrátor olyan áramkör, amely egy stabil állapottal rendelkezik. Külsı jel hatására átbillen a másik – nem stabil – állapotába, azt meghatározott ideig tartja, majd visszabillen az eredeti – stabil – állapotába. [2] A monostabil multivibrátorban a nem stabil állapot tartási idejét egy feszültségosztó és egy kondenzátor határozza meg. Ezt a feszültségosztót fogjuk az érzékelıvel, mint szögállás függvényében változó osztási arányú feszültségosztóval helyettesíteni. Az így kapott érzékelıbıl és monostabil multivibrátorból álló áramkör, egy külsı jellel indítható négyszöggenerátor, amely az adott ízület szögállásával arányos hosszúságú impulzust állít elı. Minden ízülethez, és a megfogóhoz is szükséges egy ilyen áramkör. Jó minıségő monostabil multivibrátort olcsó anyagi kereteken belül, az NE555 típusú idızítı integrált áramkörrel könnyen építhetünk. [7]
35
2.2.1.4. Az oszcillációs panel megépítése Eljutottunk oda, hogy végre megépítsük az oszcillációs panelünket. Szükségünk van tehát, egy alap-órajel generátorra, egy kisebb frekvenciájú órajel generátorra, és a megfogóval együtt minden ízületre egy-egy monostabil multivibrátorra. Így, az oszcillációs panelen szereplı áramkörök: •
Stabil frekvenciájú kvarcvezérelt négyszögjel generátor,
•
frekvenciaosztóval megvalósított négyszögjel generátor,
•
törzsízületi monostabil multivibrátor,
•
vállízületi monostabil multivibrátor,
•
könyökízületi monostabil multivibrátor,
•
csuklóízületi monostabil multivibrátor,
•
megfogóhoz tartozó monostabil multivibrátor. A panelen legyenek kivezetve a tápenergia ellátást szolgáló csatlakozók, a monostabil
multivibrátorok indítóbemenetei, és valamennyi jelgenerátor kimenete is! Mivel, az oszcillátorok belül analóg rendszerőek, emiatt zajérzékenyek, és rendkívül fontos számunkra a frekvenciastabilitás, így javallott egy árnyékoló fémburkolat készítése a panel számára.
2.2.2. Motormeghajtó panel A vezérlıegység mikor döntést hoz arra vonatkozóan, hogy melyik motort kell bekapcsolni, és melyik irányba kell forgatni a tengelyét, ezeket az információkat vezérlıjelek, jelen esetben TTL szintő vezérlıjelek formájában prezentálja számunkra. A TTL szintő jel 0V és 5V között váltakozó feszültségő, általában legfeljebb 10mA áramerıséggel terhelhetı elektromos jel. [5] 5V feszültségen 10mA áramerısség, 5V*0.01mA = 0.05 W teljesítményt képvisel, amely rendkívül kevés egy villanymotor mőködtetéséhez, viszont elegendı teljesítmény valamilyen kapcsolóáramkör vezérléséhez. Kapcsolóáramkör vagy meghajtó fokozat feladata: külsı vezérlıjel hatására, a vezérlıjel teljesítményéhez képest nagyságrendekkel nagyobb teljesítményő elektromos áram kapcsolása. A motormeghajtó panel ilyen kapcsolóáramköröket fog tartalmazni.
36
2.2.2.1. Teljesítménymeghajtó fokozat A teljesítménykapcsolást több úton is megvalósíthatjuk. Legegyszerőbb módja, a mágnes kapcsoló – más néven relé – használata. A relében találhatunk nyitó, illetve záró érintkezıket, amelyeket egy elektromágnes nyit, illetve zár, abban az esetben, ha a tekercsére áramot kapcsolunk. Ebbıl következik, hogy a relében egy elektromágnes is megtalálható. Ennek a mágnesnek a tekercse lényegesen kisebb teljesítményt vesz föl, mint amennyit az érintkezık kapcsolni képesek. A relé tekercse bár kisteljesítményő, de általában a TTL szintő jel energiája nem elegendı az elektromágnes mőködésbe hozásához. Szükséges egy kapcsolóüzemben használt tranzisztor beiktatása, amely a bázisán – ami a tranzisztor, mint kapcsolóelem vezérlıbemenete – rendkívül kicsi teljesítményt felvéve, ennek több százszorosát kapcsolja a relé tekercsére. Tehát, a TTL áramkör vezérli a tranzisztort, a tranzisztor vezérli a relét, a relé pedig, a motort. A relé nagy teljesítménykapcsoló képessége mellett, két súlyos negatív tulajdonsággal is rendelkezik. Reakció ideje század-, vagy akár tizedmásodpercekben is mérhetı, tehát lassan reagál a vezérlésre, amely a motor megállításakor az ízület túlmozdulását okozhatja. Másik rossz tulajdonsága a zaj. Mivel mechanikus szerkezető kapcsoló, így mőködése közben kattogás hallható. A robotikában annyira nem veszélyesek ezek a jelenségek, ugyanakkor az elektronikai piacon találhatunk számos nagy sebességő, és csökkentett zajú reléket, például olajrelé, vagy szilárdtest relé. Az utóbbi típus, nem végez mechanikai mozgást, viszont sokba kerül. Mi valami mást fogunk alkalmazni. Tranzisztoros meghajtó fokozat A relés meghajtó fokozat esetében szóba került a tranzisztor, mint nem mechanikus kapcsolóelem. Tranzisztorokból manapság teljesítmény, feszültség, frekvencia, és egyéb tulajdonságok tekintetében, igen széles a választék. Számos olyan tranzisztorfajta létezik, amely képes a villanymotort közvetlenül meghajtani. Viszont, a nagyteljesítményő tranzisztoroknak a bázisáramkörük is nagyobb teljesítményő vezérlıjelet igényel. Ha egy ilyen tranzisztort alkalmazunk a motor áramkörének kapcsolására, akkor ugyanazzal a problémával állunk szemben, mint a relés meghajtó fokozat esetében. A TTL szintő vezérlıjel teljesítménye nem elegendı a motort indító áramköri elem mőködtetésére. A megoldást itt is egy plusz tranzisztor beiktatása jelenti, amellyel a nagy tranzisztor bázisát kell vezérelni.
37
Tehát, a TTL szintő jel vezérli a kisteljesítményő tranzisztort, amely a vezérlést emelt energiaszinttel tovább adja a motort vezérlı nagyteljesítményő tranzisztornak, és a nagyteljesítményő tranzisztor pedig, a vezérlésnek megfelelıen rákapcsolja a motorra az áramot, vagy elveszi tıle. A tranzisztoros meghajtó fokozat hátránya a reléssel szemben az, hogy a tranzisztor vezetıképessége, még telített állapotban sem olyan jó, mint a relének. Tehát, teljesen nyitott állapotban is ellenállást tanúsít a motor energiájával szemben, csökkentve ezzel a motor teljesítményét. Tudjuk, hogy az áramjárta ellenálláson az elektromos energia egy része hıvé alakul át, így a tranzisztoron is hı szabadul fel. Azaz, a motornak szánt energiának kisebb része nem jut el a motorhoz, hanem „elég”, aminek következtében a tranzisztor felmelegszik, ezért gondoskodni kell hőtésrıl is. Elıny a relével szemben viszont az, hogy a tranzisztorok mőködési frekvenciája mhz nagyságrendő – akár több száz mhz is lehet –, azaz a másodperc milliomod része alatt képes reagálni a vezérlésre, így a kapcsolóelem lassúságából eredı ízülettúllendülés nem fordulhat elı. Ugyanakkor, mivel a tranzisztor nem mechanikus, így nincs kapcsolási zaj. Tranzisztorok hőtése A tranzisztoroknak csak egy része igényel hőtést. Ugyanis, vannak olyan típusok, amelyek jellegüknél fogva, a rájuk vonatkozó elıírások betartásával, nem képesek annyi hıt termelni, ami kárt tehetne a szerkezetükben. Az ilyen tranzisztorokat hőtıfelület nélkül tokozzák, aminek köszönhetıen nem is tudunk hőtıbordát szerelni rájuk, viszont kisebb lesz a térfogatuk. Nagyobb teljesítmény kapcsolására alkalmas tranzisztorok viszont, normál – nem túlterhelt – mőködés közben akár több száz fokra is felhevülhetnek, és ez néhány másodperc alatt a meghibásodásukhoz vezethet. A meghibásodás általában, a tranzisztor belsejében fellépı rövidzárlat formájában jelentkezik, melynek következtében a tranzisztor az eddiginél nagyobb intenzitással tovább melegszik, végül a tok megrepedéséhez, vagy akár a felrobbanásához is vezethet. A zárlatos tranzisztor okozhatja a többi áramköri elem meghibásodását is, ráadásul balesetek forrásává is válhat.
38
A teljesítménytranzisztorok tokja fém hőtıfelülettel rendelkezik, amihez csavarral további hőtıfelületet, vagy hőtıbordát erısíthetünk. A hőtıfelületre a tranzisztor középsı lába – amely általában a kollektor kimenet – galvanikusan kapcsolódik, így több tranzisztor esetén a közös hőtıborda használata, csak szigetelt rögzítés esetén lehetséges. A hőtıborda, és a tranzisztor hőtıfelülete közé csillámlapot kell helyezni, a csavar számára pedig, mőanyag csövet, és mőanyag alátéteket kell készíteni. A szigetelés rontja a hıvezetı képességet, ezért fokozottan melegedı tranzisztorok esetén nem javallott a közös hőtıborda használata. A mi robotunk motorjai annyira nem nagy teljesítményőek. Tapasztalataim szerint, a robot teljesítmény-tranzisztorai, szigetelt közös hőtıborda mellett, tartós használat után, kézzel érinthetı hımérsékletőre melegednek föl, tehát a mi esetünkben alkalmazható a közös hőtıfelület. Zajcsökkentés Eljutottunk oda, hogy van egy nem mechanikus, rövid reakcióidejő motormeghajtó áramkörünk. Korábban említettük, hogy a vezérlınek gondoskodnia kell a zajszőrésrıl, és védekeznie kell, a villanymotorban keletkezı ívkisülések, és induktívlökések következtében fellépı erıs elektromos impulzusokkal szemben. Az ívkisülések okozta elektromos zaj elnyomására, kondenzátort használunk. A mechanikai résznél említésre került, hogy közvetlenül a motor kapcsaira szokás a kondenzátort kapcsolni. Ez azért fontos, hogy a kondenzátor, a lehetı legkisebb közbensı ellenálláson keresztül tudja kifejteni zajcsökkentı hatását. Ha a kondenzátort a vezérlıben helyeznénk el, akkor a motor vezetékeinek ellenállásán keresztül romlana a zajcsökkentés hatékonysága. Ettıl függetlenül, elhelyezhetünk a vezérlıben is kondenzátort. Induktívlökésekkel szembeni védekezés A motor leállását követı erıs induktívlökés, rövid ideig tartó, a motor meghajtására használt feszültséggel ellentétes irányú, nagy feszültségő impulzust jelent. Védekezhetünk ellene diódával is, amelyet a motorral párhuzamosan, záró irányban kapcsolunk. Ezt csak abban az esetben tudjuk kivitelezni, ha a motort csak egy forgási irányban használjuk, ugyanis a motorral párhuzamosan kapcsolt dióda, az egyik feszültségirányt rövidre zárja.
39
Kétirányú üzemmód esetén, grimlámpát szokás használni. A grimlámpa egy olyan eszköz, amely egy bizonyos feszültségszint alatt, nem csinál semmit, de ha ezt a feszültség küszöböt átlépjük, akkor rövidzárlatot képez a kapcsai között, és világítani kezd. Minket a világítás nem érint, csak a rövidre záró képessége. Ha egy ilyen grimlámpát párhuzamosan kapcsolunk a motorral, akkor lehetıségünk nyílik arra, hogy a motorra mindkét irányban rákapcsolhassuk a feszültséget, ugyanakkor az induktívlökéseket – amelyek feszültsége meghaladja a grimlámpa küszöbét – a grimlámpa mindkét irányban rövidre zárja. A robotban 60V-os grimlámpákat alkalmazunk, amely azt jelenti, hogy csak a 60V fölötti induktívlökésekkel szemben vagyunk védettek, de ez nem jelent gondot a számunkra, ugyanis a motort hajtó tranzisztor ezt a feszültségszintet bıségesen elviseli. 2.2.2.2. Motorok finomindítása A robot használata során gyakran elıfordul, hogy valamely ízületet csak kicsit kell megmozdítani, például a célpozíción való túllendülés korrigálásakor. Tapasztalataim szerint, az apró mozdulatokat sokkal könnyebben és szebben tudja a robot kivitelezni, ha az ízületek motorjait nem hirtelen, hanem álló helyzetbıl fokozatosan gyorsítva indítjuk meg. Ha bekövetkezik egy túllendülés, akkor a vezérlı automatikusan ellenmozgásra vezérli a motort. A motor hirtelen megkapja az ellentétes irányú feszültséget, ütésszerően megrántja az ízületet, mire az túllendülhet a másik irányba, és ennek hatására a vezérlı újra megfordítja a motor forgási irányát. Így túllendülések korrekcióinak sorozata állhat elı, amelynek hatására az adott ízület, a célpozíció körül fog rövidebb, vagy hosszabb ideig rángatózni. Ennek elkerülése végett, gondoskodnunk kell a motorok finomindításáról, hogy a rövid korrekciós mozdulatokat, a robot kis lendülettel tudja elvégezni. Az a célunk, hogy amikor a motort indítjuk, akkor a motor kapcsain a tápfeszültség ne ütésszerően, hanem nulláról elindulva fokozatosan növekedve jelenjen meg. Az ütésszerő feszültségátmenetbıl lassú átmenetet integráló áramkörrel képezhetünk. Az integráló egy kondenzátorból és egy ellenállásból áll. [1] Ezt az áramkört célszerő minél kisebb teljesítményő környezetben alkalmazni, ugyanis nagyobb teljesítmény esetén, hosszú felfutási idejő feszültséget nagy kapacitású kondenzátorral érhetünk el, amely nem csak drága, hanem hamar tönkre is megy. Ugyanis, a nagy kapacitású kondenzátorokban elektrolit végzi a töltések tárolását, amelynek erısen korlátozott az élettartama.
40
A tranzisztor valójában erısítı áramkör. A bázisára kapcsolt teljesítménynek βszorosát indítja meg az emitter-kollektor áramkörében, ahol a β, a tranzisztor erısítési tényezıje. [3] Tehát, lehetıségünk van a motorra kapcsolt teljesítmény nagyságát is befolyásolni, a tranzisztor bázisán levı vezérlıjel teljesítményének szabályozásával. Vagyis, ha az integráló áramkörrel, a teljesítménytranzisztor bázisán – azaz, kisebb teljesítményő környezetben – képezünk egy hosszú felfutású vezérlıjelet, akkor a motor kapcsaira, szintén hosszú felfutási idejő tápfeszültség kerül kivezérlésre, és ezzel már meg is oldódott a motor finomindítása. A tranzisztor, a kollektorán keletkezı feszültségszint felfutást, csak úgy tudja kivitelezni, hogy a felfutási idı alatt csökkenı mértékő ellenállást tanúsít a motorárammal szemben. Vagyis, minden egyes motorindításkor, rövid ideig arra késztetjük a tranzisztort, hogy nagy ellenállást tanúsítson, ami fokozott hıtermelést von maga után. Késıbb látni fogjuk, hogy a számítógépes szoftver, a lassított ízületmozgásokat a motor energiaellátásának szaggatásával végzi, amely motorindítások, azaz nagy hıtermelések sorozatát jelenti. Tehát, a hőtés erısen indokolt. 2.2.2.3. A motormeghajtó panel megépítése Az ismertetett tranzisztoros motormeghajtó fokozatból egyet-egyet minden ízület motorjára készíteni kell. Mivel, az egyes ízületek nem viselnek azonos mértékő terhet, így a meghajtó fokozatok tranzisztor teljesítményeinek sem kötelezı azonosaknak lenniük. A vállés a könyökízület az a két ízület, amelyek a legnagyobb terhet viselik, így nekik célszerő nagyobb teljesítményő meghajtó fokozatot készíteni, a többi ízület motorjához kisebb teljesítményő is elegendı. A teljesítmény növelésére használhatunk két azonos típusú, párhuzamosan kapcsolt tranzisztort. Így a kapcsolható teljesítmény a duplájára, míg a kapcsolóelem ellenállása pedig, a felére csökken, ugyanis két R ellenállás párhuzamos összekapcsolásából, az eredı ellenállás értéke, R/2 lesz. [1] A teljesítménytranzisztorok tokozása olyan, hogy a hőtıbordát rögzítı csavar, merıleges a tranzisztor lábaira, így a hőtıborda, ami egy igen robosztus szerkezet, az álló tranzisztor hátára kerül fel. Emiatt, a motormeghajtó tranzisztorokat célszerően a nyomtatott áramkör szélére kell helyezni, hogy a hőtıfelület felszerelését a panel ne akadályozza. A többi kisteljesítményő tranzisztor nem igényel hőtést, így rájuk nincs elhelyezkedési megszorítás.
41
2.2.3. Központi feldolgozópanel Megérkeztünk a vezérlı legbonyolultabb részéhez. A központi feldolgozópanel fogadja, és értelmezi a számítógép utasításait, feldolgozza az érzékelıkrıl érkezı jeleket, ezekbıl meghatározza a jelenlegi aktuális pozíciót, és a beállított célpozíciónak megfelelıen vezérli az ízületek motorjait. Ennek az összetett feladatkörnek az ellátására alkalmas áramkör megépítéséhez két fajta út vezet: •
Az elsı a régi jól bevált TTL áramkörök használatával bonyolult kombinációs hálózat építése, amely hosszadalmas logikai tervezéssel, bonyolult nyomtatott áramkör megalkotásával jár.
•
A másik lehetıség, a mikrokontroller használata. A mikrokontroller rendelkezik valamennyi bemenettel, kimenettel, van neki memóriája külön a futtatandó szoftver, külön az adatok számára, tehát programozás kérdése, hogy a mikrokontroller milyen kombinációs hálózatot fog helyettesíteni. Egyik út sem egyszerőbb a másiktól. Mindenképpen végig kell gondolnunk a
vezérlılogika algoritmusának lépéseit, hogy mibıl mit és mikor képezünk le. A mikrokontrollerbe ezt bele kell programozni. Megjegyzem, a mikrokontroller lényegesen butább, mint egy asztali számítógép. Tapasztalataim szerint, hiába létezik hozzá C fordító, távolról sem olyan könnyő programot írni rá, mint egy számítógépre. A központi egység egyik feladata, a nagypontosságú idımérés, amelyet nagyfrekvenciájú impulzusok számlálásával fog elvégezni. A mikrokontrollernek erısen korlátolt a mőködési frekvenciája, amibıl az következik, hogy az impulzusszámlálás feladatára külön kombinációs hálózatot kell építeni – például TTL áramkörökbıl – a mikrokontroller mellé. A legnehezebb és legfontosabb feladat pedig, épp az impulzusszámlálás lenne, tehát lassan eljutunk oda, hogy a mikrokontrollernek alig marad tennivalója, és a mellé épített kombinációs hálózat miatt, bonyolult lesz a nyomtatott áramkörünk is. A mikrokontrollernek egyébként is szüksége van valamilyen környezı áramkör támogatására: külsı órajel a parancsvégrehajtás ütemezésére, „watchdog” jelek küldése a mikrokontroller lefagyása esetén, illesztési felület a számítógép kommunikációs portja és egyéb perifériális egységek felé, stb.
42
Megítélésem szerint, a központi feldolgozópanel feladatkörének azon része, amelyet egy mikrokontroller el tud látni, nem elég nagy ahhoz, hogy indokolt legyen annak használata. A döntésemet az is befolyásolta, hogy az eddigi pályafutásom során, a TTL áramkörök területén igen tekintélyes gyakorlatot szereztem. Tehát, a központi feldolgozópanel TTL áramkörök felhasználásával, teljes egészében, mikrokontroller nélkül, kombinációs hálózat formájában kerül megépítésre. A TTL áramkörök használata elıtt, nem árt megismerkedni velük. A következıkben betekintést nyerünk a logikai integrált áramkörök családjának történelmébe, és a TTL áramkörök sajátosságaival is megismerkedünk. 2.2.3.1. Integrált logikai áramkörök megjelenésének története Az elektronikai alkatrészekben nem újdonság a félvezetı anyagok felhasználása. A hajdani detektoros vevıkben például, félvezetı galenit kristály volt a demodulátor – csatornadekódoló –. Ám a félvezetık jelentısége, a tranzisztor feltalálásával vált nyilvánvalóvá. Minthogy a találmány alapján nagy energiával folytatódott a kutatás, lassanként szinte teljesen átalakult az egész elektronika: eleinte még csak táskarádiókban jelentek meg a tranzisztorok, késıbb azonban már a számítástechnikában – komputerekben – és a mőholdakban is tranzisztorok kerültek az elektroncsövek helyére. A kezdeti germánium tranzisztorokat felváltották a szilícium tranzisztorok. Megjelentek a tranzisztorral rokon további félvezetı alkatrészek: a diódák, a nagyobb teljesítményő egyenirányítók, a vezérelhetı egyenirányítók, az optoelektronikai alkatrészek stb. [5] A legújabb lépést az integrált áramkörök képviselik a félvezetık fejlesztésében. Elvileg ugyanazokból az anyagokból és ugyanolyan eljárással készülnek, mint a tranzisztorok, tehát a tranzisztorokkal kapcsolatban szerzett tapasztalatokat közvetlenül fel lehetett használni az integrált áramkörökhöz is. Így vált lehetségessé, hogy hét év alatt az integrált áramkörök megértek a sorozatgyártásra és meghódították az elektronikai ipart. Egy integrált funkcionális egységre Jack Kilby, a Texas Instruments kutatója kapott szabadalmat.
43
Óriási hatást váltott ki az elektronikában az integrált áramkörök megjelenése. Alkalmazási területük állandóan bıvül. A rakétákban, az elektronikus vezérlésekben és a számítógépekben kezdıdött a pályafutásuk, tehát azokban a berendezésekben, amelyekben különösen fontos a méretek csökkentése és az üzembiztonság fokozása. Manapság már az ipari áramkörökben és a szórakoztatókészülékekben is megtalálhatók. Itt elsısorban az olcsóságuk a döntı. Az integrált áramkörök a legnagyobb hatást az elektronikus készülékek elıállítására gyakorolták. Megjelenésük elıtt külön meg kellett vásárolni az egyes elektronikai alkatrészeket, hogy a megtervezett áramköröket elkészíthessék. Ma már integrált áramkör formájában, teljes kapcsolások állnak rendelkezésre, sokkal olcsóbban és egyre jobb tulajdonságokkal. Hogy a gyártó versenyképes maradhasson a piacon, ezeket az áramköröket célszerő felhasználnia, amivel egyébként az az elıny is jár, hogy nem kell bajlódnia azokkal az alapvetı fontosságú kapcsolások megépítésével, amelyek egy összetettebb rendszer építıköveit képezik, ugyanis éppen ezek az alapkapcsolások kerülnek bele az integrált áramkörök tokjába. Így több gondot fordíthat a rendszerfejlesztésre és készülékei sokoldalúságára. Ezt a körülményt a gyárak egyértelmően felismerték, és megkezdték a logikai áramköri egységek optimális kialakítását. Ebbıl a megfontolásból jött létre a kimagaslóan legsokrétőbb logikai családfa, az SN 74N és a kiegészítı SN 49N sorozat. [5] A robot megépítésében a 74-es sorozatot használjuk. A kis méretekbıl származó elınyök A monolitikusan integrált áramkörök minden aktív és passzív elemét szilícium lemezkén alakítják ki, amelyet morzsának – chip – neveznek. Az ilyen chip mérete általában 1..2mm2 nagyságrendő. E parányi méret következtében az egész logikai áramköri egység tokjával együtt is nagyon kis térfogatú lehet, ami viszont maga után vonja az elektronikus készülékek méreteinek lényeges csökkenését. [5] Egy egyszerő logikai mőveletet végzı kapuáramkör néhány tranzisztort, diódát, ellenállást tartalmaz, amelyet a legnagyobb jóindulattal is 3-4 cm2 nyák felületen tudunk hagyományos diszkrét elemekbıl felépíteni. Egy DIL tokozású TTL áramkör – Dual-in-line, amely arra utal, hogy a kivezetések két sorban helyezkednek el –, egyszerre 4-6 darab ilyen
44
kapuáramkört is tartalmaz, mindössze 1-2 cm2 felületen. A DIL tokban elférnek összetettebb egységek is, mint például multiplexerek, amelyek 10-20 logikai kapuból épülnek föl, vagy számlálóregiszterek, kisebb memóriaegységek. Édesapám mőhelyében láttam egy régi orosz készüléket, amely az integrált áramkörök megjelenésének korai idıszakából származik. Eleinte, az orosz gyárak még nem álltak át az integrált áramkörök használatára. Úgy ítélték meg, hogy olcsóbb diszkrét elemekbıl megépíteni a TTL áramkörök nyilvánosságra hozott belsı kapcsolását. Hallottam olyan híreket is, hogy a Texas Instruments cég, talán nem is volt hajlandó üzletet kötni az oroszokkal. Így ebben a készülékben, IC-foglalatok helyett kártyafoglalatok, és IC-k helyett 10-20 cm2 alapterülető nyáklemezek helyezkedtek el. Ez csak enyhe példája volt, az integrált áramkörök méretcsökkentı képességére. IC, az angol Integrated Circuit rövidítése. A késıbbiekben is helyenként használni fogom az IC rövidítést az integrált áramkör helyett. A robot vezérlıegységében hozzávetıleg 50 darab IC felhasználására került sor. Méreteiben ez azt jelenti, hogy a készülék számára a burkolat tervezésekor, nem kellett kipakolni a ruhásszekrényt, elég volt egy tönkrement mőholdvevı beltéri egység belsejét kiüríteni. A kis méretek következtében rövidek az egységen belüli kötések, így ezek az áramkörök kevésbé érzékenyek a mágneses terek zavaró hatására. Ily módon alacsony jelszintnél is jól használhatók az integrált áramkörök. Ennek viszont az a kedvezı hatása, hogy csökkenthetı a tápfeszültség és kisebb a teljesítményfelvétel. A kisebb készülékekben ennek néha nincs jelentısége, a nagy berendezésekben azonban lényeges megtakarítást lehet így elérni. [5] Vagyis, erısen csökkent az igényelt teljesítmény a tápegységre vonatkozóan, így annak térfogata is és az ára is csökkent. Ami az elektromágneses zajokat illeti, tapasztalataim szerint, ha az áramkör közelében bekapcsolunk egy nagyobb teljesítményő gépet, például forrasztópáka, akkor annak hatására hajlamos a rendszerben pár bitérték megváltozni. Ezt a hatást fémburkolattal sikerült elfogadható szintre csökkenteni, ugyanakkor az áramkör mőködési elvének jellege miatt, gyakran felülírja ezeket a biteket, így a másodpercnek csak töredékére figyelhetı meg a közelben kibocsátott erıs elektromágneses impulzus negatív hatása.
45
Az integrált áramkörök elektromos tulajdonságai Az integrált áramkörök rövid kapcsolási idıket tesznek lehetıvé, míg a diszkrét alkatrészekbıl összeállított áramkörökben, a huzalozás szórt kapacitása és késleltetı hatása miatt, nem lehet ilyen eredményt elérni. Az integrált áramkörök kis méretei, és a közöttük levı kis távolságok miatt, kicsi a szórt kapacitások és a késleltetési idık értéke. Minthogy, az egyes logikai egységek egészen szorosan egymás mellett helyezhetık el, megrövidülnek, az egyes áramkörök közötti jelvezetékek, és lehetıvé válik a rendszer teljes késleltetési idejének csökkentése. [5] A robotvezérlıben késıbb látni fogjuk, hogy 2mhz-es alap órajel mellett zajlik az ízületek szögállásának meghatározását szolgáló impulzusszámlálás, tehát komoly elvárásaink vannak a késleltetési idıre vonatkozóan. Ha nagy lenne a késleltetési idı, akkor idınként az áramkör kihagyna pár impulzust a számlálásból, és gyakran tévesen állapítaná meg a mechanika aktuális pozícióját, téves vezérlıjeleket adva az ízületek motorjait meghajtó panel felé. Feltételezhetı lenne, hogy a szilícium lemez parányi méretei miatt, az integrált logikai áramkörökben nagyon kicsi a még megengedhetı veszteségi – hı formájában felszabaduló – teljesítmény. A valóságban nem ez a helyzet. A 16 kivezetéses mőanyag DIL tokban elhelyezett integrált logikai egység 500 mW-ig terjedı teljesítményt vehet fel anélkül, hogy ennek következtében tönkremenne, vagy csak az élettartama megrövidülne. [5] Az integrált áramkörök üzembiztonsága Minél bonyolultabb egy készülék, és minél több elektronikai alkatrész van benne, annál lényegesebbé válik az üzembiztonság kérdése. Az üzembiztonság megadható azzal a valószínőséggel, amellyel a kérdéses alkatrész, áramköri elem vagy rendszer, meghatározott ideg meghibásodás nélkül eleget tesz rendeltetésszerő feladatának. Az üzembiztonság mértékéül a meghibásodási arány fogalma került bevezetésre. A mai integrált áramkörök meghibásodási aránya általában – 1000 üzemórára vonatkoztatva – 0,01% alatt van. Az integrált áramkörök felhasználóinak adatai szerint, a meghibásodási arány megközelíti a 0,001% / 1000 óra értéket. [5]
46
Összefoglalva tehát, a mikrokontrolleres megoldást elvetettük azon okból, hogy a mikrokontroller, a vezérlıegység feladatköre nagy részének ellátását, sebességre vonatkozó okokból nem tudja felvállalni. Emiatt, indokolttá vált a nagysebességő kombinációs hálózatok használata, amelyeket diszkrét logikai integrált áramköri elemekbıl fogunk felépíteni. Ilyen logikai elemeket a TTL logikai IC-k családjában találunk. Létezik a TTL-en kívül más technológia is, például a CMOS. A számítógép párhuzamos portja – közismertebb nevén, nyomtató port –, amelyet kapcsolódási interfészként használunk a robot vezérlıegységéhez, TTL szintő jelekkel kommunikál. Tapasztalataim szerint, a CMOS ugyan kevesebb energiát fogyaszt, de hajlamos tönkremenni, még az emberi kéz érintésétıl is. Így pályafutásom során csak felületesen foglalkoztam CMOS-szal, és maradtam a TTL-nél. A TTL technológián alapuló logikai áramköri egységek energiafogyasztás, zajérzékenység és térfogat tekintetében, a robottal szembeni követelményeknek eleget tevı tulajdonságokkal rendelkeznek, így ismét kijelenthetjük, hogy számunkra a TTL technológia lesz a legalkalmasabb technológia. 2.2.3.2. A központi feldolgozópanel tervezése A problémát, melyet ennek a panelnek kell megoldania, részproblémákra bontjuk. Minden részproblémához tartozik egy-egy áramkör vagy kombinációs hálózat, amelyeket egyenként ismertetek elvi szinten is, és részletezem a TTL áramkörök használatával történı megvalósítását is. A központi feldolgozópanel fıbb egységei a következık lesznek: •
Ízületvezérlı: az aktuális- és célpozíciók összevetésével, vezérli az ízületek motorjait;
•
Memóriaegység: fogadja és tárolja a számítógéptıl érkezı parancsokat, és a központi feldolgozópanel többi része számára hozzáférést biztosít a memória tartalmához;
•
Bıvítı interfész: kapcsolódási felület, amelyre egyéb áramköröket, például megfogó vezérlıt csatlakoztathatunk;
•
Számítógépes interfész: összeköttetést valósít meg a robot áramkörei és a számítógép között, továbbá felismeri, hogy a parancs a robothoz tartozó számítógépes szoftvertıl érkezett-e. A központi feldolgozópanel legnehezebb feladata: egy ízület szögállásának meg-
határozása, és annak eldöntése, hogy merre kell forgatni az adott ízület motorjának tengelyét ahhoz, hogy az ízület, a célpozíció felé forduljon.
47
2.2.3.3. Egy ízület vezérlése Elsı körben, ezt a problémát oldjuk meg, szintén részproblémákra bontva, amely részproblémák a következık: •
Egy ízület szögállásának mérése,
•
döntéshozás az ízület motorjának forgási irányára vonatkozóan,
•
vezérlıjelek kiadása, és megtartása a következı döntésig. A modell technikában, az abszolút helyzetadós szervomotor, egy a tengelyéhez
kapcsolt potmétertıl függı monostabil multivibrátort tartalmaz. Ez a monostabil multivibrátor elıállít valamilyen kitöltési tényezıjő négyszög alakú impulzust. Ennek az impulzusnak a kitöltési tényezıje végsı soron, a szervo tengelyének szögállásától függ. A szervo rendelkezik egy vezérlıbemenettel, amelyre a kívánt szögálláshoz tartozó kitöltési tényezıjő, de a belsı impulzussal azonos hosszúságú négyszög alakú impulzust kell bevezetni. Azaz, van két négyszögjelünk: az aktuális pozícióhoz tartozó jel – amit a belsı monostabil elıállít –, és a célpozícióhoz tartozó jel – amit a belsı monostabil elı állítana, ha a szervomotor tengelye a célpozícióban állna –. Ennek a két négyszögjelnek a kitöltési tényezıjének összehasonlításával kapjuk meg az aktuális- és a célpozíció viszonyát. A szervo a belsı monostabil multivibrátorát, a külsı vezérlıjelhez szinkronizálja, amit úgy visz véghez, hogy a monostabilt akkor indítja el, amikor a vezérlıbemeneten impulzus érkezik. Vagyis, a rendelkezésre álló két négyszögjelben egyszerre következik be L-H átmenet. Feltételezzük, hogy a két jel impulzushossza – vagy frekvenciája – azonos, így nem szükséges kitöltési tényezıket számolnunk. Elég, ha a két jel H-szintő szakaszának hosszát hasonlítjuk össze, amit az impulzusok egyszerre történı indítása miatt, egyszerően megtehetjük úgy, hogy az L-H átmenet pillanatában elindítjuk a mérést, és figyeljük melyik jelnek ér véget hamarabb a H-szintő szakasza, azaz melyik jelben következik be hamarabb HL átmenet. Ha a külsı jelben következett be hamarabb H-L átmenet, akkor a motor tengelyét olyan irányba kell elforgatni, hogy a hozzá kapcsolt potméter osztási aránya úgy változzon meg, hogy ennek hatására, a belsı monostabil multivibrátor rövidebb H-szintő szakaszt generáljon a belsı vezérlıimpulzusban. Amennyiben a belsı jelben következett be hamarabb
48
H-L átmenet, akkor épp az ellenkezı irányban forgatjuk a tengelyt. Ha a külsı és a belsı négyszögjelben egyszerre, vagy legalábbis elegendıen kicsi idıeltéréssel ért véget a H-szintő szakasz, akkor a szervomotor megáll. Ezt az elvet fogja követni a robot ízületvezérlıje is, csak kicsit másként: az aktuális- és a célpozíció binárisan kódolt értékét hasonlítja össze. Az ízületvezérlı komponensei: •
Célregiszter: a mérés idejére tárolja az adott ízületen beállítani kívánt szögállást, és a kimenetén a következı felülírásig folyamatosan tartja a szögállás binárisan kódolt értékét. Mivel több ízületünk van, és nem akarunk minden ízület számára külön mérıáramkört építeni, ezért van szükség erre a tárolóra.
•
Bináris számláló: az alap-órajel stabil frekvenciáján folyamatosan számol, miközben a kimenetein megjeleníti az éppen tárolt szám binárisan kódolt értékét. A számlálóban tárolható maximális szám véges, ami azt jelenti, hogy egyenlı idıközönként bekövetkezik a túlcsordulás. A túlcsordulás az az esemény, amikor a számlálóban tárolt érték, a maximális értékrıl való tovább léptetés esetén, nullára fordul át. A túlcsordulást a számláló, az erre kijelölt kimenetén, a túlcsordulást kiváltó óraimpulzus kivezetésével jelzi.
•
Bináris komparátor: a számláló kimenetén, és a célregiszter kimenetén levı bináris értékeket hasonlítja össze. Az összehasonlítás eredményét a kimeneteire helyezi.
•
Eredményregiszter: a legutóbbi összehasonlítás eredményét tárolja, és a kimenetein a következı felülírásig folyamatosan megtartja. Az ízületvezérlıben a számlálót sose nullázzuk. A bekapcsolást követıen, a benne
megjelenı határozatlan értékrıl kezd számlálni az alap-órajel stabil frekvenciáján, miközben a komparátor folyamatosan végzi a számlálóban és a célregiszterben aktuálisan tárolt értékek összehasonlítását. Amikor a számláló túlcsordul és nullázódik, a túlcsordulást jelzı kimenetén ezt jelezve, elindítja az ízület érzékelıjéhez tartozó monostabil multivibrátort. Feltételezzük, hogy a multivibrátor azonnal – vagy legalábbis konstans, rövid késleltetési idıvel – beindul, így a mérendı impulzus kezdete – L-H átmenete – szinkronizálva lett a számláló nullázódásával. Ekkor az impulzus H-szintő szakaszának küszöbén állunk, és a számlálóban tárolt érték nulla. A H-szintő szakasz, az ízület aktuális pozíciójával arányos hosszúságú lesz, a számláló pedig, folyamatosan számol.
49
Amikor az impulzus „lejár”, vagyis véget ér a H-szintő szakasza és bekövetkezik a HL átmenet, ebben az idıpillanatban elmondhatjuk, hogy a számláló éppen az adott ízület aktuális pozíciójáig számolt el, így a komparátor kimenetein az ízülethez tartozó aktuális- és célpozíció összehasonlításának eredménye jelenik meg. Az eredményregiszter ebben a pillanatban letárolja ezt az eredményt, és a kimenetein, a megszakításmentes motorvezérlés biztosításának érdekében, folyamatosan megtartja egészen addig, amíg új összehasonlítási eredmény nem születik. Láthattuk, hogy a komparátor folyamatosan végez összehasonlítást, folyamatosan változtatva a kimenetein szereplı összehasonlítási eredményeket. Ezeken a kimeneteken csak az említett H-L átmenet idıpillanatában jelenik meg a helyes érték. A motormeghajtó számára pedig, folyamatosan szolgáltatni kellene a helyes értéket. Az eredményregiszter feladata, hogy „elcsípje” ezeket az értékeket, és a kimenetein megtartsa egészen addig, amíg új érték nem érkezik. Az eredményregiszter kimenetén jelennek meg tulajdonképpen azok a vezérlıbitek, amelyek megmondják, hogy az adott ízület motorjának tengelyét melyik irányba kellene forgatni, ha egyáltalán forgatni kell. Akár be is vezethetnénk ezeket a vezérlıbiteket a motormeghajtó panelbe, de mi nem ezt fogjuk tenni. Késıbb látni fogjuk, hogy ha egy ízületrıl kiderül, hogy forgatni kell valamelyik irányba, az nem jelenti feltétlenül azt, hogy be is kell kapcsolni a motorját. Tehát, ezek a vezérlıbitek még elég nyersek, és igényelnek bizonyos utófeldolgozásokat, amelyet késıbb tárgyalunk részletesebben. A leírtakból az következik, hogy a motorvezérlésre szánt vezérlıjeleket csak bizonyos idıközönként állítja be az ízületvezérlı. Az eredményregiszternek köszönhetıen, a motor folyamatosan, az utolsó döntésnek megfelelıen cselekszik egészen addig, amíg új döntés nem születik. Ha a döntés eredményét nem frissítjük elég gyakran, akkor elıfordulhat, hogy két döntés között, a motor túlfordítja az ízületet a célpozíción, amely a következı mérési ciklusban, hirtelen ellentétes irányú vezérlést eredményez, amelynek hatására a motor, esetleg szintén túlfordíthatja az ízületet az ellenkezı irányban. A vezérlı egy másodperc alatt hozzávetılegesen 100 alkalommal írja felül az eredményregisztert, ami a robot mozgási sebességének figyelembe vételével megfelelı frissítési arányt jelent.
50
Ízületvezérlı egység TTL áramkörökkel Az ízületvezérlı egység több részáramkört tartalmaz, célszerően ezek TTL megvalósítását külön-külön tárgyaljuk, majd a végén összekapcsoljuk ıket egy összetett TTL kombinációs hálózattá. Kezdjük a legegyszerőbb komponenssel! A célregiszter Egy olyan egységre lenne szükségünk, amelynek vannak bemenetei, ahol fogadja a tárolandó biteket, vannak kimenetei, ahol folyamatosan kint tartja az utoljára tárolt bitértékeket, és legyen egy vezérlıbemenet, amelyen jelezzük neki, hogy mikor kell tárolnia! A TTL áramkörcsaládban a kapuzott D flip-flop tesz eleget a fent leírt követelményeknek, de ez összesen egy bitet képes tárolni. Az SN 7475N típusú IC négy darab kapuzott D flip-flop-ot tartalmaz, amelyek együttes használatával egy 4 bites tárolót kapunk. [4] Felmerül a kérdés, hogy elegendı-e nekünk 4 bit? A robot ízületeinek célpozícióterében, azonos értékközzel, diszkrét értékek szerepelnek. Ezen értékek számát kell meghatároznunk úgy, hogy a szögállás-tér felbontása ne legyen túl kicsi, de ne is legyen túl nagy. Kicsi felbontás esetén a robot beállási pontossága is kicsi. Nagy felbontás esetén pedig, az elektromágneses zajok, és a mechanika rugalmassága miatt, az ízület nem lesz képes megtalálni azt a szögállást, amire megparancsoltuk, hogy álljon be. A célpozíció körül fog jobbra-balra rángatózni. Mivel 180 fokos látószöget biztosítottunk az ízületeknek, és a robot méretei alapján hozzávetıleg 0,5 fokos ízületenkénti pontosság tenné sakkozásra alkalmasnak a robotot, ebbıl az következik, hogy a 180 fokos szögállás-térben 180/0,5 = 360 diszkrét pozícióra lesz szükségünk. 360 különbözı értéket (log2 360) > 8 ≈ 9 biten tudunk ábrázolni. Kapuzott D flip-flop-ból csak a 4 bites változat vált igazán elterjedté, ami azt jelenti, hogy D flip-fliop-ot, fıleg SN 7475N típusú IC formájában találhatunk a régi leselejtezett készülékekben. Tehát, 4 bites egységekbıl kell felépítenünk a 9 bites tárolónkat. Ez esetben 3 darab 7475-öst fogunk felhasználni, így 3*4 = 12 bites tárolót kapunk. A többlet bitek jelenléte nem hátrány. Ugyanis, például a törzsízületnél valószínőleg nem lesz elég a 360-as felbontás. Igény szerint van lehetıségünk a felbontás növelésére. A célregiszter megvalósítása 7475 alkalmazásával, a 6. ábrán látható.
51
6. ábra: A célregiszter TTL áramkörös sematikus rajza
Az áramkör a CS1 csatlakozón fogadja a tárolandó adatbiteket, és a CS4 csatlakozón adja ki, a tárolt adatbiteket. A CS2-es csatlakozón lehet utasítani a regisztert tárolásra. A három IC vezérlıbemenete külön-külön van kivezetve erre a csatlakozóra, ily módon arról is dönthetünk, hogy a célregiszter a bemenetén levı adatbiteknek melyik 4 bites csoportját tárolja le. Hogy miért szükséges ez az elkülönítés, arra majd a memóriaegység tárgyalásakor kapunk választ. Bináris számláló Egy egyszerő 12 bites impulzusszámláló egységet szeretnénk építeni, amelynek van egy órajel bemenete, ahol fogadja a megszámlálandó impulzusokat, és van egy 12 bites kimenete, amelyen mindig a számlálóban tárolt aktuális értéket jeleníti meg, továbbá szükségünk van egy túlcsordulást jelzı kimenetre is, amelyen jelzi a számláló, ha a maximális értékrıl tovább léptetve nullára fordult át.
52
A TTL áramkörök között az SN 74193N típusú IC, egy 4 bites bináris kétirányú számlálót tartalmaz. A kétirányúságra nincs szükségünk, viszont a 7493-as egyirányú változatnak nincs túlcsordulási kimenete. Árban szinte nincs különbség a két típus között, viszont mindkettejük elég szép számban jelent meg. A 74193-as a sokoldalúsága miatt talán jobban elterjedt. A túlcsordulási kimenetnek köszönhetıen ez az áramkör kaszkádolható, amely azt jelenti, hogy n darab 74193-as összekapcsolásával, n*4 bites bináris számlálót valósíthatunk meg. 3 darab 74193-asból könnyen felépíthetünk egy 12 bites bináris számlálót, a 7. ábra alapján.
7. ábra: A bináris számláló sematikus rajza
Az áramkör CS1-en fogadja a felfele, illetve lefele számláltató órajeleket. Mi ezek közül csak az egyiket fogjuk használni. A CS3-an folyamatosan látható a számlálóban aktuálisan tárolt érték, CS4-en pedig, jelzi az esetleges felsı, illetve alsó túlcsordulásokat, az órajel bementre érkezı túlcsordulást okozó impulzus kiadásával.
53
Bináris komparátor A komparátornak rendelkeznie kell két darab 12-bites adatbemenettel, és egy 3-bites kimenettel, melyen a bitek jelentése rendre: kisebb, nagyobb, egyenlı. A TTL áramkörcsaládban az SN 7485N típusú IC, egy 4-bites bináris összehasonlító áramkört tartalmaz. A 7485 kaszkádolható, ami azt jelenti, hogy n darab 7485-ös összekapcsolásával, n*4 bites bináris komparátort alakíthatunk ki. A 12-bites komparátor sematikus rajza a 8. ábrán látható.
8. ábra: A bináris komparátor sematikus rajza
54
Az áramkör a CS1 és CS2 csatlakozókon fogadja a két összehasonlítandó bináris értéket, CS4-en pedig, az összehasonlítás eredményét jelzi a megfelelı csatlakozóláb logikai magas szintre helyezésével. Az összehasonlítást folyamatosan végzi, nem kell neki külön vezérlıjel. Ez azt jelenti, hogy ha a bemenetén megváltozik valamelyik érték, akkor hozzávetıle 22ns múlva reagál [4], és CS4-en megjelenik az új összehasonlítás eredménye. Eredményregiszter: A komparátor 3 pólusú kimenete jelzi, hogy az adott ízület motorjának melyik irányba kell forognia ahhoz, hogy a célpozíció felé mozduljon az ízület, ha egyáltalán szükséges a motor tengelyét forgatni. Viszont a komparátor csak bizonyos idıpillanatokban, az ízülethez tartozó monostabil multivibrátor leállásainak pillanatában ad valós információt. Szükségünk van egy tárolóra, amely a komparátor kimenetén levı bitértékeket a megfelelı idıpillanatban tárolja, és a kimenetein ezt a bit együttest meg is tartja a következı beírásig. Korábban találkoztunk az SN 7475-ös áramkörrel, amely hasonló tevékenységet végzett. A 7475 egy kapuzott tároló, ami azt jelenti, hogy ha a vezérlı – kapuzó – bemenetére H-szintő jelet kapcsolunk, akkor a tároló úgy viselkedik, mint egy jelismétlı. A kimenetein folyamatosan a bemenet bitértékei jelennek meg. Ha változik a bemenet, azonnal – hozzávetıleg 40ns idı elteltével – változik a kimenet is. Ha a kapuzó bemenetet L-szintre helyezzük, akkor a tároló lezár, a bemenetet figyelmen kívül hagyja, a kimeneten pedig, megtartja az utoljára kiadott bitértékeket. [4] Az eredményregiszternek nem ilyen egyszerő a feladata. Nem áll a rendelkezésünkre semmilyen kapuzásra alkalmas vezérlıjel. A komparátor kimenetén megjelenı valós és tárolandó bitértékekrıl egyedül a monostabil multivibrátor impulzusában bekövetkezı H-L átmenet árulkodik. A tárolónak az átmenet pillanatában kellene tárolnia ezeket a biteket. Amikor egy áramkör nem egy adott jelszintre reagál, hanem szintátmenetre, akkor azt az áramkört élvezérelt áramkörnek nevezzük. Ha L-H átmenetre reagál, akkor pozitív élvezérelt, ha H-L átmenetre, akkor negatív élvezérelt áramkörrıl beszélünk. A TTL áramkörök között SN 74173 típusszám alatt, 4 darab pozitív éllel vezérelhetı D flip-flop-ot tartalmazó integrált áramkört találunk. A komparátor kimenete ugyan 3-bites, amelybıl már 2 bit is egyértelmően meghatározza a komparátorban született összehasonlítási
55
eredményt, de hasonló tulajdonságokkal rendelkezı és egyszerően kezelhetı kevesebb bitszámú tárolóegység nincs. A 74173-nak van 4 adatbemenete, 4 adatkimenete, a D flip-flopok vezérlıbemenetei tokon belül össze vannak kötve, így a vezérlıbemenet egy közös órajelbemenet formájában van kivezetve. A 74173-nak van törlıbemenete, amely hasznossá válhat abban az esetben, ha a motorokat valamilyen okból le kell állítani. Ugyanis, a motormeghajtópanel az eredményregisztertıl kapja majd a vezérlést, így ha a regisztert töröljük, kikapcsolva ezzel mind a két irány-meghatározó bitet, akkor a motormeghajtó a motort azonnal leállítja. A törlés nem élvezérléső, azaz a regiszter a törlıbemenetén levı L-szint esetén normálisan mőködik, H-szint esetén viszont, minden kimenetét L-szinten tartja. [4] Mivel összesen 3 bitet kell tárolnunk, és a 74173 négybites, így az eredményregiszter összesen egy darab SN 74173-as típusú IC-bıl áll:
9. ábra: Az eredményregiszter sematikus rajza
Az áramkör a CS1 csatlakozóján fogadja a tárolandó 4 bitet. A CS3 csatlakozó órajelbementére adott pozitív él hatására, az egység tárolja a bemeneten levı biteket, és a CS4 csatlakozón megjelenik a tárolt érték. A CS3 csatlakozó törlés bemenetének H-szintre helyezésével szólíthatjuk fel az áramkört a tárolt érték nullázására, melynek következtében az
56
adatkimeneten csupa L-szint jelenik meg. A CS3 csatlakozón található „Engedélyezı” bemeneten engedélyezhetjük, vagy letilthatjuk az egység mőködését. Tiltott állapotban, amely állapotot az engedélyezıre történı H-szint kapcsolásával válthatunk ki, az áramkör figyelmen kívül hagyja a bemenetére érkezı adatokat és órajeleket, miközben a kimenetének állapota változatlan marad. Erre a szolgáltatásra késıbb lesz szükségünk, amikor majd egy mérıegységre négy eredményregisztert – minden ízületre egyet-egyet – fogunk csatlakoztatni. Az engedélyezı bemenetek segítségével tudjuk majd kijelölni, hogy a komparátoron megjelenı eredményt, melyik ízülethez tartozó eredményregiszter vegye át. Eljutottunk oda, hogy megvannak az egy ízület vezérlését végzı egység komponensei. Ezeket a komponenseket az 10. ábra alapján összekapcsolva, megkapjuk az ízületvezérlıt.
10. ábra: Az ízületvezérlı sematikus rajza
Az áramkör a CS1 csatlakozóján fogadja a célpozíció binárisan kódolt értékét. A CS2re adott H-szinttel jelezhetjük, hogy a CS1-en érvényes új célpozíció érték szerepel, melynek hatására az ízületvezérlı felveszi az új célpozíció értéket, és az ízületet ennek megfelelıen fogja mozgatni. CS3-ra kell bevezetni az alap-órajelet, amely stabil frekvenciájának kellıen
57
nagynak kell lennie ahhoz, hogy a 12 bites számlálóáramkörben megfelelı gyakorisággal következzen be túlcsordulás, vagyis végigszámlálás. Mi azt szeretnénk, hogy másodpercenként legalább 100 alkalommal szülessen döntés az ízület motorjának forgási irányára vonatkozóan. Egy ízület esetén 100*212 Hz frekvenciájú órajelre van szükség. Ha több ízületre szeretnénk szekvenciálisan használni az ízületvezérlıt, akkor ezt a frekvenciát az ízületek számával szorozni kell. A CS5-ös csatlakozóra kell kapcsolni az ízület érzékelıjéhez tartozó monostabil multivibrátor jelkimenetét. Az ízületvezérlı egy lefutó éllel – H-L átmenet – jelzi az indító kimeneten, hogy a monostabilnak indulnia kell. Azért H-L, mert a 74193-as IC az órajel lefutó élénél léptet, ebbıl kifolyólag a túlcsordulást jelzı kimenetén, a végigszámlálás bekövetkezésekor, a túlcsordulást kiváltó óraimpulzus lefutó élét fogja kivezérelni. A CS5 csatlakozó „impulzus” nevő kivezetésén pedig, az ízület aktuális pozíciójáról árulkodó monostabil multivibrátor által elıállított impulzust várja vissza az egység. Amikor a monostabil idızítése lejár, és a célregiszterben tárolni kellene a komparátor kimeneti bitjeit, ebben a pillanatban a monostabil jelben H-L átmenet, azaz lefutó él következik be. A célregiszter pedig, éppen felfutó él esetén tárol, emiatt van szükség az inverter – logikai „nem” – kapura az impulzusbemeneten. Az invertert a valóságban SN 7404N típusú IC formájában találjuk meg, amely egyszerre 6 darab inverter kapuáramkört is tartalmaz. [4] Ez az ízületvezérlı csak egy ízületet képes ellátni. Vagy építünk minden ízületre egyegy ugyanilyen ízületvezérlıt, vagy gondoskodunk róla, hogy a vezérlı az egyes ízületeken ciklikusan felváltva végezzen méréseket. Tehát, egy ízületvezérlı, egy célregiszterrel, amibe minden vezérlési ciklus után pakolgatjuk a soron következı ízülethez tartozó célpozíciót. Ebbıl az következik, hogy a célpozíciókat valahonnan elı kell tudnunk venni. Most jelentkezik a memóriaegység szerepe. A központi feldolgozópanel konstrukcióját a memóriaegységgel folytatjuk. 2.2.3.4. Memóriaegység Egy olyan áramköri egységre van szükségünk, amely rendelkezik kellı tárolókapacitással ahhoz, hogy egyszerre tárolni tudja az összes ízület célpozícióját, és emellett egyéb, például a megfogóra vonatkozó információkat is képes legyen raktározni. Legyen az áramkörnek adatbemenete, amelyen a memóriába beírandó adatbiteket fogadja, legyen cím-
58
bemenete, hogy egyáltalán címezni tudjuk a memóriát, és legyen adatkimenete, amelyen a memóriának az aktuálisan megcímzett rekeszének tartalmát látjuk! A memóriaegységnek hozzáférést kell biztosítania a többi áramkör számára is. Ezt úgy oldjuk meg, hogy két címbemenet lesz. Az egyikre a számítógép, a másikra a robot áramkörei csatlakoznak, és lesz egy vezérlıbit, amellyel azt állítjuk be, hogy éppen melyik címbemenetrıl fogadjon címet a memória. A két címbemenet megvalósítására egy SN 74157N típusú IC-t fogunk használni, amely egy multiplexer áramkört tartalmaz, 4x2 bemenetrıl 4x1 kimenetre. [4] Az IC tekinthetı egy kétbemenető 4 bites adatválasztónak, amely a vezérlıbemenetére adott logikai jel szintje alapján, a bemenetek valamelyikét a kimenetre kapcsolja. Következı lépés, a tárolókapacitás meghatározása. Az ízületvezérlıt 12-bites pozíciók feldolgozására méreteztük, így célszerően feleltessünk meg mind a 4 ízületre 12-12 bitet! Számunkra az lenne a kényelmes, ha az egyes ízületek célpozícióit meg tudnánk címezni egyszerően csak az ízületsorszám alapján. Jelöljünk ki a címbuszon 2 bitet! Két biten, éppen 4 ízületet tudunk megkülönböztetni. Ha a címnek ezt a két bitjét úgy tekintjük, mint ízületválasztó sorszámot, akkor a cím többi bitjével pedig, hivatkozhatunk a kiválasztott ízület célpozíciójának egyes részeire. A TTL IC-atlaszban találhatunk SN 7489 N típusszám alatt, egy 64 bites, 16*4 bites szervezéső írható, olvasható memóriát. Tehát, van neki 16 darab 4-bites rekesze, amelyeket log216 = 4 biten tudunk megcímezni. Ha ebbıl a 4 címbitbıl kettıt kijelölünk ízületválasztónak, akkor marad további két bit az ízületpozíció egyes 4-bites részeinek címzésére. Ebbıl kifolyólag, egy ízületre 4*4 = 16 bit jut, amibıl mi csak 12 bitet fogunk felhasználni. Korábban láthattuk, hogy az ízületvezérlı célregisztere négybites tároló elemekbıl épül fel, amelyeknek nem hiába vezettük ki külön-külön a vezérlıbemeneteit. Így, lehetıségünk nyílik arra, hogy a célpozíciót négybites szeletekben írjuk be a célregiszterbe. A memóriából pedig, éppen négybites szeletekben olvasható ki a célpozíció, amely nagyon megkönnyíti az adatátvitelt a memória és az ízületvezérlı között. A memória négybites adatkimenetét egyszerre bekötjük a célregiszter elsı, a második és a harmadik négy bitjének bemenetére is, így a memória megcímzett rekeszének tartalma a célregiszter három tároló elemének bemenetén egyaránt megjelenik. Ezek után csak annyi a dolgunk, hogy miután a három tároló elembe bevezettük az éppen átvitelre kijelölt adatszeletet, megmondjuk a célregiszternek, hogy a három valódi szelet közül ez melyik szelet.
59
A célpozíció átadása a következıképpen zajlik: •
A címbusz elsı két bitjét beállítjuk az adott ízület sorszámára.
•
A cím második két bitjével megcímezzük a célpozíció elsı négybites szeletét, és impulzust adunk a célregiszter elsı tároló elemének vezérlıbemenetére. Így a tárolóban csak az elsı 4 bitre tárolódik le az adat, a többi 8 bit változatlan marad.
•
Ezt követıen megcímezzük a célpozíció második 4 bitjét, és impulzust adunk a célregiszter második tároló elemének,
•
majd végül megcímezzük a harmadik 4 bitet is, és szintén egy impulzussal felszólítjuk a célregiszter harmadik tároló egységét a 4 bit tárolására. A lépések végrehajtása után, a célregiszter kimenetén megjelenik a memóriából ki-
olvasott teljes 12-bites célpozíció. A leírtak alapján felépíthetünk egy alkalmas memóriaegységet az SN 74157-es és az SN 7489-es típusú integrált áramkörök felhasználásával, a 11. ábra szerint.
11. ábra: A memóriaegység sematikus rajza
60
Az áramkör a CS1 és a CS2 csatlakozón fogadja a két memóriacímet, amelyek közül a CS4 „választ” bemenetén levı jel logikai L-szintje esetén az „A”, H-szint esetén pedig, a „B” címet választja az egység. A CS4 „Ír/olvas” lábára L-szint kapcsolásával, az áramkör tárolja a CS3-an levı adatbiteket a megfelelı címre. A CS6 csatlakozón az aktuálisan kiválasztott memóriacímen tárolt – vagy, éppen beírásra került – adatbitek negáltja látható, folyamatosan. Az SN 7489-es sajátossága ez, hogy az adatkimeneteken a bevitt adatok inverzét jeleníti meg. Ezt könnyen kompenzálhatjuk azzal, hogy a számítógépes szoftvert úgy programozzuk, hogy a memóriába az adatok inverzét írja be, így a memória adatkimenetén visszaolvasáskor az eredeti adat fog megjelenni. A memóriába csak a számítógép ír, a robot nem, így a szoftveren kívül máson nem kell változtatni. Az elgondolás a következı: egyedül a számítógép írhat a memóriába, a robot vezérlıáramköre csak olvas. Amikor a memóriába írás történik, akkor az írás idejére meg kell szakítani a motorvezérlést. Ugyanis, a beírás négybites adategységenként történik, és ha az ízületvezérlı, éppen akkor olvas ki egy izületi célpozíciót, amikor a számítógép még azt csak részben írta át, akkor komoly vezérlési anomáliák keletkezhetnek. Másrészt, a beírás idıtartama nagyon rövid, és általában akkor írunk a memóriába új célpozíciót, amikor a robot az elızıre már beállt, azaz nem mozog, így szinte észrevehetetlen a beírásból származó rövid vezérlés kimaradás. Mindent összevetve, számunka jó megoldást jelent az, ha egyedül a számítógép dönt arról, hogy a memóriaegység írási, vagy olvasási üzemmódban legyen. A számítógép mondja meg a memóriaegységnek, hogy mikor melyik címbementérıl fogadjon címet. Így amikor új célpozíciót kívánunk beírni a memóriába, akkor a gép ezt minden további nélkül azonnal megteheti: átállítja a memóriát az elsı címbemenetre, beír, majd a beírás végén pedig, visszakapcsolja a memóriaegység címbuszát a robotkar irányába. Az ízületvezérlés felfüggesztését a késıbb tárgyalásra kerülı szoftverhitelesítı egység segítségével tudjuk majd elvégezni. A következıkben két egységet fogunk kapcsolni a memóriaegységhez: A számítógépes interfészt, és az ízületvezérlıt. Kezdjük az egyszerőbbel!
61
2.2.3.5. Számítógépes interfész A robotkart úgy terveztem, hogy minél egyszerőbben lehessen a számítógéphez, akár a régi gépekhez is csatolni. Minden számítógépen, amelynek teljesítménye eléri a robot vezérléséhez szükséges minimum szintet – Pentium I-es kategória –, azon található párhuzamos és soros port. A robot memóriaegysége párhuzamos cím- és adatbemenettel rendelkezik, tehát ha a soros portot szeretnénk használni, akkor szükségünk lesz sorospárhuzamos átalakítóra. Vegyük sorra, hogy a robotnak hány kimeneti és bemeneti bitre van szüksége! A memóriaegység cím- és adatbemenete együttesen 2*4 = 8-bites, továbbá szükségünk lesz egy-egy bitre a memóriaegység címválasztó és írás/olvasás üzemmód kapcsoló bemenetéhez. Ez összesen 10 kimeneti bitet követel meg a számítógép részérıl. A robot memóriatartalmának olvasásához kell 4 bemeneti bit, valamint valamilyen módon le kell tudnunk kérdezni, hogy éppen melyik motor merre forog, azaz a motorvezérlı biteket szeretnénk a gépnek eljuttatni. Ízületenként legalább két-két bitre lesz szükségünk, plusz a memória olvasásához szükséges 4 bit, tehát 4*2+4 = 12 bemeneti bitet igénylünk a gép részérıl. A párhuzamos porton van egy 8-bites adatkimenet, van 4 darab egyéb vezérlésre szolgáló kimeneti bit, és van 5 darab bemeneti állapotjelzı bit. [6] Tehát, a 10 kimeneti bittel nem lesz gond, a bemenettel viszont trükközni kell. A megoldás a következı: A párhuzamos port 8-bites adatkimenetének elsı 4 bitjét kapcsoljuk a memória címbuszára, a második 4 bitet pedig, az adatbuszra. Az írás/olvasás kapcsolására a párhuzamos port „STROBE”, címválasztásra pedig, az „AUTO FD” nevő lábát használjuk. Az 5 bemeneti bit közül 4-et rákapcsolunk a memória négybites adatkimenetére, a maradék 1 bemeneti bitet pedig, az állapotbitek lekérdezésére használjuk. Az állapotbiteknek lesz egy alkalmas sorszámozása, és készítünk egy bitválasztót, amely a 8 állapotbit közül, sorszám alapján rákapcsolja a gép bemenetére a megfelelı bitet. Vagyis, egy kisebb párhuzamos-soros átalakítót fogunk rögtönözni. Eljutottunk oda, hogy tökéletesen tudjuk írni és olvasni a memóriaegységet, de emellett valamilyen módon a bitválasztóval közölnünk kellene, hogy melyik állapotbitet szeretnénk beolvasni. Vezérelni kellene valahogy a megfogót is, és a szoftverhitelesítésrıl még nem is gondoskodtunk.
62
Ezek megoldása a következı: A memóriaegységnek vannak bizonyos nem használt rekeszei. Minden ízülethez 4*4 bitet osztottunk ki a memóriából, de az ízületvezérlı ebbıl csak az elsı 3*4 bitet használja. A memóriatérkép, az eddig leírtak alapján, a következı táblázat szerint alakul: 0
Célpozíció 11
1
Célpozíció 12
2
Célpozíció 13
3
Célpozíció 14
4
Célpozíció 21
5
Célpozíció 22
6
Célpozíció 23
7
Célpozíció 24
8
Célpozíció 31
9
Célpozíció 32
10
Célpozíció 33
11
Célpozíció 34
12
Célpozíció 41
13
Célpozíció 42
14
Célpozíció 43
15
Célpozíció 44
A célpozíciók alsó indexében szereplı számjegy jelenti az adott célpozíció-értékhez tartozó négybites adatszelet sorszámát. Tehát, van 4 olyan memóriacímünk – 3, 7, 11 és 15 –, amelyekre tetszıleges adatokat írhatunk be anélkül, hogy a robot mőködését befolyásolnánk. Ebbıl a 4*4 bitbıl 2*4-et szánunk a megfogó fogási átmérıjének beállítására, 1*4-et a lekérdezésre szánt állapotbit sorszámának beállítására, a maradék 4 bit pedig, lehet egy speciális bitkombináció helye, amellyel a szoftverhitelesítés történik majd. A memóriaegység nem rendelkezik harmadik hozzáférési felülettel, amire a megfogó-vezérlıt, vagy egyéb áramkört csatolni tudnánk. Itt jelenik meg a bıvítı interfész jelentısége. Összefoglalva, a párhuzamos port a kimeneti bitek számában eleget tesz a követelményeknek, a bemeneti bitek száma viszont kevés. Így csak a bemeneti oldalon kell kisebb hardveres támogatást nyújtani. A robot számítógéphez történı csatlakoztatására tehát, a párhuzamos portot választjuk. A számítógép párhuzamos portja, és a robot áramkörei is egyaránt TTL szintő jelekkel kommunikálnak, így nincs szükség jelátalakításra. Továbbá, az állapotbit lekérdezést, és a szoftverhitelesítést végzı áramköri egységek a bıvítı interfészen kapcsolódnak a rendszerhez, így ezek a feladatok a bıvítı panelekre hárulnak. Mindezekbıl kifolyólag, a számítógépes interfész, a kábelcsatlakozón kívül nem tartalmaz semmilyen áramköri elemet, emiatt nincs értelme az interfész, mint külön egység kapcsolási rajzáról beszélni.
63
2.2.3.6. Bıvítı interfész Amint láthattuk, szükségünk van bizonyos extra szolgáltatásokra a robot vezérlıje részérıl, amelyeket diszkrét bıvítı panelek formájában csatlakoztatunk a központi feldolgozópanelhez. A számítógép számára elérhetıvé kell tenni ezeket a szolgáltatásokat. Említettük, hogy a memóriának vannak bizonyos nem használt területei. Ezekre a területekre a számítógép információkat írhat be a bıvítı panelek számára. Ahhoz, hogy a bıvítı panelek ezekhez az információkhoz hozzájussanak, szükségünk van egy harmadik memória hozzáférési csatornára. A memóriaegység nem teszi lehetıvé három címbemenet kezelését, és nem is lenne egyszerő megvalósítani. Egyrészt, az ízületvezérlı szinte folyamatosan olvassa a memóriából a célpozíciókat, és nincs idı arra, hogy a memóriaegység még a bıvítı paneleket is kiszolgálja, így a bıvítı paneleknek a bejövı adatok számára saját adatregiszterrel kell rendelkezniük. Másrészt, mivel nincs túl sok szabad memóriarekesz, és nem kell sok adatregiszterrıl gondoskodnunk, így ezeknek a regisztereknek a megvalósítása kevesebb alkatrészt igényel, mint a memóriaegység harmadik címbemenetének kialakítása. Ha egy bıvítı panel saját bemeneti regiszterrel rendelkezik, akkor valahogy el kell hozzá juttatni a regiszterben tárolandó adatot, amely adat, a memóriának egy meghatározott címére beírt adat lenne. Ahhoz, hogy a memóriába érkezı adat eljusson a bıvítı panelhez, a memóriaegység adatbemeneteit ki kell vezetni az interfészre. Ugyanakkor, a bıvítı panel dolga felismerni, hogy a bejövı adat neki szól-e. Ez memóriacím alapján lehetséges. Amikor a számítógép információt akar küldeni egy ilyen bıvítı panelnek, akkor egyszerően adatot ír a memóriába, egy meghatározott címre. Figyelni kell az írás címét, tehát az adatbemenetek mellett, még a címbemeneteket is ki kell vezetni az interfészre. A bıvítı panelnek fel kell ismernie, hogy az adat érvényes-e, így adatérvényességi jelre is szükség van. Összesítve tehát, a bıvítı panelek úgy viselkednek, mint maga a memória: címet, adatot, érvényesítést vár, és tárol, ami azt jelenti, hogy a bıvítı interfészen pontosan annak kell megjelennie, ami a memória IC bemeneteire érkezik. Vagyis, egyszerően „megcsapoljuk” a memória vezetékeit, és kivezetjük az interfészre, hogy a bıvítı panelek „lehallgathassák” a számítógép és a memória közötti kommunikációt, miközben kiemelik belıle a nekik szóló információkat.
64
Amikor a számítógép adatot küld egy bıvítı panel számára, akkor az adat két helyre jut el. Egyrészt, tárolódik a memóriában, ami nem zavar minket, mert direkt nem használt címekre írjuk ezeket az adatokat, másrészt pedig, bekerül a megfelelı bıvítı panel bemeneti regiszterébe. Így, a bıvítı panelhez eljut a számítógéptıl érkezı adat, amelyet a panel, tetszés szerint bármikor kiolvashat bemeneti regiszterébıl, az ízületvezérlı megzavarása nélkül. A bıvítı interfész a csatlakozón kívül, csak egy buszmeghajtó – jelismétlı – elemet tartalmaz, amelyre azért van szükség, hogy az ízületvezérlı és a bıvítı panelek együttesen ne terheljék túl az adatvonalakat. Egy párhuzamosan használt logikai jel túlterhelése esetén, a logikai H-szint feszültsége nem lesz kellıen magas, így összemérhetıvé válik a logikai Lszint feszültségével. Tapasztalataim szerint, a buszmeghajtó nélkül, az SN 7489-es áramkör tévesen ítélte meg a bemenetein levı jelek logikai szintjét, amelynek következtében téves memóriacímekre, hibás adatokat tárolt. A bıvítı interfészt nem célszerő külön egységként tárgyalni, hanem a már meglévı memóriaegységünket bıvítjük ki a 12. ábra alapján.
12. ábra: A bıvítı felülettel kiegészített memóriaegység sematikus rajza
65
Az áramkör mőködése teljesen megegyezik az eredeti memóriaegység mőködésével, csupán a cím- és adatvezetékeket az ír/olvas bittel együtt, kivezettük egy buszmeghajtón keresztül a CS7-es csatlakozóra. A buszmeghajtó jelismétlı funkcionalitást végez. A rajzon láthatunk egy SN 74LS241 típusú IC-t. Ez az áramkör két darab külön engedélyezhetı négybites jelismétlı egységet tartalmaz, amelyek együttesen 8-bites buszmeghajtót képeznek. A bıvítı csatlakozóra kilencedik bitként az ír/olvas bit került kivezetésre. Ezt a bitet is el kell látnunk egy jelismétlıvel, de pazarlás lenne egy újabb 74LS241-est beépíteni miatta. Jelismétlıt kaphatunk két inverter sorba kapcsolásával is. Az ízületvezérlı sematikus rajzán már találkozhattunk inverterkapuval, ami azt jelenti, hogy már van egy SN 7404-es beépítve a rendszerbe, melynek a 6 inverterkapujából, eddig még csak egyet használtunk fel. A bıvített memóriaegységben szereplı jelismétlı számára nyugodtan felhasználhatunk ugyanebbıl az IC-bıl további két kaput, így nem szükséges emiatt új alkatrészt beforrasztani, viszont ekkor a memóriaegységnek, és az ízületvezérlınek lesz egy közös áramköri eleme. Ez a gyakorlatban természetesen, csak akkor valósítható meg szépen, ha a memóriaegység, és az ízületvezérlı közös nyáklapra kerül. Elkészült a bıvítı interfész. Most neki láthatunk legyártani az extra szolgáltatásokat nyújtó bıvítı paneleket. Kezdetben úgy indult, hogy a megfogót vezérlı panel lesz az egyetlen ilyen panel, de az eddigi konstrukciónak vannak bizonyos hiányosságai, amelyek mellett ugyan mőködik a robot, de a számítógép felé nincs semmilyen visszajelzés a robot állapotára vonatkozóan, és nincs ami, megkülönböztesse a robotkar számítógépes csatlakozójára érkezı jelek között a hasznos és a haszontalan jeleket. A következıkben, ezeket a bıvítı egységeket tárgyaljuk. 2.2.3.7. Szoftverhitelesítı egység A robot számára hasznos jelnek kizárólag a robot szoftvere által kiadott jel tekinthetı, minden egyéb jel, mint például zaj, vagy más szoftvertıl származó jelek haszontalanok. Gondoljunk arra, hogy a párhuzamos port eredetileg nyomtatók csatlakoztatására lett kitalálva! Könnyen megeshet, hogy az ember elindít egy nyomtatást, miközben a nyomtató helyett, véletlenül a robot van a géphez csatlakoztatva. Az is megtörténhet, hogy a robot kábele mőködés közben megszakad, vagy kihúzzák azt. A szoftverhitelesítınek a kapcsolat megszakadását is fel kell ismernie.
66
Egy olyan áramkört szeretnénk építeni, amely a bıvítı interfészen keresztül olyan hitelesítı információkat vár a géptıl, amelyekbıl egyértelmően – vagy legalábbis, nagy valószínőséggel – megállapítja, hogy a jelek tényleg a robot szoftverétıl származnak-e. Ugyanakkor, szintén az interfész használatával, folyamatosan tesztelnie kell a számítógép és a kábelkapcsolat jelenlétét. Az áramkörnek legyen egy kimeneti bitje, amelyen jelzi, hogy a szoftverhitelesítés sikeres-e, vagy sem! Az elgondolás a következı: Mikor a számítógép hozzáférést kér a robot memóriájához akár írás, vagy akár olvasás céljából, a hozzáférés ideje alatt az ízületvezérlı nem tud olvasni a memóriából, így az ízületek mozgatását átmenetileg szüneteltetni kell. Vagyis, ha érkezik valamilyen hasznos vagy haszontalan jel, amely hozzáférést kezdeményezne a memóriához, akkor a robot leáll. A jel hasznosságát, és a szoftver hitelességét az fogja bizonyítani, hogy a memóriamővelet elvégzése után a szoftver, hitelesítı információt küld. Az ízületmőködést csak a hitelesítést követıen szabad újra engedélyezni. Mivel, mindig a memóriamővelet elvégzése után kell hitelesíteni, így a hitelesítı információkat nem lehet a memóriában egy kitüntetett címre történı írással elküldeni, mert az is memóriamőveletnek számítana. Mást kell kitalálnunk! A számítógépnek olyan módon kell változtatnia a kimenetén levı biteket, amelyek a robot szemszögébıl nem számítanak memória-hozzáférési kérelemnek. Tehát, a címválasztó bitet H-szinten – ami a címbusznak a robot irányába történı beállítását jelenti –, az „ír/olvas” bitet pedig, L-szinten kell tartani – vagyis, a memória olvasásmódban legyen –. Ezek betartásával, a számítógép tetszılegesen módosíthatja a címzésre és az adattovábbításra használt kimeneti bitjeit, de mivel a címbuszt a robot felé fordítottuk, így csak az adatbitek jutnak el a bıvítı interfészre. Az adatbitek értékeinek valamilyen szisztéma szerint történı megváltoztatásával fogunk hitelesíteni. A kábelkapcsolatot pedig, egyszerően az „ír/olvas” bit segítségével tesztelhetjük. A TTL áramkörök H-szintőnek tekintik azt a bemenetet, amelyre nem kötöttünk semmit. Ez azt jelenti, hogy ha kihúzzuk a robot kábelét, akkor minden bemenet, köztük az „ír/olvas” bit is H-szintőnek fog számítani. Az „ír/olvas” bitnek pedig, éppen L-szinten kell lennie ahhoz, hogy az SN 7489 olvasás üzemmódra váltson, és lehetıvé tegye az ízületvezérlı számára a célpozíciók kiolvasását. Tehát, az „ír/olvas” bit lehet H-szintő azért, mert a számítógép Hszintre helyezte – ami memóriaírást vált ki –, és lehet H-szintő azért, mert kihúztuk a kábelt.
67
Mindkét esetben meg kell szakítani az ízületvezérlést. Az „ír/olvas” bit csak akkor lehet Lszintő, ha a számítógép L-szintre helyezi, amely csak becsatlakoztatott kábel esetén lehetséges. Ezek alapján, ha „ír/olvas” H-szintő, akkor a hitelesítés eredménye egyértelmően negatív, ha L-szintő, akkor el lehet kezdeni a hitelesítési protokoll végrehajtását. A szoftverhitelesítı lényegében annyit tesz, hogy memóriamővelet, vagy a kapcsolat megszakadása esetén, az ízületvezérlést letiltja, hitelesítés esetén pedig, engedélyezi. A hitelesítés folyamatára a következı ötlet született: Miután elvégeztünk egy memóriamőveletet, az „ír/olvas” bitet L-szintre helyezzük. Az adatbitek közül három bitet beállítunk egy speciális bitkombinációra, a negyedik bitet pedig, L-szintre helyezzük. Majd ennek a bitnek az értékét egymás után 16-szor az ellenkezıjére váltjuk, vagyis elıállítunk ennek a bitnek a vonalán 8 impulzust. A hitelesítı áramkör az „ír/olvas” bit L-szintje, és az adatbitek speciális bitkombinációjának megléte esetén megszámolja a negyedik adatbit vonalán érkezı impulzusokat. Az egység pontosan akkor ítéli meg sikeresnek a szoftverhitelesítést, ha az „ír/olvas” bit L-szinten van, a bitkombináció is rendben, és pontosan 8 impulzus érkezett. A hitelesítés eredményét a hitelességet jelzı kimenetén folyamatosan jelzi. Ez a hitelesítı módszer, a párhuzamos portnak 5 kimeneti bitjét figyeli, ráadásul ezekbıl 4 bit általános célú adatbit a párhuzamos port szabványa szerint [6], ami azt jelenti, hogy ha a számítógépen egy párhuzamos portot használó alkalmazást futtatunk, akkor nagy valószínőséggel megváltoztatja ezeket az adatbiteket. Az 5 bit közül, ha valamelyik megváltozik, akár szoftverhiba, akár kábelszakadás, vagy egyéb szoftver hatására, akkor a hitelességet jelzı bit azonnal törlıdik, az ízületvezérlés leáll, és új hitelesítésig nem is indul újra. Az elıbb tárgyalt hitelesítési protokollnak egy hibája van: egyirányú. A gép elküld egy meghatározott jelsorozatot a robot felé, de a robot semmit sem válaszol vissza. Vagyis, a hitelesítésben a robot nem vesz részt. Megtörténhet, hogy a külsı zajok hatására a kábelen éppen egy olyan bitsorozat keletkezik, amely megfelel a hitelesítı protokoll jelsorozatának. Rendkívül csekély ennek az esélye. Ugyanakkor, a hitelesítı jelsorozat elküldése után, a robot addig tekinti hitelesnek a dolgot, amíg az 5 bit között újabb jelváltás nem következik be. Az, hogy a külsı zajok pontosan a hitelesítési jelsorozatot állítsák elı, majd ezt követıen stabilan megtartsák azt az 5 darab nem azonos bitértéket a kábelen, annak az esélye szinte nulla. Egy
68
idegen szoftver képes lehet erre, de amennyiben e szakdolgozat alapján valaki szándékosan nem írja meg az álhitelesítıt, akkor igen kevés lesz az idegen szoftver általi sikeres hitelesítés valószínősége. A szoftverhitelesítı egység egy lehetséges TTL áramkörös megvalósítását a 13. ábrán láthatjuk.
13. ábra: A szoftverhitelesítı egység sematikus rajza
Az áramkör a CS1 csatlakozón kapcsolódik a bıvítı interfészhez, a CS3-an pedig, a hitelességet jelzi. Mint említettük, a hitelesítés két lépcsıbıl áll: speciális bitkombináció beállítása, majd impulzusok elıállítása az egyik adatbit vonalán. A bitkombinációra vonatkozóan csak annyi kikötés van, hogy ne csupa 0-ás és ne csupa 1-es bitértékekbıl álljon. Forduljon benne elı mindkét bitérték! Ez az áramkör H-szintet vár a D1 és D2 bemeneteken, valamint L-szintet vár a D3 és a WE bemeneteken. A WE bemeneten a memóriaírás kérelmét jelzı bit érkezik, melynek egyébként is L-szinten kell lennie ahhoz, hogy az ízületvezérlı olvasni tudjon a memóriából. Az ábrán látható logikai mőveleteket szimbolizáló rajzjelekbıl megállapíthatjuk, hogy kétbemenető logikai NOR – NEM VAGY –, és hárombemenető logikai AND – ÉS – kapcsolatot megvalósító áramköri elemeket használunk. Az SN 7402 típusú IC négy darab
69
kétbemenető NOR kaput, az SN 7411 pedig, három darab hárombemenető AND kaput tartalmaz. [6] Így két IC felhasználásával nem csak a bemeneti bitek elıírt állapotának megléte ellenırizhetı, hanem még az SN 7493-as számlálóáramkört is vezérelni tudjuk. A NOR kapu pontosan akkor ad H-szintet a kimenetén, ha minden bemenete L-szinten van, így IC3A H-szinttel jelzi, ha a D3 és a WE bemenetek L-szinten vannak. Az IC2A egy logikai AND kapu, amely pontosan akkor ad H-szintet a kimenetén, ha minden bemenete Hszinten van. Azaz, IC2A kimenete H-szintre kerül, ha a D1, D2 bemenetek is, és az IC3A kimenete is H-szintő. Az IC2A kimenetének magas szintje esetén a hitelesítı egység bementén levı bitek állapotai megfeleltek, tehát következhet az impulzusszámlálás. Ezt a jelet bevezetjük IC2B elsı két bemenetére, a D4-et pedig, a harmadik bemenetére. Az IC2B kimenetén az IC3A kimeneti jele, és a D4 közötti logikai ÉS mővelet eredménye jelenik meg. Másként megközelítve, ha IC3A L-szintet ad, akkor IC2B kimenete is L-szintre kerül. Ha IC3A H-szintet kapcsol az ÉS kapu bemenetére, akkor az IC2B kimenetén a D4 értéke, azaz a megszámlálandó impulzussorozat jelenik meg, amely be van vezetve az SN 7493-as számláló áramkör órajel bemenetére. Ha IC2A kimenete L-szinten van, akkor az azt jelenti, hogy a bemeneten levı bitek értékei nem felelnek meg, így az IC2B gondoskodik róla, hogy a D4-rıl érkezı impulzusok ne jussanak el a számlálóba. Viszont, ilyenkor nullázni kell a számlálót, hogy legközelebb, ha újra számolni kell, akkor nulláról kezdhesse meg a számlálást. Az SN 7493 pontosan akkor nulláz, ha az „RO(1)” és az „RO(2)” bemenetei közül legalább az egyikre H-szintet kapcsolunk. IC2A kimenetének L-szintje esetén kell nullázni, ezért a 7493-ba ennek a jelnek a negáltját vezetjük be. A NOR kapu, NOT – NEM – kapuként is használható úgy, hogy minden bemenetére bevezetjük a negálandó jelet, ekkor a kimenetén a jel negáltja jelenik meg. Mivel, már beépítettünk egy 7402-es IC-t az áramkörbe, így annak a megmaradt kapuáramköreit felhasználhatjuk negálásra. IC3B elvégzi az IC2A kimenetének negációját, és ezt a jelet vezetjük a számlálónak a törlést kiváltó bemeneteire. Az utolsó lépése a szoftverhitelesítésnek az, hogy megszámláljuk a pontosan 8 impulzust. Több vagy kevesebb impulzusszám esetén, nem tekintjük a hitelesítést sikeresnek. Kell egy olyan kombinációs hálózat, amely pontosan akkor helyezi H-szinte a kimenetét, ha a számláló kimenetén a 8-nak megfelelı bináris szám – QA=0, QB=0, QC=0, QD=1 – jelenik
70
meg. Az IC3C logikai H-szinttel válaszol pontosan akkor, ha QA és QB L-szintőek. Az IC3D kimenete pedig, pontosan akkor lesz H-szintő, ha QC L-szintő vagyis, IC3D invertálja a QC-t. Végül, az IC2C meghozza a döntıszót: pontosan akkor helyezi a kimenetét H-szintre, ha IC3C és IC3D kimenetei is, és a számláló Q4 kimenete is H-szinten van. Az IC2C kimenetén megjelenı magas szint azt jelenti, hogy a hitelesítés sikeres, és elindítható az ízületvezérlés. 2.2.3.8. Megfogó-vezérlıpanel A második egység, amely a bıvítı interfészre csatlakozik, a megfogót vezérlı panel lesz. A sakkozáshoz, egy háromujjú megfogót fogunk használni. Az ujjak egyszerre mozognak. Nyitáskor egyszerre távolodnak el, záráskor pedig, egyszerre közelítik meg a fogáspontot. Mivel, több fajta méretben is készülnek sakktáblák, így a bábok közti távolság is változó. Ezért megköveteljük a megfogótól, hogy az ujjak nyitási átmérıje szabályozható legyen. A konstrukció, hasonló lesz az ízületvezérléshez. A megfogóban, az ízületekhez hasonlóan, van egy potméter, amely az ujjak helyzetének függvényében feszültségosztást végez, és az elıállított feszültségszintet egy monostabil multivibrátor segítségével négyszög alakú impulzusra képezünk le. Az impulzushossz-mérı áramkör az ízületvezérlıben alkalmazott mérımő konstrukciójához fog hasonlítani. A megfogónál nincs szükségünk olyan nagy felbontásra, mint az ízületeknél, így elegendı lesz számunkra egy 8-bites mérıáramkör, amely 256 diszkrét nyitási átmérıt tud megkülönböztetni. A megfogót vezérlı panelnek rendelkeznie kell saját bemeneti regiszterrel – célregiszter –, amelyben a számítógéptıl kapott fogási átmérıhöz tartozó információt tároljuk, fel kell ismernie, hogy az az információ, ami a bıvítı interfész adatvonalain megjelenik, neki szól-e, és kellı gyakorisággal döntést kell hoznia arra vonatkozóan, hogy az ujjakat mozgató motor tengelyét melyik irányba kell forgatni ahhoz, hogy a kívánt átmérı felé mozogjanak az ujjak. A döntés eredményét az eredményregiszterben tároljuk a következı döntés eredményének megszületéséig. A 14. ábrán levı kapcsolási rajzon megtalálhatjuk a nyolcbites célregisztert megvalósító két darab SN 7475-ös IC-t, a nyolcbites számlálót képezı SN 74193-as IC-ket, és a szintén nyolcbites eredményregisztert alkotó SN 7485-ös típusú IC-ket. Az összekapcsolásuk jellege hasonlít a korábban tárgyalt ízületvezérlı részegységek kapcsolására, csak itt minden részegységben három helyett két darab IC-t használunk.
71
14. ábra: A megfogó-vezérlı sematikus rajza
Az áramkör a CS1-es csatlakozójával kapcsolódik a bıvítı interfészhez. A csatlakozó körül felsorakozó logikai kapuk feladata eldönteni, hogy az interfész adatvonalain érkezı jeleket mikor kell tárolni a célregiszterben. Mint említettük, a bıvítı panelek számára, a memória nem használt rekeszeit osztjuk ki. A memóriában pontosan négy darab 16-bites ízületpozíció fér el, de mindegyik ízületpozíciónak csak az alsó 12 bitjét, vagyis az elsı három szeletét használja az ízületvezérlı. Az ízületpozíciók negyedik szelete a bıvítı panelek számára tartalmazhat információkat. Tehát, amikor a bıvítı panel eldönti, hogy tárolható-e az adat a célregiszterbe, elsı lépésként ellenırzi, hogy negyedik szeletre történt-e hivatkozás. Azaz, a címvonalak közül a két alsó bit – SC és SD – logikai magas szinten vannak-e. Ezután, jöhet a rekeszazonosító, azaz a címvonalak felsı két bitjének – SA és SB – vizsgálata. A leírtakból az következik, hogy minden bıvítı panelnek lesz egy kisebb, címet és beírási feltételeket ellenırzı logikai áramköre.
72
A megfogó-vezérlı áramkör az SA vonalon H szintet vár, az SB logikai állapota pedig, arról dönt, hogy a két 7475-ös közül melyikbe írjuk be az adatot. Ugyanis, a megfogót vezérlı panel nyolcbites információt igényel, ami azt jelenti, hogy két memóriacímet kell lefoglalni. Így, ez a kapcsolás a 11-es és a 15-ös címeken fogadja a megfogó célpozícióját. A memóriaírást a WE bemenet magas szintje engedélyezi. Mindent összevetve, az áramkör a D1, D2, D3, D4 vonalakon érkezı adatbiteket, tárolja az IC1-ben pontosan akkor, ha SA=1, SB=0, SC=1, SD=1 és WE=1, illetve tárolja az IC2-ben pontosan akkor, ha SA=1, SB=1, SC=1, SD=1 és WE=1. A mérési és döntési folyamat megállás nélkül zajlik. A megfogó nyitási és zárási irányban is tartalmaz erıkorlátozó kapcsolókat, amelyek gondoskodnak arról, hogy a megfogó motorja kikapcsoljon a teljesen kinyitott és a teljesen összecsukott állapotban, vagy a megfogóban levı tárgy kellı mértékő megszorítása esetén. Emiatt, a panel nem tartalmaz semmilyen biztonsági mechanizmust, a megfogó mőködése nem tiltható le szoftverbıl. Az áramkör a mérımő mőködéséhez szükséges osztott frekvenciájú alap-órajelet a CS1, a megfogó érzékelıjéhez tartozó monostabil multivibrátort a CS4 csatlakozón fogadja, miközben a CS3 csatlakozón folyamatosan megjelenik az utolsó döntés eredménye. 2.2.3.9. Motorvezérlı panel A számítógépnek szüksége van valamilyen visszajelzésre a motorok állapotáról. A motorvezérlı panel lehetıvé teszi, a motorvezérlı bitek lekérdezését. Mivel, ezen a panelen átfutnak a motorvezérlı bitek, így könnyedén megvalósíthatunk egyéb motorvezérlési funkciókat is. A felhasználó munkáját nagymértékben megkönnyítené az, ha az egyes motorok mőködését lehetne külön-külön engedélyezni és letiltani. Diagnosztikai szempontból is szükség lehet erre a szolgáltatásra. Továbbá, az áramkör tartalmaz egy motorlogikát, amely a vezérlıbiteket a szebb mozgás érdekében módosítja. A motorlogika elgondolása a következı: A mechanika tárgyalásakor kitértünk a mechanikának egy olyan sajátosságára, amelynek köszönhetıen az ízületek nem mozognak egymástól teljesen függetlenül. Minden ízület, hatással van a megfogó irányában levı szomszédízületére. A továbbiakban beszélni fogok nyújtási és hajlítási irányról. Amikor egy
73
ízület nyújt, akkor olyan irányba fordul, amelynek köszönhetıen a megfogó távolodik a robot törzsétıl. Amikor egy ízület behajlításáról beszélünk, akkor az ízület a mozgásával közelebb hozza a megfogót. Az a célunk, hogy kiszőrjük a fölösleges motormozgásokat. Egy ízület nem csak akkor mozog, ha a motorja forog, hanem akkor is, ha egy magasabb rendő ízület mozog. Például, amikor a váll nyújt, vagy hajlít, akkor a könyök is nyúlik, vagy hajlik. Ha adunk a robotnak egy olyan utasítást, melyben az áll, hogy a vállat is és a könyököt is nyújtani kell, megeshet az, hogy a váll nyújtási ideje alatt, a könyök is kinyúlik a megadott könyök célpozícióba anélkül, hogy a könyökmotort bekapcsolnánk. Tehát, amíg a vállmotor nyújt, addig a könyökmotor ne nyújtson! Ha a váll nem nyúlik tovább, de a könyök még nem nyúlt ki a megadott célpozícióba, akkor már nyújthat a könyökmotor. Ugyanígy járjunk el a hajlítási irányra is! A csukló és a könyök között hasonló viszony figyelhetı meg. Amikor a könyök nyújt – vagy a váll nyújtásának hatására nyúlik –, akkor a csukló felfele fordul. Azaz, a csuklómotor addig ne fordítsa a megfogót felfelé, amíg a könyök nyúlik! Hasonlóképpen az ellenkezı irányra is! A motorlogika számos helyzetben megelızi a megfogó értelmetlen magasba emelését, és a földbe fúródását. Például, ha szeretnénk a robotot egy közeli helyzetbıl távoli pozícióba vezérelni, akkor ehhez ki kell nyújtani a vállat is és a könyököt is, a csuklót pedig, lefele kell forgatni annak érdekében, hogy ne változzon meg a megfogó orientációja. Ekkor, a váll elkezd nyúlni, a vezérlı érzi, hogy a könyökízületnek is nyúlnia kell, így a könyökmotor is nyújtási irányba kezd forogni, melynek következtében a megfogót a magasba emeli. Majd ahogy a váll közeledik a célpozícióba, a könyök a váll hatására túlnyúlik, és emiatt a vezérlı a könyököt kénytelen visszahajlítani. A csuklómotor is hasonló fölösleges mozgást végez. A nyújtás elején teljesen kifordítja a megfogót, majd a mővelet végére visszafordítja. Lehet, hogy a mővelet elvégzésére elegendı lett volna csak a vállmotort használni, a könyök- és a csuklómotor pedig, fölöslegesen forgatta az ízületeket. Ha a robotnak adott parancsban az áll, hogy hozza közelebb a megfogót, akkor be kell hajlítania a könyököt is és a vállat is. Ha egyszerre kezdi behajlítani a két ízületet, akkor a megfogó biztos, hogy a földbe fúródik. Ugyanis, a mővelet kezdetén a könyök elég tisztességesen ki van nyújtva, a megfogó pedig, a nyújtott váll miatt alacsonyan fekszik. A váll behajlítása kicsit ugyan emel a megfogón, de a gyorsan behajló könyök hamar lenyomja a földre. A mővelet végén kiderülhet az, hogy a váll
74
hatására a könyök magától behajlott volna a célpozícióba, sıt még lehet, hogy túl is hajlott volna. Azaz, megeshet, hogy a megfogó közelebb hozásához a könyökmotort éppen hogy nyújtási irányba kell forgatni, és nem behajlítási irányba. Ezeknek a felesleges mozgásoknak a kiszőrésével lényegesen szebb és biztonságosabb lesz a robot mozgása. A motorvezérlı panel így három funkciót lát el: Motorvezérlı bitek lekérdezése, a motorok mőködésének szoftveres engedélyezése és tiltása, valamint a motorvezérlı bitek felülbírálata. A TTL áramkörös megvalósítás az 15. ábrán látható.
15. ábra: A motorvezérlı panel sematikus rajza
Az áramkör a CS1 csatlakozóján kapcsolódik a bıvítı felülethez. A szokásos módon SC, SD és WE bemeneteken H szintet vár, amely valamelyik negyedik – nem használt – szeletre történı hivatkozást és a memóriaírás engedélyezését foglalja magában. Az SA bemeneten L-szintet, míg az SB bemeneten H-szintet követel meg. Láthatjuk, hogy az SN 74151-es típusú IC3 közvetlenül kapcsolódik az interfészhez. Ez azért van, mert az állapotbiteket mozgás közben is szeretnénk lekérdezni, ami nem lenne lehetséges, ha a lekérdezés memóriamőveletként zajlana. Ugyanakkor, az állapotlekérdezı
75
egyáltalán nem zavarja a robot mőködését. Késıbb azt is látni fogjuk, hogy a címbitek értékeinek megváltoztatása nem befolyásolja a robot mőködését, amikor mozgásban van. Tehát, az egyes állapotbitek lekérdezéséhez, egyszerően be kell állítanunk a címbuszon a kívánt állapotbit sorszámát, mint memóriacímet, amely közvetlenül eljut, az IC3 választóbemeneteire. Az SN 74151-es típusú IC, egy 8-ról 1-re adatválasztó multiplexert tartalmaz, amely feladata, az „A”, „B”, „C” bemenetekre binárisan kódolt formában bevezetett számmal azonos sorszámú adatbemenetén levı bitet megjeleníteni az „Y” kimenetén. [6] Az IC2, amely a korábban felsorolt bemeneti feltételek esetén tárolja az adatbiteket, a motorok mőködésének engedélyezésére vonatkozó információkat raktározza. A 4 bit közül, minden motor számára egy-egy engedélyezı bitet feleltetünk meg. Ha egy motor engedélyezı bitje 1-es értékő, akkor a motor mőködése engedélyezett, 0-ás engedély bitérték esetén pedig, tiltott. Az engedélyezés/tiltás funkcionalitást a kapcsolási rajzon található „2 AND GATES” nevő komponensek végzik. A bemenetére érkezı biteket egyenként ÉS kapcsolatba hozza a „kapu” nevő bemenetén levı bitértékkel, és az ÉS mőveletek eredményét a kimenetekre helyezi. Ennek köszönhetıen, ha a kapubemeneten L-szint van, akkor a kimeneten is csupa Lszint jelenik meg, ami azt jelenti, hogy az illetı motor se jobbra, se balra. Ha viszont a kapuzó bemenetre H-szintet vezetünk be, akkor a kimeneteken a bemeneti bitek változatlanul jelennek meg. A „2 AND GATES” komponens, a nevébıl is következik, hogy az egy, két ÉS kaput tartalmazó egység. Belsı kapcsolása a 16. ábrán látható.
16. ábra: A „2 AND GATES” sematikus rajza
76
Az áramkör a két ÉS kapunak köszönhetıen, a CS1-en megjelenı H-szint esetén, a CS2-ın érkezı biteket CS3-ra vezeti ki, egyébként a CS3 csatlakozón csupa L-szint jelenik meg. Az SN 7408-as típusú IC négy darab kétbemenető ÉS kaput tartalmaz. [4] A 15. ábra szerint, négy „2 AND GATES” egységet kell megépítenünk, ami azt jelenti, hogy összesen 8 kétbemenető ÉS kapura lesz szükségünk. Ezt célszerően megtehetjük két darab 7408-as IC felhasználásával. Az említett motorlogikát külön komponensként találhatjuk meg a motorvezérlı sematikus rajzán, amely csupán annyit tesz, hogy a baloldali lábsorán fogadja a tiltó/engedélyezı áramkörön átesett nyers motorvezérlı biteket, majd a jobb oldali lábsoron megjeleníti a vezérlıbitek felülbírált változatát. Észrevehetjük, hogy ezen a panelen, két helyen is módosulnak a vezérlıbitek. Elıször a tiltó/engedélyezı mechanizmus során, másodszor a motorlogikában. A sorrend magyarázata a következı: A motorlogikának az ízületek egymásra gyakorolt hatásának figyelembe vételével ki kell szőrnie a fölösleges motormőveleteket. Hogy mikor melyik ízületnek kell mozognia, azt nem csak a nyers vezérlıbitek döntik el, hanem az is, hogy melyik ízületnek engedélyezett a mozgása. Vegyük példának azt az esetet, amikor a könyöknek is, és a vállnak is nyúlnia kellene! Ekkor a könyökmotor mőködését a motorlogika felfüggeszti a váll nyújtási idejére. Tegyük fel, hogy letiltottuk a vállmotor mőködését! Ebben az esetben, a könyök nem fog a váll nyújtó hatása miatt nyúlni. Csak a könyököt szeretnénk mozgatni, ezért a robot számára kiadott parancsban nem törıdünk azzal, hogy mi áll a váll célpozíciójának helyén. Tegyük fel, hogy a váll célpozíciója a nyújtási irányba esik! Ha a könyökvezérlı bitek felülbírálata után törölnénk a tiltott mőködéső váll vezérlıbitjeit, akkor azt kapnánk, hogy se a váll, se a könyök nem mozdul. Ugyanis, a motorlogika kikapcsolja a könyökmotort azért, mert a vállmotor a nyers vezérlıbitek szerint nyújtási irányba forog, és ezt követıen a vállmotor tiltása miatt, az áramkör kikapcsolja a vállmotort is. Az eredmény az, hogy a robot nem hajtja végre a kívánt könyökmozdulatot. Viszont, ha fordítva gondolkozunk, és az elsı lépésben a tiltás miatt kitöröljük a vállmotor vezérlıbitjeit, akkor ezt követıen a motorlogika úgy itéli meg, hogy a váll nem mozog semerre, így a könyökmotor nyújthat. Az áramkör belsı kapcsolási rajza a 17. ábrán látható.
77
17. ábra: A motorlogika sematikus rajza
A motorlogikában szereplı NEM kapukat a 6 darab NEM kaput tartalmazó SN 7404es, az ÉS kapukat viszont a 4 darab ÉS kaput tartalmazó SN 7408-as típusú IC-vel célszerő megvalósítani. Ezen a ponton nem árt végre tisztázni, hogy melyik motor melyik ízületnek lesz a motorja, és hogy melyik forgási irány felel meg a nyújtási, illetve a behajlítási iránynak. A 17. ábrán látható kapcsolás a következı táblázat szerinti összefüggéseket feltételezi: Motor
M1
M2
M3
M4
Balra
Törzs balra
Váll nyújt
Könyök nyújt
Csukló felfele
Jobbra
Törzs jobbra
Váll hajlít
Könyök hajlít
Csukló lefele
Elkészítettünk minden részegységet, amelyek valamilyen formában szerepet vállalnak a vezérlésben. Ahhoz, hogy ezek a részegységek egy mőködı rendszert tudjanak alkotni, még szükségünk lesz pár áramkörre. Az ízületvezérlıt szekvenciális üzemben szeretnénk használni úgy, hogy a robot négy ízületét felváltva vezérelje. Kell egy ciklusszervezı egység, amely minden mérés elején beírja az ízületvezérlı célregiszterébe az aktuális ízülethez tartozó célpozíciót, majd a mérés végén pedig, ciklikusan vált az ízületek között. Továbbá, gondoskodnunk kell arról is, hogy az egyes ízületek motorjai ne csak akkor kapjanak vezérlést, amikor éppen sorra kerülnek, hanem folyamatosan. Ízületenként tárolnunk kell a vezérlıbiteket egészen addig, amíg újra sort nem kerít a rendszer az adott ízületre, és új vezérlıbiteket nem generál. Elıször lássuk magát a ciklusszervezıt!
78
2.2.3.10. Ciklusszervezı egység Egy olyan áramkörre van szükségünk, amely a következı lépéseket végzi: 1. Megvárja a számláló nullázását, 2. ciklikusan vált a következı ízületre, 3. négybites szeletenként, beírja az aktuális ízület célpozícióját a célregiszterbe, 4. elindítja az aktuális ízülethez tartozó monostabil multivibrátort, 5. kiválasztja a megfelelı eredményregisztert, amelybe a döntés eredményét tárolni kell, 6. majd az 1-es ponttól folytatja tovább a mőködést. Valamilyen módon, nyilván kell tartanunk az aktuális ízület sorszámát, és az éppen beírásra kerülı célpozíció-szelet sorszámát. Négy ízület van, ízületenként három adatszelet, így mindkét mennyiség tárolására két-két bitre lesz szükségünk. A memóriatérképet úgy alakítottuk ki, hogy egy ízület számára négy darab négybites memóriarekeszt osztottunk ki. Ha úgy tekintjük a memóriát, mintha 16-bites célpozíció értékek szerepelnének benne, akkor valójában a célpozíciók, és a célpozíció-szeletek egymást követik a memóriában, hézagmentesen. Ha elindítunk egy számlálót a nulla memóriacímtıl kezdve felfele számlálni, akkor a célpozíciókat, és az azok négybites szeleteit pontosan egymás után fogja megcímezni. Ezt kihasználva, az aktuális ízület, és a hozzá tartozó adatszelet sorszámának nyilvántartására, egy egyszerő SN 7493-as négybites bináris számlálót fogunk használni. Ez a számláló fogja az éppen kiolvasandó memóriacímet is kijelölni. Nevezzük ezt a számlálót címszámlálónak! Az ötlet a következı: A címszámlálót, az ízületvezérlı számlálóját is mőködtetı alapórajellel fogjuk számláltatni, de nem folyamatosan. A címszámláló csak akkor számlál, amikor célpozíciót olvasunk a memóriából, és írunk be a célregiszterbe. Az alap-órajel fogja diktálni az egyes négybites adatszeletek közti váltás ütemét is. Lesz egy kapcsolóelem, amely külsı vezérlıjel hatására vagy továbbítja az órajelet a címszámlálónak, vagy nem. Az ízületvezérlı számlálójának nullázása az az idıpillanat, amikor egy impulzushossz mérése indul. Ilyenkor kell beindítani az aktuális ízület monostabil multivibrátorát, ami garantálja számunkra, hogy még messze vagyunk a multivibrátor leállásától. Azaz, van idınk arra, hogy célpozíciót írjunk be. Ebben a pillanatban az órajelkapcsolót bekapcsoljuk, hogy az órajelet továbbítsa a címszámlálónak. Feltételezzük, hogy
79
ekkor a címszámláló éppen a következı ízület elsı adatszeletének memóriacímére lép. Az adatot a számláló által hivatkozott címrıl kiolvasva, beírjuk az ízületvezérlı célregiszterének elsı négybites tárolóegységébe. Az alap-órajel következı impulzusának hatására a címszámláló lép a következı memóriacímre, amely az aktuális ízülethez tartozó célpozíció második adatszelete lesz. Az adatot beírjuk a célregiszter második szegletébe, majd a következı óraimpulzus megérkezésekor ugyanígy teszünk a harmadik adatszelettel is! A harmadik adatszelet beírását követıen a címszámláló a negyedik – nem használt – adatszeletre fog hivatkozni. Ezt az eseményt fogjuk felhasználni arra, hogy megállítsuk a címszámlálót, az órajel-kapcsoló kikapcsolásával. Ez az a pont, amikor megtörténik a címszámláló és az ízületvezérlı belsı számlálója közti szinkronizáció. Mivel, a címszámláló a negyedik adatszelet címén állt meg, így az ízületvezérlı számlálójának a következı nullázásakor, a címszámláló éppen a soron következı ízület elsı adatszeletének memóriacímére fog lépni. A címszámláló kimenetein csak egy memóriacímet láthatunk, amelynek felsı és alsó két bitjének elkülönítésével, egyértelmően meghatározható az aktuális ízület sorszáma, és az ízülethez tartozó célpozíció aktuális adatszeletének sorszáma, de csak bináris alakban. Nekünk viszont van négy monostabil multivibrátorunk, négy külön indítóbemenettel, és van négy eredményregiszterünk, szintén négy külön vezérlıbemenettel. Gondoskodnunk kell róla, hogy a címszámlálóból kiolvasható sorszámok alapján, vezérlıjelet kapcsoljunk a megfelelı multivibrátor, illetve eredményregiszter bemenetére. Szükségünk van egy olyan áramköri elemre, amely a bemenetére adott bináris számmal azonos sorszámú kimenetét valamilyen logikai szintre helyezi. Azt az áramkört, amely ilyen mőveletet végez, demultiplexernek nevezzük. [4] Kétbites demultiplexert, SN 74155 típusú IC formájában találunk. Ez az áramkör két darab közös bemenettel rendelkezı 2-rıl 4-re dekódoló demultiplexert tartalmaz. A 2-rıl 4-re dekódolás azt jelenti, hogy a sorszámbemenet kétbites, és ennek megfelelıen van 4 sorszámozott kimenete. Az SN 74155 logikai L-szintre helyezi a sorszám bemenetén megadott sorszámú kimenetét, a többi kimenetén pedig, H-szint jelenik meg. A közös bemenet miatt, nincs lehetıségünk arra, hogy az IC-ben levı két demultiplexert külön sorszám dekódolására vezéreljük. Az SN 74155 csak arra nyújt lehetıséget, hogy beállítsunk egy kimenetsorszámot, és dönthetünk arról, hogy a benne levı két demultiplexer közül,
80
melyik áramkör sorszámozott kimenetén jelenjen meg a jel. Ennek köszönhetıen, egy speciális bekötés alkalmazásával, könnyedén kialakítható a 74155-ös típusú IC-bıl, egy 3-ról 8-ra dekódoló demultiplexer áramkör. [4] Viszont, nekünk erre nincs szükségünk. Két darab SN 74155-öst kell felhasználnunk. Az egyik IC sorszámbemenetét a címszámláló kimenetének felsı két bitjére kötjük, amelynek köszönhetıen ízületsorszám alapján fog logikai L-szintet kapcsolni valamelyik kimenetére. Ezt az aktuális ízülethez tartozó eredményregiszter, valamint monostabil multivibrátor kijelölésére fogjuk használni. A második IC sorszámbemenetét pedig, a címszámláló alsó két bitjére kötjük, hogy lehetıséget kapjunk, az adott célpozíció aktuálisan megcímzett adatszelete számára kijelölni a célregiszter megfelelı négybites tárolóegységét. Az utóbbi IC-nek a negyedik kimenetén pontosan akkor jelenik meg logikai L-szint, amikor a címszámláló valamelyik célpozíció negyedik adatszeletének memóriacímén áll. Ennek az L-szintnek a megjelenését használjuk fel az órajel-kapcsoló kikapcsolására, mellyel megállítjuk a címszámlálót. Az órajel-kapcsolót késıbb, az ízületvezérlı túlcsordulást vagy nullázást jelzı kimenetén megjelenı jel fogja visszakapcsolni. A ciklusszervezı TTL áramkörös megvalósítását a 18. ábrán láthatjuk.
18. ábra: A ciklusszervezı sematikus rajza
81
Az áramkör a CS1-es csatlakozóján fogadja az ízületvezérlı számlálójának nullázását jelzı bitet. Ez a bit két helyre fut be. Egyrészt, a két NAND és OR kapukból álló órajelkapcsoló indítóbemenetére, amelynek köszönhetıen a nullázás pillanatában megindulnak az órajelek az IC1 jelő címszámlálóba. Másrészt pedig, az IC2-ben levı egyik demultiplexer engedélyezı bemenetére, amelynek az a következménye, hogy az indítóbemeneten érkezı impulzussal azonos hosszúságú impulzus jelenik meg, az IC2 megfelelı sorszámú kimenetén. Az IC2-nek ezt a kimenet együttesét a CS8-ra vezettünk ki. Az IC2 mint látjuk, a címszámláló felsı két bitjére – QC és QD – van kötve, ami azt jelenti, hogy az aktuális ízület sorszámával azonos sorszámú kimenetét helyezi L-szintre. Kihasználjuk, hogy az áramkör két demultiplexert tartalmaz. Az elsı áramkörének mőködését folyamatosan engedélyezzük, így az 1-es kimenetcsoportján, amely a CS4-re van kivezetve, folyamatosan látható a jel. A második áramkörének mőködését pedig, ahogy korábban is említettük, a CS1-en érkezı impulzus engedélyezi egy rövid idıre, amelynek köszönhetıen egy indítóimpulzust generál a megfelelı kimenetén. Ezt az impulzust a monostabil multivibrátorok indítására fogjuk használni. Az IC3 a címszámláló alsó két bitjére – QA és QB – van kötve, aminek köszönhetıen az aktuális ízülethez tartozó célpozíció aktuális adatszeletének sorszámával azonos sorszámú kimenetét helyezi alacsony szintre. A kimenetein levı invertáló kapukra azért van szükség, mert az SN 74155 L-szintet kapcsol a kiválasztott kimenetére, de az eredményregiszterek engedélyezı bemenetére viszont, H-szint szükséges az engedélyezéshez. Az IC3 negyedik kimenete az órajel-kapcsoló kikapcsoló bemenetére van visszavezetve annak érdekében, hogy amikor negyedik adatszeletre történik hivatkozás, akkor álljon meg a címszámláló. Az órajel-kapcsoló, mint áramköri elem igényel némi magyarázatot. A két NAND kapu speciális összekapcsolásából egy úgynevezett R-S tárolót kapunk. A nevében, a két bető az angol „Reset” és „Set”, vagy magyarul a „töröl”, és a „beállít” szavakat jelölik. Az R-S tároló egy olyan bistabil multivibrátor, amely két vezérlıbemenettel, azaz törlı és beállító bemenettel rendelkezik. A két lehetséges állapot egyértelmően hozzá van rendelve a két bemenethez. Az áramkör a két lehetséges állapota közül, azt az állapotot veszi fel, amelyik állapothoz tartozó bemenetére L-szintet kapcsolunk. Pontosítva, ha a „Reset” bemenetét Lszintre helyezzük, akkor L-szintre kerül a kimenete is, ha viszont a „Set” bemenetére
82
vezetünk be L-szintet, akkor a kimenetén H-szint jelenik meg. Ha mindkét bemenetére Lszintet kapcsolunk, akkor a „Set” – beállító – bemenet prioritást élvez, így szintén magas szintre kerül a kimenet. Minden egyéb esetben a kimenet állapotát megtartja. [4] Az R-S tároló tehát, egy olyan jelet szolgáltat, amelynek logikai szintje két külön vezérlıjel hatására átbillenthetı egyik szintrıl a másikra. A ciklusszervezıben, a CS1 indítóbemeneten érkezı impulzus H-szintje esetén – a mögötte álló NEM kapunak köszönhetıen – billentjük az R-S tároló kimenetét L-szintre, az IC3 negyedik kimenetével pedig, visszabillentjük H-szintre. Az R-S tároló kimeneti jelét egy OR kapu segítségével logikai VAGY kapcsolatba hozzuk az alap-órajellel, és a kapott jelet vezetjük be a címszámláló órajel bemenetére. Így, amikor az R-S tároló kimenete L-szinten van, akkor az alap-órajel sértetlenül eljut a számlálóba, ha viszont az R-S tároló kimenetét H-szintre billentjük, akkor a címszámláló, az órajel helyett egy folyamatos H-szintet fog kapni. Azaz, amikor az ízületvezérlıben nullázás következett be, és elindult egy új mérési ciklus, akkor az R-S tároló kimenete L-szintre kerül, így a címszámláló elkezd számlálni, és megkezdıdik az aktuális ízülethez tartozó célpozíció adatszeleteinek egyenként történı átvitele a memóriából a célregiszterbe. Amint beíródott a 3 adatszelet, és a címszámláló a negyedik szelet címére lépett, akkor az IC3 az „1Y3” kimenetét – vele együtt az R-S tároló „Set” bemenetét – L-szintre helyezi, az R-S tároló kimenete visszabillen H-szintre, így a címszámláló nem kap több óraimpulzust, és nem számlál tovább. A leírtakból megfigyelhettük, hogy a célpozíciónak a célregiszterbe történı beírása, a mérési ciklus elején, az elsı négy periódusidıben történik meg. Ez elvileg nem szabályos. Felmerülhet a kérdés, hogy mi van akkor, ha az éppen mérés alatt álló monostabil multivibrátor impulzusa az elsı négy periódusidın belül ér véget? Az elsı négy periódusidıben is dolgozik a komparátor, de a még részben beírt célpozíció alapján hozza a döntéseket, amelyek a monostabil impulzus lejárása pillanatában, ugyanúgy tárolódnának az eredményregiszterben, és a vezérlı a számláló végigszámlálása után, folytatná a mőködést a következı ízülettel. Gondoljunk arra, hogy 9-10 bites célpozíció értékekkel dolgozunk! Tehát, a maximális célpozíció értéke 256 és 1024 között mozog. Amikor a célpozíció beírása befejezıdik, akkor a számláló még csak 4-ig, azaz a célpozíció értékterének hozzávetılegesen csak 2%-áig számolt el. Rendkívül kis kitöltési tényezıjő monostabil impulzus lenne
83
szükséges ahhoz, hogy ezen a 2%-on belül érjen véget a mérési folyamat. Ez két okból nem fordulhat elı. Egyrészt azért nem, mert a monostabil multivibrátorok ilyen alacsony kitöltési tényezıvel nem tudnak, vagy legalábbis nagyon kicsi pontossággal tudnak impulzust generálni, másrészt azért nem, mert az idızítı körben szerepet játszó potméter, soha nem fogja megközelíteni egyik végállását sem, amely ilyen szélsıséges jel elıállítására kényszerítené a multivibrátort. Tehát, a mérési ciklus elsı négy periódusidejét nyugodtan felhasználhatjuk a célpozíció átvitelére. A ciklusszervezı kapcsolási rajzán láthatunk két differenciáló áramkört, amelyek számunkra még újnak számítanak. A differenciáló áramkör feladata, a bemenetére érkezı jel differenciáltját a kimenetére helyezni. Ha a bemenetet és a kimenetet úgy tekintjük, mint egyegy függvényt, amely függvények az idıtıl függnek, és a függvényértékük pedig, valamilyen feszültségszint, akkor a differenciáló áramkör kimenetét képezı függvény a bemeneti függvény deriváltja. A gyakorlatban nem ilyen egyszerő egy matematikai értelemben vett differenciáló áramkört megvalósítani. A kondenzátorból és ellenállásból kialakított áramkör csak közelíteni tudja a deriváltat, de a célunknak ez is megfelel. Az R2 és a C2 által alkotott differenciáló áramkör a tápfeszültség hozzávetıleges deriváltját állítja elı, ami nem más, mint a bekapcsolás pillanatában egy pozitív irányú tőimpulzus. A következıképpen mőködik: A 7493-as törlıbemenetére két irányból érkezik jel. A pozitív tápfeszültséget – VCC –, ami logikai H-szintnek felel meg, a C2 kondenzátor, a GND –t, ami logikai L-szintnek felel meg, az R2 ellenállás vezeti oda. Az ellenállás értékét úgy választjuk meg, hogy a rajta keresztül érkezı jel feszültségszintje még bele essen a logikai alacsony feszültségszint tartományába. A bekapcsolás pillanatában tételezzük fel, hogy a C2 kondenzátor töltetlen! Ilyenkor a kondenzátor rövidzárként mőködik, ami azt jelenti, hogy a pozitív tápfeszültséget, azaz a logikai H-szintet, „közvetlenül” rákapcsolja a 7493-as törlıbemenetére. Ennek hatására a számláló törlıdik, és csupa L-szintet jelenít meg a kimenetein. Az R2 ellenálláson keresztül a kondenzátor idıvel feltöltıdik. Töltött állapotban a kondenzátor végtelen nagy ellenállást tanúsít, aminek következtében szinte megszőnik a vezetıképessége, és ilyenkor már az R2-ın érkezı L-szint fog inkább érvényesülni a számláló törlıbemenetén, aminek következtében a számláló hajlandó lesz a nulláról elindulva számlálni.
84
Tehát, az R2-C2 páros segítségével a számlálót, a bekapcsolás pillanatában inicializáljuk. Még annyit lehet hozzáfőzni, hogy kikapcsoláskor a differenciáló áramkör egy negatív tőimpulzust generál, de minket ez a jelenség nem érint. Felfedezhetünk még egy differenciálót, az R1-C1 pár személyében. Ez az áramkör a címszámláló órajelét differenciálja, és a differenciajellel az IC3 kimenetét engedélyezzük, melynek az lesz az eredménye, hogy az IC3, a beírás alatt álló aktuális adatszelet sorszámával azonos sorszámú kimenetén, az órajel felfutó élének pillanatában egy rövid tőimpulzust állít elı. Az IC3 ezen kimenet együttese, a CS5 csatlakozón került kivezetésre. Ez az impulzus elıállítás azért fontos, mert a célregiszterek tárolóegységei nem élvezérelt áramkörök. A vezérlıbemenetükre adott H-szint esetén, folyamatosan veszik és tárolják az adatot, de nekünk csak az órajel felfutó élének pillanatában kell, hogy tároljanak. Hogy a tárolási idıpillanatnak miért választottuk éppen a felfutó élt, az azért van, mert a címszámláló az órajel lefutó élénél léptet. Ekkor történik meg a címváltás, és a memóriának kell egy rövid idı – hozzávetıleg 44ns [4] –, míg a kimeneteire ráhelyezi az adott új címen elhelyezkedı adatot. Vagyis, a lefutó élt követı felfutó él pillanatában – amely 2mhz-es órajel frekvencia esetén 250ns múlva következik be –, a címszámláló kimenetén garantáltan a megfelelı memóriacím, és a memória adatkimenetein pedig, a megfelelı adatszelet lesz látható. Az R1-C1 differenciáló áramkört úgy kell méretezni, hogy az általa elıállított tőimpulzus hossza ne haladja meg az órajel periódusidejének a felét. Azaz, a tőimpulzus ne nyúljon át a következı periódusidıbe, amikor már egy másik adatszelet jelenne meg a memória adatkimenetein. A lényeget összefoglalva: a ciklusszervezı a CS1-en várja az ízületvezérlı nullázását jelzı bitet, CS2-ın az alap-órajelet, CS8-on kiadja az indítóimpulzust a megfelelı monostabil multivibrátornak, a CS5-ön az aktuális adatszeletnek megfelelıen, vezérli a célregiszter egyes tárolóegységeit, míg a CS4-en jelzi, hogy melyik eredményregiszternek kell letárolnia a komparátor kimenetén született döntés eredményét. 2.2.3.11. Eredményregiszter tömb A leírtakban már több helyen is kiderült, hogy minden ízülethez biztosítanunk kell egy-egy eredményregisztert. Annak érdekében, hogy a központi feldolgozópanel kapcsolási rajzát kicsit leegyszerősítsük, a négy darab eredményregisztert összefogjuk egy komponensbe, a 19. ábra szerint.
85
19. ábra: A négy eredményregisztert tartalmazó komponens belsıkapcsolása
86
Az eredményregiszter tömb a CS2 csatlakozóján fogadja a négy regiszterhez tartozó engedélyezıbiteket. Ezen a csatlakozón tudjuk meghatározni, hogy mely regiszter vagy regiszterek tárolják az adatbemeneten érkezı biteket. Az áramkör a CS3 csatlakozón fogadja az adatbiteket, amelyek egyszerre befutnak mind a négy regiszterbe. A kijelölt regisztert, vagy regiszter együttest, a CS1-en az adatok tárolására, míg a CS6-on a tartalom törlésére – nullázására – szólíthatjuk fel. A CS5 csatlakozó pedig, a négy eredményregiszter kimeneteit fogja össze. Regiszterenként 3-3 bitet vezettünk ki, ugyanis a döntési eredmények hárombitesek. A CS5 csatlakozó tulajdonképpen, a motorvezérlı panel számára továbbítandó vezérlıjeleket szolgáltatja, ezért is van elnevezve motorjel kimenetnek. 2.2.3.12. A központi feldolgozópanel és a vezérlı megépítése Eljutottunk oda, hogy elkészítettünk minden részegységet, és nincs semmi akadálya annak, hogy végre összerakjuk a központi feldolgozópanelt, és vele együtt a robot vezérlıegységét. Mivel, a központi feldolgozópanel foglalja magában a legtöbb alkatrészt, és rajta kívül alig szerepelne más egyéb alkatrész a vezérlı kapcsolási rajzán, így nem érdemes a két dolgot külön-külön ábrázolni. A 20. ábrán, a robot teljes vezérlıegységének kapcsolási rajzát láthatjuk. Az ábrán megtalálhatjuk a korábban tárgyalt valamennyi részegységet. A CS2-es csatlakozó egy DB-25-ös típusú csatlakozó aljzat, amelyet a számítógép párhuzamos portjával kötünk össze. A központi feldolgozópanel elemei a CS2-höz csatlakoznak, tılük jobbra az egyes bıvítı panelek vannak felsorakoztatva, amelyek a memóriaegység bıvítı felületéhez kapcsolódnak. A bıvítı panelek csatlakozását a rajzon egy vastag buszkábel szemlélteti. Megtaláljuk a mechanikus karral való összeköttetést megvalósító perifériális elemeket is: oszcillációs panel és motormeghajtó panel. A rajzon csak egy új dolgot láthatunk: Az oszcillációs panel elsı négy monostabil multivibrátorának kimenetét egy VAGY kapusorozat kapcsolja össze. Az ízületvezérlı feltételezi, hogy a jelbemenetén mindig, az általa elindított monostabil multivibrátor impulzusa jelenik meg. Tehát, gondoskodnunk kell arról, hogy a jelbemenetre, az éppen mérés alatt álló ízülethez tartozó monostabil kimenetét vezessük be.
87
20. ábra: A robot teljes vezérlıegységének sematikus rajza
88
Az ízületvezérlı egyszerre csak egy ízülettel dolgozik, azaz soha nem indít el egyszerre több multivibrátort. Vagyis, kijelenthetjük, hogy a négy monostabil multivibrátor kimenetei közül, egyszerre egy idıben, legfeljebb csak egy kimeneten jelenik meg logikai Hszint, és az ízületvezérlı éppen ennek a H-szintnek a tartási idejét méri. Megtehetjük tehát, hogy a négy monostabil kimenet között logikai VAGY kapcsolatot létesítve, a VAGY mővelet eredményét vezetjük be az ízületvezérlı jelbemenetére. A VAGY kapcsolat eredményében megjelenı H-szint hossza megegyezik, az éppen elindított monostabil multivibrátor kimenetén megjelenı H-szint hosszával. Így, az ízületvezérlı mindig megkapja az általa elindított monostabil multivibrátor kimenetén megjelenı impulzust. A CS5 csatlakozó egy DB-25-ös típusú dugaszoló – tős csatlakozó –, amelyen keresztül a mechanikus robotkar kapcsolódik a vezérlıhöz. A CS1, CS3, és a CS4 csatlakozók a robot betáplálását szolgálják. A rajzon is látható, hogy kétfeszültségő tápegységre lesz szükségünk. A TTL áramkörök számára +5V, az oszcillátorok és a motorok számára +12V szükséges. Tapasztalataim szerint, az oszcillátorok mőködnek 5V-ról is, de magasabb tápfeszültség mellett kisebb a zajérzékenységük, és nagyobb a frekvenciastabilitásuk. Különösen, a monostabil multivibrátorok pontosságán figyelhetı meg a tápfeszültség nagyságának jelentısége. Mivel, a motorok miatt már elıállítjuk a 12V-ot, így megtehetjük, hogy errıl tápláljuk a jelgenerátorokat is, de ez esetben gondoskodnunk kell a feszültségstabilitásáról is. Az oszcillátor frekvenciájára hatással van a mőködés közben bekövetkezı feszültségváltozás. A nagyteljesítményő motorok mőködés közben, különösen az indítás és a leállítás pillanatában, erıs feszültségingadozást okoznak a 12V-os áramkörben. Ha a jelgenerátorok is ebben az áramkörben mőködnek, akkor a motorok megzavarhatják azokat. Ezért, táplálás szempontjából el kell különítenünk az oszcillációs panelt, melyet megtehetünk, egy RC – ellenállásból és kondenzátorból álló – csatoló segítségével. Ez egyszerően úgy történik, hogy az oszcillációs panel +12V-os tápvezetékébe beültetünk egy kis értékő – 100-1000Ω – ellenállást, majd egy nagy kapacitású – 1000µf elektrolit kondenzátort kapcsolunk az ellenállás utáni csomópont, és a GND – földpont – közé. Az oszcillációs panel és a motorok lényegében most is ugyanarról a 12V-ról üzemelnek, de biztosítottunk egy helyi feszültségszőrést a jelgenerátorok számára. Ha valamelyik motor elıállít bármilyen kilengést a tápfeszültségben, akkor a kondenzátor energiapótlással, vagy elnyeléssel „elsimítja” azt.
89
2.3. Számítógépes szoftver Ebben a részben, a robot számítógéppel történı vezérléséhez szükséges ismeretek kerülnek tárgyalásra. Megnézzük, hogyan lehet kommunikálni az elektronikus vezérlıvel. A robot vezérlıegysége, a bonyolult kapcsolási rajzok ellenére nem túl intelligens. Beírhatjuk a memóriájába az egyes ízületek célpozícióit, esetleg vissza is olvashatjuk onnan, lehetıségünk van a motorok mőködését tiltani, illetve engedélyezni, és lekérdezhetjük a motorok állapotbitjeit. Ezekkel a szolgáltatásokkal a vezérlı összesen csak annyit tesz közvetlenül lehetıvé, hogy beállítsuk a robot ízületeit valamilyen szögállásba, viszont bonyolult mozdulatokat, vagy mozdulatsorokat önállóan nem képes elvégezni. Az eddig leírtakból már megfigyelhettük, hogy a vezérlı a szögállásokat nem szabványos mértékegységben értelmezi. Nem mondhatjuk meg neki, hogy egy adott ízületen hány fokos szöget állítson be, viszont megmondhatjuk, hogy a sorszámozott diszkrét ízületpozíciók közül melyiket kérjük. A szögállás sorszáma lineáris leképezéssel leképezhetı fokra, vagy radiánra. Továbbá, a robot ízületeinek szögállásától függ a megfogó fogáspontjának térbeli (X, Y, Z) koordinátája. Azaz, felírható egy leképezés a szögállások tere, és a háromdimenziós tér ortogonális koordinátarendszere között. Ezeket a leképezéseket, a számítógépes szoftverben kell megvalósítanunk. Szakdolgozatomba sajnos nem fér bele, hogy a leképezések matematikai hátterét, és azok szoftveres megvalósítását részletezzem, de az elinduláshoz szükséges alapvetı dolgokat ismertetem. Egy komolyabb robotos alkalmazás kifejlesztése az olvasó feladata lesz.
2.3.1. A párhuzamos port A párhuzamos port eredetileg nyomtatók csatlakoztatásához lett kitalálva, de az egyszerősége miatt sok egyéb dologra is használható. Gyorsan és egyszerően megvalósíthatunk vele bizonyos vezérléseket. Vannak neki kimeneti és bementi jellegő bitvonalai, amelyek mind TTL szintőek. A kimeneti vonalak feszültségszintje, beállítható egy megfelelı perifériális címre történı írással, míg a bemeneti vonalakon érkezı TTL szintő jelek értéke beolvasható egy szintén elıre rögzített perifériális címrıl. A párhuzamos portnak van egy báziscíme, amely a port sorszámától függ. Például, az LPT1-es párhuzamos port báziscíme $378, míg az LPT2-nek $278. [6] A báziscímet jelöljük C-vel!
90
A port báziscímén az illesztı írható, olvasható 8-bites adatregiszterét érhetjük el. A regiszterben tárolt bitek feszültségszintekre leképezve, folyamatosan látszanak a csatlakozó 2tıl 9-ig terjedı lábain. A 2-esen – DATA0 – a legalacsonyabb, míg a 9-esen – DATA7 –, a legmagasabb bitpozíción tárolt értéknek megfelelı TTL szintő jel jelenik meg. Tehát, a port báziscímén, azaz C-n érhetı el a 8 kimeneti adatbit, ami azt jeleni, hogy ha erre a címre írunk egy bájtot, akkor annak bitjei, TTL feszültségszintekre leképezve megjelennek a csatlakozó megfelelı lábain, de ez visszafelé nem mőködik. A C-rıl csak az utoljára kiírt bájtérték olvasható vissza. A C+1 címen az illesztı állapotregiszterét találjuk, amelynek tartalma csak olvasható. A regiszter felsı 5 bitpozícióján, bizonyos állapotjelzı, bemeneti jellegő vonalakon érkezı TTL szinteknek megfelelı bitértékek jelennek meg. Pontosítva, a bitpozíciókon fentrıl lefele haladva rendre a BUSY(11) invertáltja, ACK(10), PE(12), SELECT(13), ERROR(15) jelennek meg [6], ahol zárójelben a megfelelı csatlakozóláb sorszáma szerepel. Mivel, a párhuzamos port eredetileg nyomtatóillesztı, így ezek az elnevezések a nyomtatásban elıforduló állapotokra utalnak. Számunkra ezek a nevek ugyan lényegtelenek, de könnyebb úgy beszélni róla, ha lábsorszámok helyett a késıbbiekben neveket használunk. Az állapotregiszter alsó 3 bitje nem használt. A C+2 címen az illesztı parancsregiszterét írhatjuk, olvashatjuk. A regiszter alsó két bitpozícióján az AUTO FD(14), és a STROBE(1) csatlakozólábak feszültségszintjét állíthatjuk be. Természetesen, a parancsregiszternek vannak egyéb funkciói is, de mi azokat nem fogjuk használni, ezért nem részletezem. A robot vezérléséhez ennél többet nem kell tudnunk a párhuzamos portról, de ha az olvasó részletesebben érdeklıdik az illesztı iránt, akkor a 6-os számú szakirodalomban teljes mőszaki leírást találhat róla, kapcsolási rajzzal együtt. A következıkben, végigvesszük, hogy magas szintő programozási nyelvekben miként érhetjük el, a robot vezérlıjének egyes szolgáltatásait. Mivel, a vezérlések terén, a legnagyobb tapasztalatot Pascal nyelvben szereztem, így a szakdolgozatomban is Pascal, Delphi, illetve Assembly nyelvő programkódokat ismertetek.
91
Elıször magát a perifériális kommunikációt tárgyaljuk. A következı programkódokkal bájtot írhatunk, illetve olvashatunk a perifériális buszon. A p paraméter mindenhol az adott perifériacímet, a portki eljárásnál b az írandó adatot, míg a portbe függvénynél a visszatérési érték az olvasott adatot jelenti. Az író/olvasó függvénypárosokat platformonként ismertetem:
Pascalban, a perifériális busz tömbként érhetı el. A perifériális buszon úgy küldhetünk el egy b bájtot a p címre, hogy a tömb p-edik elemét egyenlıvé tesszük b-vel, ugyanakkor egy p címrıl való olvasást pedig, a tömb p-edik elemének lekérdezésével kezdeményezhetjük.
Delphiben, a perifériális busz elérését biztosító port nevő tömb nem létezik, viszont megfelelı assembly betétekkel megvalósíthatjuk ugyanazt az eredményt. Ez a megoldás mőködik Pascalban is, viszont Delphiben, csak Windows 95 és Windows 98 operációs rendszereken alkalmazható. A késıbbi Windows verziók nem teszik lehetıvé a perifériális busz közvetlen hozzáférését
92
Windows NT-ben, és a hasonló operációs rendszerekben – például Win2000, WinXP – a perifériális buszt, egy alkalmas illesztı program telepítésével, az operációs rendszer szolgáltatásain keresztül érhetjük el. Találhatunk sok fajta perifériaillesztıt Delphi alá, de a dolgozat hátterében levı mőködı robotkar szoftverében, tökéletesen bevált az ingyenesen letölthetı ZLPortIO Delphi komponens. Másodpercenként több ezer perifériamőveletet lehet vele végrehajtani, így akár valósidejő vezérlésekre is alkalmazható. Használata egyszerő, elızetes telepítést nem igényel, a teljes meghajtó program belefordul a Delphi alkalmazásba. Az illesztı telepítése futási idıben, az alkalmazás indításakor történik meg, majd eltávolításra kerül az alkalmazás befejezıdésekor. Csak egy negatív tulajdonsága van: a használatához rendszergazdai jogosultság szükséges. A perifériális írást, olvasást megvalósító függvények implementációja, ZLPortIO használatával Delphiben, a következıképpen néz ki:
A kódblokk tetején nem véletlenül szerepel egy uses sor. A ZLPortIO komponenshez tartozik egy vele azonos nevő csomagfájl, melyet alkalmazni kell ahhoz, hogy elérhetıek legyenek a ZLIO függvények. Ez a csomag végzi a meghajtó program futási idıben történı telepítését és eltávolítását is. Most, hogy már tudjuk, hogyan kezdeményezzünk perifériális kommunikációt, elkezdhetjük vezérelni a robotot. Kezdjük a legfontosabb feladattal: írjuk adatokat a robot memóriájába!
93
2.3.2. Memória-hozzáférés Az ízületek és a megfogó célpozícióit, valamint a motorengedélyezı biteket a robot memóriájába kell beírnunk. Nem árt, ha mindezt ellenırzés céljából vissza is tudjuk olvasni. A következı két függvény, egy négybites szó olvasását, illetve írását valósítja meg.
A robot_memolvas függvény, visszatér a robot memóriájának, a paraméterben megadott címén tárolt négybites szóval.
A robot_memir függvény, a paraméterben megadott memóriacímre beírja az adatszót. Visszatérési értéke sikeres beírás esetén TRUE, egyébként FALSE.
94
A memória hozzáférési függvények használnak egy _cim nevő függvényt, amely a valóságban egy címfordítást végez. Azért van rá szükség, mert a robotkar fejlesztése során, a címbitek, technikai okokból rossz sorrendben kerültek bekötésre. A függvény ezt a hibát kompenzálja a cím bitjei sorrendjének alkalmas megváltoztatásával. Implementációja a következı:
Ha a vezérlı, a dolgozatomban közölt kapcsolások szerint készül, akkor erre a függvényre nincs szükség.
2.3.3. Ízületi célpozíció beírása Egy ízület célpozícióját a következı függvény segítségével írhatjuk be. Paraméterben, az ízület sorszámát, és a kívánt célpozíciót várja. Sikeres beírás esetén, TRUE-val tér vissza.
95
Eddig még nem tisztázódott, hogy az ízületek célpozíciói milyen sorrendben követik egymást a memóriában. Csak bekötés kérdése, hogy a vezérlınek melyik motor és helyzetadó csatlakozójára, melyik ízület motorját illetve, érzékelıjét kötjük. A függvény 0-tól 3-ig sorszámozza az ízületeket. A vezérlı kapcsolási rajzán, a robotcsatlakozón szerepelnek konkrét ízületi elnevezések. Ha azok szerint járunk el, akkor az ízületek sorszámozása 0-ról indulva rendre: törzs, váll, könyök, csukló. A valóságban ez a sorrend törzs, csukló, könyök, váll formájában alakult. A függvény második paraméterében a célpozíciót adjuk meg, melynek értékére van egy intervallum, amiben mozoghat. Ezt az intervallumot a fejlesztés során kell ízületenként kikísérletezni, ugyanis minden ízületnél, sıt minden robot példánynál másképpen alakul. Az ízületek, mint tudjuk, nem függetlenek egymástól. A célpozíciók megengedett intervallumát, a felsıbbrendő ízületek szögállása is befolyásolja. Ez az oka annak, hogy nem lehet ezeket az intervallumokat szám szerint közölni. A megfogó nem tartozik a sorszámozott ízületek közé, így ahhoz külön célpozíció beíró függvény szükséges. Paraméterben a célpozíciót várja, visszatérési értéke sikeres beírás esetén TRUE, egyébként FALSE.
Mint látjuk, a függvény a 3-as és a 7-es memóriacímekre írja a célpozícióhoz tartozó két négybites szót. A valóságban a robot memóriatérképe sem alakult teljesen úgy, mint ahogy az a dolgozatban került tárgyalásra. Ha a vezérlı a dolgozatomban közölt kapcsolások szerint készül, akkor a címeket a kódban ki kell cserélni a 11-es, 15-ös címekre.
96
2.3.4. Állapotbitek lekérdezése A következı függvény segítségével lekérdezhetjük, a robot egyes motorjainak forgási irányára vonatkozó állapotbiteket:
Láthatjuk, hogy a függvény nem éppen szabályos memóriamőveletet végez, ugyanis a memória hozzáférés letiltásával kezdi. Ez azért van, mert az állapotbitek lekérdezése nem memóriamőveletként zajlik. Egy memóriamővelet azonnal megállítaná a robotot a következı szoftverhitelesítésig. Nekünk pedig, pont az a célunk, hogy ne álljon meg, hanem mozgás közben szeretnénk figyelni a motorok forgásirányát. Tudjuk, hogy a motorvezérlı panel folyamatosan szolgáltatja, a címbusz alsó 3 bitjére helyezett sorszámmal azonos sorszámú állapotbitet, így a függvény is ennek megfelelıen jár el. Beállítja a címbuszon a lekérdezni kívánt állapotbit sorszámát, de nem kezdeményez memória hozzáférést, majd a megfelelı adatvonalról beolvassa a bitet. Minden ízülethez két-két állapotbit tartozik: balra és jobbra forgás. Ezeknek a bitpároknak a sorrendje megint csak attól függ, hogy az ízületeket hogyan kötjük be a vezérlıbe. Korábban, az ízületek célpozíciójának beírásakor már említésre került, hogy a dolgozat szerinti kapcsolások alapján, és a valóságban hogyan alakul az ízületek sorrendje. Itt is ugyanaz a sorrend érvényesül.
97
2.3.5. Motormőködés engedélyezése/tiltása A motorok mőködésére vonatkozó engedélyezı biteket egy meghatározott memóriacímre kell beírni. A dolgozat szerinti motorvezérlı panel a 7-es, míg a valóságban a 11-es címen várja ezeket a biteket. Az engedélybeíró függvény implementációja a következı:
Az utolsó végrehajtható utasításban látjuk a memóriaírást. A 11-es címet ki kell cserélni 7-esre, ha a dolgozat szerinti vezérlıhöz akarjuk illeszteni. Paraméterben várja az egyes ízületek engedélyezı bitjeit. Sikeres beállítás esetén, a függvény visszatérési értéke TRUE, egyébként FALSE.
2.3.6. Robot rögzítése, kioldása Ahhoz, hogy valamilyen memóriamőveletet kezdeményezhessünk, rögzíteni kell a robotot, melyet a következı eljárással tehetünk meg:
Az eljárás hatására leáll a pozícionálás, minden motor kikapcsol, és közvetlen hozzáférést kapunk a robot memóriájához. Minden memóriamővelet, vagy célpozíció beírás elıtt, meg kell hívni ezt az eljárást. Ha rögzítés nélkül próbálunk hozzáférni a memóriához, akkor a robot leáll, de a sikeres beírás, vagy olvasás nem lesz garantált.
98
A célpozíciók beírása után, a robot nem fogja végrehajtani a mozdulatot mindaddig, amíg el nem végezzük a szoftverhitelesítést. A robot rögzített állapotából való kioldást végzı eljárás tartalmazza a hitelesítési protokollt, melynek implementációja a következı:
Az eljárás hatására, az ízületvezérlés beindul, a memória hozzáférés megszőnik. Minden célpozíció beírása után meg kell hívni ezt az eljárást. A szoftveres rész tárgyalását lehetne még folytatni az utoljára beírt célpozíciók visszaolvasásával, az ízületek aktuális szögállásának meghatározásával, a korábban említett koordinátaleképezésekkel, de ezek sajnos nem férnek bele a dolgozatomba. Az eddig leírtakból a vállalkozó szellemő olvasó el tudja készíteni a hiányzó részeket, és bármilyen alkalmazást ki tud fejleszteni a robot számára.
99
3. Összefoglalás A dolgozatomban tárgyalásra került, egy valódi mőködı robotkar mechanikájának tervezése, és elektronikus vezérlıjének kapcsolási rajzokkal dúsított részletes leírása. E szakdolgozat nem szolgál alapjául egy hasonló mechanikus robotkar legyártásához, viszont ötleteket adhat az elinduláshoz. A vezérlıegységet tárgyaló részbıl kimaradt az oszcillációs panel, és a motormeghajtó panel kapcsolási rajza. Ezek az áramkörök ugyanis, nem tartoznak a digitális áramkörök körébe, és a valódi robot számára ezek a panelek olyan alkatrészekbıl készültek, amelyeket régi tönkrement szórakoztató ipari készülékekbıl termeltünk ki. Valószínőleg, ilyen áramköri elemeket már nem lehet kapni az elektronikai piacon. Viszont, oszcillátort, motormeghajtó fokozatot nagyon sokféleképpen lehet készíteni, amit a vállalkozó szellemő olvasóra bízok, hogy hogyan készíti el. A szoftveres részben pedig, csak azokat az alap programkódokat ismertettem, amelyek a robotkarhoz kötıdı alkalmazás kifejlesztésének elindításához szükségesek. A célpozíciók és motorengedélyezı bitek beírásán, valamint a szoftverhitelesítésen túl, az egyéb funkciókat szintén az olvasó feladata lesz megvalósítani, a közölt programkódok felhasználásával. A dolgozat hátterében levı mőködı robotkarral sikerült elérnünk a kívánt eredményt. Centiméter pontossággal megtalálja a mezıket, és bármilyen alakú sakkfigurát képes, bármely két mezı között átemelni úgy, hogy a start- és célmezıkkel szomszédos bábokat nem, vagy elhanyagolható mértékben érinti. Megfigyeléseim szerint, átlagosan 50 átemelésbıl hibáz el egyet. Viszont, én elvégeztem egy 130 átemeléses tesztet, amely abból állt, hogy a robotnak, a táblára helyezett hosszirányú kezdeti sakkfelállást át kellett pakolnia keresztirányba, majd vissza hosszirányba. Emberi beavatkozás nélkül, hibamentesen végezte el úgy, hogy a legpontatlanabbul lehelyezett sakkfigura is csak 0.5 cm-rel volt elcsúszva a mezı közepétıl. Mivel analóg rendszerő helyzetérzékelıket használtunk, így az azok kopása miatt, idınként a robotot kalibrálni kell. Újkorában ezt szinte naponta meg kellett ejteni, de a mostani bejáratott állapotában, legfeljebb havonta egyszer szükséges elvégezni a kalibrációt. Remélem, szakdolgozatom elnyerte az olvasó tetszését, és sikerült felkeltenem érdeklıdését a robotika iránt.
100
Irodalmi jegyzék [1] John D. Lenk – Elektronikai alapkapcsolások győjteménye, Mőszaki Könyvkiadó 1986 ISBN 963 10 6847 1
[2] Bogdán János, Kovács Mihály, Nagy Ferenc Csaba, Nagy József, Takács Gábor – elektronikai alapkapcsolások győjteménye, Mőszaki Könyvkiadó 1990 ISBN 963 10 8859 6
[3] Klaus Beuth, Olaf Beuth – Az elektronika alapjai, Félvezetık, Mőszaki Könyvkiadó 1990 ISBN 963 10 9624 0
[4] Magyari Béla, Glofák Péter, Theisz Péter – Digitális IC-Atlasz, Mőszaki Könyvkiadó 1977 ISBN 963 10 1976 6
[5] Texas Instruments Deutschland GmbH – Texas TTL receptek, Mőszaki Könyvkiadó 1978 ISBN 963 10 2491 1
[6] Abonyi Zsolt – PC hardver kézikönyv, ComputerBooks 1995 ISBN 963 618 026 1
[7] V. L. Silo – Funkcionális analóg IC-k, Mőszaki Könyvkiadó 1985 ISBN 963 10 6042 X
[8] Kovács Gábor – Az ipari robot, Villanyszerelık lapja 2003 http://www.vgf.hu/villany/nemcsak.php?action=viewfull&ID=364; http://www.vgf.hu/villany/altalanoscikkek.php?action=viewfull&ID=397,
[9] Csáki Tibor – Robottechnika elıadásvázlat 2006 http://www.szgt.uni-miskolc.hu/~csaki/robot.pdf http://www.szgt.uni-miskolc.hu/~mako/robel2.pdf
101