„Szabályozástechnika - Folytonosidejű állapotteres szabályozók tervezése” változatai közötti eltérés
A VIK Wikiből
107. sor: | 107. sor: | ||
Mo=obsv(A,C); % A megfigyelhetőségi mátrix... | Mo=obsv(A,C); % A megfigyelhetőségi mátrix... | ||
rank(Mo) % ... és rangja | rank(Mo) % ... és rangja | ||
% Ha rank(Mo) = n, akkor a rendszer megfigyelhető | % Ha rank(Mo) = n, akkor a rendszer megfigyelhető! | ||
% Megfigyelő tervezése | % Megfigyelő tervezése | ||
124. sor: | 124. sor: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Alapjel miatti korrekció == | == Alapjel miatti korrekció == | ||
<syntaxhighlight lang="matlab" style="font-size: 150%;"> | <syntaxhighlight lang="matlab" style="font-size: 150%;"> |
A lap 2014. január 5., 17:45-kori változata
Simulink modellek
- Töltsd le!
- Csomagold ki!
- Másold be a Matlab aktuális munkakönyvtárába!
A mechanikai lengőrendszer leírása
%% Állapotteres szabályozás folytonos időben
%% Mechanikai lengőrendszer leírása
% A rendszer paraméterei
m=2; % A test tömege
k=0.75; % Rugóállandó
b=0.25; % Csillapítás
% A rendszer differenciálegyenlete:
% F = mx'' + bx' +kx
%% Állapotteres leírás mátrixokkal
% Állapotváltozók, be es kimenet:
% x_ = [x x']'
% u = F
% y = x
%
% Az állapotegyenletek:
% x' = x'
% x'' = -(k/m)x - (b/m)x' + (1/m)F
%
% Az állapotteres leírás:
% x_' = Ax_ + Bu
% y = Cx_ + Du
%
% Az állapotteres leírás mátrixai:
A = [0 1; -k/m -b/m]
B = [0; 1/m]
C = [1 0]
D = 0
sys=ss(A,B,C,D); % A rendszer összeállítása
Állapotvisszacsatolás tervezése
damp(A) % A rendszer sajátértékei, azok csillapítása (xi)
% és csillapítatlan sajátfrekvenciája (w0)
% Gyorsabb, de jobban csillapított zárt kört szeretnénk
w0=1;
xi=0.8;
% A zárt kör sajátértékei
sdom1=-w0*xi+j*w0*sqrt(1-xi^2);
sdom2=conj(sdom1);
% A zárt kör sajátértékeit tartalmazó vektor
phic=[sdom1 sdom2];
% Ha a rendszernek 2-nél több állapotváltozója lenne, akkor
% n-2 darab, a domináns poluspárnál 3-5ször gyorsabb, valós
% segédpólust (scinf) is bele kellene vennünk.
% Az irányíthatóság ellenőrzése
Mc=ctrb(A,B); % Az irányíthatósági mátrix...
rank(Mc) % ... és rangja
% Ha rank(Mc) = n, akkor a rendszer irányítható!
% Állapotvisszacsatolás tervezése az Ackermann-képlet segítségével
K=acker(A,B,phic)
% A zárt kör sajátértékei az általunk előírt domináns póluspár lesz
damp(A-B*K)
% A megfelelő Simulink-modell megnyitása
open('continuous_1');
% A rendszerünk itt egy [-1 -0.1] kezdőértéket kap, azaz t=0-ban
% a lengőrendszer a nullpontjához képest -1 méterrel ki van mozdítva
% és éppen 0.1 m/s pillanatnyi sebességgel mozog a nullponja felé.
% A PLAY gombra nyomva láthatjuk, hogy a lengőrendszer a szabályzó
% segítségével beáll a nullhelyzetébe.
% Várakozás billentyűlenyomásra
pause
Állapotmegfigyelő tervezése
% A megfigyelő sajátértékei jóval gyorsabbak mint a zárt kör sajátértékei
soinf=-5
% A megfigyelő karakterisztikus gyökei: soinf megfelelő multiplicitással (n)
phio=[soinf soinf]
% A megfigyelhetőség ellenőrzése
Mo=obsv(A,C); % A megfigyelhetőségi mátrix...
rank(Mo) % ... és rangja
% Ha rank(Mo) = n, akkor a rendszer megfigyelhető!
% Megfigyelő tervezése
G=acker(A',C',phio)'
F=A-G*C
H=B
% A megfelelő Simulink-modell megnyitása
open('continuous_2');
% Ugyanaz a felállás mint az előbb, csak most állapotmegfigyelővel.
% Látható, hogy a szabályzás ugyanolyan hatékony maradt.
% Várakozás billentyűlenyomásra
pause
Alapjel miatti korrekció
% Tervezés
NxNu=inv([A B; C 0])*[0;0;1];
% n darab 0-át kell az oszlopvektorba pakolni és a végére egyetlen 1-est.
% Az Nx-et és Nu-t tartalmazó vektor szétválasztása
Nx=NxNu(1:2) % Annyi elem, ahány állapotunk van
Nu=NxNu(end) % Skalár
% A megfelelő Simulink-modell megnyitása
open('continuous_3');
% Most már zérus kezdeti értékekkel indítjuk a legnőrendszert és cél, hogy
% 1 méterrel kimozdítsuk és stabilan ott tartsuk a testet.
% Várakozás billentyűlenyomásra
pause
Terhelésbecslő tervezése
% A kibővített rendszer mátrixai
Atilde=[A B; 0 0 0]; % n+1 nulla az utolsó sorba (SISO)
Btilde=[B;0]; % Fixen 1 darab nulla a végére (SISO)
Ctilde=[C 0]; % Fixen 1 darab nulla a végére (SISO)
% A megfigyelő sajátértékeit tartalmazó vektorban soinf most egyel nagyobb
% multiplicitással szerepel (n+1), hiszen felvettünk egy új (fiktív) állapotot
phiotilde=[soinf soinf soinf];
% Megfigyelőtervezés a kibővített rendszerhez
Gtilde=acker(Atilde',Ctilde',phiotilde)'
Ftilde=Atilde-Gtilde*Ctilde;
Htilde=Btilde;
% A megfelelő Simulink-modell megnyitása
open('continuous_4');
% t=10 secnél egy egységugrás jellegű zavarás adódik a szakasz bemenetére.
% A modellben a K,Nu és Nx paraméterek ugyanazok, mint amiket korábban meghatároztunk.
% Várakozás billentyűlenyomásra
pause
Integráló szabályozás tervezése
% Itt új K erősítésvektrot kell meghatározni, de a többi már
% meghatározott paraméter ugyanaz marad!
% A kibővített rendszer mátrixai
Ai=[A zeros(2,1);C 0]; % Az első sorban n*1-es nullmátrix
% A második sorban fixen 1 darab nulla (SISO)
Bi=[B;0]; % Fixen 1 darab nulla a végére
% Az integrátor állapotának -3-as sajátértéket írunk elő
phictilde=[sdom1 sdom2 -3];
% Állapotvisszacsatolás számítása a kibővített rendszerre
Ktilde=acker(Ai,Bi,phictilde);
% Az állapotvisszacsatolás vektorának felbontása
Kt=Ktilde(1:2); % Annyi eleme van, ahány valódi állapotunk (n)
Ki=Ktilde(3); % Skalár
% A megfelelő Simulink-modell megnyitása
open('continuous_5');
% Vigyázat ez itt a terhelésbecslő nélküli modell továbbfejlesztése.
% Az integráló szabályozás is a bemenetre szuperponálódott zavarjelek
% kiküszöbölésére való. Itt Nu helyett egy Ki erősítés van és egy integrátor,
% valamint K helyett Kt !!!
% Várakozás billentyűlenyomásra
pause