21
Universidade de Passo Fundo Engenharia El ´ etrica Controle Autom ´ atico III Trabalho final Alunos: In´ es Goicoechea Cristian Borrim Professor: Fernando Passold 20 outubro 2013

Trabalho Finalola Que Tal

Embed Size (px)

DESCRIPTION

TRABALHO CONTROLE AUTOMATICO

Citation preview

  • Universidade de Passo Fundo

    Engenharia Eletrica

    Controle Automatico III

    Trabalho final

    Alunos:Ines GoicoecheaCristian Borrim

    Professor:Fernando Passold

    20 outubro 2013

  • Indice

    1. Sistema 7 21.1. Equacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2. Condicoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3. Estabilidade - Metodo de Jury . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    2. Determinar BoG(z) 3

    3. Controlador proporcional 33.1. Malha fechada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33.2. Resposta a entrada degrau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.3. Ganho maximo Kmax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    4. Controlador pelo metodo de Zdau (polos dominantes) 94.1. Polo dominante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94.2. Entrada degrau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    5. Controlador pelo metodo dead beat (tempo mnimo) 125.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.2. Controlador C(z) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125.3. Malha fechada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.4. Malha aberta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145.5. Entrada degrau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155.6. Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    6. Controlador PID (Ziegler - Nichols) 186.1. PID analogico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186.2. Entrada degrau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196.3. PID digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    1

  • 1. Sistema 7

    1.1. Equacao

    O nosso sistema e G(s) =2,0(35s2 + 12s+ 1)

    5s4 + 11s3 + 10,75s2 + 5, 5s+ 0, 75

    1.2. Condicoes

    As condicoes para o controle sao:

    Tempo de ajuste (ts): ts < 10 segundos

    Sada em regimen permanente: 7.5

    Acao de controle restringida a` valores entre 0 < u(kT ) < 10 volts

    Periodo de amostragem (Ts): Ts = 0,1 segundos

    1.3. Estabilidade - Metodo de Jury

    Primeiro comprovamos as condicoes preliminares:

    1. |a0| < an 0, 80252 < 1 OK2. D(1) > 0 D(1) = 0, 00002 OK3. (1)nD(1) > 0 (1)nD(1) = 14, 3430 OK

    Tabela de Jury:

    Linha z0 z1 z2 z3 z4

    1 0.80252 -3.3888 5.369 -3.7827 12 1 -3.7827 5.369 -3.3888 0.802523 -0.356 -6.5023 -1.0603 0.3531 04 0.3531 -1.0603 -6.5023 -0.356 05 0.1267 2.3148 0.3775 0 0

    Condicoes:

    1. |a0| < |an| OK2. |b0| < |bn1| 0,356 < 0,3531 OK3. |c0| < |cn2| 0,1267 < 0,3775 OK

    2

  • 2. Determinar BoG(z)

    Para comecar, inserimos o sistema em Matlab e adotamos Ts = 0,1 segundos

    >> num = conv( [2], [35 12 1])num =

    70 24 2>> den = [5 11 10.75 5.5 0.75]den =

    5.0000 11.0000 10.7500 5.5000 0.7500>> Ts = 0.1Ts =

    0.1000>> [numd,dend]=c2dm(num,den,Ts)numd =

    0 0.0658 0.0675 0.0580 0.0597dend =

    1.0000 3.7827 5.3690 3.3888 0.8025>> printsys(numd,dend,'z')num/den =

    0.06578 z3 0.067492 z2 0.057999 z + 0.059747z4 3.7827 z3 + 5.369 z2 3.3888 z + 0.80252

    >> roots(numd)ans =0.94000.98580.9802

    >> roots(dend)ans =

    0.9802 + 0.0000i0.9489 + 0.0672i0.9489 0.0672i0.9048 + 0.0000i

    Entao, o nosso BoG(z) e:

    BoG(z) =0,06578z3 0,067492z2 0,057999z + 0,059747z4 3,7827z3 + 5,369z2 3,3888z + 0,80252

    E em forma de zero/pole/gain:

    BoG(z) =0,06578(z + 0,94)(z 0,9802)(z 0,9858)

    (z 0,9802)(z 0,9048)(z2 1,898z + 0,9048)

    3. Controlador proporcional

    3.1. Malha fechada

    Para comecar, obtemos a funcao de transferencia em malha fechada e tambem em formatode zero/pole/gain. H(s) = 1 e a realimentacao e unitaria:

    3

  • >> FTMF = feedback(BoG, 1)FTMF =

    0.06578 z3 0.06749 z2 0.058 z + 0.05975z4 3.717 z3 + 5.302 z2 3.447 z + 0.8623

    Sample time: 0.1 secondsDiscretetime transfer function.>> zpk(FTMF)ans =

    0.06578 (z+0.94) (z0.9802) (z0.9858)(z0.9802) (z0.9824) (z2 1.754z + 0.8955)

    Sample time: 0.1 secondsDiscretetime zero/pole/gain model.

    Agora separamos numerador e denominador:

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

    0 0.0658 0.0675 0.0580 0.0597den mf =

    1.0000 3.7170 5.3015 3.4468 0.8623Obtemos os polos em malha fechada:

    polos mf = roots(den mf) %Obtemos os polos em malha fechadapolos mf =

    0.8772 + 0.3550i0.8772 0.3550i0.9824 + 0.0000i0.9802 + 0.0000i

    >> [theta ,rho]=cart2pol(real(polos mf(1)) ,imag(polos mf(1)))%Verificamos se estao fora do circulo unitario

    theta =0.3845

    rho =0.9463

    >> deg=(rho*180)/pi %Transformando a (deg)deg =

    54.2190

    4

  • 3.2. Resposta a entrada degrau

    A entrada degrau e:

    step(FTMF)

    Pode-se observar que o overshoot e muito elevado (101), entao precisamos descobrir o Kmaxpermitido antes de que fique inestavel. Para isso, utilizamos os graficos.

    >> rlocus(num mf, den mf)hold onx = [1 : 0.1 : 1];y = sqrt(ones(1,length(x))x.2);hold on;plot(x, y, ':' ,x ,y , ':')axis('equal')

    5

  • E assim obtemos o grafico:

    3.3. Ganho maximo Kmax

    Com rlocfind olhamos o ganho possvel:

    >> rlocfind(numd, dend)Select a point in the graphics windowselected point =

    0.8206 + 0.5809ians =

    2.7876

    O valor maximo de overshoot tem que ser de 0.5, que se obtem com = 0,7. Portanto,utilizamos uma linha guia no Matlab e observamos os valores:

    >> zgrid(0.7,0.5,'new')

    6

  • >> rlocus(numd, dend)>> axis('equal')>> hold on>> rlocfind(numd, dend)Select a point in the graphics windowselected point =

    0.9080 + 0.2434ians =

    0.4404

    Comprovamos agora a nova sada para entrada degrau, com o controlador proporcionalobtido:

    >> K = 0.44K =

    0.4400>> [num mf,den mf]=feedback(K*numd,dend,1,1,1)num mf =

    0 0.0289 0.0297 0.0255 0.0263den mf =

    1.0000 3.7538 5.3393 3.4143 0.8288>> printsys(num mf,den mf, 'z')num/den =

    0.028943 z3 0.029697 z2 0.025519 z + 0.026289z4 3.7538 z3 + 5.3393 z2 3.4143 z + 0.82881

    >> dstep(num mf, den mf)

    7

  • O overshoot e ligeiramente menor, mas sao necessarios mais controladores de outros tipospara que fique ainda mais baixo.

    8

  • 4. Controlador pelo metodo de Zdau (polos dominantes)

    4.1. Polo dominante

    Para comecar, temos que procurar o polo mais dominante da planta. A nossa planta e:

    G(s) =2,0(35s2 + 12s+ 1)

    (5s4 + 11s3 + 10,75s2 + 5, 5s+ 0, 75

    Que em forma da transformada Z fica:

    BoG(z) =0,06578(z + 0,94)(z 0,9802)(z 0,9858)

    (z 0,9802)(z 0,9048)(z2 1,898z + 0,9048)No plano z, as razes dominantes sao aquelas que estao dentro e proximas do crculo unitario

    enquanto a regiao (no plano-z) menos significativa e que est proxima da origem do plano-z.O polo mais proximo ao crculo unitario e:

    z = 0,9802 temos que cancelar o polo mais dominanteEntao, a funcao de transferencia em malha aberta fica:

    F (z) =K0,06578(z + 0,94)(z 0,9802)(z 0,9858)

    (z 0,9048)(z2 1,898z + 0,9048)Geramos a figura do lugar das razes:

    >> fnum=numfnum =

    70 24 2>> fden=conv([1 0.9048],[1 1.898 0.9048])fden =

    1.0000 2.8028 2.6221 0.8187>> printsys(fnum,fden,'z')num/den =

    70 z2 + 24 z + 2z3 2.8028 z2 + 2.6221 z 0.81866

    zgrid(0.7,0.5,'new');hold on;rlocus(fnum, fden);hold on;zgrid(0.7, 0.5)>> rlocfind(fnum,fden)selected point =

    0.9971 + 0.1354ians =

    2.9781e05

    9

  • 4.2. Entrada degrau

    A resposta a entrada degrau e:

    10

  • >> K = 0.0000178K =

    1.7800e05>> [num mf,den mf]=feedback(K*fnum,fden,1,1,1)num mf =

    0 0.0012 0.0004 0.0000den mf =

    1.0000 2.8016 2.6225 0.8186>> printsys(num mf,den mf, 'z')num/den =

    0.001246 z2 + 0.0004272 z + 3.56e05z3 2.8016 z2 + 2.6225 z 0.81863

    >> dstep(num mf,den mf)polyval(num mf,1)/polyval(den mf,1)ans =

    0.7252

    O overshoot e a metade que ao comeco, mais ainda nao tem atingido o desejavel: 0.5.

    11

  • 5. Controlador pelo metodo dead beat (tempo mnimo)

    5.1. Objetivo

    O objetivo deste controlador e fazer o sistema em malha fechada atingir o regime permanenteno menor tempo possvel (no tempo mnimo absoluto, k = 1) ou dentro de um numero finitode perodos amostrados.

    Temos BoG(z), obtido previamente:

    BoG(z) =0,06578(z + 0,94)(z 0,9802)(z 0,9858)

    (z 0,9802)(z 0,9048)(z2 1,898z + 0,9048)

    5.2. Controlador C(z)

    Agora temos que obter a funcao C(z) com o Matlab:

    [num BoG,den BoG]=tfdata(BoG, 'v') %Obtemos em forma vetorialnum BoG =

    0 0.0658 0.0675 0.0580 0.0597den BoG =

    1.0000 3.7827 5.3690 3.3888 0.8025>> roots(num BoG) %Extraemos as raizes para obter os polos e zerosans =0.94000.98580.9802

    >> polos BoG=roots(den BoG)polos BoG =

    0.9802 + 0.0000i0.9489 + 0.0672i0.9489 0.0672i0.9048 + 0.0000i

    >> zeros BoG=roots(num BoG)zeros BoG =0.94000.98580.9802

    >> num c=poly (polos BoG ) ;>> den c aux=poly(zeros BoG)den c aux =

    1.0000 1.0260 0.8817 0.9083>> den c=conv(den c aux,[1 1]) %Temos que incluir um integrador para error nuloden c =

    1.0000 2.0260 0.1443 1.7900 0.9083>> C=tf(num c,den c,Ts)C =

    z4 3.783 z3 + 5.369 z2 3.389 z + 0.8025z4 2.026 z3 + 0.1443 z2 + 1.79 z 0.9083

    Sample time: 0.1 secondsDiscretetime transfer function.>> zpk(C) % C(z) em forma zero/pole/gain

    12

  • ans =(z0.9802) (z0.9048) (z2 1.898z + 0.9048)

    (z+0.94) (z0.9802) (z0.9858) (z1)Sample time: 0.1 secondsDiscretetime zero/pole/gain model.

    Entao, a nossa funcao C(z) e:

    (z 0,9802)(z 0,9048)(z2 1,898z + 0,9048)(z + 0,94)(z 0,9802)(z 0,9858)(z 1)

    5.3. Malha fechada

    Fechamos a malha de realimentacao:

    FTMA=series (C,BoG)FTMA =

    0.06578 z7 0.3163 z6 + 0.5505 z5 0.3061 z4 0.2559 z3 + 0.4632 z2 0.249 z + 0.04795z8 5.809 z7 + 13.18 z6 13.02 z5 + 0.7638 z4 + 10.93 z3 10.83 z2+ 4.515 z 0.7289

    Sample time: 0.1 secondsDiscretetime transfer function.>> zpk (FTMA) % Formato zero/pole/gainans =

    0.06578 (z+0.94) (z0.9802) (z0.9802) (z0.9858) (z0.9048)(z2 1.898z + 0.9048)

    (z+0.94) (z0.98) (z0.9804) (z0.9858) (z1) (z0.9048)(z2 1.898z + 0.9048)Sample time: 0.1 secondsDiscretetime zero/pole/gain model.

    A versao com os polos e zeros cancelados fica:

    >> FTMAr=minreal (FTMA,1e4) ;>> zpk(FTMAr)ans =

    0.06578(z1)

    Sample time: 0.1 secondsDiscretetime zero/pole/gain model.

    13

  • 5.4. Malha aberta

    Entao, a nossa funcao de transferencia em malha aberta e:

    FTMA(z) = C(z) BoG(z) = 0,06578z 1

    Agora vamos estabelecer o ganho K de nosso controlador. Para isso, precisamos tracar olugar das razes em malha aberta:

    >> rlocus(FTMA)>> axis equal>> hold on>> zgrid(1,1)>> [K,polos mf]=rlocfind(FTMA)Select a point in the graphics windowselected point =0.0021

    K =15.2349

    polos mf =0.9400 + 0.0000i0.9489 + 0.0672i0.9489 0.0672i0.9858 + 0.0000i0.9802 + 0.0000i0.9802 0.0000i0.9048 + 0.0000i0.0021 + 0.0000i

    14

  • 5.5. Entrada degrau

    Obtemos o grafico da resposta a` entrada degrau

    FTMF=feedback(K*FTMA,1) %Fechamos a malha com o ganho obtidoFTMF =

    1.002 z7 4.819 z6 + 8.386 z5 4.664 z4 3.899 z3 + 7.056 z2 3.794 z + 0.7305z8 4.807 z7 + 8.358 z6 4.636 z5 3.9 z4 + 7.033 z3 3.77 z2+ 0.7208 z + 0.001564

    Sample time: 0.1 secondsDiscretetime transfer function.>> zpk(FTMF)ans =

    1.0021 (z+0.94) (z0.9802) (z0.9802) (z0.9858) (z0.9048)(z2 1.898z + 0.9048)(z+0.94) (z0.9802) (z0.9802) (z0.9858) (z0.9048) (z+0.002146)

    (z2 1.898z + 0.9048)Sample time: 0.1 secondsDiscretetime zero/pole/gain model.>> step(FTMF)

    Depois, obtemos y() no Matlab:

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

    15

  • 0 1.0021 4.8191 8.3865 4.6640 3.8986 7.0562 3.79370.7305den mf =

    1.0000 4.8066 8.3582 4.6360 3.9002 7.0328 3.7705 0.72080.0016>> y infty=polyval(num mf,1)/polyval(den mf,1)y infty =

    1.0000

    5.6. Simulink

    Este tipo de resposta tem um elevado esforco de controle. Utilizamos o Simulink para ver aresposta de u(k):

    figure; stairs(t,u)figure; plot(t,y)title('Acao de Controle [u(k)]')xlabel('tempo (s)'); ylabel('u(k)')figure; stairs(t,u)title(' A o de Controle [u(k)]'); xlabel('tempo (s)');ylabel('u(k)')

    E obtemos as seguintes respostas:

    16

  • 17

  • 6. Controlador PID (Ziegler - Nichols)

    A abordagem que vamos utilizar e projetar um PID na forma analogica, e depois vamosdigitalizar todo pelo metodo de Tustin.

    6.1. PID analogico

    Primeiro, achamos o Ku(Km) e nos baseando no resultado, achamos o resto dos ganhoskp, ki, kd. Com um comando de Matlab achamos o wm.

    >> rlocus(G)>> [km,pole]=rlocfind(G)Select a point in the graphics windowselected point =0.9130 + 3.9907i

    km =1.0949

    pole =0.9123 + 3.9907i0.9123 3.9907i0.2000 + 0.0000i0.1754 + 0.0000i

    >> wm=max(imag(pole))wm =

    3.9907>> kp=0.6*km;>> kd=(kp*pi)/(4*wm);>> ki=(kp*wm)/pi;>> nk=[kd kp ki];>> dk=[1 0];>> gc=tf(nk,dk)gc =

    0.1293 s2 + 0.6569 s + 0.8345

    sContinuoustime transfer function.>> gd=series(G,gc)gd =

    9.05 s4 + 49.09 s3 + 74.44 s2 + 21.34 s + 1.669

    5 s5 + 11 s4 + 10.75 s3 + 5.5 s2 + 0.75 sContinuoustime transfer function.>> GT=feedback(gd,1)GT =

    9.05 s4 + 49.09 s3 + 74.44 s2 + 21.34 s + 1.6695 s5 + 20.05 s4 + 59.84 s3 + 79.94 s2 + 22.09 s + 1.669

    Continuoustime transfer function.>> step(GT,'r')>> hold on>> step(GS,'g')

    18

  • 6.2. Entrada degrau

    A resposta a entrada degrau fica:

    Vermelho: Regulado

    Verde: Nao regulado

    Observamos que os valores ficaram melhor do que sem controlador PID:

    Overshoot Peak response Settling time Rise timeNo regulado 81,1 1,32 14,2 0,267Regulado 24,7 1,25 6,94 0,431

    6.3. PID digital

    Agora, digitalizamos o controlador PID com o metodo Tustin:

    >> Dgc = c2d(gc, Ts, 'tustin')Dgc =

    3.284 z2 5.088 z + 1.971

    z2 1Sample time: 0.1 secondsDiscretetime transfer function.>> sys cl = feedback(Dgc*BoG,1)sys cl =

    19

  • 0.216 z5 0.5564 z4 + 0.2825 z3 + 0.3583 z2 0.4183 z + 0.1177z6 3.567 z5 + 3.813 z4 + 0.6765 z3 4.208 z2 + 2.97 z 0.6848

    Sample time: 0.1 secondsDiscretetime transfer function.

    O controlador PID e:

    C(z) =3,284z2 5,088z + 1,971

    z2 1Entao, a nossa funcao fica:

    BoG(z)C(z) =0,216z5 0,5564z4 + 0,2825z3 + 0,3583z2 0,4183z + 0,1177z6 3,567z5 + 3,813z4 + 0,6765z3 4,208z2 + 2,97z 0,6848

    Em modo zero/pole/gain:

    >> zpk(sys cl)ans =

    0.21604 (z+0.94) (z0.9802) (z0.9858) (z0.7746)2(z+1.006) (z0.9865) (z0.9802) (z0.8445) (z2 1.762z + 0.8334)

    Sample time: 0.1 secondsDiscretetime zero/pole/gain model.

    BoG(z)C(z) =0,21604(z + 0,94)(z 0,9802)(z 0,9858)(z 0,7746)2

    (z + 1,006)(z 0,9865)(z 0,9802)(z 0,8445)(z2 1,762z + 0,8334)

    20