Estudo de Caso

Projeto de Controlador Proporcional

Se certificar de qunando usar o Matlab para realizar os projetos de controladores mostrados aqui, concentrar os dados num mesmo diretório:

>>pwd
ans =
    '/Volumes/Data/Users/fernandopassold/Documents/UPF/Controle_3/2020_1'

A planta usada para projeto de diferentes controladores é sempre a mesma:

\( G(s)=\dfrac{1}{(s+1)(s+2)(s+10)} \)

Um sistema de 3a-ordem, do tipo 0, isto é, se não for acrescentada ação integral à função transferência de malha aberta do sistema completo, sempre havera algum erro (ele não poderá ser anulado).

Ingressando com esta planta no Matlab:

>> G=tf( 1, poly( [ -10 -2 -1] ) );
>> zpk(G)

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

>>

Precisamos determinar agora \(BoG(z)\), e para tanto, necessitamos considerar o período amostragem sendo adotado. Para este estudo de caso e esta planta \(T=0,1\) segundos sempre:

>> T=0.1; % periodo de amostragem;
>> BoG=c2d( G, T);
>> zpk(BoG)

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

>>

Agora podemos iniciar o projeto do Controlador Proporcional.

Neste caso, não acrescentamos nenhum pólo nem zero, apenas fechamos a malha com um ganho. A questão é saber que ganho adotar. Para tanto, fazemos uso da ferramenta Root Locus para entender (interpretando o gráfico), como este sistema se comporta.

>> rlocus(BoG)

É gerada uma figura como:

RL_BoG.png

O RL sozinho não serve de muita coisa, para definir o controlador, se faz necessário tomar conhecimente de requisitos de controle para limitar as opções disponíveis.

Neste projeto inicial, vamos considerar que o único requisito de controle que foi passado é limitar o sobressinal a no máximo 10%.

Então podemos usar a teoria de respostas de sistemas lineares de 2a-ordem em MF para o caso sub-amortecido e assim, para este valor de \(\%OS\) temos como inferior o valor de \(\zeta\) (fator de amortecimento):

>> OS=10;
>> zeta=(-log(OS/100))/(sqrt(pi^2+(log(OS/100)^2)))
zeta =
    0.5912
>>

Aproveitamos que o valor de \(\zeta\) foi encontrado para sobrepor no RL anteiormente traçado, a linha guia para este valor de \(\zeta\):

>> hold on;
>> zgrid(zeta,0);

E aproveitamos para usando a função rlocfind(.) descobrir que valor de ganho deve ser usado para fazer o RL atingir o ponto onde o \(\zeta\) coincide com o valor buscado:

>> [K, polos_MF ]=rlocfind(BoG)
Select a point in the graphics window
selected_point =
   0.8710 + 0.1513i
K = 
   27.4831
polos_MF =
   0.8707 + 0.1514i
   0.8707 - 0.1514i
   0.3467 + 0.0000i
>>

Ver figura à seguir:

RL_proporcional.png

E agora fechamos a malha com este valor de ganho, \(K=27.4831\):

>> ftmf=feedback(K*BoG, 1);
>> figure; step(ftmf)

O que rende o gráfico:

step_proporcinal_K_OS_10.png

Notamos que este valor de ganho ultrapassou um pouco o sobressinal especifiaco, mas o que deveria chamar mais a atenção é o valor de regime permanente alançado pelo sitema em malha-fechada, ou simplesmente \(y(\infty)\):

>> dcgain( ftmf )
ans =
    0.5788

Percebe-se que está algo distante de 1,0 que a amplitudade do degrau utilizado.

Podemos calcular o erro em regime permanente:

>> erro=(1-dcgain(ftmf))/1*100
erro =
   42.1202

E confirmamos que este erro é elevado (42,12%).

Existe o comando stepinfo(.) do Matlab para descobrir algumas características de respostas de um sistema, aprocximadas para um sistema de 1a-ordem (esta função separa os 2 pólos mais dominantes; neste caso, os 2 pólos mas próximos do círculo unitário e realiza os cálculos das caractetíricas levando em conta apenas estes 2 pólos, como que aproximando a resposta do sitema para um de 2a-ordem):

>> stepinfo(ftmf)
        RiseTime: 0.8000
    SettlingTime: 2.9000
     SettlingMin: 0.5238
     SettlingMax: 0.6379
       Overshoot: 10.2164
      Undershoot: 0
            Peak: 0.6379
        PeakTime: 1.9000

Uma forma de baixar o erro (que não poderá ser anulado porque falta uma ação integral nesta FTMA) é aumentar o ganho, mas respeitando o valor máximo que pode ser adotado. Neste caso, \(K_{max}=258\):

RL_ganho_maximo_BoG.png

Adotando \(K_2=200\) vamos obter o seguinte resultado:

>> K2=200;
>> ftmf2=feedback(K2*BoG, 1);
>> figure; step(ftmf2)

Com o seuinte gráfico para a resposta ao degrau:

step_proporcinal_K_200.png

Percebe-se que o erro foi reduzido, mas as custas de um overshoot bastante elevado e maior tempo de assentamento.

Finalizando esta seção de trabalho no Matlab: não esquecer de ingressar os seguintes comandos:

>> save dados
>> diary off

Fim


Prof. Fernando Passold, em 07/05/2020.