O slide No. 19 de 6_intro_root_locus.pdf, mostra o resultado gráfico do aumento do ganho no RL do sistema abaixo e consequente resposta no domínio tempo para uma entrada degrau quando este sistema é colocado para funcionar em malha-fechada com certo valor de ganho:
Planta, :
Esta planta quando submetida a um sistema em MF com ganho variável, rende:
A eq. Característica, fica:
Podemos ir variando o valor de e ir verificando como os pólos de MF "caminham" no RL:
>> rlocus(G)
>> hold on
>> K=1;
>> EC=[1 21 146 (K+336) 5*K];
>> polosMF=roots(EC)
polosMF =
-8.1554
-6.7224
-6.1073
-0.014933
>> plot(real(polosMF), imag(polosMF), 'r+', 'LineWidth',2, 'MarkerSize',14)
>> K=10;
>> EC=[1 21 146 (K+336) 5*K];
>> polosMF=roots(EC)
polosMF =
-8.8346 + 0i
-6.0055 + 0.77683i
-6.0055 - 0.77683i
-0.15434 + 0i
>> plot(real(polosMF), imag(polosMF), 'r+', 'LineWidth',2, 'MarkerSize',14)
>> K=100;
>> EC=[1 21 146 (K+336) 5*K];
>> polosMF=roots(EC)
polosMF =
-10.868 + 0i
-4.182 + 0i
-2.9751 + 1.4663i
-2.9751 - 1.4663i
>> plot(real(polosMF), imag(polosMF), 'r+', 'LineWidth',2, 'MarkerSize',14)
>> K=1000;
>> EC=[1 21 146 (K+336) 5*K];
>> polosMF=roots(EC)
polosMF =
-15.851 + 0i
-0.090226 + 7.9674i
-0.090226 - 7.9674i
-4.9684 + 0i
>> plot(real(polosMF), imag(polosMF), 'r+', 'LineWidth',2, 'MarkerSize',14)
Uma "animação" variando o ganho aparece na figura abaixo:
Sobre traçados de RL e seus detalhes, pode-se ainda usar a ferramenta Root Locus Gui:
versão (antiga, de 2019) desenvolvida para o Matlab:
versão Java (página web interativa):
No caso mostrado no exemplo inicial desta página, temos:
Um sistema com 1 zero e 4 pólos.
Podemos determinar o ponto de partida das assíntotas do RL como sendo:
>> sigma_a=((0-6-7-8)-(-5))/(4-1)
sigma_a =
-5.3333
E os ângulos de partida das assíntotas como sendo:
>> th=((2*0+1)*180)/(4-1)
th =
60
>> th=((2*1+1)*180)/(4-1)
th =
180
>> th=((2*2+1)*180)/(4-1)
th =
300
>> th=((2*3+1)*180)/(4-1)
th =
420
>> 360-420
ans =
-60
Pontos de partida (break-out) e pontos de chegada (break-in) são determinados à partir de diferenciação da .
A neste caso é:
Note que para todos os pontos do RL, e ao longo do eixo , , então:
Resolvendo a expressão anterior para , temos:
Diferenciando em relação à e fazendo esta derivada ser igual à zero, leva à:
Lembrando da regra da cadeia (derivadas):
>> % necessário symbolic toolbox instalado...
>> syms sigma
>> K = (-(sigma+5))/(sigma^4+21*sigma^3+146*sigma^2+336*sigma)
K =
-(sigma + 5)/(sigma^4 + 21*sigma^3 + 146*sigma^2 + 336*sigma)
>> dK=diff(K)
dK =
((sigma + 5)*(4*sigma^3 + 63*sigma^2 + 292*sigma + 336))/(sigma^4 + 21*sigma^3 + 146*sigma^2 + 336*sigma)^2 - 1/(sigma^4 + 21*sigma^3 + 146*sigma^2 + 336*sigma)
>> pretty(dK)
3 2
(sigma + 5) (4 sigma + 63 sigma + 292 sigma + 336) 1
---------------------------------------------------- - -------------------------------------------
4 3 2 2 4 3 2
(sigma + 21 sigma + 146 sigma + 336 sigma) sigma + 21 sigma + 146 sigma + 336 sigma
Ou seja:
Encontrando as raízes para o polnôimio acima, usando o Matlab:
>> r=solve(dK)
r =
root(z^4 + (62*z^3)/3 + (461*z^2)/3 + (1460*z)/3 + 560, z, 1)
root(z^4 + (62*z^3)/3 + (461*z^2)/3 + (1460*z)/3 + 560, z, 2)
root(z^4 + (62*z^3)/3 + (461*z^2)/3 + (1460*z)/3 + 560, z, 3)
root(z^4 + (62*z^3)/3 + (461*z^2)/3 + (1460*z)/3 + 560, z, 4)
>> valores=vpa(r)
valores =
- 3.3780472678327300285438795155159 - 0.49941127861787328582753134232288i
- 3.3780472678327300285438795155159 + 0.49941127861787328582753134232288i
-6.3627551233207089905144833359899
-7.547817007680497619064424299645
>>
Ou seja:
Ou:
>> dK2=[1 62/3 461/3 1460/3 560];
>> r2=roots(dK2)
r2 =
-7.5478 + 0i
-6.3628 + 0i
-3.378 + 0.49941i
-3.378 - 0.49941i
>> % plotando estes valores sobre o RL de G(s)
>> figure; rlocus(G)
>> hold on; plot(real(r2), imag(r2), 'mo', 'LineWidth', 2, 'MarkerSize', 14)
>> axis([-9 -2 -4 4])
>> sigma=r2(2)
sigma =
-6.3628
Para este caso, um valor válido seria: .
Então quando ,
Como:
Então substituindo no lugar de o valor de , teremos:
>> % calculando alguns termos com auxílio do Matlab:
>> EC_aux=[sigma^4 21*(sigma^3) 146*(sigma^2) 336*sigma 0]
EC_aux =
1639 -5409.5 5910.8 -2137.9 0
isolando teremos:
>> soma_aux = EC_aux(1)+EC_aux(2)+EC_aux(3)+EC_aux(4)
soma_aux =
2.4081
xxxxxxxxxx
>> % Completando os cálculos com ajuda do Matlab:
>> K_aux=soma_aux/(-(sigma+5))
K_aux =
1.7671
Verificando:
xxxxxxxxxx
>> ftmf=feedback(K_aux*G,1);
>> polosMF=pole(ftmf)
polosMF =
-8.248 + 0i
-6.3628 + 7.2242e-08i
-6.3628 - 7.2242e-08i
-0.02646 + 0i
>> % percebemos um par de pólos complexos no mesmo ponto no eixo x
>> % com parte imaginária praticamente nula
>> % gerando uma figura do RL mostrando este ponto:
>> figure;
>> rlocus(G)
>> hold on;
>> plot(real(polosMF), imag(polosMF), 'm+', 'LineWidth',2, 'MarkerSize',14)
>> axis([-9 0 -4 4])
E podemos visualizar o gráfico do RL destacando este ponto em especial:
isto significa que enquanto , a resposta deste sistema em MF será super-amortecida (sem overshoot), uma vez que só teremos pólos de MF com componentes reais.
Com este valor de ganho, vamos obter o menor tempo de assentamento possível para uma resposta super-amortecida:
xxxxxxxxxx
>> figure; step(ftmf)
ou graficamente:
Outros exemplos
Ex_1:
Ex_2:
Ex_3:
Fernando Passold, em 03/05/2024.