controle de posição de motor cc por realimentação de estados · controle de posição de motor...

14
Controle de posição de Motor CC por realimentação de estados 1. Introdução Baseado no tutorial “Control Tutorials for Matlab e Simulink”, originalmente desenvolvido pelo Prof. Bill Messner do Department of Mechanical Engineering da Tufts University (Carnegie Mellon University) e Prof. Dawn Tilbury do Department of Mechanical Engineering and Applied Mechanics da University of Michigan. 2. Modelo do motor (J) moment of inertia of the rotor 3.2284E-6 kg.m^2 (b) motor viscous friction constant 3.5077E-6 N.m.s (Kb) electromotive force constant 0.0274 V/rad/sec (Kt) motor torque constant 0.0274 N.m/Amp (R) electric resistance 4 Ohm (L) electric inductance 2.75E-6H

Upload: ngonguyet

Post on 30-Nov-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

Controle de posição de Motor CC por realimentação de estados

1. Introdução

Baseado no tutorial “Control Tutorials for Matlab e Simulink”, originalmente desenvolvido pelo Prof. Bill Messner do Department of Mechanical Engineering da Tufts University (Carnegie Mellon University) e Prof. Dawn Tilbury do Department of Mechanical Engineering and Applied Mechanics da University of Michigan.

2. Modelo do motor

(J) moment of inertia of the rotor 3.2284E-6 kg.m^2

(b) motor viscous friction constant 3.5077E-6 N.m.s

(Kb) electromotive force constant 0.0274 V/rad/sec

(Kt) motor torque constant 0.0274 N.m/Amp

(R) electric resistance 4 Ohm

(L) electric inductance 2.75E-6H

3. Código do modelo no Matlab

>> J = 3.2284E-6;

b = 3.5077E-6;

K = 0.0274;

R = 4;

L = 2.75E-6;

s = tf('s');

P_motor = K/(s*((J*s+b)*(L*s+R)+K^2))

Transfer function:

0.0274

---------------------------------------------

8.878e-012 s^3 + 1.291e-005 s^2 + 0.0007648 s

Ou, na representação por espaço de estados:

>> A = [0 1 0

0 -b/J K/J

0 -K/L -R/L];

B = [0 ; 0 ; 1/L];

C = [1 0 0];

D = [0];

A = 1.0e+006 *

0 0.000001000000000 0

0 -0.000001086513443 0.008487176310247

0 -0.009963636363636 -1.454545454545455

B = 1.0e+005 *

0

0

3.636363636363637

>> C

C = 1 0 0

D = 0

4. Respostas no domínio do tempo 4.1 Em malha aberta

>> step(P_motor)

4.2 Em malha fechada com realimentação unitária e ganho unitário

>> step(feedback(P_motor,1))

0 0.5 1 1.5 2 2.5 3

x 104

0

2

4

6

8

10

12x 10

5 Step Response

Time (seconds)

Am

plitu

de

5. Projeto por realimentação de estados

Considerando-se a representação do sistema original:

>> A = [0 1 0

0 -b/J K/J

0 -K/L -R/L];

B = [0 ; 0 ; 1/L];

C = [1 0 0];

D = [0];

A = 1.0e+006 *

0 0.000001000000000 0

0 -0.000001086513443 0.008487176310247

0 -0.009963636363636 -1.454545454545455

B = 1.0e+005 *

0

0

0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.20

0.2

0.4

0.6

0.8

1

1.2

1.4Step Response

Time (seconds)

Am

plitu

de

3.636363636363637

>> C

C = 1 0 0

D = 0

Estabelecendo como objetivo de projeto as raízes da equação característica em -200, -100+100j e -100-100j (proposto pelo site).

>> K = acker(A,B,[-200 -100+100j -100-100j])

K = 0.001296072992701 -0.027380699342675 -3.998902987911969

A respota do sistema compensado será:

>> step(A-B*K,B,C,D)

O sistema realimentado, comparado com o sistema original em malha fechada, apresenta um tempo de acomodação significativamente menor e um sobre sinal também menor. Contudo, o valor em regime apresenta uma grande diferença em relação ao sistema original. Isto pode ser corrigido com um ganho de ajuste em B:

>> step(A-B*K,B/771,C,D)

0 0.01 0.02 0.03 0.04 0.05 0.06 0.070

100

200

300

400

500

600

700

800Step Response

Time (seconds)

Am

plitu

de

6. Representação no Simulink

Uma maneira de representar um sistema não representado em forma canônica com acesso a todas as variáveis de estado é obter a representação por função de transferência. Neste caso deseja-se acesso ao deslocamento angular, a velocidade angular e a corrente de armadura. Assim, a matriz C será modificada para matriz identidade de ordem 3.

>> C = eye(3)

C =

1 0 0

0 1 0

0 0 1

>> [num,den] = ss2tf(A,B,C,[0;0;0])

num = 1.0e+009 *

0 0.000000000000000 0.000000000000298 3.086245930998765

0 0.000000000000000 3.086245930998846 0

0 0.000363636363636 0.000395095797677 0

0 0.01 0.02 0.03 0.04 0.05 0.06 0.070

0.2

0.4

0.6

0.8

1

1.2

1.4Step Response

Time (seconds)

Am

plitu

de

den = 1.0e+007 *

0.000000100000000 0.145454654105890 8.614352169916566 0

A função de transferência associada a posição:

>> tf(num(1,:),den)

Transfer function:

1.164e-009 s^2 + 0.0002979 s + 3.086e009

----------------------------------------

s^3 + 1.455e006 s^2 + 8.614e007 s

A função de transferência associada a velocidade:

>> tf(num(2,:),den)

Transfer function:

2.328e-010 s^2 + 3.086e009 s

---------------------------------

s^3 + 1.455e006 s^2 + 8.614e007 s

A função de transferência associada a corrente de armadura:

>> tf(num(3,:),den)

Transfer function:

3.636e005 s^2 + 3.951e005 s

---------------------------------

s^3 + 1.455e006 s^2 + 8.614e007 s

De outra maneira:

No projeto por realimentação de estados, já com o ganho de correção:

Posição angular:

Velocidade Angular:

Corrente de Armadura:

7. Alternativa de projeto

Na tentativa de melhorar o comportamento em regime é possível adicionar um integrador com ganho ajustável.

No simulink fica:

Para o ganho do integrador em 0.035, observa-se a posição angular:

Um outro exemplo com polos objetivo em -400, -200+200j e -200-200j:

>> K = acker(A,B,[-400 -200+200j -200-200j])

K =

0.010368583941606 -0.027322516878077 -3.997802987911969

Desta vez compara-se original realimentado e o sistema compensado.

8. Representação canônica controlável

Dada a função de transferência do motor é possível a seguinte representação:

Transfer function:

0.0274

---------------------------------------------

8.878e-012 s^3 + 1.291e-005 s^2 + 0.0007648 s

Colocando no formato padrão (s3 multiplicado por 1):

>> [num,den]= tfdata(P_motor, 'v')

num = 0 0 0 0.0274

den = 1.0e-003 *

0.0000 0.0129 0.7648 0

>> num/den(1)

ans = 1.0e+009 *

0 0 0 3.0862

>> den/den(1)

ans = 1.0e+007 *

0.0000 0.1455 8.6144 0

Assim:

>> A = [0 1 0; 0 0 1; -den(4)/den(1) -den(3)/den(1) -den(2)/den(1)]

A = 1.0e+007 *

0 0.000000100000000 0

0 0 0.000000100000000

0 -8.614352169946272 -0.145454654105890>> B = [0; 0; 1];

>> C = [(num(4)/den(1)) 0 0] C = 1.0e+009 * 3.086245930998750 0 0 Repare que: >> [num,den] = ss2tf(A,B,C,0);step(feedback(tf(num,den),1)) Gera a mesma respota em malha fechada do sistema original:

Ou seja, a representação canônica controlável gera novas matrizes A,B,C e D, com uma

nova proposta de variáveis de estado. As variáveis de estado não são mais as variáveis de estado do sistema original.

0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.20

0.2

0.4

0.6

0.8

1

1.2

1.4Step Response

Time (seconds)

Am

plitu

de