P2solução - SEL (EESC/USP)

Propaganda
Controle de Sistema de Suspensão Magnética
Aluno: Giovanni Antonio Gastaldi
Profa Vilma A. Oliveira
SEL 328 – Controle Robusto
O sistema analisado é o sistema abaixo
A equações que regem o sistema são:
 L0
2a
f ( z, i) 
i2
z
(1  ) 2
a
(1)
2z
f ( z, i)
g
2
m
t
v  Ri 
(2)
 ( L( z )i
t
EESC - USP
(3)
03/12/02
SEL - 328
No equilíbrio mg   f ( z e , ie ) fornecendo para L constante e z e  0.0045
ie 
z
mg 2a
(1  e ) .
L0
a
Modelo do sistema não linear
Pelas equações acima que regem o sistema, por meio de manipulação algébrica obtemos
a representação do sistema de suspensão magnética na forma espaço de estado
definindo-se x1  z, x 2  z e x3  i :
x  F ( x, v)
onde






x2




L0
x32
.
F  g 
2 
2
am
x




1  1  

a



v

R
.
x
3


L


O ponto de equilíbrio fica xe  [ z e ,0, ie ]T .
Esta função não linear no Matlab é implementada da seguinte maneira.
xdot=[x(2); g-(L0/(2*a*m))*x(3)^2/(1+x(1)/a)^2; 1/L*(u+ve-R*x(3))];
Utilizar os valores dos parâmetros do sistema dados na tabela abaixo.
Tabela 1 – Parâmetros do sistema de suspensão magnética.
massa da esfera metálica
m [kg]
22,6 x 10-3
resistência da bobina
R [Ω]
19,9
indutância da bobina aproximada
L [H]
0,520
indutância da bobina no ponto de L0 [mH]
24,9
operação
posição da bola no ponto de operação
ze [m]
4,5 x 10 -3
constante a
a [m]
6,72 x 10 –3
Linearização do sistema em torno de ie e ze
F
x
x  x e  F ( xe , ve ) 
( x  xe ) 
xe , ve
F
v
(v  v e )
(4)
xe , ve
Definindo
xl  x  xe
u  v  ve
podemos escrever
x  Ax  Bu
onde
(5)
A :
F
x
xe , ve

0
k
 2
m
0

1
0
0

0 
 k1 
F
; B :
m 
x
R
L 
xe , ve
 
0
 0
1
 
L
com
f
i
L0 i e
z
z e , ie
[a(1  e ) 2 ]
a
2
L0 i e
f
k2 

z
z ze ,ie
[a 2 (1  e ) 3 ]
a
z e  0.0045 , ie  0.447 , ve  8.8952 ve  RR * ie .
k1 

Com este sistema linearizado, obter uma forma de controle da forma u=-Kx, escolhendose adequadamente as matrizes Q e R tal que o seguinte índice J de performance seja
minimizado:

J   x * Qx  u * Ru t
0
Segue o procedimento de projeto. Seja o sistema linear invariante no tempo (A,B,C)
x  Ax  Bu , x(0)  x0
com x  R n , u  R m e (A,B) estabilizável e a lei de realimentação de estado:
u=-Kx
onde K  R mxn é a chamada matriz de realimentação de estado. Substituindo a lei de
realimentação de estado no sistema (A,B,C) tem-se
x  ( A  BK ) x
Problema LQR de estado estacionário
0  AT P  PA  PBR1BT P  Q
u *   Kx
com K  R 1 B T P
A solução do problema LQR de estado estacionário é geralmente dada em duas partes.
Primeiro estabelece-se condições de existência de uma solução única positiva definida da
equação de Riccati tal que A  BR 1 BT seja estável e então o problema LQR é solucionado
pela lei de realimentação ótima u   R 1 B T Px .
Tendo (A,B) estabilizável. Então, existe P única definida positiva satisfazendo
AT P  PA  PBR1BT P  Q  0
e a lei de controle dada por u   R 1 B T Px é ótima e estabiliza o sistema realimentado com
custo para condição inicial x0 dado por
J ( x0 , u* )  x0T Px0
Observação: A solução do LQR padrão reduz-se ao problema de obter a solução positiva
definida da equação de Riccati.
Por meio do comando do Matlab abaixo obtém-se a solução para K e para P:
[K, P]  lqr( A, B, Q, R)
Caso 1 (curva azul) Q1=[1000;0;0];R1=0.0001. Custo final J1= x0’*P1*x0 =4.2616e-004
Caso 2 (curva vermelha)
Aumenta-se a
Q2=[15000;0;0];R1=0.0001. J2= x0’*P1*x0 =0.0048
primeira
componente
de
Q:
Caso 3 (curva lilás) Diminui-se R: Q3=[1000;0;0];R3=0.000001. J3= x0’*P3*x0 = 2.5098e004
Rotina no Matlab
%Programa principal
%Controle de sistema de suspensão magnética
clear all
close all
clc
global A B K
%
L0=0.0249; a=0.00672; ze=0.0045; m=0.0226;
RR=19.9; L=0.52; g=9.81;
% pontos de equilibrio i0 e v0 para z0=0.005
%mg=-f(ze,ie)
ie=sqrt((m*g*2*a/L0)*(1+ze/a));
%ie=0.447
%k1 e k2
k1=(L0*ie)/(a*(1+(ze/a))^2);
k2=(L0*(ie^2))/(a^2*(1+(ze/a))^3);
%Matriz de estados A e matriz de controle B
A=[0 1 0;k2/m 0 -k1/m;0 0 -RR/L];
B=[0;0;1/L];
% diagonal da matriz Q
d1=1000;
d2=0;
d3=0;
%Matrizes Q e R do índice de desempenho quadrático
%caso 1
R1=0.0001;
Q1=[d1 0 0;0 d2 0;0 0 d3];
%K => Matriz de Ganho de Retroação
%P => Solução P da equação de Riccati
[K1,P1]=lqr(A,B,Q1,R1);
%
%Modelo Não - Linear
K=K1;
Tfinal=0.2
%condicao inicial [0.0042 0 0.55]
[t1,z]=ode23('fsuspnao',Tfinal,[0.003 0 0.4]);
x11=z(:,1);
x21=z(:,2);
x31=z(:,3);
xe=[0.0045; 0; 0.447]; ve=RR*ie; %estes valores tem que corresponder aos usados
%
na obtencao de A e B
%
%Sinal de controle do modelo não-linear caso 1
for i=1:length(t1)
u1(i)=-K1*[x11(i)-0.0045 x21(i) x31(i)-0.447]';
v1(i)=u1(i)+ve;
end
%outros valores de Q caso 2
d1=15000;
Q2=[d1 0 0;0 d2 0;0 0 d3];
[K2,P2]=lqr(A,B,Q2,R1);
K=K2;
[t2,z]=ode23('fsuspnao',Tfinal,[0.003 0 0.4]);
x12=z(:,1);
x22=z(:,2);
x32=z(:,3);
%Sinal de controle do modelo não-linear caso 2
for i=1:length(t2)
u2(i)=-K2*[x12(i)-0.0045 x22(i) x32(i)-0.447]';
v2(i)=u2(i)+ve;
end
%caso 3: mesmo Q caso 1 e outro R
R2=0.000001;
Q3=Q1;
%K => Matriz de Ganho de Retroação
%P => Solução P da equação de Riccati
[K3,P3]=lqr(A,B,Q1,R2);
%
%Modelo Não - Linear
K=K3;
%condicao inicial [0.0042 0 0.55]
[t3,z]=ode23('fsuspnao',Tfinal,[0.003 0 0.4]);
x13=z(:,1);
x23=z(:,2);
x33=z(:,3);
%Sinal de controle do modelo não-linear caso 3
for i=1:length(t3)
u3(i)=-K3*[x13(i)-0.0045 x23(i) x33(i)-0.447]';
v3(i)=u3(i)+ve;
end
% obtencao custo J=x0'*P*x0
x0=[0.0042 0 0.55]';
J1=x0'*P1*x0;
J2=x0'*P2*x0;
J3=x0'*P3*x0;
figure(1);
%x1 versus t: Deslocameno(z) x tempo
subplot(2,2,1);
plot(t1,x11,'b',t2,x12,'r',t3,x13,'m');grid
%%%plot(t,x1);grid
title('Deslocamento x t');
xlabel('t s');
ylabel('x1 = Deslocamento');
%x2 versus t: Velocidade x tempo
subplot(2,2,2);
plot(t1,x21,'b',t2,x22,'r',t3,x23,'m');grid
title('Velocidade x t');
xlabel('t s');
ylabel('x2 = Velocidade');
%x3 versus t: Corrente x tempo
subplot(2,2,3);
plot(t1,x31,'b',t2,x32,'r',t3,x33,'m');grid
title('Corrente x t');
xlabel('t s');
ylabel('x3 = Corrente');
%u versus t: Sinal de Controle (u)
subplot(2,2,4);
plot(t1,v1,'b',t2,v2,'r',t3,v3,'m');grid
title('u x t');
xlabel('t s');
ylabel('u = Sinal de Controle');
O programa principal chama a subrotina abaixo:
Fsuspnao.m
function [xdot]=fsuspnao(t1,z)
global A B K
u=-K*[z(1); z(2); z(3)];
L=0.52; g=9.81; L0=0.0249; a=0.00672; m=0.0226; RR=19.9; L=0.52;
ie=0.447;ve=RR*ie;
xdot=[z(2); g-(L0/(2*a*m))*z(3)^2/(1+z(1)/a)^2; 1/L*(u+ve-RR*z(3))];
Download