pme2443

5
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

Transcript of pme2443

Page 1: pme2443

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

Page 2: pme2443

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

Page 3: pme2443

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,:));

Page 4: pme2443

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)

Page 5: pme2443

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)')

////////////////////////////////////////

////////////////////////////////////////