• Nem Talált Eredményt

A motor identifikációja

In document Digitális szervo hajtások (Pldal 185-191)

control/Exercise 5 menüpont alatt található laboratóriumi mérési gyakorlat megoldásai

( 6.39 ) Innen az impulzusátviteli függvény:

7.7. A motor identifikációja

7.7.1. A karakterisztika előzetes vizsgálata

Mielőtt az identifikációt elkezdenénk, először vizsgáljuk meg magát a szabályozandó rendszert. Az általunk alkalmazott DC motort az interneten keresztül tudjuk elérni. A rendszer segítségével C nyelven elkészíthetjük a motor bemeneti jeleit megadó szabályozót, majd ennek kódját a távoli mérőállomásra elküldve, az lefuttatja a programot, és visszaküldi a mérési eredményeket. A motor bemenete ebben az esetben az elérni kívánt nyomaték, amelyből ezután egy áramszabályozó kör számítja ki a kiadott feszültséget, így a motorra nem adhatunk a motort károsítóan nagy bemenőjelet. Az általunk szabályozott kimenőjel pedig a sebesség lesz.

Nézzük először, hogy reagál a motor konstans bemenőjel esetén, amelyet most szándékosan nagyra választva vizsgáljuk meg a maximális elérhető forgási sebességet. Legyen tehát az előírt nyomaték 100mNm:

6.29. ábra - Megfigyelőre alapozott állapotvisszacsatolás integrátorral

Megjegyezzük, hogy a sebesség számítása a pozícióból numerikus deriválással és szűréssel történik. Ezért marad néhány tüske a mérési eredményben. A szűrő tervezésére majd a későbbiekben visszatérünk.

Ugyanez 3mNm esetén:

6.30. ábra - A szöbsebesség időfüggvénye

Több méréssel megállapítható, hogy kb. 14 rad/s a szögsebesség felső maximuma. Jól láthatjuk, hogy kisebb nyomaték esetén a rendszer nagyobb választ adott, ami arra utal, hogy nagy nyomatékok esetén a nyomatékszabályozás helytelenül működik.

Most nézzük ugyanezt a másik forgási irányba is (-3mNm nyomaték esetén):

6.31. ábra - A szöbesebesség időfüggvénye

Jól látható, hogy a szögsebesség végértéke közel azonos. Hogy a rendszerről több információt nyerjünk, elvégeztünk egy kvázistatikus mérést, hogy megvizsgáljuk a nyomaték és a kimeneti sebesség közti összefüggést. A mérés során lassan, először -3mNm nyomatékot adtunk ki, és megvártuk, míg a kimenet ennek megfelelően beállt, ezután lassan növeltük a nyomatékot +3mNm eléréséig:

6.32. ábra - Szögsebesség nyomaték karakterisztika

Amint látható, rendszerünk igen távol áll a lineáristól:

• Holtsáv: a tapadási súrlódás miatt.

• Több töréspont is látható.

• Hiszterézis: az is befolyásolja az eredményt, hogy milyen irányban kezdjük a mérést.

7.7.2. Gerjesztés megtervezése az identifikációhoz

Ahhoz, hogy szabályozónk működni tudjon, minél lineárisabb rendszerre kell törekednünk. Ennek eléréséhez használjuk fel azt, hogy a nemlineáris rendszerek adott munkapont körül általában jól linearizálhatóak. Így a szabályozó működésének bemutatása során egy precíziós sebességszabályozót készítünk. Először egy egyszerű szabályozóval a munkapont közelébe visszük a rendszert, majd onnan átadjuk azt a precíziós szabályozónknak.

Hogy a rendszer identifikációját elvégezzük, a rendszert először a kívánt munkapont közelébe visszük, majd ott adunk rá négyszögjelet, amelyre adott válasz lesz az identifikáció alapja. A kiválasztott lineáris szakasz a 0.2..0.5mNm-es lineáris szakasz. Ennek identifikációjához egy 4s periódus idejű, 0.35mNm középnyomatékú, 0.15mNm amplitúdójú négyszögjelet használtunk. A munkapontba való beállásra 2s időt hagytunk.

6.33. ábra - A szögsebesség változása

Amint látható, ez a kimenet már lineáris rendszer eredményének mutatkozik. A méréshez szükséges vezérlés C kódja:

static float filB0 = 0, filB1 = 0.00013337, filB2 = 0.0012028, filB3 = 0.0009847099, filB4 = 7.3193E-05;

static float filA0 = 1, filA1 = -3.1152, filA2 = 3.6392, filA3 = -1.8895, filA4 = 0.36788;

//Bemeneti értékek

static float input0 = 0, input1 = 0, input2 = 0, input3 = 0, input4 = 0;

//Szűrt értékek

static float filter0 = 0, filter1 = 0, filter2 = 0, filter3 = 0, filter4 = 0;

// Position is saved automatically ResultData.Position = CurrentPosition;

// Angular velocity is saved automatically if (CurrentTime != 0.0f){

ResultData.Velocity = (1000.0f * (float)(CurrentPosition - OldPosition)/(float)(CurrentTime - OldTime));

input4 = input3; input3 = input2; input2 = input1; input1 = input0;

filter4 = filter3; filter3 = filter2; filter2 = filter1; filter1 = filter0;

ResultData.StateVariable_5 = filter0;

u = (((int)CurrentTime - start) % period - period / 2 > 0 ? amplitude : -amplitude);

}

ResultData.Torque = u + bias;

ResultData.StateVariable_6 = u;

return ResultData;

}

A szűrő tervezési módját a későbbiekben tárgyaljuk.

7.7.3. Identifikáció MATLAB segítségével

Először be kell töltenünk a mérési eredményeket a MATLAB környezetbe. A beállási szakaszt levágjuk, hiszen arra nem lesz szükség. Az identifikáció során a valódi sebesség és nyomaték helyett azok munkaponttól való különbségét használjuk, így ezek kezdő időpontban – a munkapontban – mért értékét a mérési eredményekből levonjuk. Az identifikációhoz meg kell adnunk a mintavételezési időt, ami ebben az esetben 1ms. Ezután létrehozzuk a mérést leíró adatszerkezetet a System Identification Toolbox számára az iddata parancs segítségével, amelynek meg kell adni a bemeneti és kimeneti jelek mérésének eredményét és a mintavételezési időt. Ezután következhet a polinomok fokszámának megadása az ARMAX modellhez, ezt egy sorvektorban kell megtennünk, amelynek elemei sorban: . Az első elem adja meg az polinom fokszámát, azaz az állapotváltozók számát, a második a fokszámánál eggyel nagyobb, a harmadik elem fokszáma, míg a negyedik a holtidő. A megadás során ügyeljünk arra, hogy és . Bár az identifikáció igen sok polinomfokszám variáció mellett lefut, legyünk figyelemmel arra is, hogy az identifikáció bizonytalansága nő a fokszámmal, ilyenkor a MATLAB a „Warning: Pole locations are more than 10% in error.‖ üzenetet jeleníti meg. Ez azért fontos, mert később ezeket a pólusokat át akarjuk helyezni, ehhez pedig ki kellene ejteni őket, ami nem fog sikerülni, ha nem ott vannak, mint azt terveztük. Mivel az identifikáció csak pár másodpercig tart, így számos beállítást kipróbálhatunk. Az identifikációt az armax parancs segítségével, a mérési adatok és a polinomfokszámok megadása után végezhetjük el. A függvény eredménye az identifikált rendszert leíró struktúra, amelyből a th2poly függvénnyel megkaphatjuk a polinomokat leíró sorvektorokat. Ezekben az együtthatók csökkenő kitevőjű tagok mellett értendőek, az utolsó elem így taghoz tartozik, és az

eredményben lehetnek 0 együtthatók is. Mivel ezzel tulajdonképpen megkapjuk a diszkrét átviteli függvény számlálóját és nevezőjét, így az a tf függvénnyel elő is állítható. Az identifikációt elvégző MATLAB kód így:

start=1800; %kezdőidőpont

y=velocity2(start:end)-velocity2(start); %szögsebesség-mérések vektora u=torque2(start:end)-torque2(start); %nyomatékmérések vektora n=3; %állapotváltozók száma

Ts=0.001; %mintavételezési idő megadása z=iddata(y,u,Ts); %mérési adatok megadása nn=[n,1,1,1]; %fokszámok megadása tharmax=armax(z,nn); %identifikáció

[A,B,C]=th2poly(tharmax); %polinomok kiolvasása

sys=tf(B,A,Ts); %átviteli függvény előállítása A diszkrét idejű átviteli függvény így:

( 6.47 )

Ez persze így nem sokat mond számunkra arról, hogy ez tényleg jól leírja-e a rendszert, ezért számoljuk ki az identifikált rendszer válaszát az általunk a valós rendszernek megadott bemenetre (a nyomaték már a MATLAB importálás előtt a munkapont körül volt):

yid=idsim(tharmax,u,zeros(n,1)); %identifikált rendszer válasza t=0:Ts:(size(y)-1)*Ts; %idővektor az ábrázoláshoz

figure(1); %új grafikon

plot(t,y,t,yid); %grafikon megjelenítése legend('mért','identifikált'); %jelmagyarázat xlabel('idő [s]'); %vízszintes tengelycím

ylabel('szögsebesség [rad/s]'); %függőleges tengelycím

Az identifikált rendszer működését az idsim függvény segítségével ellenőrizzük, amely meghatározza a bemenetek sorvektorának és a kezdeti állapotnak megfelelő kimeneti értékeket. Ezután ezt grafikonon is könnyen ábrázolhatjuk, de ehhez szükség van egy idő sorvektorra is, amelyet a szokásos módon előállíthatunk:

6.34. ábra - A modell és a mérés összehasonlítása

Amint az látható, az identifikált rendszer és eredeti viselkedése jól közelíti egymást. Fontos figyelembe venni, hogy az identifikációhoz használt gerjesztés ugyan tetszőleges lehet, de fontos, hogy olyan legyen, amelynek kimenete alkalmas a rendszerjellemzők megjelenítésére. Az identifikációs algoritmus a legtöbb esetben adni fog

eredményt, azonban azt semmi sem garantálja, hogy ez az eredmény jól írja le a kívánt rendszert, ez ugyanis csak az adott gerjesztés esetén jelenthető ki nagyobb biztonsággal.

A szabályozó megtervezéséhez szükségünk van a rendszer diszkrét idejű állapottér modelljére, ezt az ss parancs segítségével könnyen megkaphatjuk:

sysd=ss(sys); %állapottér modell [Phi Gamma C D]=ssdata(sysd); %mátrixok kiolvasása

Ezzel készen állunk a szabályozó megtervezésére.

In document Digitális szervo hajtások (Pldal 185-191)