unsplash:
Photo by Colin Maynard on Unsplash

Métodos de Sintonia de PID

Método 2) Buscando Ku

Usando Simulink, foi gerado o diagrama de blocos mostrada a seguir (arquivo [planta_1_Ku.slx]):

planta_1_Ku-slx.png

A idéia é aumentar o ganho até descobrir o valor máximo, Ku, que coloca o sistema numa oscilação sustentada.

Para acelerar este processo e como neste caso, trata-se de uma simulação onde usamos (sabemos) o modelo matemático da planta, podemos usar a teoria de controle automático para descobrir de forma mais rápida o valor do ganho máximo. Podemos traçar o Root Locus deste sistema e descobrir Ku.

Então no Matlab:

>> G=tf(20,poly([-1 -2])) % sismples sistema de 2a-ordem

G =

       20
  -------------
  s^2 + 3 s + 2

Continuous-time transfer function.

>> rlocus(G)

O que rende o gráfico a seguir:

rlocus_planta_1.png

Notamos pelo RL gerado, que o Ku= para esta planta. Consequentemente este método não serve para este tipo de sistema.

Outra planta: modelo de 3a-ordem

Modificando ligeiramente a planta, acrescentando um 3o-polo.

>> G=tf(48,poly([-1 -4 -12])); % simples sistema de 3a-ordem
>> zpk(G)

          48
  ------------------
  (s+12) (s+4) (s+1)

Continuous-time zero/pole/gain model.

>> % Descobrindo y(\infty) para entrada degrau, MA, desta planta
>> dcgain(G)
ans =
     1

Entrando com esta planta no Simulink, (arquivo [planta_2_Ku.slx]), a ideia é ir incrementando o ganho proporcional até o sistema entrar numa oscilação sustentada:

planta_2_Ku-slx.png

Da mesma forma que anteriormente, para acelerar a busca pelo Ku vamos recorrer ao Root Locus deste sistema.
o Ku

>> figure; rlocus(G)
>> axis([-14 2 -10 10]) % Zoom na região de interesse

E assim obtemos o seguinte Root Lucos que destaca uma faixa de ganhos para Ku.

rlocus_planta_2_Ku.png

Notamos que 20<Ku<24,3. Agora, só nos resta fazer testes e buscar pela oscilação sustentanda.

Por fim, testando Ku=21,7:

>> Ku=21.7;
>> ftmf=feedback(Ku*G,1);
>> figure; step(ftmf)

Usando Ku21,4 no diagrama de blocos editado no Simulink, obtemos a saída:

step_planta_2_Ku.png

Ativando a oção “measurements” na janela de Scope do Simulink e separando uns 8 ciclos de oscilação (para melhorar a precisão no cálculo de Tu, período de oscilação), obtemos:

oscilacao_planta_2_Ku.png

Notamos que dentro dos 8 ciclos oscilamos temos um intervalo de tempo igual à Δt=6,321 segundos, então:

>> Tu=6.321/8
Tu =
      0.79012
>> % O que, por curiosidade rende a seguinte freq. de oscilação:
>> fu=1/Tu
fu =
       1.2656

Usando a tabela de Ziegler-Nichols para lembrar os valores sugeridos para os parâmatros Kp (ganho proporcional), Ki (ganho integrativo) e Kd (ganho derivativo) para o PID selecionado no Simulink (que usa estrutura parelela), teremos:

Controlador Kp Ti Td Ki Kd
P 0.50Ku
PI 0.45Ku 0.83˙Tu 0.54(Ku/Tu)
PD 0.80Ku 0.125Tu 0.100KuTu
PID clássico 0.60Ku 0.50Tu 0.125Tu 1.2(Ku/Tu) 0.075KuTu
Regra Integrador de Pessen 0.70Ku 0.40Tu 0.150Tu 1.75(Ku/Tu) 0.105KuTu
Algum overshoot 0.33˙Ku 0.50Tu 0.333˙Tu 0.66˙(Ku/Tu) 0.111˙KuTu
Sem overshoot 0.20Ku 0.50Tu 0.333˙Tu 0.40(Ku/Tu) 0.066˙KuTu

Tabela originalmente diponível em: https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method (em 13/10/2022).

Realizando os cálculos no Matlab (considerando o “PID clássico”, que trabalha com os valores originalmente propostos por Ziegler-Nichols):

>> Kp=0.6*Ku
Kp =
        13.02
>> Ki=1.2*(Ku/Tu)
Ki =
       32.957
>> Kd=0.075*Ku*Tu
Kd =
       1.2859

Porém temos que considerar que a implementação do PID prevista no Matlab/Simulink já traz um filtro derivativo, estudado na aula anterior. Este parâmetro para o filtro atua como o máximo ganho injetado por esta ação Derivativa, mas também corresponde à frequência do corte do filtro derivativo, ou seja, a frequência à partir da qual, este filtro não trabalha mais realizado uma ação Derivativa. Se faz necessário que esta frequência de corte ocorra num valor “elevado”, numa região de frequências à partir da qual não são mais esperadas oscilações rápidas do sistema à ser controlado.

Como neste caso, temos acesso ao modelo matemático da planta, podemos analisar o Diagrama de Bode da planta para entender sua faixa dinâmica e decidir por um falor adequado para o filtro derivativo:

>> bode(G)
>> grid

bode_planta_2.png

Pelo gráfico anterior, percebemos que podemos manter o coeficiente N do filtro derivativo em 100 (N=fc=100 [rad/s]).

Passando os valores dos ganhos calculados anteriormente para o PID do diagrama de blocos:

planta_2_PID-slx-ajustes_PID_classico.png

Estes valores geram a seguinte resposta ao degrau:

step_planta_2_PID_classico.png

Percebe-se um overshoot elevado, maior que 50%, quase 60%, como esperado quando se aplicam os valores iniciais gerados para o PID sugeridos por Ziegler-Nichols (a linha “PID clássico”) na tabela anterior.

Teríamos que realizar agora um “ajuste fino“ deste PID.

Mas neste caso, voltaremos para a tabela de valores sugeridos por Z-N e vamos optar pela linha “PID algum overshoot” para verificar o quanto a resposta se modifica. Recalculando os parâmetros do PID:

>> Kp=(1/3)*Ku
Kp =
       7.2333
>> 2/3
ans =
      0.66667
>> Ki=(2/3)*(Ku/Tu)
Ki =
       18.309
>> Kd=0.111*Ku*Tu
Kd =
       1.9032

Injetando estes novos valores no PID, obtemos agora um novo resultado:

step_planta_2_PID_algum_overshoot.png

Notamos um overshoot realmente bem menor e:

Comparando com o PID anterior:

step_planta_2_PID_classico_2.png

Notamos um ts=2,144 segundos (o valor ΔT no quadro measurements da janela de Scope desta simulação). Note que foi usado o critério dos 2% (ou seja, note: 2 | y(t)=9,814×101=0,9814 no quadro measurements).

Isto significa que é possível manter praticamente o mesmo ts encontrado noi primeiro ajuste, mas com %OS bem menor. Neste caso, a seintonia feita usando “PID: algum overshoot” foi a que permitiu alcançar os melhores resultados.


Para a próxima aula, está previsto testar/aplicar o método do relé para sintonia do PID.

[Fim]


Fernando Passold, em 20/10/2022.