Académique Documents
Professionnel Documents
Culture Documents
Compte rendu :
TRAVAUX PRATIQUES : AUTOMATIQUE
I. Introduction
MATLAB est un langage haute performance pour le calcul technique. Il intègre le calcul, la
visualisation et la programmation dans un environnement facile à utiliser où les problèmes et les
solutions sont exprimés dans une notation mathématique familière. Les utilisations typiques incluent :
Mathématiques et calcul
Développement d'algorithmes
Modélisation, simulation et prototypage
Analyse, exploration et visualisation des données
Graphiques scientifiques et techniques
Développement d'applications, y compris la création d'une interface utilisateur graphique
II. Matrices
Matlab offre six types (ou classes) fondamentaux, tous représentés sous forme de tableau
multidimensionnel. Ces six classes comprennent double (nombres flottants en double précision), char
(tableau de caractères ou chaînes de caractères), sparse (matrices creuses), uint8 (nombres entiers non
signés codés sur 8 bits), cell (tableau de cellules) et struct (tableaux de structures ou enregistrements).
Un vecteur est une matrice comportant une seule ligne ou une seule colonne. Un scalaire est une
matrice ne comportant qu’une seule ligne et qu’une seule colonne.
1. Nombres complexes
La plupart des opérations Matlab prennent en charge les nombres complexes. Voici deux façons de
saisir des nombres complexes dans une matrice :
A = [1 2;3 4] + i*[5 6;7 8];
A = [1+5i 2+6i;3+7i 4+8i];
Lors de l'écriture des nombres complexes, il est important de ne pas laisser d'espace entre le nombre
et l'unité imaginaire. Les notations i et j désignent indifféremment l'unité imaginaire.
2. Variables
En principe, toutes les variables de Matlab sont des matrices réelles ou complexes, avec comme cas
particuliers les vecteurs ligne et colonne ainsi que les scalaires. La déclaration spécifique des variables
n'est pas nécessaire en Matlab ; la taille des variables augmente automatiquement en fonction des
besoins pendant l'exécution.
Matlab ne fait pas de distinction entre les entiers et les réels. La syntaxe pour les noms de variables
suit les règles standards de Fortran, C ou Pascal. Matlab différencie majuscules et minuscules. Les
informations sur les variables sont consultables avec les commandes who et whos. Il est possible
d'effacer des variables de l'espace de travail avec la commande clear suivie du nom de la ou des
variables séparées par des espaces. La commande clear all efface toutes les variables de l'espace de
travail.
3. Entrées de matrices
Dans un programme ou dans la fenêtre de commande :
>> a=[1 2 3; 4 5 6; 7 8 9] %séparation par des espaces
a=
1 2 3
4 5 6
7 8 9
Pour remplir une matrice de 1, on utilise la commande « ones », avec des syntaxes similaires à
celles de zeros.
>> ones (3)
ans =
1 1 1
1 1 1
1 1 1
Pour obtenir une matrice identité (unité), on utilise la commande « eye ». Par exemple, eye(n)
produit une matrice identité de taille n.
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
6. Taille
Pour connaître les dimensions d'une matrice x, on utilise la commande « size » avec la syntaxe
[m,n]=size(x), où m représente le nombre de lignes et n le nombre de colonnes. Par exemple :
>> [m,n]=size(c)
m =3 n=6
Remarque :
‘ans’ est une variable implicite qui contient le résultat de l'évaluation d'expressions sans être
assigné à une variable.
La fonction ‘length’ donne la longueur d'un vecteur.
7. Opérations matricielles :
Pour additionner : X=A+B
Pour soustraire : X=A-B
Pour multiplier : X=A*B ‘Notez que le nombre de colonnes de A doit être égal au nombre de
lignes de B’.
Pour la division :
À droite : X=A/B revient à A=X*B.
À gauche : X=A\B revient à A=B*X.
Remarque : En général, les divisions matricielles sont plus précises que l'utilisation de la fonction
d'inversion de matrice inv.
Elévation à la puissance : X=A^B
La transposition : A' est la transposée de A (Attention si A est complexe on obtient en fait la
transposée conjuguée).
La transposition : .' effectue la transposition simple (pour les matrices réelles ou complexes).
Le déterminant : det(A)
L'inverse : inv(A)
>> A=[1,2,3; 4,5,6; 7,8,9] ;
>> A'
ans =
1 4 7
2 5 8
3 6 9
>> det(A)
ans =
6.6613e-16
>> inv(A)
ans =
1.0e+16 *
-0.4504 0.9007 -0.4504
0.9007 -1.8014 0.9007
-0.4504 0.9007 -0.4504
III. Structure de Contrôles
Les structures de contrôle dans Matlab fonctionnent de manière similaire à celles des autres langages
de programmation.
1. Boucles inconditionnelles for :
La forme générale d'une boucle for est la suivante :
for i = 1:n
instructions
end
Les instructions seront exécutées n fois pour des valeurs de i successivement égales à 1,2,...,n.
Par exemple, les instructions :
>>clear all
x=[];
n=10;
for i=1:n
x=[x,i^2]
end
x =1
x =1 4
x =1 4 9
x =1 4 9 16
x =1 4 9 16 25
x =1 4 9 16 25 36
x =1 4 9 16 25 36 49
x =1 4 9 16 25 36 49 64
x =1 4 9 16 25 36 49 64 81
x =1 4 9 16 25 36 49 64 81 100
>>clear all
x=[];
n=3;
for i=n:-1:1
x=[x,i^2]
end
x =9
x =9 4
x =9 4 1
>>clear all
s=0;
A=[5 6 4;4 4 1]
for c=A
s= s + sum(c)
end
s=9
s =19
s =24
Les instructions seront répétées de manière itérative tant que la condition est remplie.
>>clear all
n=0;
a=6;
while 2^n < a
n=n+1
end
3. Branchements conditionnels if
La structure générale d'une instruction de branchement conditionnel est la suivante :
if condition
instruction1
else
instruction2
end
Si la condition est vraie, l'instruction 1 sera exécutée. Sinon, l'instruction 2 sera exécutée. On peut
également utiliser un branchement multiple en utilisant le mot-clé `elseif`, comme illustré dans
l'exemple suivant :
>>clear all
n=12
if n < 0
parite = 0
elseif rem(n,2) == 0
parite = 2
else
parite= 1
end
n=12 parite=2
I. Généralités :
En utilisant Matlab, les calculs sont numériques (chaque variable doit avoir une valeur) et sont basés
sur la manipulation de scalaires, de vecteurs et de matrices.
Définir un scalaire : Pour définir le réel 𝑟 = 2 ∗ 𝜋, vous pouvez utiliser :
>> r = 2 * pi;
Définir un vecteur : Pour définir le vecteur vous pouvez utiliser :
>> x = [1; -1]; ou >> x = [1, -1];
1. Généralités :
La boîte à outils de commande (Control Toolbox) dans l'environnement de développement intégré
offre une variété d'outils d'analyse pour le contrôle automatique.
Définition du système par sa fonction de transfert : Considérons le système décrit par :
⁄
𝐺(𝑠) = =2 ,
( )
G= 2s+1
-------------
s^2 + 2 s + 1
F=
2 (s+0.5)
---------
(s+1)^2
G1 =
2s+1
-------------
s^2 + 2 s + 1
G2 =
2s+2
-----------------
0.5 s^2 + 2 s + 3
>> G2*G1
ans =
4 s^2 + 6 s + 2
-----------------------------------
0.5 s^4 + 3 s^3 + 7.5 s^2 + 8 s + 3
>> G1+G2
ans =
3 s^3 + 10.5 s^2 + 14 s + 5
-----------------------------------
0.5 s^4 + 3 s^3 + 7.5 s^2 + 8 s + 3
>> feedback(G1,G2)
ans =
s^3 + 4.5 s^2 + 8 s + 3
-------------------------------------
0.5 s^4 + 3 s^3 + 11.5 s^2 + 14 s + 5
>> pole(G1)
ans =
-1
-1
>> pole(G2)
ans =
-2.0000 + 1.4142i
-2.0000 - 1.4142i
>> figure(1);step(G1)
Reponse indicielle
1.4
1.2
0.8
v ites s e e n ra d /s
0.6
0.4
0.2
0
0 1 2 3 4 5 6 7 8
temps en s (seconds)
>> figure(2);impulse(G1)
Impulse Response
2
1.5
1
Amplitude
0.5
-0.5
0 1 2 3 4 5 6 7 8
Time (seconds)
>> figure(3);bode(G1)
Bode Diagram
10
0
Magnitude (dB)
-10
-20
-30
-40
0
Phase (deg)
-45
-90
-1 0 1 2
10 10 10 10
Frequency (rad/s)
Step Response
2
1.5
1
Amplitude
0.5
-0.5
0 1 2 3 4 5 6 7 8
Time (seconds)
2. Prise en main de Matlab et de la Control Toolbox
On rappelle la modélisation du moteur à courant continu (MCC), où l'étude va permettre d'illustrer les
concepts fondamentaux de la boîte à outils de contrôle de Matlab. La fonction de transfert reliant la
vitesse de rotation du rotor à la tension appliquée à l'induit s'exprime comme suit :
𝜴(𝒔) 𝑲
𝑮(𝒔) = 𝑼(𝒔) = (𝟏 𝝉𝒆𝒍 𝒔)(𝟏 𝝉𝒆𝒎 𝒔)
,
Avec :
𝑲𝒆𝒎
𝑲 = 𝑹𝒇 : le gain statique du système,
𝑲𝒆𝒎𝟐
𝑹𝑱
𝜏𝒆𝒎 = 𝑹𝒇 : la constante de temps électromécanique,
𝑲𝒆𝒎𝟐
𝑳
𝝉𝒆𝒍 = 𝑹 : la constante de temps électrique.
K = 9.8974
tem =0.0184
tel =3.8889e-04
G=
9.897
----------------------------
7.15e-06 s^2 + 0.01877 s + 1
Question 5 :
P=
1.0e+03 *
-2.5714
-0.0544
Question 6 :
>>clear all
R=1.44;L=5.6e-4;J=1.29e-4;f=7.2e-5;Kem=0.1;
K=Kem/(R*f+Kem^2)
tem=R*J/(R*f+Kem^2)
tel=L/R
G=tf([K],[tel*tem,tel+tem,1])
P=pole(G)
figure(1);step(G)
figure(2);bode(G)
figure(3);nichols(G)
Kp=10;Kw=10/(3000*2*pi/60)
Gbo=Kp*G*Kw
Gbf=feedback(Kp*G,Kw)
figure(4);step(Gbf)
figure(5);bode(Gbf)
figure(6);nichols(Gbf)
Step Response
10
6
Amplitude
0
0 0.02 0.04 0.06 0.08 0.1 0.12
Time (seconds)
Figure 1 step(G)
Bode Diagram
20
0
Magnitude (dB)
-20
-40
-60
-80
0
-45
Phase (deg)
-90
-135
-180
0 1 2 3 4 5
10 10 10 10 10 10
Frequency (rad/s)
Figure 2 bode(G)
Nichols Chart
40
0 dB
0.25 dB
0.5 dB
20 1 dB -1 dB
3 dB
6 dB -3 dB
0 -6 dB
-12 dB
Open-Loop Gain (dB)
-20 -20 dB
-40 -40 dB
-60 -60 dB
-80 -80 dB
-100 dB
-100
-360 -315 -270 -225 -180 -135 -90 -45 0
Open-Loop Phase (deg)
Figure 3 Nichols(G)
Step Response
25
20
15
Am plitude
10
0
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035
Time (seconds)
Figure 4 step(Gbf)
Bode Diagram
20
Magnitude (dB)
-20
-40
-60
-80
0
-45
Phase (deg)
-90
-135
-180
0 1 2 3 4 5
10 10 10 10 10 10
Frequency (rad/s)
Figure 5 bode(Gbf)
Nichols Chart
40
0 dB
0.25 dB
0.5 dB
20 1 dB -1 dB
3 dB
6 dB -3 dB
0 -6 dB
Open-Loop Gain (dB)
-12 dB
-20 -20 dB
-40 -40 dB
-60 -60 dB
-80 dB
-80
-360 -315 -270 -225 -180 -135 -90 -45 0
Open-Loop Phase (deg)
Figure 6 nichols(Gbf)
Question 7 :
Kw =0.0318
Question 8 :
Gbo =
3.15
----------------------------
Gbf =
98.97
-------------------------------
>> mer
K =9.8974
tem =0.0184
tel = 3.8889e-04
G=
9.897
----------------------------
P=
1.0e+03 *
-2.5714
-0.0544
Kw =0.0318
Gbo =
3.15
----------------------------
Gbf =
98.97
-------------------------------
>> Kw=10/3000*(2*pi/60)
Question 11:
clear all
R=1.44;L=5.6e-4;J=1.29e-4;f=7.2e-5;Kem=0.1;
K=Kem/(R*f+Kem^2)
tem=R*J/(R*f+Kem^2)
tel=L/R
G=tf([K],[tel*tem,tel+tem,1])
P=pole(G)
Kp=10;Kw=10/(3000*2*pi/60)
Gbo=Kp*G*Kw
Gbf=feedback(Kp*G,Kw)
Kp=[10 100 1000];
figure(7);
for i=1:length(Kp)
Gbo(i)=Kp(i)*G*Kw;
Gbf(i)=feedback(Kp(i)*G,Kw)
step(Gbf(i));
hold on
end;
Grid;title('Reponse indicielle');
clear all
R=1.44;L=5.6e-4;J=1.29e-4;f=7.2e-5;Kem=0.1;
reponse indicielle
50
45
40
35
30
Amplitude
25
20
15
10
0
0 0.005 0.01 0.015 0.02 0.025 0.03 0.035
Time (seconds)
K=Kem/(R*f+Kem^2)
tem=R*J/(R*f+Kem^2)
tel=L/R
G=tf([K],[tel*tem,tel+tem,1])
P=pole(G)
Kp=10;Kw=10/(3000*2*pi/60)
Gbo=Kp*G*Kw
Gbf=feedback(Kp*G,Kw)
Kp=[10 100 1000];
figure(8);
for i=1:length(Kp)
Gbo(i)=Kp(i)*G*Kw;
Gbf(i)=feedback(Kp(i)*G,Kw)
nichols(Gbo(i));
hold on
end;
grid;title('diagramme de black nichols');
diagramme de black nichols
60
40
0 dB
0.25 dB
0.5 dB
20 1 dB -1 dB
3 dB
6 dB -3 dB
-40 -40 dB
-60 -60 dB
-80 -80 dB
-100 dB
-100
-360 -315 -270 -225 -180 -135 -90 -45 0
Open-Loop Phase (deg)
clear all
R=1.44;L=5.6e-4;J=1.29e-4;f=7.2e-5;Kem=0.1;
K=Kem/(R*f+Kem^2)
tem=R*J/(R*f+Kem^2)
tel=L/R
G=tf([K],[tel*tem,tel+tem,1])
P=pole(G)
Kp=10;Kw=10/(3000*2*pi/60)
Gbo=Kp*G*Kw
Gbf=feedback(Kp*G,Kw)
Kp=[10 100 1000];
figure(9);
for i=1:length(Kp)
Gbo(i)=Kp(i)*G*Kw;
Gbf(i)=feedback(Kp(i)*G,Kw)
bode(Gbf(i));
hold on
end;
grid;title('diagramme de bode');
diagramme de bode
40
20
Magnitude (dB)
-20
-40
-60
0
-45
Phase (deg)
-90
-135
-180
1 2 3 4 5
10 10 10 10 10
Frequency (rad/s)
diagramme de black nichols
60
40
0 dB
0.25 dB
0.5 dB
20 1 dB -1 dB
System: untitled3 System: untitled2 System: untitled1
Phase Margin (deg): 22.4 Phase Margin (deg): 62.1 Phase Margin (deg): 105
3 dB
Delay Margin (sec): 6.11e-05 Delay Margin (sec): 0.000731 Delay Margin (sec): 0.0113
At frequency (rad/s): 6.39e+03 At f requency (rad/s): 1.48e+03 At f requency (rad/s): 162 -3 dB
6 dB
Closed loop stable? Yes Closed loop stable? Yes Closed loop stable? Yes
0 -6 dB
-12 dB
Open-Loop Gain (dB)
-20 -20 dB
-40 -40 dB
-60 -60 dB
-80 -80 dB
-100 dB
-100
-360 -315 -270 -225 -180 -135 -90 -45 0
Open-Loop Phase (deg)
60
40
0 dB
0.25 dB
0.5 dB
20 1 dB
System: untitled4 System: untitled2 -1 dB
Phase Margin (deg): 7.16 Phase Margin (deg): 62.1
3 dB Delay Margin (sec): 5.98e-06 Delay Margin (sec): 0.000731
-3 dB
6 dB At frequency (rad/s): 2.09e+04 At f requency (rad/s): 1.48e+03
Closed loop stable? Yes Closed loop stable? Yes
Open-Loop Gain (dB)
0 -6 dB
System: untitled3 System: untitled1
Phase Margin (deg): 22.4 Phase Margin (deg): 105
Delay Margin (sec): 6.11e-05 Delay Margin (sec): 0.0113 -12 dB
At frequency (rad/s): 6.39e+03 At frequency (rad/s): 162
Closed loop stable? Yes Closed loop stable? Yes
-20 -20 dB
-40 -40 dB
-60 -60 dB
-80 -80 dB
-100 dB
-100
-360 -315 -270 -225 -180 -135 -90 -45 0
Open-Loop Phase (deg)
3. Utilisation de Simulink
Généralités :
Simulink est une boîte à outils de Matlab qui permet de réaliser des simulations de systèmes définis à
l'aide d'un outil graphique. Nous envisageons ici d'utiliser Simulink pour définir l'asservissement en
vitesse du moteur à courant continu. Cela nous permettra de visualiser les réponses du système à
différents types d'entrées.
Pour démarrer Simulink, on peut utiliser soit les menus disponibles, soit saisir la commande suivante
dans la fenêtre de commande : « simulink »
Pour créer un nouveau modèle Simulink, choisissez "New" dans le menu "File", puis "Model". Une
feuille de travail apparaîtra, sur laquelle nous pourrons définir graphiquement notre système. Les
différents outils disponibles sont accessibles à partir des menus correspondants : sources, visualisation,
automatique continue, automatique discrète, fonctions mathématiques, fonctions et tables, automatique
non-linéaire, signaux et systèmes.
Du fait de sa nature graphique, Simulink peut être découvert de manière intuitive. Cet outil utilise la
technique de "drag and drop" (sélectionner et faire glisser), ce qui rend facile le positionnement des
éléments nécessaires dans la fenêtre du modèle. Ensuite, il suffit de relier ces éléments entre eux pour
constituer le modèle. Chaque élément possède une description et éventuellement des paramètres qui
peuvent être modifiés. Pour y accéder, il suffit de double-cliquer sur un élément.
Command window : >> Simulink
Conclusion
Cette expérience pratique nous a également offert l'occasion d'approfondir nos compétences
en programmation MATLAB. En utilisant des scripts et des fonctions personnalisées, nous
avons automatisé des tâches complexes et réalisé des analyses détaillées des données générées
par nos simulations.