Estudo de Caso (Projeto de Controladores)

Controladores com Ação Integral

Aula de 14/05/2020.

Retomando trabalho anterior

>> pwd % confirmando diretório atual de trabalho (onde serão gravados arquivos)
ans =
    '/Volumes/Data/Users/fernandopassold/Documents/MATLAB/aula_13_05_2020'
>> load dados    % Recuperando dados da aula passada   
>> zpk(G)        % confirmando variável G(s): planta adotada

ans =
 
          1
  ------------------
  (s+10) (s+2) (s+1)
 
Continuous-time zero/pole/gain model.

>> OS    % recordando o overshoot adotado
OS =
    10
>> diary aula_14_05_2020.txt    % salvando comandos usados no Matlab

Projeto do Integrador Puro

Um integrador é caracterizado por 1 pólo em \(z=1\). Então um simples integrador puro segue a equação:

\[ C(z)=\dfrac{K_i}{z-1} \]

onde \(K_i\) é o ganho pretendido para este controlador.

Realizando o projeto deste controlador no Matlab:

>> C_I=tf( 1 , [ 1 -1 ] , T ) 

C_I =
 
    1
  -----
  z - 1
 
Sample time: 0.1 seconds
Discrete-time transfer function.

>> % calculando a FTMA(z)=C(z)*BoG(z)
>> ftma_I=C_I*BoG;
zpk(ftma_I)

ans =
 
     0.00012224 (z+2.747) (z+0.1903)
  --------------------------------------
  (z-1) (z-0.9048) (z-0.8187) (z-0.3679)
 
Sample time: 0.1 seconds
Discrete-time zero/pole/gain model.

>> % Analizando o RL desta FTMA(z)
>> rlocus(ftma_I)
>> axis 'equal'    % para forçar o circulo unitário
>> hold on         % preparando para linha do \zeta cte
>> zgrid(zeta, 0);
>> % Ajustando o ganho K_I para RL encontrando a linha guia para este \zeta
>> [K_I, polosMF]=rlocfind(ftma_I)
Select a point in the graphics window
selected_point =
   0.9665 + 0.0425i
K_I =
    0.7125
polosMF =
   0.9666 + 0.0425i
   0.9666 - 0.0425i
   0.7893 + 0.0000i
   0.3689 + 0.0000i
>> % Salvando gráfico do RL e preparando para formato Makdown
>> % ![RL_I.png](RL_I.png)

Gráfico do RL:

RL_I.png

>> % fechando a malha
>> ftmf_I=feedback(K_I*ftma_I, 1);
>> figure; step(ftmf_I)    % abrir outra janela gráfica + resposta ao degrau
>> dcgain(ftmf_I)   % confirmando valor regime permanente y[kT]
ans =
    1.0000
>> % Resposta ao degrau unitário:
>>% ![step_I.png](step_I.png)

Resposta ao derau unitário:

step_I.png

Comentários: Note o tempo de resposta (assentamento) longo, ocasiado pelo par de pólos complexos (dominantes) localizados mais próximos do círculo unitário em comparação ao Controlador Proporcional. Efeito causado pelo pólo em \(z=1\) (intregador), que infelizmente sempre tentará "atrair" o RL para mais próximo da borda do círculo unitário, o que se reflete em respostas temporais lentas.

Projeto do PI (Proporcional + Integral)

Antes foi realizado um integrador puro que cunmpriu com o objetivo inicial pretendido: zerar o erro de regime permanente, mas neste caso, às custas de um atraso grande na resposta do sistema.

Note porém que um Controlador PI é formado pela soma de duas ações de controle: a ação Proporcional + a ação Integral, ou na forma de um diagrama de blocos:

PI_blocos.drawio

Obs.: usado o aplicativo online da Google: draw.io para gerar a figura anterior. Note que este aplicativo permite incluir equações matemáticas no formato LaTeX (mathematical typesetting), colocando a expressão dentro de um par de $$, tal qual se faz em arquivos Markdown.

O resultado do equacionamento deste diagrama de blocos nos leva à:

\[ \begin{array}{rcl} C_{PI}(z)&=&C_P(z) + C_I(z)\\ &=& K_p+ \dfrac{K_i}{(z-1)}\\ &=& \dfrac{K_p\,z-K_p+K_i}{(z-1)}\\ &=& \dfrac{K_p\left( z - \frac{K_p}{K_p} +\frac{K_i}{K_p} \right)}{(z-1)}\\ &=& \dfrac{K_p \left[ z - \left( 1 - \dfrac{K_i}{K_p} \right) \right] }{(z-1)}\\ \end{array} \]

ou seja, este controlador segue o formato genérico:

\[ C(z)=\dfrac{K(z-z_a)}{(z-p_a)} \]

contendo um zero em \(z=z_a\) e um polo em \(z=p_a\) e um ganho \(K\); no caso deste controlador: com zero em \(z=\left( 1-\dfrac{K_i}{K_p} \right)\) e o pólo em \(z=1\) (como esperado para um controlador com ação integral).

Realizando o projeto deste controlador no Matlab:

Obs.: inicialmente vamos considerar para o zero a posição \(z=0,91\), um ponto muito próximo do pólo mais lento da planta que está em \(z=0,9048\). Depois podemos analisar o caso de propositalmente posicionar o zero sobre este polo mais lento, buscando um cancelamento pólo-zero para averiguar os diferentes resultados obtidos. Lembrando que se o usuário houvesse especificado algum requisito de controle temporal como \(t_s\) (tempo de assentamento), \(t_r\) (tempo de subida) ou \(t_p\) (tempo do pico), poderíamos determinar matematicamente a posição desejada para o par de pólos complexos dominantes no plano-z e usando contribuição angular determinar com exatidão onde deveríamos posicionar o zero deste controlador. Mas por hora, vamos iniciar o projeto do nosso primeiro PI apenas estipulando um zero entre o pólo integrador e o pólo mais lento da planta.

>> C_PI=tf( [ 1 -0.91 ] , [ 1 -1 ] , T )

C_PI =
 
  z - 0.91
  --------
   z - 1
 
Sample time: 0.1 seconds
Discrete-time transfer function.

>> % determinando a FTMA(z) neste caso
>> ftma_PI=C_PI*BoG;
>> zpk(ftma_PI)      % colocando num formato mais "amigável"

ans =
 
  0.00012224 (z+2.747) (z-0.91) (z+0.1903)
  ----------------------------------------
   (z-1) (z-0.9048) (z-0.8187) (z-0.3679)
 
Sample time: 0.1 seconds
Discrete-time zero/pole/gain model.

>> % levantando o RL para esta FTMA(z)
>> figure; rlocus(ftma_PI)
>> hold on; zgrid(zeta, 0)  % sobrendo linha do \zeta para %OS=10%
>> [K_PI, polosMF]=rlocfind(ftma_PI)
Select a point in the graphics window
selected_point =
   0.9114 + 0.1065i
K_PI =
   21.9258
polosMF =
   0.9112 + 0.1066i
   0.9112 - 0.1066i
   0.9136 + 0.0000i
   0.3528 + 0.0000i
% Gráfico do RL do PI
% ![RL_PI.png](RL_PI.png)

Gráfico do RL mostrando ganho ajustando para este PI

RL_PI.png

% fechando a malha
ftmf_PI=feedback(K_PI*ftma_PI, 1);
figure; step(ftmf_PI)
% Resposta ao degrau do PI:
% ![step_PI.png](step_PI.png)

Resposta ao degrau para esta versão do PI:

step_PI.png

Podemos aproveitar a comparar os 3 controladores já realizados:

% Comparando os 3 controladores
figure; step(ftmf, ftmf_I, ftmf_PI)
% ![step_Kp_I_PI.png](step_Kp_I_PI.png)

step_Kp_I_PI.png

PI com cancelamento do pólo mais dominante

A idéia agora é posicionar o zero do PI justamente sobre o pólo mais lento da planta, provocando um cancelamento proposital de par zero-pólo.

Para tanto podemos usar o próprio Matlab para isolar o pólo mais lento da planta e montar a equação deste novo PI. Este método taz muito mais precisão do que a obtida digitando-se todos as casas decimais disponíveis para o zero do integrador. Lembrar que o Matlab não mostra todas as cadas decimais que o mesmo usa para realizar calculos (em precisão dupla) para evitar resultados numéricos longos.

>> polos_MA=pole(BoG)   % retorna os pólos da tf BoG(z)
polos_MA =
    0.9048
    0.8187
    0.3679
>> format long   % mostrar resutlados sem truncar casas decimais
>> polos_MA
polos_MA =
   0.904837418035966
   0.818730753077974
   0.367879441171443
>> format short  % voltando ao formato 'default' do Matlab
>> % só nos interessa isolar o primeiro pólo, o mais lento:
>> polos_MA(1)
ans =
    0.9048
>> % ## PI com cancelalmento do pólo dominante
>> C_PI2=tf( [ 1 -polos_MA(1) ], [1 -1] )

C_PI2 =
 
  s - 0.9048
  ----------
    s - 1
 
Continuous-time transfer function.

>> % Ops... esquecemos de informar 'tf' no mundo digital
>> C_PI2=tf( [ 1 -polos_MA(1) ], [1 -1] , T)

C_PI2 =
 
  z - 0.9048
  ----------
    z - 1
 
Sample time: 0.1 seconds
Discrete-time transfer function.

>> ftma_PI2=C_PI2*BoG;
>> figure; rlocus(ftma_PI2)
>> hold on;
>> zgrid(zeta, 0);
>> [K_PI2, polosMF]=rlocfind(ftma_PI2)
Select a point in the graphics window
selected_point =
   0.9158 + 0.1027i
K_PI2 =
   21.0236
polosMF =
   0.9153 + 0.1027i
   0.9153 - 0.1027i
   0.9048 + 0.0000i
   0.3535 + 0.0000i
>> % Gráfico do RL com PI2
>> % ![RL_PI2.png](RL_PI2.png)

RL para este controlador:

RL_PI2.png

>> % fechando a malha
>> ftmf_PI2=feedback(K_PI2*ftma_PI2, 1);
>> % Gráfico do RL com PI2
>> % ![RL_PI2.png](RL_PI2.png)
>> % Gráfico comparando controladores com ação integral
>> figure; step(ftmf_I, ftmf_PI, ftmf_PI2)
>> % ![step_I_PI_PI2.png](step_I_PI_PI2.png)

Gráfico comparando resposta ao degrau unitário dos 3 controladores com ação integral realizados nesta aula:

step_I_PI_PI2.png

Encerando atividades nesta aula

>> save dados
>> diary off

Fim

Prof. Fernando Passold, em 14/05/2020