No mundo moderno as palavras estabilidade e precisão são pré-requisitos para muitos sistemas e equipamentos, para alcançar os avanços tecnológicos necessários para suprir essas e outras necessidades, o homem desenvolveu diversas técnicas que lhe permitiram analisar e projetar sistemas cada vez mais avançados.
Uma das áreas que mais se desenvolveu nas últimas décadas, sem dúvida foram os sistemas de controle, fato que possibilitou avanços em diversos segmentos como o aeroespacial, automotivo, robótica, telecomunicações, saúde, entre outros.
Como uma das técnicas mais importantes do setor de controle e automação, podemos encontrar o controle PID.
O controle PID (Proporcional Integral Derivativo) é uma das técnicas mais empregadas quando se deseja realizar o controle de variáveis contínuas. O controle PID consiste em um algoritmo matemático, que tem por função o controle preciso de uma variável em um sistema, permitindo ao sistema operar de forma estável no ponto de ajuste desejado, mesmo que ocorram variações ou distúrbios que afetariam sua estabilidade. Sua aplicação pode ser encontrada em qualquer aplicação que necessite de controle de variáveis contínuas como:
- Rotação;
- Nível;
- Pressão;
- Vazão;
- Temperatura:
- Posicionamento;
- Controle de tensão em fontes chaveadas.
O controle PID pode ser descrito pela seguinte equação:
Onde:
MV: Variável manipulada.
Kp: Ganho proporcional.
Ki: Ganho integral.
Kd: Ganho derivativo.
E: Erro ou desvio.
S0: Saída inicial do controlador.
O erro é a diferença entre o valor desejado (setpoint) e o valor real da variável. Por exemplo em um forno onde se deseja a temperatura de 100 ºC (Setpoint = 100ºC), caso a temperatura real do forno esteja a 80ºC temos um erro de 20ºC.
Funcionamento das ações do controle PID
No controle PID cada ação desenvolve uma função determinada.
A ação proporcional elimina as oscilações da variável, tornando o sistema estável, mas não garante que a mesma esteja no valor desejado (setpoint), esse desvio é denominado off-set. A ação proporcional trabalha corrigindo o erro do sistema, multiplicando o ganho proporcional pelo erro, dessa forma agindo com uma maior amplitude de correção a fim de manter a estabilidade da variável.
A ação integral elimina o desvio de off-set, fazendo com que a variável permaneça próximo ao valor desejado para o sistema mesmo após um distúrbio, ou seja a variável permanece próximo ao set-point mesmo que ocorra uma variação brusca nas condições de operação. A ação integral realiza a integração do erro no tempo, portanto quanto maior for o tempo de permanência do erro no sistema, maior será a amplitude da ação integral.
Windup na ação integral
Quando o controlador sofre variações bruscas, o sinal de saída do controlador PID pode atingir seu limite máximo saindo da região linear normal de controle, fazendo com que o atuador seja acionado até seu limite de capacidade. Em outras palavras ocorre a saturação do sinal de controle. Este fato faz com que o loop de controle seja desfeito, pois o atuador permanecerá no seu limite máximo independentemente da saída do processo ou máquina controlada. Se a ação integral for utilizada, o erro continuará a ser integrado e o termo integral tende a se tornar muito grande. Esse fenômeno é denominado “windup”.
Vamos tomar como exemplo o loop da malha de controle representada na figura abaixo, onde temos um sistema de controle de nível de fluido. O medidor de nível envia seu sinal para o subtrator onde é comparado com o valor de setpoint, caso exista algum erro o controlador PID envia o sinal de correção para a válvula de controle.
Nesse caso, quando o tanque está vazio, o controlador ordena a abertura máxima da válvula para que o nível do tanque suba o mais rápido possível. Caso o sinal de saída permaneça no seu limite máximo por muito tempo ou o sensor de nível não indique algum valor próximo ao setpoint, podemos ter o efeito windup no sistema.
Para corrigir o efeito windup o controlador PID deve possuir em seu algoritmo rotinas de “reset” da ação integral, que impede que o termo integral continue a ser atualizado quando a saída atinge seu limite máximo.
Ainda vale lembrar que a variável de processo (PV) é o nível, e a variável manipulada (MV) é a vazão de fluido.
A ação derivativa fornece ao sistema uma ação antecipativa evitando previamente que o desvio se torne maior quando o processo se caracteriza por ter uma correção lenta comparada com a velocidade do desvio.
A ação derivativa tem sua resposta proporcional à taxa de variação da variável do processo, aumentando a velocidade de resposta do sistema caso a presença do erro seja detectada. Logo, em sistemas de resposta lenta como controle de temperatura, a ação derivativa permite antecipar o aumento do erro e aumentar a velocidade de resposta do sistema. Quando o sistema a ser controlado possui maior velocidade de resposta, como por exemplo controle de rotação de motores e controle de vazão de fluidos, a ação derivativa pode ser desativada, pois não há necessidade de antecipar a resposta ao erro, pois o sistema pode corrigir rapidamente seu valor, para desativar a ação derivativa basta tornar seu valor igual a zero.
É comum a utilização das combinações P+I e P+I+D, de modo geral em sistemas com boa velocidade de resposta como pressão, vazão e rotação de motores, podem ser utilizados controladores PI. Para obter um controle mais rápido e preciso os sistemas com resposta lenta como os de controle de temperatura devem utilizar o controlador PID.
PID em Microcontroladores e DSP’s
A maioria dos fabricantes de chips e de compiladores disponibilizam bibliotecas de controle PID para seu dispositivos. Com uma busca rápida nos sites de alguns fabricantes de microcontroladores e DSP’s é possível encontrar exemplos e bibliotecas para a implementação do controlador PID.
Para operar como controlador PID o dispositivo utilizado seja ele microcontrolador, DSP ou FPGA, deve possuir uma entrada e saída analógicas ou uma saída PWM, que inclusive é o caso do Arduino uno, pois apesar de possuir conversor A/D este não possui conversor D/A, utilizando portanto sua saída PWM, o Arduino Due por sua vez possui os conversores A/D e D/A. Caso o chip utilizado não tenha conversor A/D, é possível utilizar um circuito integrado para essa função, como por exemplo o PCF8591 da NXP que é um conversor de 8-bit A/D e D/A.
Exemplo de código utilizado para criação de um PID simples em linguagem C, este código possui rotina de correção de windup.
/*working variables*/
unsigned long lastTime;
double Input, Output, Setpoint;
double ITerm, lastInput;
double kp, ki, kd;
int SampleTime = 1000; //1 sec
double outMin, outMax;
void Compute()
{
unsigned long now = millis();
int timeChange = (now - lastTime);
if(timeChange>=SampleTime)
{
/*Compute all the working error variables*/
double error = Setpoint - Input;
ITerm+= (ki * error);
if(ITerm> outMax) ITerm= outMax;
else if(ITerm< outMin) ITerm= outMin;
double dInput = (Input - lastInput);
/*Compute PID Output*/
Output = kp * error + ITerm- kd * dInput;
if(Output > outMax) Output = outMax;
else if(Output < outMin) Output = outMin;
/*Remember some variables for next time*/
lastInput = Input;
lastTime = now;
}
}
void SetTunings(double Kp, double Ki, double Kd)
{
double SampleTimeInSec = ((double)SampleTime)/1000;
kp = Kp;
ki = Ki * SampleTimeInSec;
kd = Kd / SampleTimeInSec;
}
void SetSampleTime(int NewSampleTime)
{
if (NewSampleTime > 0)
{
double ratio = (double)NewSampleTime
/ (double)SampleTime;
ki *= ratio;
kd /= ratio;
SampleTime = (unsigned long)NewSampleTime;
}
}
void SetOutputLimits(double Min, double Max)
{
if(Min > Max) return;
outMin = Min;
outMax = Max;
if(Output > outMax) Output = outMax;
else if(Output < outMin) Output = outMin;
if(ITerm> outMax) ITerm= outMax;
else if(ITerm< outMin) ITerm= outMin;
}
Controlador PID Open Source Hardware
Vale apena uma visita no site do controlador PID de hardware aberto chamado osPID. Esse controlador possui recursos muito interessantes, inclusive com função de PID Auto-tune que realiza a sintonia do controlador de forma automática, ainda é possível se comunicar com o computador pela porta USB e utilizar um software, desenvolvido para facilitar sua configuração e seu monitoramento.
Figura 3: Controlador PID de hardware aberto
Figura 4: OsPID
Características:
- Complete Arduino compatible board with ATMega328P-AU
- 8×2 LCD white character with blue back light & adjustable contrast
- On board USB-serial port
- 1 2×6 2.54mm pitch edge card expansion slot for input card
- 1 2×6 2.54mm pitch edge card expansion slot for output card
- 4 push buttons
- 1 red LED for power indication
- 1 yellow LED for system status and operation
- 1 green LED for USB activity status
- 1 buzzer with transistor for a loud and annoying sound
- 1 reset button
- Analog reference voltage with LC filter
- Auto reset selection through jumper
- 7 – 38 VDC input range
- 6-pin AVR In-circuit serial programming (ICSP) header
- Dimension – 46.99 mm x 46.99 mm
- Can be slotted into 1/16 DIN panel cutouts
- RoHS compliant – Yes
No próximo artigo veremos quais parâmetros o controlador PID utiliza e como podemos definir esses valores.
Se você já utilizou o PID em algum sistema deixe o comentário de sua experiência.
Alguns videos que mostram o controle PID em ação
Controle de uma esfera,em um prato controlado por PID
Controle PID com LEGO
Introdução ao controlador osPID
Controle de um pendulo invertido com PID
Exemplos de aplicação do PID em microcontroladores
Biblioteca PID para o Arduino.
Software PID Control of an Inverted Pendulum Using the PIC16F684.
Implementing a PID Controller Using a PIC18 MCU.
Manual da biblioteca DSP com algoritmo PID do STM32.
Página do controlador PID open source hardware “osPID”.
LIBSTOCK Site com centenas de bibliotecas de programação, inclusive PID.
Simuladores PID
sourceforge.net/projects/pid-simulator/
sourceforge.net/projects/pidloopsimulato/
www.engineers-excel.com/Apps/PID_Simulator/Description.htm











Ótimo seu post, parabéns!! Assunto muito importante na atualidade; Industria 4.0.
Olá Carlos, adorei o post, olha estou ajudando um amigo na elaboração de um protótipo de levitação magnética de uma esféra, e é necessário para tal fazer-se o controle da posição da esféra. E gostaria que me ajudasse a criar um algoritmo pid para tal fim usando um microcontrolador específico que melhor se adapte a situação.
excelente artigo.
Prezado Márcio, no meu TCC quero elaborar um conversor buck microcontrolado que estabilise a tensão de saída em um valor fixo, muito obrigado pelo artigo ajudará muito.
As equações são muito bonitas, as demonstrações de PID em produtos prontos também…
Mas o código exemplo é furado, não calcula o fator Integral ! Ninguém revisa os artigos?
Só não entendi porque na fórmula Kd esta sendo multiplicado por So e Kp? Se quiser uma pressão inicial de 3psi é necessário somente incluir So como mais um termo a ser SOMADO e não multiplica-lo ao derivativo. E porque multiplicar Kp por Kd? O certo não seria usar um Kp que fosse adequado ao produto?
A ação derivativa realiza uma derivada da variação do erro em relação ao tempo, e como a ação derivativa trabalha junto com a ação proporcional o Kp deve ser incluído na equação juntamente com o Kd para definir a amplitude da correção, sendo assim a sintonia da malha deve ser feita encontrando os valores ótimos de Kd e Kp. Já o So entra junto com o cálculo da derivada por isso deve ser multiplicado.
Carlos, na “Equação 1: PID” por quê você colocou Kp e um S0 no termo derivativo?
Esse vídeo é muito legal e pode ajudar a entender melhor o conceito.
https://www.youtube.com/watch?v=7BDjZYGHupE
Foi um artigo realmente interessante e fácil de entender. Obrigada por facilitar minha vida no entendimento de PIDs!
Este assunto de controlador PIDs é muito interessante e vasto. A teoria matemática atrás do PID é simples e você pode encontrar exemplos de uso em outras áreas, não somente eletrônica, desde sistemas puramente mecânicos até modelamento de processos de macro-economia. Cheguei a implementar um controle PID com auto-tunning a alguns anos atrás (na verdade a uns 10 anos atrás) e o grande charme do PID é determinar os valores dos parâmetros P, I e D para a planta que está querendo controlar. Aí, dá para se fazer uso de várias técnicas, desde a clássica de Ziegler & Nichols, até… Leia mais »
Olá Rafael, sem dúvida o controle PID é muito interessante, e seu campo de aplicação é enorme, nos próximos artigos pretendo abordar as técnicas de sintonia do controlador com alguns exemplos.
Obrigado pelo comentário.
Um grande abraço.