Egyszabadságfokú mechanikai rendszer irányítása – nyílt hurkú vezérlés A gyakorlat célja Egyenáramú szervo motorral vezérelt egyszabadságfokú mechanikai rendszer meghajtó áramkörének és az ADVANTECH PCI 1711 adatbegy jt kártyának programozásának megismerése, a vezérl szoftver törzsének megvalósítása, a motor nyílt hurkú vezérl programjának megírása.
Elméleti bevezet Robotikai rendszerek esetén a mechanikai rész mozgatása szervomotorral történik. A szervomotort elfordulás érékel vel szereljük fel (a szögelfordulás és szögpozíció mérésére). A robot szegmensét áttételen keresztül illesztjük a szervomotorhoz. A szervomotor az érzékel vel és az áttétellel felel sek a robot csuklójának mozgatásáért. Szervomotorok jellegzetessége, hogy állandósult állapotban a motor sebessége arányosan változik a bemeneti feszültséggel. Nyílt hurkú motorvezérlés esetén két megvalósítandó feladat van: - a motor forgássebességének változtatása - a motor forgásirányának változtatása A szervomotorok forgási sebességét a motor feszültségének változtatásával vezérelhetjük. Ezt általában impulzus szélesség modulált jellel (PWM, Pulse Width Modulation) tesszük. Impulzus szélesség modulált jelek négyszögjelek, amelyekben az egyes négyszögimpulzusok szélességét változtatjuk (lásd 1. Ábra). Mivel a négyszög impulzusok periódusa állandó a kitöltés változtatásával a jel átlagértéke egyenesen arányosan változik. Tehát a motor sebessége is egyenesen arányosan változik a kitöltéssel.
1 Ábra: PWM jel
Ha a PWM jel frekvenciája elégségesen nagy, akkor a rotor induktivitása miatt motor sebessége egyenletes lesz, nem fog változni a jel periódusa alatt. Ez abból adódik, hogy a rotor induktivitásából és ellenállásából álló sz r áramkör a PWM jel nagyfrekvenciás komponenseit megsz ri, az rotoráram állandósult állapotban egyenletes, a kitöltéssel arányos lesz. A PWM jeleket általában digitális jelként generáljuk, majd kapcsoló üzem tranzisztorokkal feler sítjük.
2. Ábra: H híd A motor forgásirányát a rotoron átfolyó áram irányával módosíthatjuk. Ha az áram iránya megváltozik a mozgás iránya is megváltozik. Ezt H hiddal oldjuk meg (lásd 2. Ábra). Ha a hídban vagy az Q1 és Q4 tranzisztor van nyitva vagy a Q2 és Q3 tranzisztor van nyitva. Ennek függvényében a motor forgásiránya megváltoztatható.
Motorvezérl áramkör A laboratóriumi gyakorlat során használt vezérl áramkör szkematikus rajza a 4. Ábrán látható. A PWM jel el állításához LM3524N integrált áramkört alkalmazunk. Az áramkör IN+ bemenetére analóg bemenettel határozzuk meg a PWM jel kitöltését. A kitöltés arányos lesz az IN+ bemenetre adott feszültséggel. A PWM jel frekvenciáját a CT és RT bemenetekre csatolt ellenállással és kondenzátorral állíthatjuk be. Az integrált áramkör a PWM jelet az EA valamint az EB kimeneten generálja. A H híd vezérlésére HIP4081A áramkört alkalmazunk. Az integrált áramkört MOS tranzisztorokból kialakított H hidak vezérlésére alkalmazzák. A bemenetek a BLI valamint az ALI lábak, a kimenetek pedig a AHO (és AHS), ALO (és ALS), BHA (és BHS), BLO (és BLS). Ha a híd mindkét bemenete 0 akkor a Q2 és Q4 tranzisztorok zárva vannak (tehát a motoron rövidzár van) ez a fékezés állapota. Ha valamelyik 0 és a másik 1 akkor a motor forog a megfelel irányba. A hídvezérl IC biztosítja azt is, hogy a hídon ne keletkezzen rövidzárlat. Ugyanis el fordulhat, hogy a kapcsolás pillanatában egy nagyon rövid ideig a két azonos oldalon található tranzisztor nyitva lehet. Ennek a kivédésére a hídvezérl áramkör egy nagyon
rövid késlelteést iktat be a kikapcsolás és bekapcsolás között (tehát ha páldául a Q1 kikapcsol, akkor a Q2 csak egy el re meghatározott, mikro szekundumos nagyságrend id intervallum után fog bekapcsolni) Az irányt egy digitális jellel határozzuk meg (DIR_IN). A PWM jel kombinálva a DIR_IN jellel állíthatjuk egy id ben a motor sebességét és irányát. Ezt az IC1A tagadó kapuval valamint az IC6A és IC6B AND kapuval végezzük. Ha DIR értéke 1 az IC6A AND kapun megy át a PWM jel. Ha DIR értéke 0 az IC6B AND kapun megy át a PWM jel. A hídhoz tartozik egy engedélyez láb ami szintén egy digitális jel. A hídvezérl IC csak akkor aktív (küld jeleket a tranzisztorra), ha DIS lábán digitális 1 jelenik meg. Ez lesz az engedélyez bit (EN), amelynek ha az értéke 0 a motor nem forog A szervomotorok vezérlésénél ugyancsak probléma a túláram megjelenése. Ha a motoron megn a terhelés (páldául a motor rotorjára szerelt mechanika ütközik egy, a környezetében lev tárggyal) a motor árama megengedett érték felé n het, ami a motor károsodásához vezethet. Ezért a motor áramot szükséges mérni, és ha azt tapasztaljuk, hogy értéke nagyobb, mint egy el re meghatározott érték akkor a motorra kapcsolt feszültséget le kell venni, a vezérlést meg kell állítani. Motor áramát az R14 és R15 ellenállásokkal mérjük. Ezeken az ellenállásokon mindig átfolyik a motoráram függetlenül attól, hogy milyen irányba forog a motor. Az ellenállásokon megjelen feszültség arányos lesz a motoráram abszolút értékével. A jelen áramkör esetében a motorárammal arányos feszültség (I_MAX_LIMIT) a PWM jel generáló IC m ködését tiltja le, ha az értéke nagyobb lesz egy el re meghatározható feszültségszintnél. A hídvezérl áramkör a számítógéphez Advantech PCI 1711 típusú adatbegy jt kártyával van csatolva. A kártyával nyolc 12 bites analóg kimenettel és két 12 bites analóg bemenettel van felszerelve. Ugyanakkor tartalmaz egy számláló bemenetet, 16 bit digitális bementet és 16 bit digitális kimenetet.
3. Ábra: Advantech PCI 1711 kártya
A kártya elérhet többek között C++ programozási környezetb l a kártyához ingyenesen adott könyvtár függvények segítségével.
A mérés menete A MotorControl MFC tervben az alábbi feladatokat kell elvégezni. - Az alkalmazás indításakor inicializáljuk a kártyát és az ablakelemeket - Az ciklikusan meghívható függvényben indítsuk el a motort agy EditBox – ban megadott feszültséggel. - Az alkalmazás bezárásakor állítsuk meg a motort. A motor vezérléséhez az alábbi kimeneteket kell használni: COMMANDVOLTAGE – A motor vezérl feszültsége - Analóg kimenet – 0-10 V ENABLE – A motor engedélyezése – digitális kimenet - 1 aktív DIRECTION – A motor forgásiránya – digitális kimenet Az inicializálás az OnInitDialog függvényben történik. Az alkalmazandó függvények: - A kártya vezérl (driver) inicializálása LONG variable; DRV_DeviceOpen(DeviceNum, (LONG far *)&DriverHandle) A kártyához hozzárendel egy változót. A kártya száma 0. - Az analóg kimenet konfigurálása: PT_AOConfig variable; variable.chan = ; // the output channel variable.RefSrc = ; // reference source: internal (0) or external (1) variable.MaxValue = ; // max.reference voltage (Volt) variable.MinValue = ; // min.reference voltage (Volt) DRV_AOConfig(DriverHandle, (LPT_AOConfig)&variable; A vezérl jelet a nullás csatornán küldjük ki. A digitális analóg konverterhez bels referencia feszültséget használunk. A feszültségtartomány a 0-10 V. - Az alkalmazás dialógus ablakán található csúszkák inicializálásához, lekérdezéséhez, elindításához az alábbi függvényeket alkalmazhatjuk: CSlider slidervariable slidervariable.SetRangeMin(int val) slidervariable.SetRangeMax(int val) slidervariable.SetValue(int val) int val = slidervariable.GetValue() - A ciklikus id zít függvény elindítása SetTimer (Timer_ID, Timer_Period_MSec, Parameter) Az els Timert indítjuk el 10 milliszekundumonként a paraméter értéke NULL.
Az id zít függvényben (OnTimer) engedélzezzük a motorvezérlést beállítjuk a motor irányát (digitális kimenetek). Az EditBoxból kiolvasott feszültségértéket kiküldjük az analóg kimeneten. - Editboxból beolvasáshoz az alábbi függvényt alkalmazzuk: int x = GetDlgItemInt(EDIT_BOX_ID) Az értéket millivoltban olvassuk be, majd voltban küldjük ki, tehát kiküldés elött át kell alakítani lebeg pontos változóvá, majd osztani ezerrel. - A digitális kimenetek használata: PT_DioWriteBit variable; variable.port = ; // the digital port number variable.bit = ; // the bit number variable.state = ; // new digital logic state DRV_DioWriteBit(DriverHandle, (LPT_DioWriteBit)&variable); Az ENABLE jel a nullás port nullás bitjén a DIRECTION jel a nullás port egyes bitjén található. - Az analóg jel kiküldése: PT_AOVoltageOut variable; variable.chan = ; // the output channel variable.OutputValue = (FLOAT) ; // floating-point value to send out (Volt) DRV_AOVoltageOut(DriverHandle, (LPT_AOVoltageOut)&variable); Az ediboxból kiolvasott értéket a nullás csatornán küldjük kiAz alkalmazás bezárásakor az ENABLE kimenetre nullát, az analóg kimenetre szintén nullát küldünk, majd lezárjuk a kártyát az alábbi függvény alkalmazásával: DRV_DeviceClose((LONG far *)&DriverHandle)
Kérések, feladatok 1. Keressen más áramköri megoldásokat a H híd lecserélésére 2. Módosítsa úgy a programot, hogy a motorra kiküldend feszültséget egy csuszkáról olvassa le. 3. Alkalmazzon más Advantech függvényt az analóg jel kiküldéséhez.
4. Ábra: A vezérl áramkör szkematikus rajza