Simulador interativoIniciante

Simulador de controlador PID para sistemas robóticos

Ajuste os ganhos proporcional, integral e derivativo enquanto visualiza resposta, erro, saturação e perturbações neste simulador de controlador PID.

Categoria
Sistemas de controle
Tempo
60–120 min
Plataforma
Navegador · Arduino
Esquema técnico de Simulador de controlador PID para sistemas robóticosRESPONSETIMESETPOINT

01 / Comece aqui

Introdução

O controle PID aparece em toda a robótica: velocidade das rodas, orientação, posição das juntas, temperatura e sistemas de equilíbrio dependem de realimentação. Este projeto transforma o controlador em um experimento visível. Altere um ganho, perturbe a planta e conecte a curva resultante ao código que poderia rodar em um Arduino ou controlador embarcado.

Live lab / Deterministic sampled control loop

PID controller simulator

Drive a second-order plant toward a setpoint. Tune each gain, inject a load, and watch response, error, and control effort in real time.

Browser native
This simulator plots a PID controller's response, error, and control effort over time. Use the controls below to run it, or read the full theory and algorithm after this lab.

Three stacked plots share a scrolling time axis: measured output against the setpoint line, tracking error around zero, and control effort inside the shaded actuator-limit band.

Simulation

Paused. Press Start or Step to begin.

Setpoint & timing
PID gains
Disturbance
Setpoint
1.00
Measured
0.000
Error
1.000
Control
0.000
Overshoot
0%
Steady-state error
1.000

Keyboard: focus the plots, then use Space to run/pause, N to step, R to reset, G to toggle the load, and F for full screen.

Controles

O simulador expõe uma referência, os ganhos proporcional, integral e derivativo, o intervalo de amostragem, o limite do atuador e a magnitude da perturbação. Os gráficos alinhados mostram a referência, a saída medida, o erro e o esforço de controle. Reiniciar limpa a memória do controlador para que os experimentos permaneçam comparáveis.

Teoria

Um controlador por realimentação calcula o erro como referência menos medição. A ação proporcional reage imediatamente, a ação integral acumula erro persistente e a ação derivativa responde à taxa de variação. A soma delas se torna o comando do atuador.

O desempenho do controlador é limitado pela planta. Amostrar muito devagar oculta movimento; exceder o limite do atuador causa saturação; medições ruidosas tornam instável um termo derivativo não filtrado. Portanto, o ajuste é um experimento que envolve o controlador e o sistema.

Gráfico de resposta a degrau comparando três ajustes de um sistema de segunda ordem. Uma curva de ganho alto ultrapassa a referência e oscila antes de estabilizar. Uma curva bem ajustada sobe rapidamente com um leve sobrepasso e estabiliza rapidamente. Uma curva de ganho baixo sobe lentamente e nunca ultrapassa a referência.
O amortecimento molda a resposta a degrau: ganho demais causa sobrepasso e oscilação, ganho de menos deixa a resposta lenta e um ajuste equilibrado estabiliza rapidamente. Baixar SVG

Algoritmo

  1. Leia a medição em intervalos fixos e calcule o erro.
  2. Acumule um termo integral limitado usando o passo de tempo real.
  3. Estime a derivada a partir da medição ou do erro e aplique a filtragem apropriada.
  4. Some os três termos ponderados e limite o resultado à faixa do atuador.
  5. Aplique o comando, armazene a amostra anterior e registre as métricas.
  6. Reinicie o termo integral e o histórico quando o modo de controle ou a planta mudar de forma significativa.

Código-fonte

Esta implementação inclui uma condição simples de anti-windup:

float updatePid(float setpoint, float measured, float dt) {
  const float error = setpoint - measured;
  const float derivative = (error - previousError) / dt;
  const float candidateIntegral = integral + error * dt;
  const float raw = kp * error + ki * candidateIntegral + kd * derivative;

  const float output = constrain(raw, outputMin, outputMax);
  if (raw == output) integral = candidateIntegral;
  previousError = error;
  return output;
}

Controladores de produção também definem comportamento para medições inválidas, estouros de temporizador, transições de modo e falhas do atuador.

Premissas e diferenças do hardware

A planta aqui é um modelo limpo de segunda ordem, com massa, amortecimento e atraso conhecidos que você define com os controles — não um motor real com atrito, zona morta, torque que diminui com a velocidade e um driver de motor que aquece. A amostragem é fixa por construção, portanto o termo derivativo se mantém bem comportado; no Arduino, delay() ou outra tarefa bloqueante faz o intervalo variar e o termo D se comportar mal mesmo quando os ganhos não mudam. A saturação do atuador é modelada como um limite rígido com proteção anti-windup, mas um sistema físico também tem limites de corrente, queda de tensão e calor que mudam o limite durante o funcionamento. Ajuste a forma aqui e depois verifique no hardware, onde a planta é conhecida apenas aproximadamente.

Diagrama do circuito

O sensor de realimentação informa a saída real; ele não substitui o limite de corrente nem uma parada de segurança em hardware. O controlador compara a referência com a leitura condicionada do sensor e então aciona o atuador por um estágio PWM dimensionado para a carga.

Diagrama de blocos de um laço de realimentação PID fechado. A referência entra em uma junção somadora; o erro resultante alimenta o controlador PID; sua saída aciona um atuador e um estágio PWM; esse estágio aciona a planta; e um sensor mede a saída da planta e a realimenta à junção somadora com um sinal negativo.
O laço PID fechado: o sensor fecha o caminho da saída da planta de volta à junção somadora, onde a realimentação é subtraída da referência. Baixar SVG

Experimentos guiados

Ler sobre sobrepasso não é o mesmo que produzi-lo deliberadamente. Cada experimento abaixo leva alguns minutos e isola exatamente um efeito.

1. Encontre o ganho crítico

Defina Ki e Kd como zero. Aumente Kp até a saída oscilar com amplitude constante — nem crescendo nem diminuindo. Anote esse ganho (Ku) e o período da oscilação (Tu).

Esses dois números são tudo o que você precisa para um primeiro ajuste:

Controlador Kp Ki Kd
PID (clássico) 0,6 Ku 1,2 Ku / Tu 0,075 Ku Tu
PID (sem sobrepasso) 0,2 Ku 0,4 Ku / Tu 0,066 Ku Tu

Digite esses valores e compare. A linha clássica é agressiva e produz sobrepasso de 20–40%; a segunda chega sem sobrepasso e leva mais tempo. Nenhuma é “correta” — são respostas diferentes a requisitos diferentes, e é esse o ponto.

2. Observe o windup integral

Defina o limite do atuador bem baixo — cerca de 20% da faixa — e então comande um grande degrau na referência. Observe o gráfico de esforço de controle: ele satura imediatamente e permanece ali, enquanto o termo integral continua acumulando erro sobre o qual não pode agir. Quando a saída finalmente alcança a referência, toda essa ação armazenada é liberada e o sistema vai muito além do alvo.

Agora aumente o limite do atuador e repita com os mesmos ganhos. O sobrepasso desaparece em grande parte. Nada mudou no controlador — essa é a lição. O windup integral é uma propriedade da interação entre o controlador e um atuador saturado, não dos ganhos.

3. Prove que o atraso, e não o ruído, mata um laço

Aumente o intervalo de amostragem a partir do menor valor em etapas, mantendo os ganhos fixos. A resposta se degrada muito antes de o gráfico parecer ruidoso: o sobrepasso cresce, depois aparece oscilação e então o sistema fica instável.

Intervalo de amostragem O que você vê com um ajuste bom
5 ms Limpo, como ajustado
20 ms Um pouco mais de sobrepasso
50 ms Oscilação visível
100 ms Oscilação sustentada
200 ms Instável

É por isso que remover um delay() do laço de um robô costuma melhorar o acompanhamento mais do que qualquer ajuste. Informação desatualizada não pode ser recuperada por um ganho.

4. Alimente o derivativo com ruído

Aumente a magnitude da perturbação com Kd em zero e depois aumente Kd. O traço de esforço de controle fica irregular muito antes da saída — você está vendo a diferenciação amplificar conteúdo de alta frequência, exatamente como deve.

É esse comportamento que faz as pessoas concluírem que D é inútil e o definirem como zero. A correção real está antes: filtre a medição ou o próprio termo derivativo.

O que observar

Configuração Forma esperada Se você vir outra coisa
Somente Kp, baixo Sobe devagar e estabiliza abaixo da referência —
Somente Kp, alto Ultrapassa, oscila e decai Oscilação crescente significa que você ultrapassou Ku
Kp + Kd Subida rápida, pouco sobrepasso e pequeno deslocamento de regime Esforço irregular significa que D amplifica ruído
Kp + Ki Alcança exatamente a referência, mais devagar Passar do alvo significa windup integral ou Ki demais
PID completo Rápido, sobrepasso mínimo e sem deslocamento —

Vale produzir deliberadamente uma vez o deslocamento de regime com P e D, mas sem I. É a demonstração mais clara do que o termo integral realmente faz: a ação proporcional precisa de um erro diferente de zero para produzir qualquer saída, portanto, necessariamente, o sistema fica um pouco antes do alvo.

Aplicação em hardware

Os ganhos encontrados aqui são um ponto de partida, não algo transferível. O que transfere perfeitamente é o procedimento; o que não transfere são os números, porque eles descrevem esta planta.

Neste laboratório Um robô real
O intervalo de amostragem é exato Oscila, a menos que você meça dt e o passe para o controlador
A planta é um modelo limpo de segunda ordem Atrito, zona morta e torque que diminui com a velocidade
Limite do atuador é um limite rígido Também há limites de corrente, queda de tensão e calor
Sem ruído do sensor, a menos que você o adicione Sempre há ruído, e raramente gaussiano
A planta nunca muda Tensão da bateria, carga e temperatura mudam tudo

A última linha causa a maior confusão na prática. Um ajuste perfeito em células novas ficará lento em células mais fracas, porque o mesmo comando agora produz menos torque. Isso não é uma falha do método — os ganhos são propriedades da planta, e a planta muda. As soluções profissionais são um laço de velocidade subjacente ou o escalonamento de ganhos. Percorra como ajustar um controlador PID para ver o procedimento completo e depois leve-o ao laboratório do robô seguidor de linha, onde a planta reage contra o controlador.

Lista de verificação de hardware

Componentes

  • Microcontrolador com um temporizador estável
  • Planta medida, como um motor CC ou servo
  • Encoder, potenciômetro ou outro sensor de realimentação
  • Driver de saída dimensionado para o atuador
  • Fonte de alimentação regulada e parada de emergência

Explore o grafo

Onde este simulador é usado

Os projetos, caminhos de aprendizagem e tutoriais que se apoiam neste laboratório.

Continue construindo

Baixar recursos

Use estas referências da página enquanto trabalha no projeto. Pacotes de projeto para download serão adicionados somente depois que seu código-fonte e sua versão forem publicados.

Dúvidas comuns

Perguntas frequentes

O que devo ajustar primeiro?

Comece com os ganhos integral e derivativo iguais a zero. Aumente o ganho proporcional até a resposta ser útil, mas oscilante, e então adicione amortecimento derivativo. Adicione o ganho integral por último e somente quando restar um erro de regime repetível. Uma regra comum: P dá velocidade, D reduz o sobrepasso e I remove o deslocamento — adicione-os nessa ordem, um de cada vez.

Como impeço que um controlador PID tenha sobrepasso?

O sobrepasso normalmente vem de ação proporcional ou integral excessiva. Reduza primeiro o ganho proporcional e depois aumente o ganho derivativo para amortecer a aproximação. Se o sobrepasso só aparece depois de o atuador saturar, a causa é o windup integral, e não o ganho; nesse caso, limite o termo integral.

Por que meu controlador PID oscila?

Uma oscilação sustentada quase sempre significa que o ganho proporcional está alto demais para o laço, ou que o termo derivativo está fraco demais para amortecê-lo. Reduza o ganho proporcional pela metade e depois adicione ganho derivativo. A oscilação também pode vir de um laço de controle que roda devagar demais ou com intervalo inconsistente, o que torna o termo derivativo pouco confiável.

O que é windup integral e como evito isso?

O windup integral ocorre quando o atuador satura — um motor na velocidade máxima, uma válvula totalmente aberta — mas o erro integral acumulado continua crescendo, de modo que o controlador produz um sobrepasso muito grande quando o erro finalmente se inverte. Evite-o limitando a integração (pare de acumular no termo integral enquanto a saída está saturada) ou usando contracalculação (reduza o termo integral usando a diferença entre a saída solicitada e a entregue).

Com que rapidez um laço PID precisa rodar?

O laço deve amostrar várias vezes mais rápido que o sistema que controla, em intervalos consistentes. Em um microcontrolador, evite atrasos bloqueantes longos: um laço lento ou com intervalo variável altera os termos integrais e derivativos efetivos mesmo quando os ganhos não mudam, o que é uma causa oculta frequente de mau ajuste.

Posso usar PID apenas com os termos P e D?

Sim. O controle PD (sem termo integral) é comum quando um pequeno erro de regime é aceitável e você quer evitar windup integral; o controle PI (sem termo derivativo) é adequado para sinais ruidosos, nos quais o termo derivativo amplificaria o ruído. Use apenas os termos de que o problema precisa, em vez de executar sempre o PID completo.

Qual é a diferença entre ajuste manual e Ziegler–Nichols?

O ajuste manual altera um ganho de cada vez enquanto observa a resposta, o que é intuitivo e seguro para aprender. Ziegler–Nichols é um método baseado em uma fórmula que deriva os ganhos do ponto de oscilação sustentada; é mais rápido, mas muitas vezes agressivo, portanto seu resultado normalmente é um ponto de partida que você refina à mão.

Leitura complementar

Referências

Fontes confiáveis para ir além do modelo educacional limitado deste simulador.