%% Simulation / Modélisation d'un système de photodétection % Module : Ingénierie Electronique % pour le Traitement de l'Information %-------------------------------------------------------------- % TD_10 : Photodétection - Modélisation %-------------------------------------------------------------- % Auteur : Julien VILLEMEJANE % Date : 27/08/2020 %-------------------------------------------------------------- clear all; close all; affichage_int = 0; %% Constantes RT = 1e6; % resistance de contre-reaction Cphd = 70e-12; % capacité de la photodiode wc = 1/(RT*Cphd); % pulsation de coupure RT Cphd fc = wc/(2*pi) f = logspace(0,9,10001); w = 2*pi.*f; %% Ampli Opérationnel / ALI % Modèle de l'ALI A0 = 1e5; % Amplification différentielle A funitaire = 1e6; % Bande-passante unitaire f0 = funitaire/A0 % Fréquence de coupure en boucle ouverte w0 = 2*pi*f0; % Modèle premier ordre num_AOP = [A0]; den_AOP = [1/w0 1]; TF_AOP = tf(num_AOP, den_AOP) [mag_AOP, phase_AOP, w_AOP] = bode(TF_AOP, w); mag_AOP = squeeze(mag_AOP); phase_AOP = squeeze(phase_AOP); % Diagramme de Bode if affichage_int == 1 figure; subplot(2,1,1); semilogx(f, 20*log10(abs(mag_AOP))); grid on; title('Réponse en fréquence de l''ALI'); xlabel('fréquence (Hz)'); ylabel('Gain (dB) / ALI'); subplot(2,1,2); semilogx(f, phase_AOP); grid on; xlabel('fréquence (Hz)'); ylabel('Phase (deg)'); end %% Contre-réaction avec RT num_moins = [1]; den_moins = [1/wc 1]; TF_moins = tf(num_moins, den_moins) [mag_moins, phase_moins, w_moins] = bode(TF_moins, w); mag_moins = squeeze(mag_moins); phase_moins = squeeze(phase_moins); % Diagramme de Bode if affichage_int == 1 figure; subplot(2,1,1); semilogx(f, 20*log10(abs(mag_moins))); grid on; title('Réponse en fréquence de la contre reaction'); xlabel('fréquence (Hz)'); ylabel('Gain (dB) / Réaction'); subplot(2,1,2); semilogx(f, phase_moins); grid on; xlabel('fréquence (Hz)'); ylabel('Phase (deg)'); end %% Action avec iphd num_plus = [RT]; den_plus = [1/wc 1]; TF_plus = tf(num_plus, den_plus) [mag_plus, phase_plus, w_plus] = bode(TF_plus, w); mag_plus = squeeze(mag_plus); phase_plus = squeeze(phase_plus); % Diagramme de Bode if affichage_int == 1 figure; subplot(2,1,1); semilogx(f, 20*log10(abs(mag_plus))); grid on; title('Réponse en fréquence de l''action'); xlabel('fréquence (Hz)'); ylabel('Gain (dB) / Action'); subplot(2,1,2); semilogx(f, phase_plus); grid on; xlabel('fréquence (Hz)'); ylabel('Phase (deg)'); end %% Système rebouclé TF_Vphd = feedback(TF_AOP, TF_moins, -1); [mag_Vphd, phase_Vphd, w_Vphd] = bode(TF_Vphd, w); mag_Vphd = squeeze(mag_Vphd); phase_Vphd = squeeze(phase_Vphd); % Diagramme de Bode if affichage_int == 1 figure; subplot(2,1,1); semilogx(f, 20*log10(abs(mag_Vphd))); grid on; title('Réponse en fréquence du transimpédance'); xlabel('fréquence (Hz)'); ylabel('Gain (dB) / Trans V'); subplot(2,1,2); semilogx(f, phase_Vphd); grid on; xlabel('fréquence (Hz)'); ylabel('Phase (deg)'); end % Système complet TF_Iphd = TF_plus*TF_Vphd; [mag_Iphd, phase_Iphd, w_Iphd] = bode(TF_Iphd, w); mag_Iphd = squeeze(mag_Iphd); phase_Iphd = squeeze(phase_Iphd); % Diagramme de Bode if affichage_int == 1 figure; subplot(2,1,1); semilogx(f, 20*log10(abs(mag_Iphd))); grid on; title('Réponse en fréquence du transimpédance'); xlabel('fréquence (Hz)'); ylabel('Gain (dB) / Trans I'); subplot(2,1,2); semilogx(f, phase_Iphd); grid on; xlabel('fréquence (Hz)'); ylabel('Phase (deg)'); end %% Modèle équivalent simplifié wc wu = funitaire*2*pi wtrans = sqrt(wc*2*pi*funitaire) Qtrans = sqrt(funitaire/fc) num_trans = [RT*A0/(1+A0)]; den_trans = [1/(wtrans*wtrans) 1/(wtrans*Qtrans) 1]; TF_trans = tf(num_trans, den_trans) [mag_trans, phase_trans, w_Iphd] = bode(TF_trans, w); mag_trans = squeeze(mag_trans); phase_trans = squeeze(phase_trans); % Diagramme de Bode / Comparaison figure; subplot(2,1,1); semilogx(f, 20*log10(abs(mag_trans)), f, 20*log10(abs(mag_Iphd))); grid on; title('Réponse en fréquence du transimpédance - modele'); xlabel('fréquence (Hz)'); ylabel('Gain (dB) / Trans M'); legend('Modele','Transimpedance'); subplot(2,1,2); semilogx(f, phase_trans, f, phase_Iphd); grid on; xlabel('fréquence (Hz)'); ylabel('Phase (deg)');