„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)
168. sor: 168. sor:
<syntaxhighlight lang="matlab" style="font-size: 140%;">
<syntaxhighlight lang="matlab" style="font-size: 140%;">


% Tervezés
% Amikor az állapot-visszacsatolás 0-ba (alaphelyzetbe) viszi a rendszert, a beavatkozó jel is 0 lesz,
NxNu=inv([A B; C 0])*[0;0;1];
% 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.
% 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
% Az Nx-et és Nu-t tartalmazó vektor szétválasztása
Nx=NxNu(1:2) % Annyi elem, ahány állapotunk van
Nx=N(1:2) % Annyi elem, ahány állapotunk van -> Nx=N(1:n)
Nu=NxNu(end) % Skalár
Nu=N(end) % Skalár


% A megfelelő Simulink-modell megnyitása
% A megfelelő Simulink-modell megnyitása
open('continuous_3');
open('continuous_3');
% Most már zérus kezdeti értékekkel indítjuk a legnőrendszert és cél, hogy
% 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.
% 1 méterrel kimozdítsuk és stabilan ott tartsuk a testet.


186. sor: 216. sor:


</syntaxhighlight>
</syntaxhighlight>
== Terhelésbecslő tervezése ==
== Terhelésbecslő tervezése ==
<syntaxhighlight lang="matlab" style="font-size: 140%;">
<syntaxhighlight lang="matlab" style="font-size: 140%;">