Melhorias em controlador Proporcional !?

Seja a planta:

Um controlador Proporcional para a mesma, limitando , ficaria:

Realizando o RL para este sistema, encontraremos um ganho próximo de 2.

Fechando a malha, teremos uma resposta como:

planta_trabalho_step_Kp_2-3

Note que o mostrado pelo Matlab na figura se refere ao valor em regime permanente atingido pela planta (), mas não corresponde ao overshoot máximo (ou sobresinal máximo) admitido para a referência que deveria fazer a planta alcançar o valor final unitário e não como neste caso.

Isto significa que podemos aumentar o ganho neste sistema (desde que ele não fique estável) e tentando obedecer ao sobressinal máximo de 20% em relação ao valor final que a referência deveria atingir (), o que significa neste caso, que o controlador à ser projetado aqui, poderia forçar a planta à atingir picos de no máximo .

Supondo que com possamos fazer a planta chegar próximo deste patamar máximo, podemos fazer:

O que rederia a figura:

planta_trabalho_step_K_2_4.png

Notamos que com , a amplitude de saída da planta aumenta, o sobressinal também: , mas ficando ainda abaixo dos 20% máximo permititos.

Aumentar o ganho fez o erro baixar: ; contra antes: ,

apesar de aumenar o tempo de assentamento do sistema, de para .

A questão agora para decidir por qual valor de ganho adotar passa por: -- o que é prioritário? Menor erro ou menor tempo de assentamento?

Mesmo que seja adotado o maior ganho, ainda percebemos que este sistema em MF (malha-fechada) responde um pouco mais rápido que o sistema em MA (malha-aberta): segundos:

planta_trabalho_step_MA.png

Amplitudes das Ações de Controle

Adotar um ganho mais elevado vai implicar em expor à planta à maiores valores de atuação.

Existe uma forma prática de forçar o Matlab a mostrar as amplitudes geradas por certo controlador, SEM apelar para o Simulink. Para tanto necessitamos realizar uma ligeria manipulação algébrica:

De um sistema com realimentação unitária negativa sabemos que:

(1)

(2)

(3)

Substituindo (2) em (1) teremos:

(4)

E podemos ainda substituir (3) em (4), o que resulta em:

trabalhando a eq. anterior, podemos escrever:

(5)

A eq. (5) é a que vai nos permitir usar a linha de comandos do Matlab para plotar .

Se você já reparou antes, quando realiza o comando:

Você está pedido que o Matlab faça o seguinte:

  1. , onde corresponde à transformada de Laplace da função Degrau;
  2. , implica algebricamente a realizar expansão em frações parciais para resolver esta transformada. Pois bem, o Matlab não resolve este problema algebricamente e sim numericamente.
  3. Por fim, o Matlab cria internamente um vetor (tempo) varianando de , onde é um valor estipulado pelo algoritmo step do Matlab de tal forma que corresponda ao .
  4. O Matlab finalmente realiza algo como: plot (t,y).

Então, no nosso caso agora, necessitamos que o Matlab plote baseado na eq. (5) que deduzimos anteriormente.

Note que podemos adaptar a função step do Matlab para que a mesma plote ao invés de , bastando neste caso, fornecer adequandamente uma nova função transferência. Note que toda função step multiplica a transfer function passada como argumento de entrada pela transformada de Laplace da entrada degrau e segue com o processamento citado anteriormente até finalizar o no gráfico.

Baseado na eq. (5), basta repassar então a seguinte transfer function à função step:

Se (5):

onde:

Então realizar: >> step(aux) é o equivalente à plotar .

Aplicando esta constatação ao nosso caso:

Note que o resultado das expressões “aux_K1” e “aux_K2” não nos importam muito, foram mostradas anteriormente mais como curiosidade. O que importa é notar o resutlado da função step aplicada desta forma:

planta_trabalho_acoes_controle_K_2_4.png

Fim.


Fernando Passold, em 04.06.2021