„Szabályozástechnika - Folytonosidejű állapotteres szabályozók tervezése” változatai közötti eltérés

David14 (vitalap | szerkesztései)
David14 (vitalap | szerkesztései)
aNincs szerkesztési összefoglaló
105. sor: 105. sor:
% sebességgel mozog a nullponja felé. A PLAY gombra nyomva láthatjuk, hogy a
% 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.
% lengőrendszer a szabályzó segítségével beáll a nullhelyzetébe.
% Várakozás billentyűlenyomásra
pause
</syntaxhighlight>
== Alapjel miatti korrekció ==
<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>
[[File:szabtech_alapjel_követés_ábra.JPG]]
<syntaxhighlight lang="matlab" style="font-size: 140%;">
% Adott a szakaszunk állapotegyenletei: x' = A*x + B*u és y = C*x (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'(inf) = 0.
% 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(inf) = Nx*r(inf) = Nx, mivel r(inf)=1 egységugrás alapjel esetén.
% Ha azonban a K bemenete 0, akkor a kimenete is 0, így u(inf) = Nu*r(inf) = Nu.
% Ezek lapján felírható az alábbi egyenletrendszer:
%
% 0 = A*x(inf) + B * u(inf) = A*Nx + B*Nu
% 1 = C*x(inf)              = C*Nx
%
% Melyeket mátrixos alakban felírva:
%
% ( A  B )  ( Nx )  ( 0 )
% ( C  0 ) * ( Nu ) = ( 1 )
%
% Melyből már kapásból adódik az Nx és Nu erősítések:
%
% ( Nx )  ( A  B )^-1  ( 0 )
% ( Nu ) = ( C  0 )    * ( 1 )
% A keresett erősítésvektor meghatározása:
N=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=N(1:2) % Annyi elem, ahány állapotunk van -> Nx=N(1:n)
Nu=N(end) % Skalár
% A megfelelő Simulink-modell megnyitása
open('continuous_3');
% Most már zérus kezdeti értékekkel indítjuk a lengőrendszert és cél, hogy
% 1 méterrel kimozdítsuk és stabilan ott tartsuk a testet.


% Várakozás billentyűlenyomásra
% Várakozás billentyűlenyomásra
158. sor: 210. sor:
% Ugyanaz a felállás mint az előbb, csak most állapotmegfigyelővel.
% Ugyanaz a felállás mint az előbb, csak most állapotmegfigyelővel.
% Látható, hogy a szabályzás ugyanolyan hatékony maradt.
% Látható, hogy a szabályzás ugyanolyan hatékony maradt.
% Várakozás billentyűlenyomásra
pause
</syntaxhighlight>
== Alapjel miatti korrekció ==
<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>
[[File:szabtech_alapjel_követés_ábra.JPG]]
<syntaxhighlight lang="matlab" style="font-size: 140%;">
% Adott a szakaszunk állapotegyenletei: x' = A*x + B*u és y = C*x (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'(inf) = 0.
% 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(inf) = Nx*r(inf) = Nx, mivel r(inf)=1 egységugrás alapjel esetén.
% Ha azonban a K bemenete 0, akkor a kimenete is 0, így u(inf) = Nu*r(inf) = Nu.
% Ezek lapján felírható az alábbi egyenletrendszer:
%
% 0 = A*x(inf) + B * u(inf) = A*Nx + B*Nu
% 1 = C*x(inf)              = C*Nx
%
% Melyeket mátrixos alakban felírva:
%
% ( A  B )  ( Nx )  ( 0 )
% ( C  0 ) * ( Nu ) = ( 1 )
%
% Melyből már kapásból adódik az Nx és Nu erősítések:
%
% ( Nx )  ( A  B )^-1  ( 0 )
% ( Nu ) = ( C  0 )    * ( 1 )
% A keresett erősítésvektor meghatározása:
N=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=N(1:2) % Annyi elem, ahány állapotunk van -> Nx=N(1:n)
Nu=N(end) % Skalár
% A megfelelő Simulink-modell megnyitása
open('continuous_3');
% Most már zérus kezdeti értékekkel indítjuk a lengőrendszert és cél, hogy
% 1 méterrel kimozdítsuk és stabilan ott tartsuk a testet.


% Várakozás billentyűlenyomásra
% Várakozás billentyűlenyomásra