%% Simulation / Asservissement d'un système
%   Module : Ingénierie Electronique 
%       pour le Traitement de l'Information
%--------------------------------------------------------------
%   TD_11 : Asservissement / Comparaison 
%            Système d'asservissement d'un faisceau LASER
%--------------------------------------------------------------
%   Auteur : Julien VILLEMEJANE
%   Date : 12/12/2020
%--------------------------------------------------------------
clear all;
close all;
%% Système scanner asservissement
wn=2*pi*55;
xi=0.8;
G0=40;
Kcapt=400/G0;
Te=1e-4;

%% Système Scanner
% En BO
num = [G0];
den = [(1/wn^2 )  (2*xi/wn ) 1];
sys_bo = tf(num, den);
figure;
subplot(2,1,1); bode(sys_bo); grid on;
subplot(2,1,2); step(sys_bo); grid on;
% En BF
sys_bf = feedback(sys_bo, Kcapt);
figure;
subplot(2,1,1); bode(sys_bf); grid on;
subplot(2,1,2); step(sys_bf); grid on;

%% Système corrigé
% Avec correcteur P
Kp1 = 10;
sys_bf_P1 = feedback(Kp1*sys_bo, Kcapt);
Kp2 = 0.1i;
sys_bf_P2 = feedback(Kp2*sys_bo, Kcapt);
figure;
title('Comparaison systeme asservi / K = 1, K = 10 et K = 0.1')
bode(sys_bf); grid on; hold on; bode(sys_bf_P1); hold on; bode(sys_bf_P2); 
legend('Boucle fermée','Boucle fermée K = 10','Boucle fermée K = 0.1');
figure;
title('Comparaison systeme asservi / K = 1 et K = 10')
subplot(3,1,1); step(sys_bf); grid on; legend('K = 1');
subplot(3,1,2); step(sys_bf_P1); grid on;  legend('K = 10');
subplot(3,1,3); step(sys_bf_P2); grid on;  legend('K = 0.1');

%% Avec correcteur PI 1 / a peu pres bien choisi
Kp11 = 0.001;
taui1 = 1/1000;
sys_I1 = tf([1],[taui1 0])
sys_PI1 = Kp11*(1+sys_I1)
sys_bo_PI1 = sys_PI1 * sys_bo;
sys_bf_PI1 = feedback(sys_bo_PI1, Kcapt);
figure;
bode(sys_bf); hold on; bode(sys_bf_P1); hold on; bode(sys_bf_PI1); grid on; 
legend('Boucle fermée','Boucle fermée P','Boucle fermée PI');
figure;
subplot(3,1,1); step(sys_bf); grid on; legend('BF');
subplot(3,1,2); step(sys_bf_P1); grid on; legend('BF P - G = 1/1000');
subplot(3,1,3); step(sys_bf_PI1); grid on; legend('BF PI - taui = 1/1000');
%% Avec correcteur PI 2 / Instable
Kp22 = 0.01;
taui2 = 1/1000;
sys_I2 = tf([1],[taui2 0])
sys_PI2 = Kp22*(1+sys_I2)
sys_bo_PI2 = sys_PI2 * sys_bo;
sys_bf_PI2 = feedback(sys_bo_PI2, Kcapt);
figure;
bode(sys_bf); hold on; bode(sys_bf_P1); hold on; bode(sys_bf_PI2); grid on; 
legend('Boucle fermée','Boucle fermée P','Boucle fermée PI');
figure;
subplot(3,1,1); step(sys_bf); grid on; legend('BF');
subplot(3,1,2); step(sys_bf_P1); grid on; legend('BF P - G = 1/100');
subplot(3,1,3); step(sys_bf_PI2); grid on; legend('BF PI - taui = 1/1000');
%% Comparaison
figure;
bode(sys_bf); hold on; bode(sys_bf_P1); hold on; bode(sys_bf_PI1); hold on; bode(sys_bf_PI2); grid on; 
legend('Boucle fermée','Boucle fermée P','Boucle fermée PI stable','Boucle fermée PI instable');
figure;
subplot(3,1,1); step(sys_bf); grid on; legend('BF');
subplot(3,1,2); step(sys_bf_P1); grid on; legend('BF P - G = 1/1000');
subplot(3,1,3); step(sys_bf_PI1); grid on; legend('BF PI - taui = 1/1000');
