Loop PI Iterativo em MATLAB

Devido a dificuldade de simular loops em malha fechada com o MatLab sem o uso do simulink, que necessitam de implementação iterativa (step by step),  decidi criar algumas classes que facilitam a modelagem de esquemas com feedback.  Nesse post apresento a classe loopPI.

Topologia:

Loops PI são largamente utilizados na indústria mas também encontram uso em sistemas de telecomunicação. Muitas etapas da demodulação que necessitam de controle em malha fechada como PLLs e sincronismo de tempo utilizam topologias PI, geralmente para obter o sinal de controle de osciladores NCO, downsamplers e interpoladores.

Um controlador PI costuma ser analiticamente representado pela equação

out(t) = Ki\int_{}^{t} e(t) \ + Kp\ e(t)

onde Ki,\ Kp,\ e(t) são as constantes de proporcionalidade e o erro, respectivamente.

A porção integral pode ser aproximada, no domínio discreto, por um acumulador. Quanto maior for a taxa de amostragem do sistema mais fiel será a representação. Então, a topologia escolhida para a implementação do loop de controle proporcional-integral foi a seguinte, onde um acumulador gera o termo integral e ganhos controlam a proporção. Um somador gera o sinal de saída.

loopPI_img1

Código:

Abaixo vemos a classe implementada. O construtor recebe as constantes de proporcionalidade Kp e Ki, respectivamente. Para iterar o loop PI usamos o método .step(erro), que recebe como argumento o erro e retorna o valor de saída para o atual ciclo de iteração.

loopPI_img2