%%Folgende Uebertragungsfunktion gegeben:
clear all
close all
clc 

s = tf('s');

%Uebertragungsfunktion:
V = 1.5;
xi = 0.9;
T = 1/2;
Gsys = V/(1+2*xi*(s*T)+(s*T)^2)

%Entwurfsvorgaben:
tr = 1.2;
ueb = 10;

%% PI-Regler Entwurf mit Frequenzkennlinienverfahren

%Erste Parameter berechnen:
wc = 1.5/tr             %Durchtrittsfreq
phi = degtorad(70-ueb)  %Phasenreserve

%Step 1: zuerst Integrator hinzufuegen:
R1 = 1/s;
L1 = R1*Gsys;

%Step 2.1: adjustpahse berechnen:
adjustphase = degtorad(-180) - angle(evalfr(L1, j*wc)) + phi
%Step 2.2: TI berechnen, um die Phase zu korrigieren. 
TI=tan(adjustphase)/wc
R2=(1+s*TI)/s;
L2 = R2*Gsys;

%Step 3: Verstaerkungsfaktor V berechnen
V = 1/abs(evalfr(L2, j*wc))
R3=V*(1+s*TI)/s
L3 = R3*Gsys; %offener Kreis

%Step 4: geschlossenen Kreis gemaess L(s)/(1+L(s)) Skr 5.1
Try = feedback(L3,1)     %Alternative zu L3/(1+L3)

%PLOTS
figure
stepplot(Try)
grid on

figure
bode(Gsys)
grid on
hold on
bode(L1) %mit Kompensation und Integrator
bode(L2) %mit Ti
bode(L3) %mit Verstaerkung
bode(Try)
plot(wc,0,'*')
title('Regelkreis: Schritt für Schritt')
legend('Gsys', 'offen L1', 'offen L2', 'offen L3', 'geschlossen Try - Fuehrungsuebertragungsfunktion','wc')

%% Aus Gsys von vorher mit Frequenzkennlinienverfahren im q-Bereich 
%PI-Regler bauen

%Um Abtastzeit zu bestimmen, Anstiegszeit vom PT2 betrachten: (nicht tr)
trPT2=T*exp(acos(xi)/tan(acos(xi)))%Anstiegszeit tr eines PT2-Glieds 
                                   %Siehe (6.61)
%mit min(tr)/Ta=4...10 (Siehe 6.62) ein Ta bestimmen:
Ta = trPT2/10

wq0 = 2/Ta
wqc = 1.2/tr %(Beziehung 6.118) (gilt nur, wenn wc<=0.2*w0)
             %ACHTUNG, hier wird tr und nicht trPT2 verwendet
wqc<=0.2*wq0

q = tf('s');
                                    
%Transformation vom kont. s-Bereich in den diskreten Z-Bereich
Gz=c2d(Gsys(1), Ta, 'zoh');
%Transformation vom disk. z-Bereich in den kont. q-Bereich
Gq=d2c(Gz, 'tustin');

%Step 1: zuerst Integrator hinzufuegen:
Rq1 = 1/q
Lq1 = Rq1*Gq;

%Step 2.1: adjustpahse berechnen:
adjustphase = degtorad(-180) - angle(evalfr(Lq1, j*wqc)) + phi
%Step 2.2: TI berechnen, um die Phase zu korrigieren. 
TIq=tan(adjustphase)/wqc
Rq2=(1+q*TIq)/q;
Lq2 = Rq2*Gq;

%Step 3: Verstaerkungsfaktor V berechnen
V = 1/abs(evalfr(Lq2, j*wqc))
Rq3=V*(1+q*TIq)/q
Lq3 = Rq3*Gq; %offener Kreis

%Step 4: geschlossenen Kreis gemaess Lq(s)/(1+Lq(s)) Skr 5.1
Trqy = feedback(Lq3,1)     %Alternative zu Lq3/(1+Lq3)

%PLOTS
figure
stepplot(Trqy)
grid on

figure
bode(Gq)
grid on
hold on
bode(Lq1) %mit Kompensation und Integrator
bode(Lq2) %mit Ti
bode(Lq3) %mit Verstaerkung
bode(Trqy)
plot(wc,0,'*')
title('Regelkreis: Schritt für Schritt')
legend('Gq', 'offen L1', 'offen L2', 'offen L3', 'geschlossen Trqy - Fuehrungsuebertragungsfunktion','wc')

%% Vergleich der beiden Regler (vom s- und q-Bereich) im Z-Bereich:
%Durch Stepplot der Fuehrungsuebertragungsfunktionen
Rq3z=c2d(Rq3, Ta, 'tustin');
Rs3z=c2d(R3, Ta, 'zoh');

Ls3z = Rs3z*Gz; %offener Kreis
Lq3z = Rq3z*Gz; %offener Kreis

Trqyz = feedback(Lq3z,1)
Trsyz = feedback(Ls3z,1)

stepplot(Trqyz);
hold on;
stepplot(Trsyz);
hold off;
legend('Fuehrungsuebertragungsfunktion auss q-Bereich', 'Fuehrungsuebertragungsfunktion aus s-Bereich')

%% Lead-Lag-Entwurf:
close all
clear all
clc

s = tf('s');

%Uebertragungsfunktion:
Gsys = (7*(1+s/5))/(s*(1+2*0.8*s/4.2+(s/4.2)^2))
zpk(Gsys)

%Entwurfsvorgaben:
tr = 0.15;
ueb = 15;
einf = 0.05;


%Step 1: Erste Parameter berechnen:
wc = 1.5/tr             %Durchtrittsfreq
phi = degtorad(70-ueb)  %Phasenreserve
VL=1/einf               %Verstaerkungsfaktor des off. Kreises
VR=VL/7                 %7...kommt von Gsys Vorfaktor
L1 = VR*Gsys;

%Step 2 (Lead): Phasenaenderung: lt. Skriptum 5.2 (C) muessen noch 10Grad addiert
%werden, denn bei Lag-Glied wird die Phase wieder abgesenkt.
adjustphase = degtorad(-180) - angle(evalfr(L1, j*wc)) + phi + degtorad(10)

%Form des Lead glieds: R=(1+s*T)/(1+s*eta*T), umgeformt auf eta (siehe
%5.24-5.25) wobei 0<eta<1 
eta=(tan(pi/4-adjustphase/2))^2     %5.26
T=1/(sqrt(eta)*wc)                  %5.27
%Eingesetzt in die Form des lead glieds:
RLead=(1+s*T)/(1+s*eta*T)
L2 = VR*Gsys*RLead

%Step 3 (Lag): Betragsaenderung + Phasenaenderung: lt. Skriptum 5.2 (C) 
%muessen noch 10Grad subtrahiert werden
adjustphase = - degtorad(10)
adjustabs = abs(evalfr(L2, j*wc))

%Form des lag glieds: R=(1+s*T)/(1+s*eta*T), umgeformt auf eta (siehe
%5.31-5.33) wobei eta>1
T=((1/adjustabs)*sqrt(1+tan(adjustphase)^2)-1)/(wc*tan(adjustphase))  %5.34
eta=((wc*T)-tan(adjustphase))/(wc*T*(1+wc*T*tan(adjustphase)))         %5.34

%Eingesetzt in die Form des lag glieds:
RLag=(1+s*T)/(1+s*eta*T)
Rges=VR*RLead*RLag
L3 = Gsys*Rges

%Step 4: geschlossenen Kreis gemaess L(s)/(1+L(s)) Skr 5.1
Trqy = feedback(L3,1)     %Alternative zu L3/(1+L3)

%PLOTS
figure
stepplot(Trqy)
grid on
%RAMP