unsplash
Photo by Johannes Plenio on Unsplash

Lab 1) PID (alógico) e sintonização

Objetivo: a ideia desta aula é recapitular detalhes importantes sobre o controlador PID analógico, adotar algum método de sintonia e simular o método e o PID sobre uma planta hipotética.

O PID Analógico

Controladores PID (Proporcional + Integral + Derivativo) são amplamente adotados na indústria. Sua função de transferência no formatpo bastante didático é:

u(t)=Kpe(t)+Ki∫t0e(τ)dτ+Kdde(t)dt

Sua transformada de Laplace leva à:

C(s)=Kp+Kis+Kd⋅s=Kc(1+1Ti⋅s+Td⋅s)

ou ainda:

C(s)=Kc(TdTis2+Tis+1Tis)=Kds2+Kps+Kis

onde: Kp= ganho proporcional; Ki= ganho integral; Kd= ganho derivativo; Kc= ganho geral do PID; Ti= constante de tempo integral; Td= constante de tempo derivativo.

Métodos de Sintonia baseados em Ziegler-Nichols

O procedimento de seleção dos parâmetros do controlador PID de modo a serem atendidas as especificações de desempenho é conhecido como “sintonia do controlador”. Nichols e Ziegler (em 1942) propuseram regras práticas para sintonia de controladores PID, baseados na resposta experimental da planta à ser controlada.

Referência:

Método 1 (Resposta ao Degrau da Planta em MA)

Este método é aplicado quando a planta não envolve integradores nem polos complexos conjugados dominantes, ou seja, sua resposta é do tipo super-amortecida ou criticamente amortecida. Nestes casos, o sistema responde de forma similar a um simples sistema de 1a-ordem com exceção da curvatura existente no início da resposta. Algo como:

lab_controle_2_lab_1_fig_1.drawio

Neste tipo de resposta, alguns parâmetros importantes nos interessam:

lab_controle_2_resposta_metodo_1_ZH.drawio

Nos interessam: o tempo de atraso, L e a constante de tempo T.

Baseado nestes valores, Ziegler e Nichols sugerem a seguinte tabela para sintonia de um PID:

Kc Ti Td
P T/L ∞ 0
PI 0,9⋅T/L L/0,3 0
PID 1,2⋅T/L 2⋅L 0,5⋅L

Desta forma, o PID fica:

C(s)===Kc(1+1Tis+Tds)1,2TL(1+12Ls+12Ls)0,6T(s+1L)2s

Método 2: Busca por Ku

Neste segundo método, fecha-se a malha com um simples ganho proporcional (mesmo se já houver um PID no sistema, basta “reseter” as ações de contorle integral e derivativas) e neste caso, se varia o ganho do controlador até que o sistema propositalmente entre em oscilação. Neste caso, a idéiua é posicionar os pólos complexos dominantes de malha-fechada, propostitalmente sobre o eixo jω do plano-s. A transformada inversa de Laplace para um sistema que em malha-fechada apresenta pólos complexos, com parte real nula, inmplica numa onda sinosoidal com certa defasagem, ou seja, uma “oscilação sustentada”.

No caso de um PID, se ajusta seus valores para: Ti=∞ e Td=0, acabando-se por usar apenas ação de controle proporcional. Aumenta-se então o valor de Kp de 0 até Ku (Ultimate gain, ou ganho crítico). Quando Kp=Ku a saída da planta deve assumir e manter oscilações com amplitudes constantes, como mostrado na próxima figura.

aula_1_metodo_ZH_2.png

Onde Tu= período da oscilação.

Neste caso, Ziegler-Nichols sugerem outra combinação de valores para sintonia de um PID:

Controlador Kc Ti Td
P 0,50⋅Ku ∞ 0
PI 0,45⋅Ku 0,83⋅Tu 0
PID 0,60⋅Ku 0,5⋅Ku 0,125⋅Tu

ou:

Controlador Kc Ti Td
P 0,5⋅Ku 0 0
PI 0,45⋅Ku 1,2⋅(Kp/Tu) 0
PID 0,60⋅Ku 2⋅(Kp/Tu) (KpTu)/8

Obs.: outras tabelas para ajuste dos parâmetros do PID baseados no método de Ziegler-Nichols podem ser facilmente encontradas. Por exemplo, a página Wiki em português (menos completa) ou página Wiki em inglês (mais completa). O detalhe é que é comum que os valores sugeridos por Zieglher-Nichols levem à overshoots iniciais da ordem de 50%. Motivo pelo qual, outros autores, sugerem diferentes valores para ajuste inicial dos parâmetros do PID:

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).

Método 3: Método do relé

Neste caso, se fecha a malha do sistema com um simples controlador proporcional e se programa seu chaveamento entre 2 valores (o que seria on “on”/“off”) conforme o erro seja positivo ou negativo. Este tipo de controlador também é conhecido como controlador “bang-bang“.

bang_bang_controller.png

De forma mais simples, sua lei de controle fica como:

u(t)={U1U2se: e(t)>0se: e(t)≤0

ou seja, o sinal de controle u(t) aplicado à planta, varia entre 2 valores fixos: U1= maior valor e U2= menor valor; e(t)= sinal de erro. Não necessariamente o valor de U1="on"=100% e U2="off"=0%.

Aplicar este tipo de sinal de controle à um sistema, o levará uma oscilação. A ideia aqui é justamente se capturar o período desta oscilação, que coincide justamente com Tu. Com base em outros dados associados com este método (ver figura anterior) se pode inferir o ultimate gain, ou Ku:

Ku=4bπa

onde: a= amplitude da oscilação (faixa da oscilação) dos valores aplicados na entrada da planta (“process variable“); e b= amplitude de oscilação (faixa de oscilação) do sinal de saída da planta.

De posse de Ku e Tu busca-se pelos valores sugeridos para os parâmetros do PID baseados no método de Ziegler-Nichols.

Melhorias no PID tradicional

Mas… na prática o PID pode não ser usado exatamente deste forma. Ocorrem 2 problemas na utilização do PID neste formato (simples):

PID com Filtro Derivativo

O problema da susceptibilidade do PID para com informações ruidosas provenientes de uma planta pode ser solucionado com o uso proposital de um filtro derivativo.

Se analisamos o diagrama de Bode da ação Derivativa pura de um PID percebemos o seguinte diagrama:

aula1_bode_D_puro.png

Analisando-se melhor a figura acima, percebemos, pelo diagrama de magnitude, que o ganho de uma ação derivativa pura só aumenta à taxa de 20 db/década, sem limite e conforme a frequência aumenta, o que na prática significa que componentes (sinal de erro) de alta frequência, serão amplificados. O que pode deixar o sinal de atuação (saída) do PID muito oscilatório (ruidoso).

Uma forma simples de atenuar este comportamento é limitar o ganho para frequências elevadas. A equação do PID passa à ser:

C(s)=Kp+Ki1s+Kd⎛⎝⎜⎜N1+Ns⎞⎠⎟⎟

Note pela expressão anterior, que a ação derivativa incorpora agora um filtro, ou seja:

D(s)=Kd⎛⎝⎜⎜N1+Ns⎞⎠⎟⎟=Kd[N⋅s(s+N)]

onde N= coeficiente do filtro.

Suponha que N=100 e observe o que ocorre com a expressão anterior:

D(s)=100⋅s(s+100)

ou seja, um sistema com:

O diagrama de bode desta última expressão rende:

aula1_FiltroDerivativo.png

Ou seja, analisando-se o diagrama de magnitude, ser percebe que agora o ganho é limitado em altas frequências ao valor de N (ou seja de 100; 20⋅log10(100)=40 dB) e esta limitação ocorre à partir da frequência de ωc=N (100 rad/s). Para frequências abaixo de ωc esta expressão atua como uma ação derivativa pura. Esta estratégia acaba então limitando em algo o resultado de ações derivativas sobre sinais (de erro) ruidosos.

Comparando o Diagrama de Bode de um PID com ação derivativa pura e outro com ação derivativa filtrada, teremos algo como:

aula1_bode_PIDs.png

Note que o bloco “PID” disponibilizado pelo Matlab/Simulink já incorpora a ação derivativa com filtragem:

parametros_PID_simulink.png

A idéia agora é testar estas abordagens e sintonizar um PID para certa planta.

Planta adotada para simulações com PID

A seguinte planta será adotada para testar o PID:

G(s)=20(s+1)(s+2)

Ingressando com a mesma no Matlab:

>> G=tf( 20, poly([-1 -2]) )

G =

          10
  -------------------
  0.5 s^2 + 1.5 s + 1

Continuous-time transfer function.

>> zpk(G) % conferindo...

ans =

      20
  -----------
  (s+2) (s+1)

Continuous-time zero/pole/gain model.

>> dcgain(G) % ganho DC da planta
ans =
    10

Note que esta planta apresenta um ganho DC não nulo, isto é, ser for injetado um degrau unitário na sua entrada, sua saída vai tender para y(∞)=10.

Sintonia de PID usando Método 1

A próxima figura mostra o comportamento da planta quando se aplica um degrau unitário entrada da planta (em malha-aberta):

aula1_step_planta_G_MA.png

Pode-se capturar os seguintes valores desta resposta:

Procedendo com a simulação do PID para este caso:

>> % Extraíndo dados do gráfico
>> L=0.3; T=1.7;
>> Kc=1.2*T/L; Ti=2*L; Td=0.5*L;
>> Ki=Kc/Ti; Kd=Kc*Td;
>> % Listando [Kc Ki Kd]:
>> [Kc Ki Kd]
ans =
          6.8       11.333         1.02
>>

A equação final do PID com filtro derivativo, considerando N=100 fica:

C(s)=6,8+11,333s+1,02(1001+100s)

Ingressando no Matlab:

>> s=tf('s');
>> PID2=6.8+11.3333/s+1.02*(100/(1+(100/s)))

PID2 =

  108.8 s^2 + 691.3 s + 1133
  --------------------------
         s^2 + 100 s

Continuous-time transfer function.

>> zpk(PID2)

ans =

  108.8 (s^2 + 6.354s + 10.42)
  ----------------------------
           s (s+100)

Continuous-time zero/pole/gain model.

>> zero(PID2)
ans =
      -3.1771 +    0.56814i
      -3.1771 -    0.56814i
>> pole(PID2)
ans =
     0
  -100
>>

Note o segundo polo corresponde a frequência de corte do filtro derivativo.

Um PID com ação derivativa pura fica:

>> PID1=6.8+11.3333/s+1.02*s

PID1 =

  1.02 s^2 + 6.8 s + 11.33
  ------------------------
             s

Continuous-time transfer function.

>> zpk(PID1)

ans =

  1.02 (s+3.339) (s+3.328)
  ------------------------
             s

Continuous-time zero/pole/gain model.

>> zero(PID1)
ans =
       -3.339
      -3.3276
>> pole(PID1)
ans =
     0
>>

Neste caso, notamos apenas um polo na origem que corresponde à ação integrativa pura.

Podemos levantar um diagrama de Bode comparando o impacto destes PIDs no sistema:

>> % Cálculos para primeiro PID (ação derivativa pura)
>> ftma_PID1=PID1*G;
>> zpk(ftma_PID1)

ans =

  20.4 (s+3.339) (s+3.328)
  ------------------------
       s (s+2) (s+1)
>>
>> % Cálculos para segundo PID (ação derivativa filtrada)
>> ftma_PID2=PID2*G;
>> zpk(ftma_PID2)

ans =

  2176 (s^2 + 6.354s + 10.42)
  ---------------------------
     s (s+100) (s+2) (s+1)

Continuous-time zero/pole/gain model.

>> figure; bode (G, PID1, PID2, ftma_PID)

O último comando vai render a seguinte figura:

aula1_bode_PID.png

Podemos agora fechar a malha para os PIDs:

>> ftmf_PID1=feedback(ftma_PID1,1);
>> ftmf_PID2=feedback(ftma_PID2,1);
>> figure; step(ftmf_PID1, ftmf_PID2)

Obtemos a seguinte resposta para a planta com os PIDs:

aula1_step_ftmf_PIDs.png

Esta planta também poderia ser simulada usando-se o Simulink:

aula1_a.slx.png

Onde a planta foi ingressada na forma de: Biblioteca do Simulink>>Continuos>>Zero-Pole:

aula1_a_parametros_planta.png

Tarefas

  1. Simule a planta G(s) com o PID usando o Matlab/Simulink para a mesma entrada degrau unitário e observe os resultados.
    Sugere-se ainda variar os ganhos do PID para comprovar se sucede o que sugere a próxima tabela:
Parâmetro Tempo de subida Overshoot Tempo de assentamento Erro regime permanente Estabilidade
Kp↑ Diminui Aumenta Pequena mudança Diminui Degrada
Ki↑ Diminui Aumenta Aumenta Eliminado Degrada
Kd↑ Pequena alteração Diminui Diminui Sem efeito Melhora se Kd é pequeno

Existe uma simulação de comportamento de sistema conforme se variam os parâmetros de um PID que pode ser vista na página [Wikipedia: PID controller] (em inglês):

https://upload.wikimedia.org/wikipedia/commons/3/33/PID_Compensation_Animated.gif

Mais questões **:

  1. Simule a planta G(s) com o PID usando o Matlab/Simulink mas desta vez com uma entrada senoidal que deve variar sua amplitude entre 0 e 2 com período de oscilação de 1,5 segundas e observe os resultados.
  2. Idem ao item (2) anterior, mas agora acrescente (some) um sinal ruidoso à saída da planta, simulando um sensor ruidoso e observe os resultados obtidos para um PID sem filtro derivativo e com filtro derivativo. Considere que o ruído possua amplitude de apenas 0,1 (valor do pico) e que oscila numa frequência de 10000/(2π) Hz. Mostre num gráficos os sinais de saída dos 2 controladores (do PID com ação derivativa pura e do PID com ação derivativa filtrada).
  3. Repita o procedimento de sintonia do PID considerando agora a planta: G2(s)=20s2+4s+8. Mostre o procedimento de sintonia adotado acompanhado de suas figuras e mostre o resultado final obtido com o PID sintonizado.

Obs.: para realizar o item (3) sugere-se o seguinte diagrama de blocos no Simulink:

aula1_PIDs.slx.png

[Fim].


Observações

Você pode tentar usar o seguinte comando para gerar figuras .png à partir dos diagramas de blocos gerados via Simulink:

>> % gerar imagem PNG à partir de "aula1_a.slx"
>> print('-saula1_a', '-dpng', '-r200', 'aula1_a.slx.png')
>> print('-saula1_a', '-djpeg', '-r150', 'aula1_a.slx.jpg')

Prof. Fernando Passold, em 13/10/2022