clear
close all
echo on
% -------------------------------------------------------------------------
% Irányítástechnika II.
% 4. számítógépes gyakorlat
% Irányítási rendszerek szintézise
% -------------------------------------------------------------------------
% Folytonos idejû lineáris rendszer megadása átviteli függvényével:
% SISO rendszer esetén pl:
%
%           0.6
% W1(s) = -------
%         s + 0.2
%
%
%          10
% W2(s) = -----
%         s + 1
%
% -------------------------------------------------------------------------
% Tagok soros kapcsolása: W_ser = W1*W2
% -------------------------------------------------------------------------
%
sys1 = tf(.6,[1 .2]);
sys2 = tf(10,[1 1]);
sys_ser = series(sys1,sys2)
pause;
%
% -------------------------------------------------------------------------
% Tagok párhuzamos kapcsolása: W_par = W1+W2
% -------------------------------------------------------------------------
%
sys_par = parallel(sys1,sys2)
pause
%
% -------------------------------------------------------------------------
% Tagok visszacsatolása: W_fb1 = W1/(1+W1*W2)
%                        W_fb2 = W1*W2/(1+W1*W2)
% -------------------------------------------------------------------------
%
sys_fb1 = feedback(sys1,sys2)
sys_fb2 = feedback(series(sys1,sys2),1)
pause
%
% -------------------------------------------------------------------------
% Felnyitott kör Bode diagramja, fázistartalék, amplitúdó tartalék
%
%                    20
% W1(s) = -------------------------
%         (100s + 1)(50s + 1)(s + 1)
% -------------------------------------------------------------------------
%
sys = tf(20, conv([1 1],conv([50 1],[100 1])));
bode(sys);
grid;
%
pause
margin(sys);
grid;
%
pause
% -------------------------------------------------------------------------
% P kompenzátor tervezése: 45°-os fázistartalékra
% -------------------------------------------------------------------------
%
% A kompenzátorral -135°-os fázistolásnál kell 0dB erõsítést elérni! 
% A Bode diagramból leolvasva ehhez 0.0342 rad/sec körfrekvencia tartozik.
% Ezen a körfrekvencián az erõsítés 9dB tehát a szükséges kc erõsítés: -9dB
% -------------------------------------------------------------------------
%
% 
kc = 10^(-9/20);
sys0_p = tf(20*kc, conv([1 1],conv([50 1],[100 1])));
% ellenõrzés:
hold on;
margin(sys0_p);
grid;
hold off;
pause;
sys_p = feedback(sys0_p,1);
step(sys_p);
grid;
[y,t,x] = step(sys_p);
%
% túllendülés %-ban:
sigm_p = (max(y)-y(end))/y(end)*100
% statikus hiba %-ban:
hs_p = (1-y(end))*100

pause
% -------------------------------------------------------------------------
% PI kompenzátor tervezése: 45°-os fázistartalékra
% -------------------------------------------------------------------------
% 
% A P kompenzátorral beálított nagyfrekvenciás viselkedés elsõ közelítésben
% megfelelõ. A PI kompenzátor idõállandója Ti = 100 (a szakasz legnagyobb idõállandója)
% -------------------------------------------------------------------------
%
kc = 10^(-9/20);
sys_pi = tf(kc*[100 1],[100 0]);
sys0_pi = series(sys,sys_pi);
margin(sys0_pi);
grid;

sys_pi = feedback(sys0_pi,1);
step(sys_pi);
grid;
[y,t,x] = step(sys_pi);
%
% túllendülés %-ban:
sigm_pi = (max(y)-y(end))/y(end)*100
% statikus hiba %-ban:
hs_pi = (1-y(end))*100
% beállási idõ +-5% hibasáv esetén:
hold on
oo=ones(1,length(t));
plot(t,y(end)*1.05*oo,'--r',t,y(end)*0.95*oo,'--r')
hold off;

echo off;
for ii = length(t):-1:1
    if abs(y(ii)-y(end)) > (y(end)*.05)         
        break;
    end;
end;
echo on; 

tb = t(ii+1)
pause
%
% kc csökkentésével a rendszer lassulása árán a túllendülés csökkenthetõ
%
kc = 0.1;
sys_pi2 = tf(kc*[100 1],[100 0]);
sys0_pi2 = series(sys,sys_pi2);
sys_pi2 = feedback(sys0_pi2,1);
%
% Összehasonlítás:
%
step(sys_pi);
hold on;
step(sys_pi2);
step(sys_p);
legend('PI kc = .35','PI kc = .1', 'P') 
hold off

echo off;





