%   Script FKLENTW.M zur Herstellung von Bildern
%
%   Reglerentwurf im Bodediagramm
%
% J. Lunze
% 29.10.1995
% für 2. Auflage: 6.11.1998
% für 3. Auflage: 23.5.2001
% für 4. Auflage: 23.9.2003
% für 5. Auflage: 18.4.2005
% für 6. Auflage: 4.12.2006
% für 7. Auflage: 19.6.2008
% für 8. Auflage: 2.2.2010
% für 9. Auflage: 13.2.2012
% für 10. Auflage: 5.5.2014
% für 12. Auflage: 23.03.2020
%
%   
clear
close all
Bspspreg;

%%  Entwurf eines Knotenspannungsreglers
%
figure(1)
O=logspace(-2, 2, 200);
%Strecke=ss2tf(Kraftwerk);
[BetragKraftwerk, PhaseKraftwerk]=bode(Kraftwerk, O);
subplot(2, 1, 1);
semilogx(O, 20*log10(BetragKraftwerk(:)), 'b');
hold on;
% Geradenapproximation
%  Pole: -0.18, -2, -2.27
%  Nullstelle  -0.17
%  deshalb Geradenapproximation wie bei Polen bei 2, 2,27
%
ks=dcgain(Kraftwerk);
Omega=[0.1, 2, 2.27, 100];
Appr=20*log10(ks)+[1, 1, -20*log10(2.27/2), -20*log10(2.27/2)-40*log10(100/2.27)];
semilogx(Omega, Appr, 'b--');

%  PI-Regler mit TN=0.5, kP=1
PIRegler=tf([0.5 1], [0.5 0]);
[BetragPI,PhasePI]=bode(PIRegler, O);
semilogx(O, 20*log10(BetragPI(:)), 'b');
% Geradenapproximation des PI-Reglers an den Frequenzen [0.1, 2, 2.27, 100]
ApprRegler=[-20*log10(0.1/2), 0, 0, 0];
semilogx(Omega, ApprRegler,'b--');
latextitle('Bodediagramm von Regelstrecke und Regler');
latexxlabel('$$\omega$$ in rad/s');
latexylabel('$$|G|$$ in dB');
rotateY;
grid('on');
axis([0.1, 100, -50, 25]);
xticks([0.1 1 10 100]);
yticks([-40 -20 0 20]);
latextext(20,8,'$$K({\rm j}\omega)$$');
latextext(0.3,-20,'$$G({\rm j}\omega)$$');
hold off;
%  Phasengang
%subplot(2, 1, 2);
%semilogx(O, PhaseKraftwerk(:), 'b');
%hold on;
%semilogx(O, PhasePI(:), 'b--');
%latexxlabel('$$\omega$$ in rad/s');
%latexylabel('$$\phi$$ in Grad');
%grid('on');
%axis([0.1, 100, -180, 0]);
%hold off


%%  offene Kette
% 
figure(2);
offeneKette=series(Kraftwerk, PIRegler);    % Kraftwerk mit PI-Regler
[GoBetrag, GoPhase]=bode(offeneKette, O);
% Approximation durch IT1-Glied
IT1Glied=tf([1], [0.352 0.8 0]);
[ABetrag, APhase]=bode(IT1Glied, O);
subplot(2, 1, 1);
semilogx(O, 20*log10(GoBetrag(:)), 'b--', O, 20*log10(ABetrag(:)), 'b');
latextitle('Bodediagramm der Regelstrecke mit PI-Regler');
xleer;
latexylabel('$$|G_0|$$ in dB');
rotateY;
grid('on');
latextext(1.25, 7, '$$\downarrow \tilde{\omega}_{\rm s}=1,\!25$$');
latextext(2.27, -21, '$$\uparrow$$');
latextext(0.2, -20, '$$\omega_2=2,\!27$$');
axis([0.1 100 -60 20]);
yticks([-70 -40 -20 0 20]);
%
subplot(2, 1, 2);
semilogx(O, GoPhase(:), 'b');
axis([0.1 100 -180 0]);
grid('on');
latexxlabel('$$\omega$$ in rad/s');
latexylabel('$$\phi_0$$ in Grad');
rotateY;
axis([0.1 100 -200 0]);
xticks([0.1 1 10 100]);
yticks([-270 -180 -90 0]);


%%
figure(3);
subplot(2,1,1)
Regelkreis=feedback(offeneKette, 1);  % nur mit PI-Regler
T=0:0.01:5;
Y=step(Regelkreis, T);
plot(T, Y, 'b');
latextitle('F\"uhrung\"ubergangsfunktion des PI-geregelten Systems');
latexxlabel('$$t$$ in s');
latexylabel('$$h_{\rm w}$$ in V');
rotateY;
[Ymax, I]=max(Y);
hold on
plot([T(I), T(I)],[Ymax, 0],'k:', [-1 0 0 10],[0 0 1 1],'b--');
latextext(1.05*T(I), 0.2, '$$T_{\rm m}=2,\!6\,{\rm s}$$');
%latextext(2.1, 1.1, '5% Überschwingen');
grid('off');
axis([-0.5 5 0 1.2]);
xticks([0 1 2 3 4 5]);
yticks([0 1]);
hold off


%%    Verbesserung der Regelgüte durch
%     phasenanhebendes Korrekturglied
%        (0.44s+1)/(0.22s+1)
%     und Verstärkungsanhebung um Faktor 3 (9,5 dB)
%
%   
neuerRegler=tf([0.44 1], [0.22 1]);             % phasenanh. Korrekturglied
offeneKette2=series(offeneKette, neuerRegler);  % mit PI-Regler und phasenanh. Korrekturglied
Verstaerkung=tf([3], [1]);   % Verstärkungsfaktor 3
offeneKette3=series(offeneKette2, Verstaerkung); % mit PI-Regler, phasenanh. Korrekturglied und Verstärkungsanhebung
[Go2Betrag, Go2Phase]=bode(offeneKette2, O);
[Go3Betrag, Go3Phase]=bode(offeneKette3, O);
%          Approximation durch IT1-Glied (wie oben)
[ABetrag, APhase]=bode(IT1Glied, O);
figure(4);
subplot(2, 1, 1);
semilogx(O, 20*log10(Go3Betrag(:)), 'b',...
         O, 20*log10(Go2Betrag(:)), 'b',...
         O, 20*log10(GoBetrag(:)),'b--');
grid('on');
latextitle('Bodediagramm der korrigierten offenen Kette');
xleer;
latexylabel('$$|G_0|$$ in dB');
rotateY;
axis([0.1 100 -70 30]);
yticks([-60 -40 -20 0 20]);
%
subplot(2, 1, 2);
semilogx(O, Go3Phase(:), 'b');
axis([0.1 100 -200 0]);
xticks([0.1 1 10 100]);
yticks([-270 -180 -90 0]);
grid('on');
latexxlabel('$$\omega$$ in rad/s');
latexylabel('$$\phi_0$$ in Grad');
xticks([0.1 1 10 100]);
rotateY;
set(gca, 'YTick', [-270 -180 -90 0]);

%%
figure(5);
subplot(2,1,1)
Regelkreis2=feedback(offeneKette2, 1);
Regelkreis3=feedback(offeneKette3, 1);
Y2=step(Regelkreis2, T);
Y3=step(Regelkreis3, T);
plot(T, Y2, 'b--', T, Y3, 'b');
hold on
plot([-1 0],[0 0]);
grid('off');
[Y3max, I3]=max(Y3);
plot([T(I3), T(I3)],[Y3max, 0],'k:', [-1 0 0 10],[0 0 1 1],'b--');
latextext(1.1*T(I3), 0.1, '$$T_{\rm m}=0,\!9\,{\rm s}$$');
latextitle('Regelkreis mit modifiziertem PI-Regler');
%latextext(1.1, 0.7,'mit Korrekturglied');
%latextext(1.5, 1.1,'mit Korrekturglied und Verstärkungsanhebung');
xleer;
latexylabel('$$h_{\rm w}$$ in V');
rotateY;
axis([-0.5 5 0 1.2]);
yticks([0 1]);
hold off
%
subplot(2,1,2);
%   Stellgrößen berechnen
Regler2=series(PIRegler, neuerRegler);
Regelkreis2Stellgr=feedback(Regler2, Kraftwerk);
Regler3=series(Regler2, Verstaerkung);
Regelkreis3Stellgr=feedback(Regler3, Kraftwerk);
U2=step(Regelkreis2Stellgr, T);
U3=step(Regelkreis3Stellgr, T);
plot(T, U2, 'b--', T, U3, 'b');
hold on
plot([-1 0 0],[0 0 U2(1,1)],'b--', [-1 0 0],[0 0 U3(1,1)], 'b');
grid('off');
latexxlabel('$$t$$ in s');
latexylabel('$$u$$ in V');
rotateY;
axis([-0.5 5 -0.5 6.5]);
xticks([0 1 2 3 4 5]);
yticks([0 2 4 6]);
hold off



%%     Bilder auf .EPS- und .PS-Dateien
%
Epsbildc15('fklentw');
