Post on 08-Feb-2016
ESCOLA POLITÉCNICA DA UNIVERSIDADE DE SÃO PAULO
PME2443 – MICROPROCESSADORES E CONTROLE DIGITAL
PROFESSOR: RAUL GONZALEZ 26⁄11⁄2013
NOME: PAULO HENRIQUE FERREIRA NºUSP: 6849025
RESOLUÇÃO PROVINHA – CONTINUAÇÃO
Obs.: Os gráficos não consegui simular, mas a demonstração do programa que
estive desenvolvendo está explicada no código do Scilab abaixo.
Código Scilab:
////////////////////////////////////////////////////
//PME2443 - Microprocessadores e Controle Digital
//Professor: Raul Gonzalez
//Nome: Paulo Henrique Ferreira nºUSP: 6849025
//Resolução da Provinha 12/11/2013
////////////////////////////////////////////////////
//Matrizes do Espaço de Estados
A=[-0.000244 0.000244 0 0;0.000244 -0.000488 0.000244 0;0 0.000244 -0.000488 0.000244;0 0 0.000244 -0.000488];
B=[0.1;0;0;0];
C=diag([0 1 0 1]);
D=zeros(4,1);
////////////////////////////////////////
//Controlabilidade
//Matriz de Controlabilidade "Control"
Control=[B A*B A 2̂*B A 3̂*B];
postoC=contr(A,B);
if postoC==4
disp('Sistema Controlável')
end
if postoC~=4
disp('Sistema Não Controlável')
end
////////////////////////////////////////
//Observabilidade
//Matriz de Observabilidade "Observ"
Observ=obsv_mat(A,C);
postoO=rank(Observ);
if postoO==4
disp('Sistema Observável')
end
if postoO~=4
disp('Sistema Não Observável')
end
////////////////////////////////////////
//Obtenção do sistema linear S1
S1=syslin('c',A,B,C,D);
////////////////////////////////////////
//Discretização do sistema linear S1 para S1D, intervalo de tempo de 0.01 s
[S1D]=dscr(S1,0.01); //Função "dscr" de discretização, com intervalo de tempo de0.01 s
////////////////////////////////////////
//Método aproximado para discretização do sistema
deltaT=0.01; //Intervalo de tempo de discretização, 0.01 s
Ident=diag([1 1 1 1]); //Matriz Identidade
G=Ident+A*deltaT+(A 2̂*deltaT^2)/2+(A^3*deltaT^3)/6; //Matriz G
H=deltaT*G*B; //Matriz H
////////////////////////////////////////
//Simulação do sistema discretizado para uma entrada conhecida
//Determinação das matrizes Q, R e S
t=0:0.01:10;
u=0.1*ones(1,max(size(t))); //Entrada
x=[0;0;0;0]; //Vetor inicial para x
for i=1:1:max(size(t))-1
x(:,i+1)=G*x(:,i)+H*u(:,i); //Iteração
end
////////////////////////////////////////
//Método Linear Quadrático
//Determina-se os valores máximos admitidos para as váriaveis
x1max=max(x(1,:));
x2max=max(x(2,:));
x3max=max(x(3,:));
x4max=max(x(4,:));
Soma=x1max + x2max + x3max + x4max;
//Para evitar termos cruzados as matrizes são diagonais
Q=zeros(4,4);
//Para matriz R pequena e matriz Q grande minimizam-se os desvios, ou seja, aumenta-se a precisão de controle
//Diagonal de Q deve ser assumida pequena para os valores das váriaveis de estado
Q(1,1)=x1max/Soma;
Q(2,2)=x2max/Soma;
Q(3,3)=x3max/Soma;
Q(4,4)=x4max/Soma;
//Matriz R deve ser assumida grande para os valores das váriaveis de estado
R=diag([1]);
BR=B*inv(R)*B';
P=ricc(A,BR,Q,'cont');
//Matriz de ganho Klq
Klq=inv(R)*B'*P;
S=P;
////////////////////////////////////////
//Simulação do sistema discreto com o sinal de controle calculado
u=0.1;
t=0:0.01:10;
x0=[0;0;0;0]; //Vetor inicial para x
x=[0.001;0.001;0.001;0.001]; //Vetor final para x
for i=1:1:max(size(t))-1
maximo=max(size(t))-1
u(:,i)=-Klq*x(:,i); //Iteração
x(:,i+1)=G*x(:,i)+H*u(:,i); //Iteração
xaux(:,(maximo-i))=x(:;i); //Variável auxiliar para x - Iteração
uaux(:,(maximo-i))=x(:;i); //Variável auxiliar para u - Iteração
end
xset('window', 1)
plot(t,uaux);
xtitle('Sinal de Controle u (m³/s) no Tempo t (s)')
xset('window', 2)
plot(t,xaux(1,:));
xtitle('Váriavel X1 (m) no Tempo t (s)')
xset('window', 3)
plot(t,xaux(2,:));
xtitle('Váriavel X2 (m) no Tempo t (s)')
xset('window', 4)
plot(t,xaux(3,:));
xtitle('Váriavel X3 (m) no Tempo t (s)')
xset('window', 5)
plot(t,xaux(4,:));
xtitle('Váriavel X4 (m) no Tempo t (s)')
////////////////////////////////////////
////////////////////////////////////////