Compte rendu des Travaux
pratique d’automatique
Réalisé par :
Aymane FARISS N°26
Yassmina FATOUHI N°27
Encadré par :
Mr. Pr. ALFIDI Mohammed
Introduction:
Un système de contrôle est conçu pour gérer, commander, diriger ou réguler le comportement
d'autres dispositifs ou systèmes à l'aide de boucles de contrôle. Ces systèmes peuvent varier d'un
simple régulateur domestique, comme un thermostat contrôlant une chaudière, à des systèmes
complexes de commande industrielle utilisés pour superviser des processus ou des machines.
Dans le cas d'un contrôle en continu, un contrôleur à rétroaction est employé pour automatiser la
régulation d'un processus ou d'une opération. Ce type de système compare la valeur actuelle ou
l'état d'une variable de processus (PV) avec une valeur de consigne prédéfinie (SP). La
différence entre ces deux valeurs est utilisée pour générer un signal de contrôle, qui ajuste la
sortie du système afin qu'elle corresponde à la valeur de consigne.
Dans le cadre de ce travail pratique (TP), nous utiliserons le logiciel MATLAB, un outil
commercial de calcul interactif. MATLAB permet de réaliser des simulations numériques en
s'appuyant sur des algorithmes d'analyse numérique. Il peut être utilisé pour résoudre des
équations différentielles, des équations aux dérivées partielles, des systèmes linéaires, et bien
plus encore. Le logiciel peut être enrichi par l’ajout de toolboxes (boîtes à outils), qui regroupent
des fonctions spécialisées pour des applications spécifiques comme le traitement du signal,
l’analyse statistique ou encore l’optimisation.
L’objectif principal de ces séances MATLAB est double : d’une part, maîtriser cet outil
indispensable, largement utilisé dans l’industrie et le secteur bancaire pour le prototypage et le
test d’algorithmes ; d’autre part, mettre en application les notions théoriques d’automatique
étudiées en classe. Cette approche pratique favorisera une compréhension approfondie et
concrète des concepts théoriques tout en développant des compétences techniques essentielles.
TP 1: Initiation MATLAB
L’objectif :
L’objectif de cet exercice est d’analyser les propriétés fondamentales des
matrices et d’étudier le comportement d’un système dynamique représenté par
une fonction de transfert. Cela inclut des calculs algébriques, des propriétés
spectrales, et des simulations pour visualiser les réponses dans le domaine
temporel et fréquentiel
Manipulation
Saisie et construction de matrices:
% Définir une matrice pleine quelconque (3x3)
A = [2 -1 3; 1 4 2; -2 1 1]
A = 3×3
2 -1 3
1 4 2
-2 1 1
% 1.I Transposé de A
A_T = A' % Transposé
A_T = 3×3
2 1 -2
-1 4 1
3 2 1
% 2.I Calculer C = A * A'
C = A * A_T
C = 3×3
14 4 -2
4 21 4
-2 4 6
% 3.I Déterminant de A
det_A = det(A)
det_A = 36
% 4.I Inverse de A
if det_A ~= 0
A_inv = inv(A)
else
disp('La matrice A est singulière, pas d''inverse.');
end
A_inv = 3×3
0.0556 0.1111 -0.3889
-0.1389 0.2222 -0.0278
0.2500 0 0.2500
% 5.I Valeurs propres de A
valeurs_propres = eig(A)
valeurs_propres = 3×1 complex
1.2173 + 2.5305i
1.2173 - 2.5305i
4.5655 + 0.0000i
% 6.I Vecteurs propres de A
[vecteurs_propres, ~] = eig(A)
vecteurs_propres = 3×3 complex
0.7613 + 0.0000i 0.7613 + 0.0000i -0.0357 + 0.0000i
0.1090 - 0.2924i 0.1090 + 0.2924i 0.9568 + 0.0000i
-0.1623 + 0.5447i -0.1623 - 0.5447i 0.2884 + 0.0000i
% 7.I Exponentiel de A
exp_A = expm(A) % Fonction exponentielle de la matrice
exp_A = 3×3
-2.0784 -3.8578 0.6379
-1.6100 82.1870 45.9906
-2.2479 25.7292 10.4672
les pôles de G(s)
% Définir les coefficients du dénominateur D(s)
den1 = [1 0.5 1] % s^2 + 0.5s + 1
den1 = 1×3
1.0000 0.5000 1.0000
den2 = [1 0.5] % s + 0.5
den2 = 1×2
1.0000 0.5000
D = conv(den1, den2) % Produit des polynômes
D = 1×4
1.0000 1.0000 1.2500 0.5000
% Calcul des pôles
poles = roots(D)
poles = 3×1 complex
-0.2500 + 0.9682i
-0.2500 - 0.9682i
-0.5000 + 0.0000i
disp('Les pôles de G(s) sont :')
Les pôles de G(s) sont :
disp(poles)
-0.2500 + 0.9682i
-0.2500 - 0.9682i
-0.5000 + 0.0000i
Décomposition en éléments simples :
% Définir les coefficients du numérateur et dénominateur
num = [0.2 0.3 1];% Numérateur : 0.2s^2 + 0.3s + 1
den = D; % Dénominateur calculé précédemment
% Décomposition en éléments simples
[residus, poles, reste] = residue(num, den)
residus = 3×1 complex
-0.3500 - 0.1936i
-0.3500 + 0.1936i
0.9000 + 0.0000i
poles = 3×1 complex
-0.2500 + 0.9682i
-0.2500 - 0.9682i
-0.5000 + 0.0000i
reste =
[]
disp('Les résidus de G(s) sont :')
Les résidus de G(s) sont :
disp(residus)
-0.3500 - 0.1936i
-0.3500 + 0.1936i
0.9000 + 0.0000i
disp('Les pôles de G(s) sont :')
Les pôles de G(s) sont :
disp(poles)
-0.2500 + 0.9682i
-0.2500 - 0.9682i
-0.5000 + 0.0000i
% Définition des coefficients du dénominateur
a = 0.5; % Coefficient de s
b = 1; % Terme constant
% Calcul de la pulsation propre (omega_n)
omega_n = sqrt(b)
omega_n = 1
% Calcul du facteur d'amortissement (zeta)
zeta = a / (2 * omega_n)
zeta = 0.2500
% Affichage des résultats
fprintf('La pulsation propre (omega_n) est : %.2f \n', omega_n)
La pulsation propre (omega_n) est : 1.00
fprintf('Le facteur d''amortissement (zeta) est : %.2f \n', zeta)
Le facteur d'amortissement (zeta) est : 0.25
D1=[1 0.5 1];
D2=[1 0.5];
C=conv(D1,D2)
C = 1×4
1.0000 1.0000 1.2500 0.5000
G=tf( [0.2 0.3 1],[1 1 1.25 0.5] )
G =
0.2 s^2 + 0.3 s + 1
------------------------
s^3 + s^2 + 1.25 s + 0.5
Continuous-time transfer function.
Model Properties
C=[1 1 1.25 0.5];
roots(C)
ans = 3×1 complex
-0.2500 + 0.9682i
-0.2500 - 0.9682i
-0.5000 + 0.0000i
N=[0.2 0.3 1]
N = 1×3
0.2000 0.3000 1.0000
[r,p,k]=residue(C,N)
r = 2×1 complex
-7.5000 - 6.2306i
-7.5000 + 6.2306i
p = 2×1 complex
-0.7500 + 2.1065i
-0.7500 - 2.1065i
k = 1×2
5.0000 -2.5000
[w,e]=damp(C)
w = 3×1
1.0000
1.0000
0.5000
e = 3×1
0.2500
0.2500
1.0000
subplot(3,2,1); impulse(N,C)
subplot(3,2,2); step(N,C)
t=1:0.1:10;
u=sin(2*t);
subplot(3,2,3); lsim(N,C,u,t)
subplot(3,2,4); bode(G)
subplot(3,2,5); nyquist(G)
subplot(3,2,6); nichols(G)
Interprétation
Manipulation des matrices
Dans cette partie, les propriétés d’une matrice A ont été explorées à l’aide des
commandes suivantes :
Transposée (AT) :
La commande A' a été utilisée pour obtenir la transposée de la matrice A,
ce qui permet d’échanger les lignes et colonnes, une opération essentielle
pour analyser les symétries ou effectuer des calculs vectoriels.
Produit matriciel (C=A⋅AT ) :
Avec A * A', le produit de A et de sa transposée a été calculé pour
générer une matrice symétrique. Cette opération est souvent utilisée dans
des contextes statistiques, comme les matrices de covariance.
Déterminant et inverse :
La commande det(A) a permis de vérifier si la matrice A est inversible.
En cas d’inversibilité (det(A)≠0), l’inverse a été calculée avec inv(A). Si
det(A)=0, un message indique que la matrice est singulière.
Valeurs propres et vecteurs propres :
Les valeurs propres de A ont été obtenues avec eig(A). Cette commande
fournit également les vecteurs propres associés, qui décrivent les
transformations fondamentales opérées par A.
Exponentielle matricielle :
La commande expm(A) a été utilisée pour calculer exp(A), essentielle
dans la résolution d’équations différentielles matricielles, notamment
dans les systèmes dynamiques.
Analyse des systèmes dynamiques
La seconde partie du script se concentre sur l’analyse d’un système défini par
une fonction de transfert G(s). Les étapes réalisées incluent :
Définition des polynômes :
Les polynômes du numérateur et du dénominateur ont été combinés à
l’aide de conv(den1, den2) pour former un dénominateur global. Cette
méthode est cruciale pour manipuler des équations polynomiales dans les
systèmes dynamiques.
Calcul des pôles :
La commande roots(D) a été utilisée pour identifier les pôles du système,
c’est-à-dire les racines du dénominateur. Ces pôles déterminent les points
de stabilité et la dynamique temporelle.
Décomposition en éléments simples :
Avec residue(num, den), la fonction de transfert a été décomposée en
éléments simples, ce qui facilite l’analyse de sa réponse temporelle.
Calcul des paramètres dynamiques :
Des calculs simples, utilisant la pulsation propre (ω=√ b ) et le facteur
a
d’amortissement (ζ= 2 ω ), ont permis de caractériser les oscillations
naturelles et l’amortissement du système.
Simulation et visualisation
Pour analyser la réponse du système, plusieurs simulations et graphiques ont été
générés :
Réponses temporelles :
impulse(num, den) : Visualise la réponse du système à une
excitation impulsionnelle.
step(num, den) : Montre la réponse à une entrée en échelon.
lsim(num, den, u, t) : Simule la réponse à une entrée personnalisée,
comme une sinusoïde.
Analyse fréquentielle :
bode(G) : Trace le diagramme de Bode, qui illustre les gains et les
phases en fonction de la fréquence.
nyquist(G) : Génère le diagramme de Nyquist, utilisé pour évaluer
la stabilité.
nichols(G) : Crée le diagramme de Nichols pour étudier la relation
entre le gain et la phase.
Ces outils offrent une vision complète du comportement du système dans les
domaines temporel et fréquentiel.
TP2 : Initiation MATLAB
L’objectif
Ce TP explore les bases de MATLAB à travers l’étude de systèmes dynamiques
en automatique. Les étapes incluent la modélisation, l’analyse temporelle et
fréquentielle, et l’évaluation de la stabilité, en utilisant des commandes
spécifiques pour chaque tâche.
Manipulation
La fixation de la valeur de gain :
% Paramètres du système
k=2
k = 2
for t=1:2:5
G=tf([k],[t 1]);
impulse(G)
hold on
% Affichage de G(s)
disp('La fonction de transfert G(s) est :');
G
grid on
end
La fonction de transfert G(s) est :
G =
2
-----
s + 1
Continuous-time transfer function.
Model Properties
La fonction de transfert G(s) est :
G =
2
-------
3 s + 1
Continuous-time transfer function.
Model Properties
La fonction de transfert G(s) est :
G =
2
-------
5 s + 1
Continuous-time transfer function.
Model Properties
la fixation du tau:
t=1
t = 1
for k=1:2:5
G=tf([k],[t 1]);
disp('La fonction de transfert G(s) est :');
G
impulse(G)
hold on
end
La fonction de transfert G(s) est :
G =
1
-----
s + 1
Continuous-time transfer function.
Model Properties
La fonction de transfert G(s) est :
G =
3
-----
s + 1
Continuous-time transfer function.
Model Properties
La fonction de transfert G(s) est :
G =
5
-----
s + 1
Continuous-time transfer function.
Model Properties
approximation de pade
le tracage des diagrammes :
dynamique d'un systeme de deuxieme ordre
% Paramètres des trois cas donné
clear
cases = {
struct('b0', 1.5, 'a2', 1, 'a1', 4, 'a0', 3),
struct('b0', 1.5, 'a2', 1, 'a1', 0.25, 'a0', 1),
struct('b0', 1.5, 'a2', 2, 'a1', 2, 'a0', 1)
};
% Préallocation des résultats
K = zeros(1, 3);
wn = zeros(1, 3);
xi = zeros(1, 3);
poles = cell(1, 3);
% Calcul des paramètres pour chaque cas
for i = 1:3
b0 = cases{i}.b0;
a2 = cases{i}.a2;
a1 = cases{i}.a1;
a0 = cases{i}.a0;
% Calcul du gain, de wn et xi
K(i) = b0 / a0;
wn(i) = sqrt(a0 / a2);
xi(i) = a1 / (2 * sqrt(a0 * a2));
% Calcul des pôles
sys = tf([b0], [a2, a1, a0]);
poles{i} = pole(sys);
% Affichage des résultats
fprintf('Cas %d :\n', i);
fprintf('Gain K = %.3f\n', K(i));
fprintf('Pulsation naturelle wn = %.3f\n', wn(i));
fprintf('Facteur d''amortissement xi = %.3f\n', xi(i));
fprintf('Pôles : %.3f + %.3fi, %.3f + %.3fi\n\n', ...
real(poles{i}(1)), imag(poles{i}(1)), real(poles{i}(2)),
imag(poles{i}(2)));
end
Cas 1 :
Gain K = 0.500
Pulsation naturelle wn = 1.732
Facteur d'amortissement xi = 1.155
Pôles : -3.000 + 0.000i, -1.000 + 0.000i
Cas 2 :
Gain K = 1.500
Pulsation naturelle wn = 1.000
Facteur d'amortissement xi = 0.125
Pôles : -0.125 + 0.992i, -0.125 + -0.992i
Cas 3 :
Gain K = 1.500
Pulsation naturelle wn = 0.707
Facteur d'amortissement xi = 0.707
Pôles : -0.500 + 0.500i, -0.500 + -0.500i
% Représentation de la réponse à un échelon pour chaque cas
figure;
for i = 1:3
sys = tf([cases{i}.b0], [cases{i}.a2, cases{i}.a1, cases{i}.a0]);
subplot(3, 1, i);
step(sys);
title(sprintf('Réponse à un échelon - Cas %d', i));
grid on
end
figure;
bode(sys);
title('Diagramme de Bode de G(s) avec temps mort');
figure;
nyquist(sys);
title('Diagramme de Nyquist de G(s) avec temps mort');
figure;
rlocus(sys);
title('Diagramme de Black (Locus des racines) de G(s) avec temps
mort');
3.
• On prend b0=1.5 ; a2=1 ; a1=0.25 ; a0=1
b0=1.5;
a2=1;
a1=0.25;
a0=1;
G=tf(b0, [a2 a1 a0])
Step(G)
• La courbe de la réponse indicielle de ce cas est la
suivante :
Le premier dépassement :
𝐷1 = 2.51 − 1.5 = 1.01𝑉
Le temps de réponse est le temps requis pour atteindre le
régime définitif à 5% prés :
𝑇𝑟 = 27𝑠
Le temps de monté est l’intervalle de temps séparant les
instants auxquels la réponse indicielle vaut 10% et 90%
𝑇𝑚 = 1.71 − 0.59 = 1.12𝑠
de la valeur finale :
La pseudo-période :
𝑇𝑝 = 8.04 − 1.71 = 6.33𝑠
Interprétation
Fixation du Gain k
Étudier l’influence du gain k sur la réponse impulsionnelle d’un système du
k
premier ordre G(s)= 1+ τ s
Commandes utilisées :
tf : Pour définir la fonction de transfert du système en spécifiant k et τ.
impulse : Pour tracer la réponse impulsionnelle du système.
hold on : Pour superposer plusieurs graphiques lorsque τ varie.
disp : Pour afficher la fonction de transfert G(s) à chaque itération.
L’amplitude de la réponse impulsionnelle augmente avec k, tandis que τ
détermine la rapidité de la réponse.
Fixation du Paramètre de Temps τ
Analyser l’impact des variations de τ sur la dynamique du système, avec un k
fixe.
Commandes utilisées :
tf : Pour redéfinir la fonction de transfert en ajustant τ tout en maintenant k
constant.
impulse : Pour observer les réponses impulsionnelles pour différentes valeurs
de τ.
disp : Pour documenter les configurations de G(s).
Une augmentation de τ ralentit la réponse du système, mettant en évidence son
rôle dans le contrôle de la vitesse de réponse.
Dynamique d’un Système du Second Ordre
Étudier trois cas de systèmes du second ordre en calculant leurs paramètres et
en observant leurs comportements dynamiques.
Commandes utilisées :
tf : Pour définir les fonctions de transfert des systèmes avec leurs coefficients.
pole : Pour calculer les pôles du système, qui déterminent la stabilité.
Formules MATLAB : Pour calculer le gain K, la pulsation naturelle ωn, et le
facteur d’amortissement ξ.
fprintf : Pour afficher les résultats des calculs (gain, pulsation naturelle, facteur
d’amortissement, pôles).
Le facteur ξ différencie les réponses sur-amorties (ξ>1), critiques (ξ=1), et sous-
amorties (ξ<1).
Les pôles montrent la stabilité et le comportement temporel du système.
Analyse Fréquentielle et Stabilité
Étudier la réponse en fréquence et vérifier la stabilité d’un système.
Commandes utilisées :
bode : Pour générer le diagramme de Bode et analyser les gains et marges de
phase.
nyquist : Pour tracer le diagramme de Nyquist, évaluant la stabilité en boucle
fermée.
rlocus : Pour visualiser le locus des racines, montrant comment les pôles se
déplacent lorsque le gain varie.
Le diagramme de Bode met en évidence les performances fréquentielles,
comme la bande passante.
Le diagramme de Nyquist illustre la stabilité en fonction des marges.
Le locus des racines montre comment les pôles influencent la stabilité.
Réponse Temporelle à un Échelon
Simuler les réponses temporelles des trois cas de systèmes du second ordre
pour une excitation type échelon.
Commandes utilisées :
step : Pour tracer la réponse à un échelon.
subplot : Pour afficher les réponses des trois cas sur un même graphique.
title et grid : Pour personnaliser et améliorer la lisibilité des graphiques.
Les systèmes sous-amortis présentent des oscillations avant de converger.
Les systèmes critiques atteignent rapidement la valeur finale sans oscillations.
Les systèmes sur-amortis répondent lentement, mais sans oscillations.
TP3 : Initiation MATLAB
Partie 1 :
Soit L’asservissement suivant décrit par son
:
diagramme fonctionnel
G(S) étant la fonction de transfert du processus à réguler, C(s) celle du
correcteur, et
% Paramètres
Kp_values = [1, 5, 10]; % Exemple de valeurs de Kp
tau = 1; % Constante de temps du système
K = 1; % Gain du système
% Fonction de transfert du processus G(s)
s = tf('s');
G = K / (1 + tau*s);
% Réponse pour différentes valeurs de Kp
figure;
hold on;
for Kp = Kp_values
C = Kp; % Correcteur P
T = feedback(C*G, 1); % Boucle fermée
step(T);
legendEntries{Kp == Kp_values} = sprintf('Kp = %d', Kp);
end
hold off;
legend(legendEntries);
title('Réponse échelon avec correcteur proportionnel P');
xlabel('Temps (s)');
Le correcteur proprotionnel
Le correcteur utilise est caracterise par : C(s)=Kp
La representation graphique de la sortie du système :
Pour Kp=1,Kp=5 et Kp=10
On remarque qu’en augmentant le Kp,le temps de réponse diminue ce qui
entraine une stabilité du système.
Correcteur proportionnel intégral PI :
Le correcteur utilise est caractérise par :
Pour Kp=5 et Kl=18
ylabel('Amplitude');
% Paramètres
Kp = 5;
Ki = 18;
% Correcteur PI
C = Kp + Ki/s;
% Boucle fermée
T = feedback(C*G, 1);
% Réponse temporelle
figure;
step(T);
title('Réponse échelon avec correcteur PI');
xlabel('Temps (s)');
On constate que le système devient plus précis mais moins stable.
Un correcteur proportionnel dérive PD :
Pour Kp=8 et Kd=0.05 :
ylabel('Amplitude');
% Paramètres
Kp = 8;
Kd = 0.05;
% Correcteur PD
C = Kp + Kd*s;
% Boucle fermée
T = feedback(C*G, 1);
% Réponse temporelle
figure;
step(T);
title('Réponse échelon avec correcteur PD');
xlabel('Temps (s)');
On remarque que l’action dérivée a un effet stabilisateur.
Une correcteur proportionnel intégral dérivée PID :
Ce correcteur est caractérisé par :
Pour Kp=1, Kd=1 et Ki=2 :
ylabel('Amplitude');
% Paramètres
Kp = 1;
Ki = 2;
Kd = 1;
% Correcteur PID
C = Kp + Ki/s + Kd*s;
% Boucle fermée
T = feedback(C*G, 1);
% Réponse temporelle
figure;
step(T);
title('Réponse échelon avec correcteur PID');
xlabel('Temps (s)');
Partie 2:
On realise l’asservissement de la figure suivante avec :
� (�
) = 𝟎.𝟓𝒔+�
𝟑
�� �
1. On va utiliser un correcteur proportionnel P, caractérisé par
C(s)=Kp avec Kp=10.
ylabel('Amplitude');
% Définition de G(s)
G2 = tf(3, [0.5, 1, 0]);
% Correcteur Proportionnel P
Kp = 10;
C_P2 = Kp;
% Correcteur à avance de phase
tau = 0.07; alpha = 0.5;
C_phase = 10 * tf([1, 1/tau], [1, 1/(alpha*tau)]);
% Boucle fermée pour chaque correcteur
sys_P2 = feedback(C_P2 * G2, 1);
sys_phase = feedback(C_phase * G2, 1);
% Réponse à un échelon unitaire
figure;
subplot(2,1,1), step(sys_P2), title('Correcteur P (G2)');
subplot(2,1,2), step(sys_phase), title('Correcteur avance de phase
(G2)');
On obtient alors une variation sinusoïdale avec des oscillations amorties. Le
système n’atteint la stabilité qu’après un temps d’environ 3.5s.
2. On utilise un correcteur avec une avance de phase
Avec 𝛼 = 0.07, 𝜏 = 10
On obtient :
% Paramètres du correcteur à avance de phase
tau = 0.1;
alpha = 0.07;
C_phase = 10 * tf([tau 1], [alpha 1]); % Correcteur avance de phase
% Fonction de transfert G(s)
G2 = tf(3, [0.5 5 0]);
% Boucle fermée avec retour unitaire
T_phase = feedback(C_phase * G2, 1);
% Réponse à un échelon
figure;
step(T_phase);
title('Réponse du système avec correcteur à avance de phase');
xlabel('Temps (s)');
ylabel('Amplitude');
grid on;
Le système est plus stable que le système précèdent vu les
oscillations amorties avec un temps environ de 0.5s.
Conclusion
Durant ce TP on a pu appliquer nos acquis théoriques en automatique,
régulation industrielle et asservissement, simuler les circuits et prélever des
valeurs numériques et les comparer aux résultats pratiques.
Nos vifs remerciements pour notre professeur et encadrant M. Pr. ALFIDI, nos
encadrants pédagogiques et nos chefs de filière et département pour leur
disponibilité et l’importance qu’ils ont donné à notre travail.
Et à la fin de ce rapport, nous profitons de l’occasion pour remercier notre
professeur Monsieur ALFIDI pour sa générosité en matière de formation et
d’encadrement. Nous le remercions également pour nous accorder ce projet
bien enrichissant pour notre formation en matière d’automatique et régulation
industrielle.