close all
clear all
clc
P2=tf(3,[1 2]);  %definizione del processo P1
P1=tf(10,poly([-1 -1 -1])); %definizione del processo P2

%% Single loop - 1
close all
omegab_des=0.2; %pulsazione di attraversamento desiderata per il sistema a ciclo chiuso
R = pidstd(1,1); % regolatore PI generico
R = pidtune(P1*P2,R,omegab_des);
R

figure
margin(R*P1*P2),grid
%title('Loop singolo. FdT a ciclo aperto.')

%Wry=R*P1*P2/(1+R*P1*P2)
Wry=feedback(R*P1*P2,1)

Wry=minreal(Wry) %semplifica coppie polo-zero coincidenti

figure
bode(Wry),grid
title('Fdt a ciclo chiuso. Single-loop control.')
xlim([0.01,1])
B3=bandwidth(Wry)

%% single loop - 2
close all
omegab_des=0.12; %pulsazione di attraversamento desiderata per il sistema a ciclo chiuso
R = pidstd(1,1); % regolatore PI generico
R = pidtune(P1*P2,R,omegab_des);
R

figure
margin(R*P1*P2),grid
%title('Loop singolo. FdT a ciclo aperto.')

Wry=feedback(R*P1*P2,1)
Wry=minreal(zpk(Wry));
figure
bode(Wry),grid
title('Fdt a ciclo chiuso. Single-loop control.')
xlim([0.01,1])
B3=bandwidth(Wry)

%% ANELLO SECONDARIO - 1
close all
omegab_des=0.2;

R2 = pidstd(1,1); % regolatore PI generico
R2 = pidtune(P2,R2,10*omegab_des);
R2

Wzdesz=feedback(R2*P2,1);

omegab_s=bandwidth(Wzdesz)
figure
bode(Wzdesz),grid
title('Fdt a ciclo chiuso dell''anello secondario.')
%% ANELLO SECONDARIO - 2
close all
omegab_des=0.13;

R2 = pidstd(1,1); % regolatore PI generico
R2 = pidtune(P2,R2,10*omegab_des);
R2

Wzdesz=feedback(R2*P2,1);
omegab_s=bandwidth(Wzdesz)
figure
bode(Wzdesz),grid
title('Fdt a ciclo chiuso dell''anello secondario.')
%% ANELLO PRIMARIO - 1
close all
omegab_des=0.2;
%pulsazione di attraversamento desiderata per l'anello primario
R1 = pidstd(1,1); % regolatore PI generico
R1 = pidtune(P1,R1,omegab_des);
R1

figure
margin(R1*P1),grid

W1=feedback(R1*P1,1)
figure
bode(W1),grid
title('Fdt a ciclo chiuso dell''anello primario.')
omegab_p=bandwidth(W1)

%% ANELLO PRIMARIO - 2
close all
omegab_des=0.12;
%pulsazione di attraversamento desiderata per l'anello primario
R1 = pidstd(1,1); % regolatore PI generico
R1 = pidtune(P1,R1,omegab_des);
R1

figure
margin(R1*P1),grid

W1=feedback(R1*P1,1)
figure
bode(W1),grid
omegab_p=bandwidth(W1)
title('Fdt a ciclo chiuso dell''anello primario.')

figure
bode(R1*P1,'r',Wzdesz*R1*P1,'k'),grid
title('FdT a ciclo aperto. Anello primario')
legend('Anello secondario unitario','Anello secondario effettivo')
xlim([0.01 1])

W1_eff=feedback(Wzdesz*R1*P1,1);
figure
bode(W1,'r',W1_eff,'k'),grid
title('FdT a ciclo chiuso. Anello primario')
legend('Anello secondario unitario','Anello secondario effettivo')
xlim([0.01 1])
omegabpeff=bandwidth(W1_eff)
%%
sim('CascControlExSlides2020')
plot(ysl.Time,ysl.Data,ycasc.Time,ycasc.Data,'Linewidth',2),grid
legend('Single-loop','Cascade')
title('Sintesi mediante controllori PI')
 
