„SzabtechLabZH” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
(pre tag az első feladatnál, továbbiaknál csak code tag, hogy megmaradjon a Wikis formázás, dőltté tétel - de egyébként ha nem talpas betűtípus, akkor hülyén néz ki a kód ide bepakolva)
a (benne maradt egy apró tesztszöveg)
16. sor: 16. sor:
  
 
'''Matlab:''' (copy-paste Matlabba)
 
'''Matlab:''' (copy-paste Matlabba)
 
* a
 
:Behúzott sor
 
valami
 
* b
 
asd
 
* c
 
qwe
 
* d
 
dasfas
 
  
 
<pre>
 
<pre>

A lap 2013. május 11., 18:10-kori változata

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

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 labor zárthelyihez

Gyakorló feladatok a labor ZH-hoz (pdf) Itt még elérhető

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)

s=zpk('s');
P=1/((10+s)*(5+s)*(2+s));
kc=1;
C=kc*(1+0.5*s)/s;
L=C*P;
margin(L)
figure(2)
[mag, phase, w]=bode(L);
gm=margin(mag,phase-60,w);
kc=gm;
C=kc*(1+0.5*s)/s;
L=kc*L;
margin(L)
[gm,pm,wg,wc]=margin(L);
margin(L)

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)

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:)

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

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

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ég-ugrá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->o) 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);

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


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

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

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

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

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)

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')

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

7. feladat

a/

Matlab:

num_=5;
den_=poly([-10, -0.25]);
[A,b,c,d]=tf2ss(num_,den_)

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)

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

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)

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])

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)

-- Dög - 2007.11.14.