Implementação de Controlador

Seja um controlador digital genérico que segue a equação:

Este controlador pode ser implementado da seguinte forma:

O mesmo se encontra dentro de uma malha como:

malha_fechada_digital.png

Extraíndo equações, obtemos:

ou

isolando o termo :

o que permite escrever:

onde:

corresponde ao sinal de controle atual;
corresponde ao sinal de controle calculado na amostragem anterior (uma amostra de atraso contra a atual);
corresponde ao sinal de erro atual, calculado como:

corresponde ao sinal de erro calculado na amostragem anterior (uma amostra de atraso);
sinal de referência atual;
resposta (saída) atual do processo.

Porém note que a eq. (1) não é diretamente incorporada num algoritmo de controle, pois da forma de está apresentada, implica uso de de vetores, e não temos como prever ou limitar o tamanho máximo de cada um dos vetores envolvidos nesta equação.

O que se realiza na prática é transforma cada um destes vetores numa variável escalar (dimensão ), diferente. E assim o algoritmo final de controle fica como:

Note que as variáveis K, a, b e r devem ser globais, isto é, propositalmente podendo ser alteradas em outra parte do código. Isto permite mudar a posição do zero do controlador () ou a posição do pólo deste controlador () e ajustar seu ganho () em outra parte do software que controla o processo, mesmo com o algoritmo de controle sendo edxecutado, em "tempo-real". Note que r, a referência, sendo global, também permite que o usuário varie o valor da referência com o algoritmo de controle sendo executado. E em alguns sistemas, r é calculado via "gerador de trajetórias" (caso de robôs industriais, ou máquinas CNC), usando outra rotina ativada por interupção que éexeccutada na mesma frequência com a qual é executada a rotina de controle.

As variáveis u1 e e1 devem ser inicializadas ANTES do algoritmo de controle ser executado. Para tanto podem ser incializadas com zero. Mas o melhor seria, no caso de sistemas que permitem transitar entre controle em autimático (em malha-fechada) e controle manual (em malha-aberta), atualizar estas variáveis, da seguinte forma quando passamos do controle manual para automático e antes de liberar a rotina (tratamente do interrupção anterior):

Esta atualização evita "saltos" (gaps) na resposta do sistema quando o usuário do sistema de controle comuta do modo manual para o automático.

O programa completo ficaria algo como:

O código anteior (parte dele) foi incorporado no kit "Processo da Bola no Tubo":

Processo_Bola_Tubo.png

Este processo consiste em definir uma altura desejada para a bola dentro de um tubo (referência), cuja altura é mantida pelo "colchão de ar" criado por um ventilador localizado na base inferior do tubo. O controle desse ventilador acaba definindo a altura alcançada pela bola dentro do tubo.

A interface com o usuário é mostrada na figura abaixo:

interface_processo_bola_tubo.png

Note que existem teclas reservadas para alteração de alguns parâmetros com o algoritmo de controle sendo executado:

A próxima figura mostra como ficava o display com o algoritmo de controle sendo executado:

tela_processo_funcionamento.png

Este processo permitia alterar seu algoritmo de controle via upload de novo firmware mas já trazia implementado e sintonizado um controlador PID no formato de velocidade:

corresponde ao perído de amostragem, que foi de 47 milisegundos.

Este controlador sintonizando usando Ziegler-Nichols permitiu alcançar os seguintes resultados:

resultados_PID_Processo_Bola_no_Tubo.png


Referência Bibliográfica:
Robinson Caldart Vanz, Controlador digital para processo bola e tubo, TCC Eng Elétrica (UPF), Orientador: Fernando Passold, 114 pp., 2006.