„Szabályozástechnika - Diszkrétidejű állapotteres szabályozók tervezése” változatai közötti eltérés
aNincs szerkesztési összefoglaló |
aNincs szerkesztési összefoglaló |
||
| (5 közbenső módosítás, amit egy másik szerkesztő végzett, nincs mutatva) | |||
| 48. sor: | 48. sor: | ||
<syntaxhighlight lang="matlab" style="font-size: 140%;"> | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
% Az állapotteres szabályzás alapelve, hogy a zárt körben előre meghatározott pólusokat szeretnénk. | |||
% Ezek általában egy domináns komplex konjugált póluspár (zdom1 és zdom2 - ez határozza meg a tranzienseket), | |||
% és megfelelő számú, a domináns póluspárnál 3-5ször gyorsabb pólus (zcinf). | |||
% Ezekből a segédpólusokból n-2 darabra van szükség, ahol n az állapotváltozók száma. | |||
% Ezt a kívánt póluselrendezést úgy érhetjük el, hogy a bemenetre egy K erősítésvektoron keresztül negatívan | |||
% visszacsatoljuk az állapotváltozókat, azaz u = -K*x. Ha ezt behelyettesítjük a rendszer állapotegyenletébe, | |||
% akkor x[k+1] = Phi*x[k] + Gamma*u[k] = Phi*x[k] + Gamma*(-K*x[k]) = (Phi-Gamma*K)*x[k] lesz a módosult | |||
% rendszer állapotegyenlete. Látható hogy úgy kell a K értékét megválasztani, hogy az Phi-Gamma*K módosult | |||
% rendszermátrix sajátértékei éppen az általunk előírt pólusok legyenek. Az ehhez szükséges K erősítés | |||
% SOR-vektor az Ackermann képlettel egyszerűen meghatározható. | |||
% | |||
% Az állapot-visszacsatolást tartalmazó szabályzó hatásvázlata: | % Az állapot-visszacsatolást tartalmazó szabályzó hatásvázlata: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 66. sor: | 77. sor: | ||
sdom2=conj(sdom1); | sdom2=conj(sdom1); | ||
% Áttérés z-re | % Áttérés z-re az ismert z = exp(s*Ts) képlet alapján | ||
zdom1=exp(sdom1*Ts); | zdom1=exp(sdom1*Ts); | ||
zdom2=exp(sdom2*Ts); | zdom2=exp(sdom2*Ts); | ||
| 74. sor: | 85. sor: | ||
% akkor n-2 multiplicitással a zcinf pólusok is | % akkor n-2 multiplicitással a zcinf pólusok is | ||
phic=[zdom1 zdom2]; | phic=[zdom1 zdom2]; | ||
% A zárt kör karakterisztikus polinomja | |||
polyphic=poly(phic); | |||
% Az irányíthatóság ellenőrzése | % Az irányíthatóság ellenőrzése | ||
| 98. sor: | 111. sor: | ||
<syntaxhighlight lang="matlab" style="font-size: 140%;"> | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
% | |||
% Amikor az állapot-visszacsatolás 0-ba (alaphelyzetbe) viszi a rendszert, a beavatkozó jel is 0 lesz, | |||
% azaz beáll a stabilis egyensúlyi állapot. Azonban a szabályozásnak nem feltétlenül az a célja, | |||
% hogy 0-ba irányítsunk, hanem célszerű, ha alapjelet is tud követni az eszköz. Ehhez az állapot-visszacsatolót | |||
% "átverjük", az alábbi hatásvázlatnak megfelelően (Nx - oszlopvektor, Nu - skalár): | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| 105. sor: | 123. sor: | ||
<syntaxhighlight lang="matlab" style="font-size: 140%;"> | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
% | % Adott a szakaszunk állapotegyenletei: x[k+1] = Phi*x[k] + Gamma*u[k] és y[k] = C*x[k] (legyen D=0) | ||
% Egységugrás alapjel követése esetén célunk, hogy állandósult állapotban a kimenet 1 értékű legyen. | |||
% Továbbá tudjuk, hogy állandósult állapotban, azaz "végtelenben" x[k+1] = x[k] | |||
% A hatásvázlatról látszik, hogy állandósult állapot esetén a K erősítő bemenetén 0 kell, hogy legyen. | |||
% Ekkor x[k] = Nx*r[k] = Nx, mivel r[k]=1 egységugrás alapjel esetén. | |||
% Ha azonban a K bemenete 0, akkor a kimenete is 0, így u[k] = Nu*r[k] = Nu. | |||
% Ezek lapján felírható az alábbi egyenletrendszer: | |||
% | |||
% x[k] = Phi*x[k] + Gamma * u[k] --> 0 = (Phi-I)*x[k] + u[k] | |||
% 1 = C *x[k] | |||
% | |||
% Behelyettesítve x[k]=Nx és u[k]=Nu értékeket és az egyenleteket mátrixos alakba átírva: | |||
% | |||
% ( Phi-I Gamma ) ( Nx ) ( 0 ) | |||
% ( C 0 ) * ( Nu ) = ( 1 ) | |||
% | |||
% Melyből már kapásból adódik az Nx és Nu erősítések: | |||
% | |||
% ( Nx ) ( Phi-I Gamma )^-1 ( 0 ) | |||
% ( Nu ) = ( C 0 ) * ( 1 ) | |||
% A keresett erősítésvektor meghatározása: | |||
% FIGYELEM: Eltérés a folytonos időtől, hogy itt Phi-eye(n) szerepel első elemként. | % FIGYELEM: Eltérés a folytonos időtől, hogy itt Phi-eye(n) szerepel első elemként. | ||
N=inv([Phi-eye(2) Gamma; C 0])*[0;0;1]; | N=inv([Phi-eye(2) Gamma; C 0])*[0;0;1]; | ||
% Az oszlopvektorba n darab nullát kell pakolni és a végére egyetlen 1-est. | |||
% Az Nx-et és Nu-t tartalmazó vektor szétválasztása | % Az Nx-et és Nu-t tartalmazó vektor szétválasztása | ||
| 126. sor: | 165. sor: | ||
<syntaxhighlight lang="matlab" style="font-size: 140%;"> | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
% Az állapot-visszacsatolásnál minden egyes időpillanatban szükségünk van az állapotok aktuális értékeire. | |||
% Ez a gyakorlatban mérésekkel lenne megvalósítható, ám ez nem mindig lehetséges, vagy ha lehetséges, | |||
% akkor csak nagyon drágán. Éppen ezért használunk állapotmegfigyelőt, ami képes minden időpillanatban | |||
% nagyon jó közelítéssel előállítani az állapotok aktuális értékeit, a szakasz kimenetének (y) és | |||
% bemenetének (u) ismeretében. | |||
% A megfigyelő maga is egy lineáris diszkrét idejű rendszer, melynek differenciaegyenlete: | |||
% xhat[k] = F * xhat[k-1] + G * y[k] + H *u[k-1] | |||
% Ahol xhat a becsült állapotok OSZLOP-vektora, valamint dim{xhat}=dim{x}=n. | |||
% Továbbá éljünk az F = Phi-G*C*Phi és H = Gamma-G*C*Gamma választással. | |||
% A becslés hibájára (xtilde = xhat - x) így az alábbi differenciaegyenlet adódik: xtilde[k+1] = F * xtilde[k] | |||
% Látható, hogy az F mátrix sajátértékei fogják meghatározni, hogy milyen gyorsan csengjenek le a megfigyelés | |||
% tranziensei, azaz hogy milyen pontos legyen a megfigyelésünk. Így szeretnénk ha az F mátrix sajátértékei az | |||
% általunk előírt gyorsaságú (a domináns póluspárnál ~5ször gyorsabb) zoinf pólusok lennének. | |||
% phio(z) = det (zI - F) = det (zI-(Phi-G*C*Phi)) = det (zI-(Phi'-Phi'*C'*G') | |||
% A fenti egyenlőség azért igaz, mivel egy rendszer és annak duálisának azonos a karakterisztikus polinomja. | |||
% Így visszavezettük a feladatot egy fiktív rendszerhez történő állapot-visszacsatolás (K2=G') megtervezésére, | |||
% mely fiktív rendszer rendszermátrixa Phi' (Phi transzponált), bemeneti erősítésvektora pedig | |||
% Phi'*C' (Phi transzponált * C transzponált). | |||
% Ezek ismeretében az állapotmegfigyelő G vektora (vagyis annak transzponáltja) már számítható az | |||
% Ackermann képlettel. | |||
% | |||
% Az állapotmegfigyelőt is tartalmazó állapot-visszacsatolásos szabályzó hatásvázlata: | % Az állapotmegfigyelőt is tartalmazó állapot-visszacsatolásos szabályzó hatásvázlata: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 139. sor: | 200. sor: | ||
zoinf=exp(soinf*Ts); | zoinf=exp(soinf*Ts); | ||
% A megfigyelő karakterisztikus gyökei | % A megfigyelő karakterisztikus polinomjának gyökei - zoinf megfelelő multiplicitással (n) | ||
phio=[zoinf zoinf] | phio=[zoinf zoinf] | ||
% A megfigyelő karakterisztikus polinomja | |||
polyphio=poly(phio) | |||
% A megfigyelhetőség ellenőrzése | % A megfigyelhetőség ellenőrzése | ||
Mo=obsv(Phi,C); % A megfigyelhetőségi mátrix... | Mo=obsv(Phi,C); % A megfigyelhetőségi mátrix... | ||
rank(Mo) | rank(Mo) % ... és rangja | ||
% Ha rank(Mo)=n, akkor a rendszer megfigyelhető | % Ha rank(Mo)=n, akkor a rendszer megfigyelhető! | ||
% Megfigyelő tervezése - VIGYÁZAT: Itt a paraméterezés nem analóg a folytonos esettel! | % Megfigyelő tervezése - VIGYÁZAT: Itt a paraméterezés nem analóg a folytonos esettel! | ||
G=acker(Phi',Phi'*C',phio)' | G=acker(Phi',Phi'*C',phio)' | ||
F=Phi-G*C*Phi | F=Phi-G*C*Phi | ||
H=Gamma-G*C*Gamma | H=Gamma-G*C*Gamma | ||
% A megfelelő Simulink-modell megnyitása | % A megfelelő Simulink-modell megnyitása | ||
| 159. sor: | 222. sor: | ||
% ^ ^ | % ^ ^ | ||
% x[k] = F * x[k-1] + G * y[k] + H * u[k-1] | % x[k] = F * x[k-1] + G * y[k] + H * u[k-1] | ||
% | |||
% FIGYELEM: Mivel aktuális megfigyelőt terveztünk, így az y[k] nincs késleltetve! | % FIGYELEM: Mivel aktuális megfigyelőt terveztünk, így az y[k] nincs késleltetve! | ||
| 171. sor: | 234. sor: | ||
<syntaxhighlight lang="matlab" style="font-size: 140%;"> | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
% Tegyük fel, hogy a bemenetre rárakódik egy szakaszosan hosszú ideig konstans zaj. Az állapotmegfigyelővel | |||
% ezt is becsülni tudjuk és ezt a becsült értéket kivonhatjuk a bemenetből (beavatkozó jelből), így | |||
% kompenzálhatjuk a zavarás hatását. Ezt úgy oldjuk meg, hogy a zajt egy új állapotváltozónak (xd) tekintjük. | |||
% Mivel a zaj szakaszosan hosszú ideig konstans, ezért xd[k+1]=xd[k], a bemenettől pedig független, ezért a | |||
% differenciaegyenlete: xd[k+1] = 0*x[k] + xd[k] + 0*u[k]. Viszont a többi változó differenciaegyenletébe már | |||
% beleszól az xd zavarást modellező fiktív állapotváltozó, méghozzá a Gamma bemeneti mátrixon keresztül: | |||
% x[k+1] = Phi*x[k] + Gamma*( xd[k]+u[k] ) | |||
% Tehát a kibővített rendszerünk állapotegyenletei: | |||
% | |||
% ( x[k+1] ) ( Phi Gamma ) ( x[k] ) ( Gamma ) | |||
% ( xd[k+1] ) = ( 0 1 ) * ( xd[k] ) + ( 0 ) * u[k] | |||
% | |||
% ( x[k] ) | |||
% y[k] = ( C 0 ) * ( xd[k] ) | |||
% | |||
% Új jelöléseket bevezetve a kibővített rendszerünk állapotegyenletei: | |||
% | |||
% xtilde[k+1] = Phitilde * xtilde[k] + Gammatilde * u[k] | |||
% y[k] = Ctilde * xtilde[k] | |||
% | |||
% Tehát az állapotmegfigyelőnket most ehhez a kibővített "tilde" rendszerhez kell megterveznünk. | |||
% A módosult állapotmegfigyelő differenciaegyenlete a hatásvázlatról leolvasható! | |||
% Az terhelésbecslővel kiegészített szabályzó hatásvázlata: | % Az terhelésbecslővel kiegészített szabályzó hatásvázlata: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 180. sor: | 266. sor: | ||
% A kibővített rendszer mátrixai | % A kibővített rendszer mátrixai | ||
Phitilde=[Phi Gamma; 0 0 1]; % n darab nulla és fixen 1 darab egyes (SISO) | Phitilde=[Phi Gamma; 0 0 1]; % n darab nulla és fixen 1 darab egyes (SISO) | ||
Gammatilde=[Gamma;0]; % Fixen 1 darab nulla a végére (SISO) | Gammatilde=[Gamma;0]; % Fixen 1 darab nulla a végére (SISO) | ||
Ctilde=[C 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 | % A megfigyelő sajátértékeit tartalmazó vektorban zoinf most egyel nagyobb | ||
% multiplicitással szerepel, hiszen felvettünk egy új (fiktív) állapotot | % multiplicitással szerepel (n+1), hiszen felvettünk egy új (fiktív) állapotot | ||
phiotilde=[zoinf zoinf zoinf]; | phiotilde=[zoinf zoinf zoinf]; | ||
| 195. sor: | 281. sor: | ||
% A megfelelő Simulink-modell megnyitása | % A megfelelő Simulink-modell megnyitása | ||
open('discrete_4'); | open('discrete_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. | |||
% FONTOS: A Simulink alapból 10 secundumig számol, szóval ezt az időt át kell írni 20-ra az ablak tetején! | |||
% Várakozás billentyűlenyomásra | % Várakozás billentyűlenyomásra | ||
| 205. sor: | 294. sor: | ||
<syntaxhighlight lang="matlab" style="font-size: 140%;"> | <syntaxhighlight lang="matlab" style="font-size: 140%;"> | ||
% Az integráló szabályzó célja a zavarelnyomás és a paraméterbizonytalanságok kiküszöbölése. Ezt úgy érjük el, | |||
% hogy új állapotként felvesszük a kimenet integrálját: xI = integrál (0->t) y(tau) dtau | |||
% Ebből a baloldali téglalap szabályt (LSR) alkalmazva: xI[k+1] = xI[k] + T*y[k] = xI[k] + T*C*x[k] | |||
% Ezzel már felírhatók a kibővített rendszer állapotegyenletei: | |||
% | |||
% ( x[k+1] ) ( Phi 0 ) ( x[k] ) ( Gamma ) | |||
% ( xIfk+1] ) = ( T*C 1 ) * ( xI[k] ) + ( 0 ) * u[k] | |||
% | |||
% ( x[k] ) | |||
% y[k] = ( C 0 ) * ( xI[k] ) | |||
% | |||
% Új jelöléseket bevezetve a kibővített rendszerünk állapotegyenletei: | |||
% | |||
% xi[k+1] = Phii * xi[k] + Gammai * u[k] | |||
% y[k] = Ci * xi[k] | |||
% | |||
% Most ehhez a kibővített rendszerhez kell egy új Ktilde = [Kt Ki] állapot-visszacsatolást megterveznünk. | |||
% Az integráló hatást is tartalmazó szabályzó hatásvázlata: | % Az integráló hatást is tartalmazó szabályzó hatásvázlata: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 213. sor: | 320. sor: | ||
% A kibővített rendszer mátrixai | % A kibővített rendszer mátrixai | ||
Phii=[Phi zeros(2,1);C*Ts 1]; % Az első sorban n*1-es nullmátrix | |||
Phii=[Phi zeros(2,1);C*Ts 1]; | % A második sorban fixen 1 darab nulla (SISO) | ||
Gammai=[Gamma;0]; | Gammai=[Gamma;0]; % Fixen 1 darab nulla a végére | ||
% Az integrátor állapotának s=-3 | % Az integrátor állapotának s = -3 folytonosidejű pólusnak megfelelő sajátértéket írunk elő | ||
phictilde=[zdom1 zdom2 exp(-3*Ts)]; | phictilde=[zdom1 zdom2 exp(-3*Ts)]; | ||
| 224. sor: | 331. sor: | ||
% Az állapotvisszacsatolás vektorának felbontása | % Az állapotvisszacsatolás vektorának felbontása | ||
Kt=Ktilde(1:2); % Annyi eleme van, ahány valódi állapotunk | Kt=Ktilde(1:2); % Annyi eleme van, ahány valódi állapotunk (n) | ||
Ki=Ktilde(3); % Skalár | Ki=Ktilde(3); % Skalár | ||
% A megfelelő Simulink-modell megnyitása | % A megfelelő Simulink-modell megnyitása | ||
open('discrete_5'); | open('discrete_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 | % Várakozás billentyűlenyomásra | ||
| 238. sor: | 346. sor: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[ | [[Kategória:Villamosmérnök]] | ||