%esercitaz2
clc
clear
s = tf('s');

err = 0.4;
Tr = 0.7
Mr = 2.8 %dB

G = (2.5)/((s+1)*(s+5));
G_zpk = zpk(G)
G_zpk.DisplayFormat = 'Frequency';
G_zpk

kg = dcgain(G);

kd = 8;
kh = 1/kd

%calcolo c

kc = (kd^2)/(err*kg) %in questo caso, sistema di tipo 1 , ho uno zero nel controllore
C = kc/s;

Bw = 3 / Tr

wc = 3 %rad/sec
Mr_lin = 10^(Mr/20);

fm = (2.3-Mr_lin)/1.25
fm_deg = rad2deg(fm)

%voglio margine fase maggiore di 42 deg, alla pulsaz di attrav si 3 rad/sec
%per avere banda passante maggiore di 4.3

L = C * kh * G
%bode(L)
[m,f] = bode(L,wc)
m_db = 20*log10(m)

%modulo risulta di 5 dB, fase -192. margine fase -12. devo arrivare a
%42...
%devo aumentare la fase almeno di 54, e abbassare modulo di 5.

my_fm = f + 180 %margine di fase attuale
epsilon = 6;

dfm = -my_fm + fm_deg + epsilon

%Progetto rete anticipatrice che mi guadagna fase 60, sono al limite...


alpha = (1- sind(dfm))/(1+sind(dfm))
tau = 1/(wc*sqrt(alpha))

Ca = (1 + tau * s)/(1 + alpha * tau * s)

L1 = Ca * L;
[m,f] = bode(L1,wc)
%hold on
%bode(L1)
m_db = 20*log10(m)

%progetto rete integrativa
%voglio che mi si abbassi il modulo di circa 17dB

alpha =  1 / (10^(m_db/20))
tau = 100 / wc

Cr = (1 + alpha * tau * s)/(1 + tau*s)

%provo ora
L2 = Cr * L1
[m,f] = bode(L2,wc)
m_db = 20*log10(m)
%hold on 
%bode(L2)

%specifiche ad anello anello sono rispettate, controllo ad anello chiuso

nichols(L2)
W = feedback(L2,1);
%bode(W)

my_Mr =getPeakGain(W);
my_MrdB = 20*log10(my_Mr)
rise_time = stepinfo(W,'RiseTimeLimits',[0 1]);
rise_time.RiseTime

%rispetta tempo di salita (0.625sec) e picco di risonanza (2.45dB)
