Professional Documents
Culture Documents
Poly Introd Matlab Simulink 15
Poly Introd Matlab Simulink 15
Laboratoire de
Traitement de l’
Information
Introduction à Matlab,
et Simulink
Pr. M. Maher
Faculté des
Sciences
Ben M’Sik
Université Hassan II de Casablanca
Table de matières 2/61
Table de matières
Introduction
Introduction
MATLAB (MATrix LABoratory) est un logiciel interactif de calcul matriciel numérique et de
visualisation graphique.
C’est un langage de programmation simple basé sur la manipulation des objets de type
matrice. Les dimensions de la matrice n’ont pas besoin d’être précisées et peuvent prendre la
valeur 1 (cas de vecteurs ou de scalaires).
Le logiciel Matlab est enrichi par des boîtes à outils. Ce sont des collections d’algorithmes,
écrits à partir des fonctions de base de Matlab, spécifiques à différents domaines tels que la
régulation automatique (Control System Toolbox), le traitement de signal (Signal Processing
Toolbox), l’identification (System Identification Toolbox), la simulation des systèmes
dynamiques (Simulink), les systèmes de puissances (Power Systems Blockset), etc.
La boîte Control System Toolbox est un outil très utile pour la régulation automatique des
systèmes linéaires. Elle offre plusieurs fonctions facilitant l’analyse, dans les domaines
temporel ou fréquentiel, des systèmes dynamiques linéaires continus ou discrets. Différentes
fonctions permettent aussi l’étude de la synthèse des stratégies de commandes et de
régulation.
La boîte à outil Simulink est une interface graphique conviviale. Elle est utilisée pour
programmer graphiquement, sous forme de diagrammes en blocs, des schémas fonctionnels
des systèmes dynamiques linéaires ou non-linéaires, stationnaires ou non-stationnaires,
analogiques ou numériques. La simulation du fonctionnement d’un système par Simulink
permet de suivre l’évolution des ses paramètres en fonction du temps. Ce logiciel graphique
offre avec Matlab dans un environnement unique des outils d’analyse et de synthèse des
systèmes de commandes.
Note : Ce document est un support d’initiation à l’utilisation du logiciel Matlab (version 6.0),
de la boîte à outils Control System Toolbox (version 5.0) et de Simulink (version 4.0) pour le
cours d’automatique. Il est destiné aux étudiants du Master de Traitement de l’Information.
Plus de détails sur les différents éléments de ce document peuvent être obtenus en recourant à
MATLAB Help.
Figure I.1
- mode exécutif : Les instructions sont écrites par l’utilisateur à l’aide d’un éditeur de
texte et enregistrées dans un fichier de commande M-file avec l’extension (.m), figure
I.2. Alors, Matlab exécute ligne par ligne le fichier.m (programme en langage Matlab)
par simple introduction du nom du fichier dans l’espace de travail.
Figure I.2
On obtient de l’aide en ligne sur une fonction (contenue dans Matlab ou dans l’une de ses
toolbox) en tapant help nom de fonction, figure I.3.
Figure I.3
>> A = [ 1 2 3 ou >> B = [1 2 0; 3 1 4; 4 1 2]
456
789]
A= B=
1 2 3 1 2 0
4 5 6 3 1 4
7 8 9 4 1 2
>> Vl = [ 1 2 3] % un vecteur-ligne.
Vl =
1 2 3
>> Vc = [ 1; 2; 3] % un vecteur-colonne.
Vc =
1
2
3
V4 =
1 2 3 4
5 3 6 2
7 1 9 3
ans = % Matlab copie par défaut le résultat dans la variable ans (answer).
7
ème
>> V4(2,:) % pour obtenir la 2 ligne de la matrice.
ans =
5 3 6 2
ans =
5 3
7 1
v=
-2.7000 10.3923 1.6420
>> v = 4.1 :1: 7 ou >> v = 4.1 : 7 % le caractère ‘ : ‘ crée des vecteurs d’éléments successifs
% avec l’incrémentation spécifiée (par défaut égale à +1).
v=
4.1000 5.1000 6.1000
v=
9.3000 7.3000 5.3000
>> a = [1.5] ou >>a = 1.5 % un scalaire est une matrice de dimension 1x1.
a=
1.5000
a=
3.1416
>> z = 1.2 + 0.47i ; % pour les nombres complexes, la partie imaginaire est écrite avec i ou j.
>> z = 1.2 + 0.47j ;
>> z = 1.2 + 0.47*i ;
z=
1.2000 + 0.4700i
C=
1 1 1
1 1 1
C=
0 0 0
0 0 0
C=
1 0
0 1
C=
5 0 0
0 2 0
0 0 7
C=
0.0579 0.8132
0.3529 0.0099
>> A + B % addition.
ans =
2 4 3
7 6 10
11 9 11
>> A - B % soustraction.
ans =
0 0 3
1 4 2
3 7 7
>> A * B % multiplication.
ans =
19 7 14
43 19 32
67 31 50
ans =
1 4 7
2 5 8
3 6 9
ans =
1.2000 - 0.4700i
ans =
1.0e+006 *
1.1189 1.3748 1.6307
2.5339 3.1134 3.6929
3.9489 4.8520 5.7552
ans =
-5.3603 + 2.7896i 11.9071 - 0.4325i -5.3340 - 0.5129i
12.2169 - 0.7970i -22.1367 + 2.1623i 12.5267 - 1.1616i
-4.7144 - 1.2421i 12.8365 - 1.5262i -4.1211 + 1.3313i
ans =
0.4498 + 0.7623i 0.5526 + 0.2068i 0.6555 - 0.3487i
1.0185 + 0.0842i 1.2515 + 0.0228i 1.4844 - 0.0385i
1.5873 - 0.5940i 1.9503 - 0.1611i 2.3134 + 0.2717i
ans =
468 576 684
1062 1305 1548
1656 2034 2412
ans =
18
ans =
3
ans =
5.5030
-0.7515 + 1.6451i
-0.7515 - 1.6451i
ans =
-0.1111 -0.2222 0.4444
0.5556 0.1111 -0.2222
-0.0556 0.3889 -0.2778
ans =
1 4 0
12 5 24
28 8 18
ans =
1.0000 1.0000 0
0.7500 0.2000 0.6667
0.5714 0.1250 0.2222
ans =
1 8 27
64 125 216
343 512 729
>> log(A)
ans =
0 0.6931 1.0986
1.3863 1.6094 1.7918
1.9459 2.0794 2.1972
>> sqrt(A)
ans =
1.0000 1.4142 1.7321
2.0000 2.2361 2.4495
2.6458 2.8284 3.0000
Remarque : voir aussi log10, cos, asin, tanh, real, imag, abs, etc.
Un polynôme est représenté par un vecteur-ligne où les coefficients sont rangés dans l’ordre
des puissances décroissantes.
3
>> N = [1 0 -12 7]; % représente le polynôme N(p) = p – 12p + 7.
racines =
-3.7254
3.1240
0.6015
ans =
1.0000 0.0000 -12.0000 7.0000
>> [Q,R] = deconv(N,D) % divise le polynôme N par D. Q est le quotient et R est le reste.
dN =
3 0 -12
val =
72
>> [r, p, k] = residue( [1 0], [1 3 2] ) % décomposition en éléments simple d’une fraction rationnelle
2
% N(p)/D(p) = p /(p +3p+2) = 2/(p+2) –1/(p+1).
k = 0; % IF (test conditionnel).
if k < 11,
k = k + 1;
y(k) = sin(2*pi*(k-1)*0.1);
end
y
Remarque : voir aussi else, elseif, break, pause, return, continue, switch, etc.
>> figure(2) % spécifie le numéro 2 pour la fenêtre graphique où le tracé sera effectué.
>> plot(t1,y1,’o’,t2,y2,‘x’) % représente les tracés y1=f(t1) et y2=f(t2) avec des symboles.
>> stem(y) % tracé par symbole ‘échantillon’, (pour les réponses de systèmes échantillonnés).
>> print –dps dessin.ps % enregistrer le graphique en PostScript dans le fichier dessin.ps.
Remarque : voir aussi semilogy, polar, bar, hist, grid, title, xlabel, ylabel, axis, hold, colordef,
legend, subplot, gtext, ginput, line, text, clf, close, etc.
>> save % sauvegarde toutes les variables définies dans l’espace de travail dans un fichier
% matlab.mat. Dans une session ultérieure taper ‘>> Load’ pour revenir à l’espace
% sauvegardé.
>> save nom_fichier X,Y,… % les variables X, Y, … définies dans l’espace de travail sont
% sauvegardées dans le fichier en Binaire ( *.Mat ) de format
% spécifique à Matlab.
>> save nom_fichier.dat X,Y,… –ASCII % les variables X,Y,… sont sauvegardées dans le
% fichier en ASCII, qui peut être relu ultérieurement par
% Matlab, Word, Excel, etc.
>> X = dlmread( ‘nom_fichier.dat’, ’sep’, i, j ) % lit la variable X à partir du fichier ( ‘sep’ est le
% caractère de séparation des données ) en
% commençant à partir de la ligne i et la colonne j.
Remarque : voir aussi textread, fopen, fclose, fscanf, fprintf, fread, fwrite, etc.
Par exemple, on crée le fichier de commande suivant et on le sauvegarde sous le nom test.m
Figure I.4
Fichier de fonction : L’utilisateur peut créer de nouvelles fonctions et les ajouter à Matlab.
Une fonction est un fichier .m dont la première ligne commence par ‘Function’. Elle peut être
utilisée dans les expressions mathématiques ou dans les instructions Matlab.
Par exemple, on crée une fonction qui calcule la moyenne d’une matrice et on la sauvegarde
dans un fichier moyenne.m.
Function y = moyenne(x)
%
% moyenne(x) valeur moyenne d’une matrice.
%
% Retourne pour un vecteur, une valeur moyenne.
% Retourne pour une matrice, un vecteur dont les éléments
% sont la moyenne de chaque colonne.
[n,m] = size(x) ;
if n == 1
n = m;
end
y = sum(x) / m ;
Les lignes de commentaires seront affichées à l’écran, pour avoir des informations sur cette
fonction, chaque fois qu’on tape dans la fenêtre de commande de Matlab :
II.1 – Introduction
Cette boîte à outils offre plusieurs fonctions pour l’analyse, dans le cadre de la régulation
automatique, des systèmes dynamiques linéaires continus ou discrets. Cette analyse peut être
faite dans le domaine temporel ou fréquentiel et à l’aide de représentation graphique.
Différentes fonctions permettent de faire la synthèse d’une stratégie de commande et de
régulation pour un système linéaire continu ou discret.
Pour définir un système à temps continu ( en ‘s’ ou en ‘p’ ) ou à temps discret ( en ‘z’ ou en
‘z-1’ ou en ‘q-1’ ) sans retard par une fonction de transfert, on introduit le numérateur et le
dénominateur sous forme de vecteurs-ligne où les coefficients sont rangés dans l’ordre des
puissances décroissantes des variables ‘s’ ou ‘z’.
La fonction ‘ tf ‘ est utilisée pour créer la fonction de transfert associée à un système continu
ou discret.
2
>> numc = [1 1] ; % Pour introduire la fonction de transfert F(p) = p+1/(p +2p+2).
>> denc = [1 2 2] ; % numc et denc sont deux variables choisies.
>> sysc = tf( numc, denc ); % La fonction tf crée un ‘ objet ’ fonction de transfert associé à
% la variable choisie sysc.
% On obtient le même résultat avec sysc = tf( [1 1], [1 2 2] ).
>> sysc
Pour vérifier la création de ce système par Matlab, on utilise la fonction get qui liste les
paramètres et les caractéristiques de sa fonction de transfert.
>> get(sysc) % Donne les caractéristiques du système continu sysc.
Transfer function:
p+1
------------------
p^2 + 2 p + 2
La fonction de transfert peut être introduite directement sous forme de fractions rationnelles.
>> p = tf( ' p ' ); % Pour avoir une forme de fractions rationnelles en ‘p’.
Transfer function:
p+1
-----------------
p^2 + 2 p + 2
Tous les coefficients de la fonction de transfert doivent être introduits qu’ils soient nuls ou
non.
2
>> nc = 3 * [1 0] ; % Pour introduire la fonction de transfert F(p) = (3 * p)/(p +2).
>> dc = [1 0 2] ;
>> sc = tf( nc, dc )
Transfer function:
3s
----------
s^2 + 2
Dans le cas d’un système discret, on introduit aussi la période d’échantillonnage du système.
2
>> numd = [1 -1]; % Pour introduire la fonction de transfert H(z) = z-1/(z -2z+3)
>> dend = [1 -2 3]; % échantillonnée avec la période Te= 1,5 secondes.
>> sysd = tf(numd, dend, 1.5) % La variable choisie sysd contient le modèle discret.
>> sysd
Les paramètres et les caractéristiques du système créé sont obtenus par la fonction get.
>> get(sysd) % Donne les caractéristiques du système discret sysd.
Un système peut être introduit directement à partir de ses zéros, pôles et gain par la fonction
zpk.
>> szpkc = zpk([1 2], [3 4 5], 2.5) ; % Pour définir un système dont les zéros sont {1, 2},
% les pôles sont {3, 4, 5} et le gain est 2,5.
>> szpkc
Zero/pole/gain:
2.5 (s-1) (s-2)
---------------------
(s-3) (s-4) (s-5)
Afin de définir un système à temps continu ou à temps discret par son modèle d’état, on
introduit les matrices A, B, C et D des équations d’état et de sortie par la fonction ss.
>> A = [1 2 ; 3 4]; % Pour introduire le modèle d’équation d’état x(t) Ax(t) Bu(t) et
>> B = [5; 6]; % d’équation de sortie y(t)Cx(t) Du(t) .
>> C = [7 8];
>> D = 9;
>> metatc = ss(A,B,C,D); % La fonction ss crée un ‘objet’ modèle d’état associé à la variable
% choisie metatc (contient le modèle d’état continu).
% On obtient le même résultat avec l’écriture suivante
% metatc = ss( [1 2 ; 3 4], [5 ; 6], [7 8], 9 ).
>> metatc
a=
x1 x2
x1 1 2
x2 3 4
b=
u1
x1 5
x2 6
c=
x1 x2
y1 7 8
d=
u1
y1 9
Continuous-time model.
La même démarche est utilisée pour définir un modèle d’état dans le cas discret.
>> metatd = ss(A, B, C, D, 1.5); % Pour introduire un modèle d’état échantillonné avec la
% la période Te= 1,5 s.
% La variable choisie metatd contient le modèle d’état discret.
>> metatd
a=
x1 x2
x1 1 2
x2 3 4
b=
u1
x1 5
x2 6
c=
x1 x2
y1 7 8
d=
u1
y1 9
On introduit le retard d’un système dans une représentation par la fonction set.
>> sys = tf( [1 2], [1 2 3] ) % Système continu défini sans retard.
Transfer function:
s+2
------------------
s^2 + 2 s + 3
>> set(sys, 'ioDelay', 0.3) % Pour introduire un retard T= 0.3 s dans le système.
>> sys
Transfer function:
s+2
exp(-0.3*s) * ------------------
s^2 + 2 s + 3
Le retard du système continu peut être introduit directement par la fonction tf.
>> sys = tf( [1 2], [1 2 3], 'ioDelay', 0.3 ) % Pour définir un système continu avec retard T= 0.3 s.
Transfer function:
s+2
exp(-0.3*s) * -----------------
s^2 + 2 s + 3
La même démarche est utilisée pour introduire le retard d’un système discret.
>> sysd = tf([1 2], [1 4 3], 2) % Système échantillonné, avec une cadence Te= 2s, défini
% sans retard.
Transfer function:
z+2
------------------
z^2 + 4 z + 3
Sampling time: 2
>> set(sysd, 'ioDelay', 3) % Pour introduire un retard égale à 3 fois la période d’échantillonnage.
>> sysd
Transfer function:
z+2
z^(-3) * -----------------
z^2 + 4 z + 3
Sampling time: 2
Le retard du système discret peut être introduit directement par la fonction tf.
>> sysd= tf([1 2], [1 4 3], 2, 'ioDelay', 3) % Pour définir un système échantillonné avec Te= 2 s et
% dont le retard est égale à 3 fois la cadence Te.
Transfer function:
z+2
z^(-3) * ---------------
z^2 + 4 z + 3
Sampling time: 2
Un système continu défini par un retard pur peut être approché par une fonction de transfert
suivant l’approximation de la série de Padé par la fonction matlab pade.
-0,1p
>> [num, den] = pade( 0.1, 3 ); % Pour définir un système continu F(p)= e de retard pur 0,1 s.
% L’ordre choisi pour l’approximation est égale à 3.
>> sys = tf( num,den )
Transfer function:
-s^3 + 120 s^2 - 6000 s + 1.2e005
---------------------------------------------
s^3 + 120 s^2 + 6000 s + 1.2e005
A partir d’un modèle, mémorisé dans l’espace de travail, Matlab retourne les coefficients
définissant le numérateur et le dénominateur de la fonction de transfert du système par la
fonction tfdata.
>> [num, den] = tfdata(sys, 'v') % sys = tf([1 1], [1 2 5]) est la variable mémorisée
% par Matlab, contenant le modèle continu.
num =
0 1 1
den =
1 2 5
>> [num, den, Ts] = tfdata(sys, 'v') % sys = tf([1 1], [1 4 3], 1.5) est la variable mémorisée
% par Matlab, contenant le modèle échantillonné.
num =
0 1 1
den =
1 4 3
Ts = % La période d’échantillonnage.
1.5000
A partir d’un modèle, mémorisé dans l’espace de travail, Matlab retourne les zéros, les pôles
et le gain définissant le système par la fonction zpkdata.
>> [z , p, k] = zpkdata(sys, 'v') % sys = zpk([1 2], [3 4 5], 2.5) est la variable
% mémorisée par Matlab, contenant le modèle continu.
z=
1
2
p=
3
4
5
k=
2.5000
>> [z, p, k, Ts] = zpkdata(sys, 'v') % sys = zpk([1 3], [2 4 7], 5, 1.3) est la variable mémorisée
% par Matlab, contenant le modèle échantillonné.
z=
1
3
p=
2
4
7
k=
5
Ts = % La période d’échantillonnage.
1.3000
A partir d’un modèle, mémorisé dans l’espace de travail, Matlab retourne les matrices
définissant le système par la fonction ssdata.
>> [A, B, C, D] = ssdata(sys) % sys = ss([1 2 ; 3 4], [5; 6], [7 8], 9) est la variable
% mémorisée par Matlab, contenant le modèle continu.
A=
1 2
3 4
B=
5
6
C=
7 8
D=
9
>> [A, B, C, D, Ts] = ssdata(sys) % sys = ss([4 2 ; 3 1], [7; 6], [5 8], 3, 1.4) est la variable
% mémorisée par Matlab, contenant le modèle échantillonné.
A=
4 2
3 1
B=
7
6
C=
5 8
D=
3
Ts = % La période d’échantillonnage.
1.4000
On peut passer d’une représentation d’un système à une autre (de même nature continue ou
discrète), suivant la figure II.1, en utilisant les fonctions précédentes.
ss
ss
Modèle
tf zpk
d’état
Figure II.1
Zero/pole/gain:
3 (s-1)
---------------
(s+2) (s+1)
>> zpk(sysTFd) % sysTFd = tf([0.6 -0.6], [1 4 3], 1.5) est un modèle discret.
Zero/pole/gain:
0.6 (z-1)
---------------
(z+3) (z+1)
>> tf(sysZPKc) % sysZPKc = zpk([1 2], [3 4 5], 2.5) est un modèle continu.
Transfer function:
2.5 s^2 - 7.5 s + 5
-------------------------------
s^3 - 12 s^2 + 47 s - 60
>> tf(sysZPKd) % sysZPKd = zpk([1 3], [2 4 7], 5, 1.3) est un modèle discret.
Transfer function:
5 z^2 - 20 z + 15
-------------------------------
z^3 - 13 z^2 + 50 z - 56
>> tf(sysSSc) % sysSSc = ss([1 2 ; 3 4], [5; 6], [7 8], 9) est un modèle continu.
Transfer function:
9 s^2 + 38 s - 2
---------------------
s^2 - 5 s - 2
>> tf(sysSSd) % sysSSd = ss([4 2 ; 3 1], [7; 6], [5 8], 3, 1.4) est un modèle discret.
Transfer function:
3 z^2 + 68 z - 5
---------------------
z^2 - 5 z - 2
a=
x1 x2
x1 -3 -1
x2 2 0
b=
u1
x1 2
x2 0
c=
x1 x2
y1 1.5 -0.75
d=
u1
y1 0
Continuous-time model.
>> ss(sysTFd) % sysTFd = tf([0.6 -0.6], [1 4 3], 1.5) est un modèle discret.
a=
x1 x2
x1 -4 -1.5
x2 2 0
b=
u1
x1 1
x2 0
c=
x1 x2
y1 0.6 -0.3
d=
u1
y1 0
>> ss(sysZPKc) % sysZPKc = zpk([1 2], [3 4 5], 2.5) est un modèle continu.
a=
x1 x2 x3
x1 3 1 0.70711
x2 0 4 1.4142
x3 0 0 5
b=
u1
x1 0
x2 0
x3 3.1623
c=
x1 x2 x3
y1 2.2361 1.118 0.79057
d=
u1
y1 0
Continuous-time model.
>> ss(sysZPKd) % sysZPKd = zpk([1 3], [2 4 7], 5, 1.3) est un modèle discret.
a=
x1 x2 x3
x1 2 0.5 0.5
x2 0 4 1
x3 0 0 7
b=
u1
x1 0
x2 0
x3 4.4721
c=
x1 x2 x3
y1 2.2361 1.118 1.118
d=
u1
y1 0
>> zpk(sysSSc) % sysSSc = ss([1 2 ; 3 4], [5; 6], [7 8], 9) est un modèle continu.
Zero/pole/gain:
9 (s+4.274) (s-0.05199)
--------------------------------
(s+0.3723) (s-5.372)
>> zpk(sysSSd) % sysSSd = ss([4 2 ; 3 1], [7; 6], [5 8], 3, 1.4) est un modèle discret.
Zero/pole/gain:
3 (z+22.74) (z-0.07329)
--------------------------------
(z-5.372) (z+0.3723)
Les systèmes à temps continu peuvent être associés entre eux en série, en parallèle et en
boucle fermée ; de même ceux à temps discret échantillonnés avec les mêmes cadences.
>> sysF = tf(1, [1 1]); % sysF est le nom associé au système continu F.
>> sysR = tf(1, [1 1 1]); % sysR est le nom associé au système continu R.
>> sysFd = tf(1, [1 2], 1.5); % sysFd est le nom associé au système échantillonnée F.
>> sysRd = tf(1, [1 3 2], 1.5); % sysRd est le nom associé au système échantillonnée R.
Pour créer un système équivalent de deux systèmes associés en série, on utilise la fonction
series.
>> sysS = series(sysR, sysF) % sysS créé est un système continu équivalent à sysR
% et sysF en série.
% On obtient le même résultat avec sysS = sysR * sysF.
Transfer function:
1
---------------------------
s^3 + 2 s^2 + 2 s + 1
M.Maher – 15 Introduction à Matlab, au Control System Toolbox et Simulink
II – Boîte à outils de régulation automatique (Control System Toolbox) 25/61
>> sysSd = series(sysRd, sysFd) % sysSd créé est un système discret équivalent à sysRd
% et sysFd en série.
% On obtient le même résultat avec sysSd = sysRd * sysFd.
Transfer function:
1
----------------------------
z^3 + 5 z^2 + 8 z + 4
R +
>> sysPd = parallel(sysFd, sysRd) % sysPd créé est un système discret équivalent à sysFd
% et sysRd en parallèle.
% On obtient le même résultat avec sysPd = sysFd + sysRd.
Transfer function:
z^2 + 4 z + 4
----------------------------
z^3 + 5 z^2 + 8 z + 4
-
R
Pour créer un système équivalent de deux systèmes associés en boucle fermée, on utilise la
fonction feedback.
>> sysBF = feedback(sysF, sysR) % sysBF créé est un système continu équivalent à sysF et
% sysR en boucle fermée.
% Pour avoir une contre-réaction positive, on utilise
% sysBF = feedback(sysF, sysR, 1).
Transfer function:
s^2 + s + 1
----------------------------
s^3 + 2 s^2 + 2 s + 2
>> sysBFd = feedback(sysFd, sysRd) % sysBFd créé est un système discret équivalent à
% sysFd et sysRd en boucle fermée.
% Pour avoir une contre-réaction positive, on utilise
% sysBFd = feedback(sysFd, sysRd, 1).
Transfer function:
z^2 + 3 z + 2
----------------------------
z^3 + 5 z^2 + 8 z + 5
Pour créer un système équivalent au système en boucle fermée à retour unitaire, on utilise la
fonction feedback.
>> sysRU = feedback(sysF, 1) % sysRU créé est un système continu équivalent à sysF
% bouclé par retour unitaire.
Transfer function:
1
-------
s+2
>> sysRUd = feedback(sysFd, 1) % sysRUd créé est un système discret équivalent à sysFd
% bouclé par retour unitaire.
Transfer function:
1
-------
z+3
L’échantillonnage d’un système à temps continu est réalisé physiquement par un bloqueur et
un échantillonneur. Cette opération est réalisée par Matlab en utilisant la fonction c2d.
>> sysc = tf([2], [2 1]); % Système continu à échantillonner.
>> sysd = c2d(sysc, 0.5, ' zoh ') % Pour échantillonner avec un bloqueur d’ordre zéro et
% une cadence Te= 0.5 s.
Transfer function:
0.4424
--------------
z - 0.7788
Pour comparer les réponses indicielles des systèmes continu sysc et échantillonné sysd, on les
trace à l’aide de la fonction graphique
>> step(sysc, ' - ', sysd, ' -- ')
>> sysd = c2d(sysc, 0.5, ' foh '); % Pour échantillonner avec un bloqueur d’ordre 1 et
% une cadence Te= 0.5 s.
Transfer function:
0.2304 z + 0.212
-----------------------
z - 0.7788
>> step(sysc, ' - ', sysd, ' -- ') % Pour tracer les réponses indicielles.
>> step(sysc, ' - ', sysd, ' -- ') % Pour tracer les réponses indicielles.
La conversion d’un système à temps discret à un système à temps continu est obtenue par la
fonction matlab d2c.
>> sysd = tf([0.4424] , [ 1 -0.7788], 0.5) % Système discret à convertir.
La graphe de la réponse indicielle d’un système à temps continu ou à temps discret est
obtenue directement par l’utilisation de la fonction step.
>> sysc = tf([3], [4 1]); % Système continu à étudier.
>> sysd = c2d(sysc, 0.5, ' zoh '); % Système discret à étudier.
>> sysd
Transfer function:
0.3525
-------------
z - 0.8825
La graphe de la réponse impulsionnelle d’un système à temps continu ou à temps discret est
obtenue directement par l’utilisation de la fonction impulse.
>> impulse(sysc) % Si l’instruction [y, t] = impulse(sysc) est utilisée, on a accès à
% y un vecteur-colonne contenant la réponse et
% t un vecteur-ligne contenant les instants de calcul.
% Pour un modèle d’état sys, on utilise [y, t, x] = impulse(sys) afin d’avoir
% x une matrice contenant l’évolution du vecteur d’état.
La graphe de la réponse à une entrée arbitraire d’un système à temps continu ou à temps
discret est obtenue directement par l’utilisation de la fonction lsim.
>> t = 0 : 0.1 : 12; % Pour créer un vecteur-ligne temps variant entre 0 s et 12 s par
% pas de 0.1 s pour la simulation.
>> u = 2 * t' ; % Calcule une entrée rampe de pente 2 sous forme d’un
% vecteur-colonne de même dimension que le vecteur t.
La réponse fréquentielle d’un système à temps continu ou à temps discret sur le diagramme
de Bode est obtenue directement par l’utilisation de la fonction bode.
M.Maher – 15 Introduction à Matlab, au Control System Toolbox et Simulink
II – Boîte à outils de régulation automatique (Control System Toolbox) 33/61
Transfer function:
3
----------
4s+1
Transfer function:
0.3525
-------------
z - 0.8825
La réponse fréquentielle d’un système à temps continu ou à temps discret sur le diagramme
de Nyquist est obtenue directement par l’utilisation de la fonction nyquist.
>> nyquist(sysc) % Si l’instruction [re, im, w] = nyquist(sysc) est utilisée, on a accès à
% re un vecteur-colonne contenant la partie réelle et
% im un vecteur-colonne contenant la partie imaginaire du lieu de
% transfert et w un vecteur-ligne contenant les pulsations (en rd/sec).
La réponse fréquentielle d’un système à temps continu ou à temps discret sur le diagramme
de Nichols est obtenue directement par l’utilisation de la fonction nichols.
>> nichols(sysc) % Si l’instruction [A, phi, w] = nichols(sysc) est utilisée, on a accès à
% A un vecteur-colonne contenant le gain et
% phi un vecteur-colonne contenant la phase (en degré) et
% w un vecteur-ligne contenant les pulsations (en rd/sec).
Pour visualiser les courbes de l’abaque de Nichols sur la figure précédente, on utilise la
fonction ngrid.
>> ngrid
mat_com =
5 17
6 39
rang_mat_com =
mat_obs =
7 8
31 46
rang_mat_obs =
Pour tracer les positions des zéros et pôles d’un système dans le plan complexe, on utilise la
fonction pzmap et pour afficher les courbes à égale coefficient d’amortissement, on utilise la
fonction sgrid.
>> sysc = tf( [3 7.5 3],[1 2 1.25] ); % sysc est le système continu à étudier.
>> pzmap(sysc)
>> sgrid
Transfer function:
0.3525
-------------
z - 0.8825
>> rlocus(sysc)
Zero/pole/gain:
(z-0.7)
---------
(z-0.5)
Zero/pole/gain:
(z-0.8243)
--------------
(z-0.7071)
initial = représente la réponse libre du modèle d’état en fonction de ses conditions initiales.
acker = placement de pôles par retour d’état pour un système à une seule entrée.
place = placement de pôles par retour d’état.
zgrid = représente les courbes à égale coefficient d’amortissement dans le plan de ‘z’.
Model Interconnections
append - Append models in a block diagonal Time Delays
configuration. delay2z - Convert delays in discrete-time
augstate - Augment output by appending models or FRD models.
states. pade - Compute the Padé approximation
connect - Connect the subsystems of a block- of delays.
diagonal model according to an totaldelay - Provide the aggregate delay for
interconnection scheme of your an LTI model.
choice.
feedback - Calculate the feedback connection
of models. SISO Feedback Design
lft - Form the LFT interconnection (star allmargin - Calculate all crossover
product). frequencies and associated gain,
ord2 - Generate second-order model. phase and delay margins.
parallel - Create a generalized parallel margin - Calculate gain and phase
connection. margins.
series - Create a generalized series rlocus - Calculate and plot root locus.
connection. sistool - Open the SISO Design Tool.
stack - Stack LTI models into a model
array.
Pole Placement
acker - Calculate SISO pole placement
Time Response design.
gensig - Generate an input signal. place - Calculate MIMO pole placement
impulse - Calculate and plot impulse response. design.
initial - Calculate and plot initial condition estim - Form state estimator given estimator
response. gain.
lsim - Simulate response of LTI model to reg - Form output-feedback compensator
arbitrary inputs. given state-feedback and estimator
ltiview - Open the LTI Viewer for linear gains.
response analysis.
step - Calculate step response.
III.1 – Introduction
Simulink est un logiciel graphique interactif, faisant partie des boîtes à outils de Matlab, qui
permet de représenter les fonctions mathématiques et les systèmes sous forme de diagramme
en blocs et de simuler leurs fonctionnements.
Il fournit avec Matlab dans un environnement unique des outils d’analyse et de synthèse des
systèmes de commande linéaires ou non-linéaires, stationnaire ou non-stationnaires,
analogiques ou numériques.
La programmation graphique offerte par Simulink permet d’introduire facilement les schémas
fonctionnels des systèmes dynamiques sous forme de blocs et de les interconnecter par des
lignes en utilisant la souris.
Pour lancer le logiciel Simulink, on tape dans la fenêtre de commande (Command Window)
de l’espace de travail Matlab l’instruction
>> simulink
ou bien, on appuie sur le bouton correspondant à Simulink de la barre d’outils, figure III.1,
de la fenêtre de Matlab.
Figure III.1
Une nouvelle fenêtre, figure III.2, de Simulink et ses librairies est affichée.
Figure III.2
Figure III.3
Elle est formée par neuf blocs de librairies spécifiques et un bloc de démonstration. Chacun
des blocs spécifiques de cette librairie est une collection de blocs fonctionnels standards.
En ouvrant les blocs Continuous et Discrete, à l’aide du bouton droit de la souris, on affiche
les éléments de leurs librairies, figure III.4 et figure III.5 respectivement.
Figure III.4
Cette librairie contient des éléments continus qui permettent de simuler des systèmes continus
(analogiques). Cette collection contient un modèle d’état, un modèle sous forme de fonction
de transfert, un modèle sous forme d’Evans, un intégrateur, un dérivateur, un retard pur, etc.
Figure III.5
Cette librairie contient des éléments discrets qui permettent de simuler des systèmes discrets
(numériques). Cette collection contient un modèle d’état discret, un modèle discret sous forme
de fonction de transfert, un modèle discret sous forme d’Evans, un bloqueur d’ordre zéro, un
intégrateur discret, etc.
En ouvrant le bloc Functions & Tables, à l’aide du bouton droit de la souris, on affiche les
éléments de cette librairie, figure III.6.
Figure III.6
Cette librairie contient des éléments qui permettent de réaliser des opérations spéciales, par
exemple des interpolations linéaires, utilisation des formes polynomiales, utilisation des
expressions écrites en langage C, appeler des fonctions Matlab standard, appeler des
fonctions S-Function de Simulink, etc.
En ouvrant le bloc Math, à l’aide du bouton droit de la souris, on affiche les éléments de
cette librairie, figure III.7.
Figure III.7
Cette librairie contient des éléments qui permettent d’avoir des opérateurs mathématiques
agissant sur des signaux, tels que sommateurs, produits, gains, opérateurs logiques, fonctions
trigonométriques, fonctions logiques combinatoires , etc.
En ouvrant le bloc Nonlinear, à l’aide du bouton droit de la souris, on affiche les éléments de
cette librairie, figure III.8.
Figure III.8
Cette librairie contient des éléments non-linéaires qui permettent de simuler différents
systèmes non-linéaires. Cette collection contient un limiteur de la variation par rapport au
temps, un limiteur par saturation, un convertisseur à quantification, un élément avec zone
morte, un élément avec hystérésis, etc.
En ouvrant le bloc Signals & Systems, à l’aide du bouton droit de la souris, on affiche les
éléments de cette librairie, figure III.9.
Figure III.9
Cette librairie contient une collection d’éléments, tels qu’un multiplexeur, un démultiplexeur,
des ports d’entrée et de sortie, etc.
En ouvrant le bloc Sinks, à l’aide du bouton droit de la souris, on affiche les éléments de
cette librairie, figure III.10.
Figure III.10
Cette librairie contient une collection d’éléments qui permettent de visualiser des signaux
pendant la simulation ou de diriger des signaux vers l’espace de travail ou vers un fichier de
sauvegarde pour un traitement ultérieur, etc.
En ouvrant le bloc Sources, à l’aide du bouton droit de la souris, on affiche les éléments de
cette librairie, figure III.11.
Figure III.11
Cette librairie contient une collection de blocs, tels que des générateurs de signaux (échelon,
rampe, impulsionnel, sinusoïdal, aléatoire, bruit blanc,…) et des horloges fournissant le
temps courant des simulations.
Figure III.12
Cette librairie contient une collection de blocs spécifiques aux différentes boîtes à outils de
Matlab, tels que Control System Toolbox, Fuzzy LogicToolbox, Power System Blockset, etc.
Figure III.13
Cette librairie contient une collection de blocs additionnelles de la librairie Linear. On
remarque qu’elle contient des éléments tels que PID Controller qui permettent la réalisation
d’une régulation par commande PID.
On va simuler la régulation d’un système continu du premier ordre représenté par sa fonction
0,2
de transfert F(p) par un régulateur intégral dont le gain de l’action intégrale est 0.5
10.5p
en boucle fermée. La consigne est un signal carré variant entre 0 et 1.
Ce système de régulation va être représenté par Simulink sous forme d’un diagramme de
blocs élémentaires dans une fenêtre de travail qu’on va créer.
Figure III.14
Pour changer les paramètres du bloc fonction de transfert Transfer Fcn, on double-clic
dessus. Une boite de dialogue (figure III.15) s’ouvre et dans laquelle les valeurs des
Figur III.15
Remarque : L’échange de données entre Simulink et l’espace de travail de Matlab peut être
réalisé par des variables communes ou par des fichiers (d’extension .mat).
Les blocs élémentaires de Simulink peuvent être paramétrés par des variables symboliques.
Les valeurs de ces paramètres peuvent être définies dans l’espace de travail Matlab, d’une
manière manuelle ou par l’exécution d’un fichier de commande avant le début de la
simulation.
La même démarche sera utilisée pour paramétrer le bloc Pulse Generator, figure III.16,
pour avoir un signal de consigne périodique de période 140 s et d’amplitude 1 unité.
Figure III.16
Sur le bloc sommateur Sum, on change la liste des signes ++ en +- pour avoir une boucle
fermée avec une contre-réaction négative, figure III.17.
Figure III.17
Pour le bloc multiplexeur Mux, figure III.18, on choisit deux entrées l’une pour le signal de
consigne et l’autre pour le signal de sortie.
Figure III.18
De même pour le bloc du régulateur PID Controller, on introduit le terme intégral (le gain de
l’action intégrale), figure III.19.
Figure III.19
Figure III.20
Pour notre application, on a choisi un pas d’intégration maximal de l’ordre de 0.1 s car le
système étudié admet une constante de temps de l’ordre de 0.5 s. Dans ce cas, la précision
fixée à 1 e-3 sera atteinte.
Pour ajuster l’échelle verticale de l’oscilloscope afin de visualiser les signaux de la consigne
et la sortie régulée, on clic par la touche droite de la souris sur la fenêtre de l’affichage
Scope et on choisit Axes properties…. La fenêtre (figure III.21) s’ouvre et par la suite on
introduit les valeurs désirées.
Figure III.21
Une fois tous les paramètres des blocs constituant le diagramme Simulink sont introduits, on
sélectionne dans la barre des tâches Simulation-Start pour lancer la simulation de la
régulation de notre système. On observe l’évolution des signaux en cours de simulation sur
l’oscilloscope (figure III.22) pour une durée de 150 s. Les deux courbes représentent le signal
de la consigne et le signal de la sortie régulée du système.
Figure III.22
On peut modifier les échelles de l’affichage, en utilisant les boutons jumelles et zoom suivant
l’axe vertical ou horizontal.
On peut sauvegarder les résultats de la simulation dans une variable Matlab ou dans un
fichier de données pour un traitement ultérieur.
Dans notre application, nous avons choisi de sauvegarder la consigne et la sortie régulée
dans un fichier à travers le bloc To File placé à la sortie du multiplexeur. Les paramètres de
ce bloc sont introduits en double-cliquant dessus. La boîte de dialogue(figure III.23) s’ouvre
et permet d’introduire le nom du fichier de sauvegarde (Filename) qu’on a nommé
com_sys.mat et le nom de la variable (Variable name) qu’on a nommé yr_y.
Figure III.23
Le fichier com_sys.mat est créé, par défaut, dans le dossier Work faisant partie du répertoire
de Matlab. La variable yr_y est une matrice à trois lignes dont la première est le temps, les
deux autres sont la consigne et la sortie. Le nombre de colonnes de cette matrice est fonction
du choix du nombre de mesures à sauvegarder par rapport au pas d’intégration
(Decimation) et la durée entre les instants des sauvegardes (Sample time).
Dans notre cas, on a choisi de sauvegarder après chaque 4 pas d’intégration (une mesure sur
quatre) et le paramètre du Sample time est pris par défaut.