O Controlador PID (P=proporcional, I=integral e D=derivativo) é um controle com realimentação (isto é, de malha fechada) muito usados em sistemas de controle industriais. A Figura abaixo ilustra graficamente através de blocos um Sistema de Controle PID, onde u(t) é a variável de entrada que se deseja controlar e y(t) é a varivel de saida do Controlador que pode ser usada por exemplo para se determinar o valor do PWM (Sistema de Modulação por largura de pulsos) que irá controlar a energia aplicada à carga que deve ser controlada.
No exemplo abaixo "dt" é o intervalo entre duas amostras consecutivas obtidas pelo Conversor AD. O intervalo de tempo dt deve ser constante, então se aconselha que as amostras do ADC sejam obtidas por exemplo, por interrupção do timer, para manter o intervalo entre elas sempre constante.
As constantes Kp (proporcional), Ki (integral) e Kd (derivativa) devem ser calculadas de acordo com o planta que se deseja controlar. Para "sintonizar o PID" (isto é, calcular os melhores valores possíveis para Kp, Ki e Kd) diversos métodos podem ser usados, dentre os quais o mais famoso é o método de Ziegler e Nichols:
http://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
Ainda no exemplo de código mostrado, Tdes é a variável que armazena a Temperatura desejada (valor do set-point) e temperatura é a variavel que armazena o valor real medido pelo sensor naquele determinado instante.
O erro é obtido pela diferença: e = Tdes - temperatura
Segue em anexo um simples trecho de codigo de PID escrito por mim em C, generico. O programa é minimo, isto é, não tem nenhuma sofisticação como por exemplo anti wind-up:
//------------------------------------------
// Algoritmo do Controlador PID mínimo
// Desenvolvido por Francisco Fambrini
// Unisal - Março 2009
// Modif. na Versao 3.0
//------------------------------------------
void Controlador( ) {
temperatura = Tatual ;
e = Tdes - temperatura ; //calcula o erro, pode ser negativo ou positivo
prop = (e * kp)/10 ; // proporcional
aatual = ((e + eant) / 2) * dt; // soma dos erros multiplicado pelo tempo.
aatual = e * dt;
aatual = aatual + aant;
inte = (aatual * ki)/100 ; // integral
derr = (e - eant) / dt;
deri = derr * kd; // derivativo
calc = prop + inte + deri; // calculo PID
// Limites Superior e Inferior de Potência entregue a resistencia
if(calc > 50) calc = 50;
if(calc < 0) calc = 0;
// Ajusta o PWM com o valor calculado pelo algoritmo PID
x = calc ; // a potência entregue a carga pode variar entre 0 e 50
// armazena o valor do erro Anterior
eant = e;
//armazena o valor do acumulado anterior
aant = aatual;
temperatura = 0; //zera a variavel medida para nova medição, no tempo dt + 1
}//Controlador
//-------------------------------------------------------------------
Lembrando ainda que o controle PID (Proporcional-Integral-Derivativo) não é a única possibilidade para se implementar um Algoritmo de Controlador de Processos.
Para Sistemas fortemente não-lineares, uma solução que pode ser melhor do que o Controlador PID é o Controlador de Lógica Fuzzy (Lógica Nebulosa), conforme descrito no excelente artigo de autoria de Sandra Sandri e Claudio Correa:
https://drive.google.com/file/d/0B0T8omiWkMq8Sktta1FpRi14TG8/edit?usp=sharing
Nenhum comentário:
Postar um comentário