SzabtechLabZH
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
Gyakorló feladatok a laborZH-hoz, 2007. ősz
EREDETI FELADATSOR: LaborZH 2007. ősz, gyakorló feladatok (Megoldása: LaborZH 2007. ősz, gyakorló feladatok - MEGOLDÁS)
Itt van pár feladat, amihez tök jó volna ha összehoznánk a megoldásokat, mert pl. az 1. zh-hoz kiadott pdf-ből is válogattak a zh-ba, lehet hogy itt is van erre esély, másrészt meg gyakorolni mindenképp jó. Köszi :)
Remélem senkinek nem lesznek aggályai ezek csak gyakorlópéldák :P :)
Felelősséget nem vállalok semmiért, nem értek hozzá, lehet hogy komplett hülyeség, aki nagyon vágja, az lecserélheti akár a komplett kódot is....
1. feladat
Tervezze meg a C(s) soros szabályozót úgy, hogy a fázistartalék 60° legyen!
Matlab: (copy-paste Matlabba, magyarázat ez /7. fejezet alapján)
s=zpk('s'); %szokásos P=1/((10+s)*(5+s)*(2+s)); %átviteli függvény megadása kc=1; %kezdeti érték C=kc*(1+0.5*s)/s; %PI szabályzó átviteli függvénye alapján, nézz utána L=C*P; margin(L) %felnyitott kör Bode-diagrammja, fázis- és erősítési tartalék, látszik, hogy van még neki:) figure(2) [mag, phase, w]=bode(L); gm=margin(mag,phase-60,w);%őő izé, doksi:) kc=gm; C=kc*(1+0.5*s)/s; %behelyettesítjük a megkapott erősítési tényezőt L=kc*L; margin(L) %láss csodát, fázistartalék=60.1° [gm,pm,wg,wc]=margin(L); margin(L)
http://i.imgur.com/ciWCWbW.png http://i.imgur.com/KAdgP0h.png
a/ Adja meg a megtervezett PI szabályzó átviteli függvényét:
Matlab:
C
(vagyis beírod a fentiek után, hogy "C", és pont azt írja ki)
Zero/pole/gain: 96.9722 (s+2) ------------- s
b/ Adja meg a zárt rendszer átviteli függvényének domináns póluspárját
Matlab:
T=feedback(L,1) %a zárt rendszer átviteli függvénye pole(T) %dom. pp.= az imag. tengelyhez legközelebb eső komplex konjugált póluspár, a parancs egyértelműen kiadja
Zero/pole/gain: 96.9722 (s+2) -------------------------------------- (s+11.35) (s+2) (s^2 + 3.653s + 8.546) ans = -11.3466 -1.8267 + 2.2824i -1.8267 - 2.2824i -2.0000
c/ Adja meg a zárt rendszer átmeneti függvényének százalékos túllendülését
Matlab:
t=0:0.05:10; y=step(T,t) %átmeneti függvény kiszámítása ys=dcgain(T) %állandósult érték kiszámítása ym=max(y) %maximális érték yt=((ym-ys)/ys)*100 %túllendülés százalékban
Eredmény:
yt = 7.7553
d/ Egység-sebességugrás alapjel esetén adja meg a zárt rendszer állandósult állapotbeli hibáját
Matlab:
Egység-sebességugrás alapjel esetén mivel ebben egy integrátor van, a zárt rendszer állandósult állapotbeli hibája 1/K lesz. Tankönyv 140. old.
Az egységugrás-jelet valóban 0 statikus hibával követi, és az meghatározható az es=1-ys
matlab kóddal, de nem az volt a feladat.
e/ Egység-sebességugrás alapjelet feltételezve írja fel a zárt rendszer kimenőjelének analitikus kifejezését állandósult állapotban
hint: y(t)=t → Y(s)=1/s^2
végérték-tételből: y(t->inf)=lim(s->o) s*X(s) (ahol X(s) a jel, aminek meg akarod határozni a végértékét)
tehát konkrét adatokkal: y(t->inf) = lim(s->0) s*T(s)/s^2
2. feladat
a/ P szabályozás alkalmazása esetén ( C ( s) = K ) határozza meg K azon értékeit, melyekre a zárt kör stabilis.
Strukturálisan stabilis. K bármely értékére stabilis, mivel a fázistolás mindig kisebb mint −180°.
b/
Integrátor már van a rendszerben, de a gyorsasági feltételt ki kell elégíteni, ezért PD szabályozót kell tervezni. A pólusáthelyezési arány például 3, így T = Td/3 = 2/3.
Matlab:
kc=1; C=kc*((1+2*s)/(1+(2/3)*s)); L=C*P; w=logspace(-1,1,500); [mag,phase]=bode(L,w); kc=margin(mag,phase-60,w); %60 fokos fázistartalék C=C*kc L=C*P; L=minreal(L); figure(1),margin(L);
Eredmény:
Zero/pole/gain: 379.5687 (s+0.5) ---------------- (s+1.5)
http://i.imgur.com/yUl1CLv.png
c/
[gt,pm,wg,wc] = margin(L); pm %fázistartalék t1=(3/wc) %a beállási (szabályozási) idő e két érték között lesz t2=(10/wc) T=L/(1+L); figure(2),step(T),grid y=step(T); %kimeneti jel ymax = max(y) %kimeneti jel maximuma ys=dcgain(T) %kimeneti jel állandósult értéke yt=(ymax-ys)/ys*100 %túllendülés százalékban es=1-ys %egytől való eltérés U=C/(1+L); U=minreal(U); figure(3),step(U),grid u=step(U); umax = max(u) %vezérlő jel maximuma
Eredmény:
http://i.imgur.com/cPppq7h.png http://i.imgur.com/jVCaHqe.png
Matlab: ez a doksi 49. oldal 1. példa 1:1-ben ugyanez
3. feladat
a/ P szabályozás alkalmazása esetén ( C ( s) = K ) határozza meg K azon értékeit, melyekre a zárt kör stabilis.
Strukturálisan stabilis. K bármely értékére stabilis, mivel a fázistolás mindig kisebb mint −180°.
b/
Matlab:
kc=1; C=kc*((1+4*s)/(1+(4/3)*s)); L=C*P; w=logspace(-1,1,500); [mag,phase]=bode(L,w); kc=margin(mag,phase-60,w); %60 fokos fázistartalék C=C*kc L=C*P; L=minreal(L); figure(1),margin(L); [gt,pm,wg,wc] = margin(L); pm %fázistartalék értéke t1=(3/wc) %beállási (szabályozási) idő e két érték között lesz t2=(10/wc) T=L/(1+L); figure(2),step(T),grid
Zero/pole/gain: 330.4437 (s+0.25) ----------------- (s+0.75) pm = 60.0003 t1 = 0.7201 t2 = 2.4004
http://i.imgur.com/nXeo67u.png http://i.imgur.com/x42BKRE.png
c/
Matlab:
y=step(T); %kimeneti jel ymax = max(y) %kimeneti jel maximuma ys=dcgain(T) %kimeneti jel állandósult értéke yt=(ymax-ys)/ys*100 %túllendülés százalékban es=1-ys %egytől való eltérés U=C/(1+L); U=minreal(U); figure(3),step(U),grid u=step(U); umax = max(u) %vezérlő jel maximuma
Eredménye:
ymax = 0.9034 ys = 0.5241 yt = 72.3478 es = 0.4759 umax = 330.4437
http://i.imgur.com/3TBrSUl.png
4. feladat
a/ Zérusrendű tartószerv esetén adja meg a folyamat G(z) impulzusátviteli függvényét zérus-pólus alakban.
Az impulzusátviteli függvény más néven: Diszkrét átviteli függvény.
Matlab:
s = zpk('s'); P = 2 / ( (1+s)*(1+4*s)*(1+8*s) ); Ts = 0.5; %ez a mintavételezési idő, adott a feladat szövegében sysd = c2d(P, Ts, 'zoh'); %ez alakítja át diszkrétre. A 'zoh' adja meg, hogy zérusrendű a tartószerv.
-- NovakAron - 2007.11.21.
b/
Matlab:
s=zpk('s'); z=zpk('z',0.5); P=2/((1+s)*(1+4*s)*(1+8*s)) % átviteli függvény ts=0.5; % mintaveteli ido Pz=c2d(P,ts); % diszkrét átviteli függvény Pz % zérus-pólus alak kc=1; %egység körerősítés először [zd,pd,kd] = zpkdata(Pz,'v');%diszkrét folyamat zérusai pólusai Cz=kc*(((z-pd(1))*(z-pd(2)))/((z-1)*z)); %diszkrét szab. átv. fv. Lz = Cz*Pz Lz=minreal(Lz,0.001); w=logspace(-1,1,500); %saját logaritmikus skála beállítása [mag,phase]=bode(Lz,w); %diszkrétből számolt bode diagram [kc,pm,wg,wc]=margin(mag,phase-60,w); %60 fokos fázistöbblet Cz=Cz*kc; Lz=Cz*Pz; %a nyitott kör diszkrét átv. fv. Lz=minreal(Lz,0.001); Tz= Lz/(1+Lz); %diszkrét zárt rendszer átv. fv. Ts=d2c(Tz,'tustin') %folytonos zárt rendszer átv. fv. figure(2),step(Ts),grid %zart rendszer kimeneti jele
Eredmény:
Zero/pole/gain: 0.0625 ------------------------ (s+1) (s+0.25) (s+0.125) Zero/pole/gain: 0.0011005 (z+3.157) (z+0.2247) -------------------------------- (z-0.9394) (z-0.8825) (z-0.6065) Sampling time (seconds): 0.5 Zero/pole/gain: 0.0011005 (z-0.9394) (z-0.8825) (z+3.157) (z+0.2247) ---------------------------------------------------- z (z-1) (z-0.9394) (z-0.8825) (z-0.6065) Sampling time (seconds): 0.5 Zero/pole/gain: 0.0076717 s (s-7.709) (s-4) (s+4) (s+6.318) (s+0.9797) ------------------------------------------------------ s (s+4) (s+4.126) (s+0.9797) (s^2 + 0.7745s + 0.3623)
http://i.imgur.com/tq7wtWn.png
c/
y=step(Ts); ymax = max(y) %a kimenet maximális értéke ys=dcgain(Ts) %állandósult érték yt=(ymax-ys)/ys*100 %túllövés értéke százalékban es=1-ys %az előírt 1-tól való eltérés Uz=Cz/(1+Lz); %zárt rendszer beavatkozó jele Uz=minreal(Uz,0.001); %egyszerűsítések elvégzése figure(3),step(Uz),grid %beavatkozó jel kirajzolása u=step(Uz); umax = max(u) %maximális érték kiírása
Eredmény:
ymax = 1.0000 ys = 1 yt = 1.6233e-004 es = 0 umax = 13.4985
http://i.imgur.com/2BIAmlr.png
5. feladat
ez a doksi 43. oldal 2. példa majdnem 1:1-ben ugyanez
a/
A zavarkompenzáló tagon áthaladó jelnek ki kell ejtenie a zavarás hatását.
Fs = -2*((1+2*s)/(1+10*s))
b/ c/
Matlab:
s=tf('s') P=1/((1+2*s)*(1+s)*(1+6*s)) P=zpk(P) C=(1+6*s)/s L=C*P L=minreal(L) [mag,phase,w]=bode(L); k=margin(mag,phase-60,w) C=k*C margin(C*P) T=C*P/(1+C*P), T=minreal(T) t=0:0.05:40; y=step(T,t); plot(t,y),grid ym=max(y)
http://i.imgur.com/P0MFbu8.png
6. feladat
ez a doksi 43. oldal 1. példa majdnem 1:1-ben ugyanez
a/ Határozza meg a folyamat állapotmátrixait diagonális alakban:
Matlab:
num=1; den=[5 6 1] [a,b,c,d]=tf2ss(num,den); [a,b,c,d]=canon(a,b,c,d,'modal')
Eredmény:
den = 5 6 1 a = -1.0000 0 0 -0.2000 b = -0.6988 -0.3366 c = 0.3578 -0.7428 d = 0
b/ ?
c/ Rajzolja fel a rendszer kimenetének változását és az állapottrajektóriáját nulla bemenet és x0=[-1, 2 ] kezdeti feltétel esetén. (állapotrajektória: a x2 állapotváltozó az x1 függvényében)
Matlab:
x0=[-1,2] [y,x,t]=initial(a,b,c,d,x0); x1=x(:,1); x2=x(:,2); figure(1);plot(t,y,'k');grid figure(2);plot(x1,x2,'k');grid
http://i.imgur.com/qC1JBEm.png http://i.imgur.com/wV8PxLC.png
7. feladat
a/
Matlab:
num_=5; den_=poly([-10, -0.25]); [A,b,c,d]=tf2ss(num_,den_)
A = -10.2500 -2.5000 1.0000 0 b = 1 0 c = 0 5 d = 0
b/
Matlab:
num=1 den=[0.64 1.12 1] pk=roots(den) numk=1; denk=poly(pk); H=tf(numk,denk) H=zpk(H) g0=dcgain(H)
%Egysegnyi erositest akarunk, ezert normaljuk Hn=H/g0 k=acker(A,b,pk) Tk=ss(A-b*k,b,c,d) Tk=zpk(Tk)
Javítandó, hiba:
Error using acker (line 38) Vector P must have SIZE(A) elements
8. feladat
Ez a megoldás nem jó. Csak egy kósza próbálkozás volt.:) Aki tudja a jó megoldást, légyszi javítsa ki! -- HorvathGeza - 2007.11.25.
Ki kell szedni az eredeti átviteli függvényből az időállandókat,
és a gyakorlat könyvben található képlet alapján akkor ki lehet
számolni a megfelelő értékeket.
e^(-Ts/Ti)
és
e^(-Ts/Td)
A kéttárolós tag időállandója 1, az egytárolósé pedig 10.
De a Matlab nekem sehogy sem engedi hogy z^-0.3 al beszorozzam,
pedig így kéne beleszámolni a késleltetést, érdekes módon
z^-1 el engedi.
Nem -0.3 és nem is -1 a hatványkitevő, hanem z^-d, ahol d=egészrész[Td/Ts], Tehát jelen esetben 0.3/0.1=3 => z^-3
a/
Matlab:
s=zpk('s'); Ts=0.1; Thd=1; %holtidő z=zpk('z',Ts); P=0.5*(s+5)/((s+0.1)*(s*s+1.2*s+1));
Gz=c2d(P,Ts,'zoh')
Gz = Gz*z^-Thd; %a holtidő miatt
[zd,pd,kd]=zpkdata(Gz,'v')
kc=1 Cz=kc*((z-exp(-Ts/10))*(z-exp(-Ts/1)))/((z-1)*z) Lz=Cz*Gz [mag,phase,w]=bode(Lz); kc=margin(mag,phase-60,w)
Cz=kc*Cz Lz=Cz*Gz;
Yz=feedback(Lz,1); Uz=feedback(Cz,Gz);
b/
Matlab:
t=0:0.1:0.4;
figure(1),step(Yz,t) figure(2),step(Uz,t)
c/
Matlab:
y_all=dcgain(Yz) u_all=dcgain(Uz)
9. feladat
Adja meg a W1(s) átviteli függvénnyel megadott szakasz átmeneti függvényének maximális értékét és beállási idejét.
Maximális érték meghatározása:
Matlab:
W = 2 / ( 1 + 0.4*s + s^2 ); y = step(W); max(y)
[gm,pm,wg,wc]=margin(W)
beallasi_ido_max=10/wc beallasi_ido_min=3/wc
Eredmény:
beallasi_ido_max = 5.8898 beallasi_ido_min = 1.7669
10. feladat
Matlab:
s=zpk('s'); W=1/(s*(s+3)*(s+6)); %Nincs labilis polus, mehet az egysz. Nyquist %A Nyquist diagram a valós tengelyt -0.00617-nél %metszi, ezt ~162-vel kell szorozni, hogy -1 legyen figure(1), nyquist(W) K=162; W=K*W; figure(2), nyquist(W)
http://i.imgur.com/2Auo86Q.png http://i.imgur.com/GJeBHh6.png
14. feladat (biztos elírták a pdfben, de ez jön:)
Matlab:
A=[-17 -80 -100; 1 0 0; 0 1 0] b=[1;0;0] c=[0,0,1] d=0
a_zart=s^3+60*s^2+1200*s+8000 %polusok: -20, -20, -20
k=acker(A,b,[-20 -20 -20])
Eredmény:
A = -17 -80 -100 1 0 0 0 1 0 b = 1 0 0 c = 0 0 1 d = 0 Zero/pole/gain: (s+20)^3 k = 43 1120 7900
11. feladat
Matlab:
z=tf('z') Gz=(0.0091*z+0.0082)/(z*z-1.7236*z+0.7408) [zd,pd,kd]=zpkdata(Gz,'v') kc=1 Cz=kc Lz=Cz*Gz [mag,phase,w]=bode(Lz); kc=margin(mag,phase-60,w) Cz=kc*Cz Lz=Cz*Gz Lz=minreal(Lz) [gm,pm,wg,wc]=margin(Lz) margin(Lz)
Eredmény:
gm = 8.7017 pm = 59.9160 wg = 0.7699 wc = 0.2219
-- Dög - 2007.11.14.