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)+Kit0e(τ)dτ+Kdde(t)dt

Sua transformada de Laplace leva à:

C(s)=Kp+Kis+Kds=Kc(1+1Tis+Tds)

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,9T/L L/0,3 0
PID 1,2T/L 2L 0,5L

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,50Ku 0
PI 0,45Ku 0,83Tu 0
PID 0,60Ku 0,5Ku 0,125Tu

ou:

Controlador Kc Ti Td
P 0,5Ku 0 0
PI 0,45Ku 1,2(Kp/Tu) 0
PID 0,60Ku 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+KdN1+Ns

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

D(s)=KdN1+Ns=Kd[Ns(s+N)]

onde N= coeficiente do filtro.

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

D(s)=100s(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; 20log10(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