Aula de 28/05/2019
Projeto de controlador Lead/Lag usando abordagem de NISE:
Para planta:
Requisitos de controle:
Iniciando projeto pelo Controlador Proporcional
>> G = tf( 1 , poly( [0 -6 -10 ] ) );
>> zpk(G)
1
--------------
s (s+10) (s+6)
Continuous-time zero/pole/gain model.
>> OS=20;
>> zeta=(-log(OS/100))./(sqrt(pi*pi+(log(OS/100)).^2))
zeta = 0.4559
>> rlocus(G)
>> sgrid(zeta, 0)
>> [K, polosMF] = rlocfind(G)
Select a point in the graphics window
selected_point = -1.8023 + 3.4724i
K = 189.7500
polosMF =
-12.3943 + 0.0000i
-1.8029 + 3.4726i
-1.8029 - 3.4726i
>> % Estimando ts com base em eq. para sistemas de MF de 2a-ordem
>> ts = 4/(real(polosMF(2)))
ts = -2.2187
>> new_ts = -ts/2
new_ts = 1.1093
>> new_sigma=4/new_ts
new_sigma = 3.6057
>> hold on;
>> plot([new_sigma new_sigma], [-8 8], 'r--' )
>> plot([-new_sigma -new_sigma], [-8 8], 'r--' )
Gráfico gerado para o RL incluíndo posição desejada para os pólos de MF:
Continuando cálculos:
>> % falta definir wd = parte imaginaria polos de MF desejados
>> theta=cos(zeta);
>> theta*180/pi
ans = 51.4426
>> new_omega=new_sigma*tan(theta)
new_omega = 4.5237
>> 180-theta*180/pi
ans = 128.5574
>> theta=atan2( imag(polosMF(2)), real(polosMF(2) ))
theta = 2.0497
>> theta*180/pi
ans = 117.4368
>> 180-theta*180/pi
ans = 62.5632
>> % Confirmando no gráfico fig1.eps/fig/png
>> % Novo valor para parte real do polo de MF desejado
>> new_omega=new_sigma*tan(pi-theta)
new_omega = 6.9453
>> hold on;
>> plot([-new_sigma -new_sigma], [new_omega -new_omega], 'r*' )
>> polos_MFd=[-new_sigma+i*new_omega -new_sigma-i*new_omega]
polos_MFd = -3.6057 + 6.9453i -3.6057 - 6.9453i
>> theta*180/pi
ans = 117.4368
>> % Iniciando projeto de Controlador por Avanço de Fase (Lead)
>> % calculando ângulos formados pelos pólos da planta:
>> theta_p2=atan2( imag(polos_MFd(1)), -10)
theta_p2 = 2.5345
>> theta_p2*180/pi % angulo em graus
ans = 145.2190
>> theta_p2=pi-theta_p2
theta_p2 = 0.6070
>> theta_p2*180/pi
ans = 34.7810
>> Sum_theta=theta+theta_p2
Sum_theta = 2.6567
>> pi
ans = 3.1416
>> theta_lead = pi - Sum_theta
theta_lead = 0.4849
>> theta_lead*180/pi % ângulo em graus para pólo do Lead
ans = 27.7822
>> % Este ângulo parece elevado...
>> p_lead=imag(polos_MFd(1))/tan(theta_lead)
p_lead = 13.1828
>> % Montando eq. do Lead:
>> C_Lead=tf(poly(-6), poly( -p_lead))
C_Lead =
s + 6
---------
s + 13.18
>> % Determinando FTMA(s) intermediário = Lead + Planta
>> ftma_lead=C_Lead*G;
>> zpk(ftma_lead)
(s+6)
------------------------
s (s+13.18) (s+10) (s+6)
>> figure; rlocus(ftma_lead)
>> hold on;
>> sgrid(zeta, 0)
>> plot(polos_MFd, 'm*')
>> theta_lead=15*pi/180 % transformando 15o em radianos
theta_lead = 0.2618
>> p_lead=imag(polos_MFd(1))/tan(theta_lead)
p_lead = 25.9201
% O valor acima parece improvável... erro no cálculo dos
% angulos, foi esquecido de acrescentar a parte real do
% poloMF desajado - alguns angulos incorretos...
>> p_lead = -( p_lead - real(polos_MFd(1)))
p_lead = -29.5258
>> C_Lead=tf(poly(-6), poly( p_lead))
C_Lead =
s + 6
---------
s + 29.53
>> ftma_lead=C_Lead*G;
>> figure; rlocus(ftma_lead)
>> hold on; sgrid(zeta,0)
>> plot(polos_MFd, 'm*')
>> % Encontrando ganho do Lead
>> [K_lead, polosMF] = rlocfind(ftma_lead)
Select a point in the graphics window
selected_point =
-3.6135 + 6.9660i
K_lead = 1.9899e+03
polosMF =
-32.2905 + 0.0000i
-3.6177 + 6.9670i
-3.6177 - 6.9670i
-6.0000 + 0.0000i
RL final obtido para o Controlador Lead (1a-etapa do projeto):
Fechando malha para o Lead (curiosidade):
>> ftmf=feedback(K*G, 1);
>> ftmf_lead=feedback(K_lead*ftma_lead, 1);
>> figure; step(ftmf, ftmf_lead)
Resposta ao degrau unitário alcançada para o Compensador por Avanço de Fase (Lead):
>> zpk(G)
1
--------------
s (s+10) (s+6)
>> % Planta: sitema tipo 1 = erro nulo para entrada degrau
>> K % mostrando ganho adotado para controlador proporcional
K = 189.7500
>> % acrescentando um integrador, variável 'aux`
>> aux=tf(1, [1 0])
1
-
s
>> % acrescentando integrador à planta:
>> sG =aux*G;
>> dcgain(K*sG)
ans =
Inf
>> zpk(sG)
1
----------------
s^2 (s+10) (s+6)
>> dcgain(K*G)
ans = Inf
>> K
K = 189.7500
>> % contante de erro de velocidade
>> Kv_prop=K/(6*10)
Kv_prop = 3.1625
>> % Calculando erro para entrada rampa:
>> e_ramp_prop=1/Kv_prop
e_ramp_prop = 0.3162
>> % criando vetor para simular entrada rampa
>> t=0:0.01:2;
>> u=1*t;
>> figure; plot(t, u) % confirmando a rampa
>> 1/0.01 % descobrindo k para t=1 segundo
ans = 100
>> u(100)
ans = 0.9900
>> u(101)
ans = 1
>> u(1, 101:201)=1;
>> figure; plot(t, u)
Figura final mostrando vetor criado para simular entrada rampa + degrau:
Fechando malha para a entrada (referência) anterior:
>> zpk(ftmf)
189.75
--------------------------------
(s+12.39) (s^2 + 3.606s + 15.31)
>> figure; lsim(ftmf, u, t)
Resultado da resposta do sistema para entrada rampa + degrau:
Se percebe que a rampa poderia ter durado mais tempo e que a resposta ao degrau poderia ter sido um pouco mais longa readequanto vetor :
>> t=0:0.01:4;
>> u=1*t;
>> 1.5/0.01
ans = 150
% confirmando onde o vetor u(kT)=1.5 (k>=151)
>> u(151)
ans = 1.5000
>> u(1, 151:401)=1.5;
>> figure; plot(t, u)
Novo vetor sintetizado:
Simulando novamente:
>> figure; lsim(ftmf, u, t)
Resposta à rampa + degrau:
>> 1.5-0.03
ans = 1.4700
>> figure; lsim(ftmf_lead, u, t)
>> 1.5-1.35
ans = 0.1500
% ou 15% de erro para entrada rampa em "regime permanente"
De quanto deveria ser redução do erro para entrada rampa ?
xxxxxxxxxx
>> % já que para entrada degrau não há erro (sistema tipo 1)
>> .15/0.03
ans = 5
>> % Entrando com dados do Controlador por Atraso de Fase
>> % assumindo valores propostos por NISE,
>> % Se supõe que o pólo foi arbitrado em s = -0.01
>> % e que por contribuição angular, o zero tenha ficado
>> % localizado em z = -0.04713
>> C_Lag=tf( [1 0.04713 ] , [1 0.01 ] )
C_Lag =
s + 0.04713
-----------
s + 0.01
Continuous-time transfer function.
>> ftma_lead_lag=C_Lag*C_Lead*G;
>> zpk(ftma_lead_lag)
(s+6) (s+0.04713)
---------------------------------
s (s+29.53) (s+10) (s+6) (s+0.01)
>> figure; rlocus(ftma_lead_lag)
>> hold on;
>> sgrid(zeta, 0)
>> plot(polos_MFd, 'm*') % este plot é para confirmar que RL
>> % passa sobre os pólos desejados de MF (Ok)
RL para controlador Lead-Lag:
Definindo o ganho para o controlador Lead/Lag:
xxxxxxxxxx
>> [K_lead_lag,polosMF]=rlocfind(ftma_lead_lag)
Select a point in the graphics window
selected_point = -3.5893 + 6.9213i
K_lead_lag = 1.9788e+03
polosMF =
-32.2751 + 0.0000i
-3.6067 + 6.9255i
-3.6067 - 6.9255i
-6.0000 + 0.0000i
-0.0474 + 0.0000i
>> C_lead_lag=K_lead_lag*C_Lag*C_Lead
C_lead_lag =
1979 s^2 + 1.197e04 s + 559.6
-----------------------------
s^2 + 29.54 s + 0.2953
>> % Equação final do controlador Lead/Lad, incluindo ganho:
>> zpk(C_lead_lag)
1978.8 (s+6) (s+0.04713)
------------------------
(s+29.53) (s+0.01)
>> % Fechando malha para Lead-Lag
>> ftmf_lead_lag=feedback(K_lead_lag*ftma_lead_lag, 1);
>> figure; lsim(ftmf_lead_lag, u, t)
Resposta final obtida para controlador Lead-Lag:
Repare que o erro em regime permanente para rampa ficou em:
xxxxxxxxxx
>> 1.5 - 1.36 = 0.14
>> % ou 14% de erro
>> % FTMA(s) com Lead-Lag
>> zpk(ftma_lead_lag)
(s+6) (s+0.04713)
---------------------------------
s (s+29.53) (s+10) (s+6) (s+0.01)
O resultado final não impressiona muito... não se percebe redução do erro....
Falta melhorar.
Fernando Passold, 28/05/2019