%% Simulation / Asservissement d'un système
%   Module : Ingénierie Electronique 
%       pour le Traitement de l'Information
%--------------------------------------------------------------
%   TD_11 : Asservissement / Comparaison 
%            Premier ordre / Deuxième ordre
%--------------------------------------------------------------
%   Auteur : Julien VILLEMEJANE
%   Date : 12/12/2020
%--------------------------------------------------------------
clear all;
close all;
f = logspace(0,5,1001);
w = 2*pi.*f;
t = linspace(0,2e-2,1001);

%% Système du premier ordre
G0 = 0.5;
tau = 2e-3;

num_1 = [G0];
den_1 = [tau 1];
% Boucle ouverte
FTBO = tf(num_1, den_1);
[mag_FTBO, phase_FTBO, w_FTBO] = bode(FTBO, w);
mag_FTBO = squeeze(mag_FTBO);
[y_FTBO, t_FTBO] = step(FTBO, t);

% Boucle fermée sans correction - retour B = 1
FTBF = feedback(FTBO, 1);
[mag_FTBF, phase_FTBF, w_FTBF] = bode(FTBF, w);
mag_FTBF = squeeze(mag_FTBF);
[y_FTBF, t_FTBF] = step(FTBF, t);

% Boucle fermée avec correction proportionnelle G=10 - retour B = 1
G = 10;
FTBF_P = feedback(G*FTBO, 1);
[mag_FTBF_P, phase_FTBF_P, w_FTBF_P] = bode(FTBF_P, w);
mag_FTBF_P = squeeze(mag_FTBF_P);
[y_FTBF_P, t_FTBF_P] = step(FTBF_P, t);

% Boucle fermée avec correction proportionnelle G=10 et intégrale tau=3e-5 - retour B = 1
taui = 3e-5;
Cpi = tf([1],[taui 0]);
FTBF_PI = feedback((G+Cpi)*FTBO, 1);
[mag_FTBF_PI, phase_FTBF_PI, w_FTBF_PI] = bode(FTBF_PI, w);
mag_FTBF_PI = squeeze(mag_FTBF_PI);
[y_FTBF_PI, t_FTBF_PI] = step(FTBF_PI, t);

figure(1);
semilogx(f, 20*log10(mag_FTBO), f, 20*log10(mag_FTBF_P), f, 20*log10(mag_FTBF_PI), f, 20*log10(mag_FTBF));
ylabel('Gain (dB)'); xlabel('Frequence (Hz)');
title('Diagramme de Bode / Gain'); grid on;
legend('Syst1', 'Syst2', 'Syst3','Syst4');

figure(2);
plot(t, y_FTBF_P, t, y_FTBF, t, y_FTBO, t, y_FTBF_PI);
ylabel('Signal'); xlabel('Temps (s)');
title('Reponse echelon'); grid on;
legend('Syst1', 'Syst2', 'Syst3','Syst4');