Vous êtes sur la page 1sur 15

COMPTE RENDU TP1 SLCD 

:
Commande numérique dans l'espace d'état d'un moteur à courant
continu :
Atténuation du phénomène de pic du courant d'induit.

Réalisé par l’élève ingénieur de la 2ème GE filière GESET :

Salma Tariq
Enseigné par :
Prof. ASSOUDI

Objectif :
Dans le présent TP, il s'agit d'élaborer une commande par retour d'état
discret pour un moteur à courant continu permettant de poursuivre un
signal de vitesse servant de référence.
1
Description :
Modélisation d’un MCC

Etude théorique :

Q1 : Donner le schéma fonctionnel détaillé liant la position


angulaire ϴm à la tension U :

2
TF donne :
( J p2 + fp ) ( R+ Lp )
U ( p )=ϴm( p)[ +Փ 0 p]
Փ0
( J p+ f ) ( R+ Lp )
U ( p )=Ω( p)[ +Փ 0 ]
Փ0
D’où le schéma fonctionnel :

Q2 : En choisissant comme variables d'état les grandeurs physiques


ϴm, et I, donner la représentation d'état du système, compte tenu
de l'observation ϴm :

Avec x=[θm Ω I ]T =[ x1 x 2 x 3 ]T et le vecteur d’état du moteur ;

Représentation de commande du système :

d x3
U ( t )=R x3 + L +Փ 0 x 2
dt

d x2
Γ ( t )=J + f x2
dt

3
Γ ( t )=Փ0 x 3

Donc
d x3 U R Փ0
= − x3 − x
dt L L L 2

d x 2 Փ0 f
= x 3− x 2
dt J J
d x1
=x 2
dt

D’où :
0
1 0
0

{}( )( ) ( )
x −f Փ0 x1
d 1 0 0 U
x = J J x2 +
dt 2 1
x3 −Փ 0 −R x3
0 L
L L

x1
Y=(1 0 0 )
{}
x2
x3

0 1 0
0

Donc : A=
( )
0

0
−f
J
−Փ0
L
Փ0
J
−R
L
et B=
()0
1
L
et C=(1 0 0)

Q3 :Donner le modèle d’état discret (∑d) du modèle (∑c ) en


utilisant la discrétisation d’Euler :

4
Nous pouvons approximer la dérivée  ẋ comme suit:
x k+1−x k
ẋ ≃

x k+1−x k
= A x k+ B U k

y k =C x k

Donc :
x k+1= ( I + A ) x k +B U k

y k =C x k

¿ 0 Փ 0 ¿ 0¿ −Փ 0 ¿1− R ¿
D’où Ad= (10 ¿ J L L )
0
Bd=
()0

L

Cd= (1 0 0)
Etude en simulation :

En considérant un MCC décrit par les deux modèles


Q1 : Procéder à une simulation du comportement du moteur
en boucle ouverte :
Programme Matlab :

5
Test1 :
clc;
clear all;
t0 = 0;
tf = 0.02;
x0 = [0;0;0];
[t,x] = ode45('test2',[t0 tf],x0);
figure(1)
plot(t,x(:,1),'b')
grid
figure(2)
plot(t,x(:,2),'b')
grid
figure(3)
plot(t,x(:,3),'b')
grid
Test2 : ‘Définition de la fonction’ :
function Xd = test2(t,x)
%Constantes:
phi = 0.664;
R = 1000;
L = 0.1;
J = 10^-6;
f = 0.64*10^-4;

a1 = -f/J ;
a2 = phi/J;
a3 = -phi/L ;
a4=-R/L ;
a5=1/L ;
%def Matrices:
A = [0 1 0; 0 a1 a2; 0 a3 a4];
B = [0; 0; a5];
C = [1 0 0];
u=10;
Xd=A*x+B*u;

On exécute le premier test pour afficher les courbes de


(Couple, Vitesse et Courant) ;
6
Courbe du position :

Courbe de la vitesse :

7
Courbe du courant :

Q2 : Procéder à une simulation du comportement du moteur en


utilisant les lois de commande stabilisante déterminées précédemment.

Programme Matlab :
Script1 : ‘definition de la fonction’

function Xd=Q2(t,x)
phi = 0.664;
R = 1000;
L = 0.1;
J = 10^-6;
f = 0.67*10^-4;
vn = 1500*pi/60;
a0=-f/J;
a1=phi/J;
a2 = -phi/L;
a3= -R/L;
a4=1/L;
p=[-1;-2;-3];
A=[0 1 0 ; 0 a0 a1; 0 a2 a3];
B=[0 ; 0 ;a4];

8
C=[1 0 0];
t0 = 0;
t1 =2;
t2 = 4;
t3 = 6;
tf = 8;
c = (((-t2^2)+(t1*t2)-(t1*t3))*vn)/(2*(t3-t2));
if t0<=t && t<= t1
xref = [(vn/(2*t1))*t^2 ; vn*t/t1 ;
(f*vn*t)/(phi*t1) + ((J*vn)/(phi*t1))];
xrefp= [(vn/t1)*t; vn/t1; (f*vn)/(phi*t1)];
elseif t1<t && t<=t2
xref = [vn*(t-(t1/2)); vn;(f*vn)/phi];
xrefp = [vn; 0;0];
elseif t2<t && t<=t3
xref=[(-vn*t^2)/(2*(t3-t2))+((vn*t3*t)/(t3-t2))
+c ;(-vn*(t-t3))/(t3-t2);(-f*vn*(t-t3))/(phi*(t3-t2))-
J*vn/(t3-t2)];
xrefp = [(-vn*(t-t3))/(t3-t2); -vn/(t3-t2);(-
f*vn)/((t3-t2)*phi)];
else
xref = [((-vn*(t3)^3)/(2*(t3-t2))) + ((vn*(t3)^3)/
(t3-t2)) + c; 0; 0];
xrefp = [0; 0; 0];
end

p = [-1; -2; -3];


K = place(A,B,p);
M1 = inv(C*(inv(A-(B*K)))*B);
M2 = C*inv(A-B*K);
uref = M1*(M2*xrefp -C*xref);
u=-K*x + uref;
Xd = A*x+B*u;

End

Script2 : ‘Afficher les courbes (à éxecuter)’

t0=0;tf=8;x0=[0;0;0];
[t,x]=ode45('Q2',[t0 tf],x0);
figure(1),plot(t,x(:,1));
grid
figure(2),plot(t,x(:,2));
grid

9
figure(3),plot(t,x(:,3));
grid

Courbe du position :

Courbe vitesse :

10
Courbe Courant :

11
12
Q3 : Etudier les réponses des observateurs déterminées
précédemment pour à un créneau en fonction des diférentes valeurs du
gain des observateurs :
Programme Matlab :
Test1 :
function Xd=test0(~,x)
phi = 0.664;
R = 1000;
L = 0.1;
J = 10^-6;
f = 0.67*10^-4;
a1=-f/J;
a2=phi/J;
a3 = -phi/L;
a4= -R/L;
a5=1/L;
p=[-1;-2;-3];
A=[0 1 0 ; 0 a1 a2; 0 a3 a4];
B=[0 ; 0 ;a5];
C=[1 0 0];
yc=20;
k=place(A,B,p);
M = C*inv(A-B*k)*B;
uc=-inv(M)*yc;

u=-k*x+uc;
Xd=A*x+B*u;
end

Test2 :
t0=0;tf=6;x0=[0;0;0];
[t,x]=ode45('test0',[t0 tf],x0);
figure(1),plot(t,x(:,1));
grid
figure(2),plot(t,x(:,2));
grid
figure(3),plot(t,x(:,3));
grid

13
Courbe position :

Courbe vitesse :

Courbe du courant :
14
15

Vous aimerez peut-être aussi