Unidade 5 / 9

Algoritmos de controle: ajuste com suporte de PID e IA

Ganhos:

  • Capacidade de explicar e aplicar os termos e efeitos P, I, D do controlador PID à IA com o contexto certo
  • Capacidade de executar métodos de Ziegler-Nichols e de ajuste experimental passo a passo com a ajuda de IA
  • Capacidade de reconhecer e eliminar armadilhas PID, como encerramento integral e ruído derivativo em recomendações de IA

Manter constante a temperatura de um forno, acionar a velocidade de um motor no valor desejado, equilibrar o ângulo de um drone; No centro de todos eles está um algoritmo de controle. O mais comum deles é o controlador PID, que é a espinha dorsal da indústria. PID; É simples, robusto e funciona em uma ampla gama de problemas. Mas "simples" não significa "fácil de ajustar": um PID configurado incorretamente irá oscilar, ultrapassar, atrasar-se ou tornar-se completamente instável. A inteligência artificial é um assistente valioso aqui: ela explica os termos do PID, orienta através dos métodos de ajuste, diagnostica armadilhas típicas e escreve o código de ajuste. No entanto, o ajuste final é feito observando o comportamento físico do seu sistema e a decisão de estabilidade cabe ao engenheiro. Nesta unidade abordamos como instalar, ajustar e verificar traps PID com IA.

Três termos de PID

O PID responde ao sinal de erro (e = alvo − medido) de três maneiras:

prazo

O que ele olha?

Efeito

em extremo

P (proporcional)

erro atual

resposta rápida

Oscilação, erro permanente

Eu (integral)

Erro passado acumulado

Redefine erro permanente

overshoot, liquidação, oscilação

D (derivado)

Taxa de mudança de erro

O amortecimento reduz o overshoot

Amplifique o ruído

Resumo verbal: P responde às questões “a que distância estou agora”, I “há quanto tempo estou ausente”, D “com que rapidez estou me aproximando”. Um bom controlador equilibra todos os três.

classe PID: def __init__ (self, Kp, Ki, Kd, output_min = -100, output_max = 100): self.Kp, self.Ki, self.Kd = Kp, Ki, Kd self.out_min, self.out_max = output_min, output_max self.integral = 0,0 self.previous_error = 0,0 def calcular (self, alvo, medido, dt): erro = alvo - medido # P p = self.Kp * erro # I -- self.integral com proteção contra windup += erro * dt i = self.Ki * self.integral # D -- derivado sensível ao ruído d = self.Kd * (error - self.previous_error) / dt self.previous_error = error out = p + i + d # Satura a saída e limita o windup se output > self.output_max: output = self.out_max self.integral -= erro * dt # anti-windup: desfaz a saída integral do elif <self.output_min: output = self.output_min self.integral -= erro * dt return output

Este código não é um "PID de treinamento", mas um esqueleto próximo à lógica de produção: inclui saturação de saída e anti-windup. Muitos PIDs simples fornecidos pela IA contornam essas duas proteções; Sem eles, quando o atuador atingir seu limite, a integral aumentará e o sistema ultrapassará inesperadamente.

Dica: Ao solicitar o PID à IA, diga "adicionar saturação de saída e anti-windup, aplicar derivada na medição ao termo derivativo". Essas três adições convertem o PID do livro didático no PID de campo.

Enrolamento Integral e Ruído Derivativo

Duas armadilhas clássicas são as causas mais comuns de falha do PID:

Encerramento integral: Quando o atuador satura (por exemplo, o motor já está na potência máxima), o erro persiste e o termo integral continua a crescer. Esta integral inflada leva a um grande overshoot quando o sistema atinge o alvo. Solução: parar ou reverter a integral quando a saída estiver saturada (anti-windup, demonstrado no código acima).

Ruído derivado: O termo D obtém a derivada do erro; A derivada de uma medição ruidosa é muito mais ruidosa e fará vibrar o atuador. Soluções: tirar a derivada da medição (derivada da medição em vez do erro), adicionar um filtro passa-baixo ao termo da derivada.

# Reduzindo o ruído derivado: medição derivada + filterd_raw = -(measured - self.previous_measured) / dt em vez de erro

A IA é boa para identificar essas armadilhas; Se você disser "Meu PID ultrapassa muito quando atinge o alvo", ele recomenda a conclusão. Mas você verifica medindo se a correção funciona no seu sistema.

Cenário com Ziegler-Nichols

Um método clássico para encontrar ganhos (Kp, Ki, Kd) do zero é Ziegler-Nichols. Sua essência: começar apenas com P e aumentar Kp até que o sistema entre em oscilação sustentada; Calcule Kp, Ki, Kd da tabela com o ganho crítico Ku e o período de oscilação Tu neste ponto.

controlador

kp

Ti

Td

P.

0,5·Ku

PI

0,45·Ku

Tu/1.2

PID

0,6·Ku

Ter/2

Ter/8

Etapas de Ziegler-Nichols (plano a ser feito pela IA):1. Considere Ki = 0, Kd = 0. Basta executar P.2. Aumente LENTAMENTE Kp até que a oscilação estável e sustentada comece.3. Este Kp = Ku (ganho crítico), período de oscilação = Tu.4. Calcule Kp, Ti, Td da tabela; Ki = Kp/Ti, Kd = Kp*Td.5. Comece com esses valores e depois faça ajustes experimentais.

Cuidado: Ziegler-Nichols leva deliberadamente o sistema ao seu limite de estabilidade (oscilação sustentada). Existe o risco de tensão mecânica, sobrecorrente e perigo ao fazer isso em hardware real; Se possível, faça isso primeiro na simulação e depois trabalhe com limite de potência baixo e parada de emergência no hardware. O Ku sugerido pela IA é um ponto de partida, é medido e verificado no seu sistema.

Diagnóstico assistido por IA

Você pode diagnosticar o comportamento do PID descrevendo-o para a IA. Sintoma → mapeamento de possíveis causas:

sintoma

causa possível

A direção que a IA irá sugerir

sentado lentamente

Kp/Ki baixo

aumentar kp

Erro permanente

Estou ausente ou muito baixo

Adicionar/aumentar Ki

Overshoot + oscilação

Kp/Ki alto, sem D

Adicionar Kd, diminuir Ki

O atuador está tremendo

ruído derivado

Filtrar/reduzir D

Quando você alcança o grande excesso

encerramento integral

Adicionar anti-windup

Alerta Fraco/Prompt Forte

FRACO: "Dê os ganhos do PID." possíveis razões para esses sintomas, que ganham "Sugira em que direção devo mudar e diga-me como testar se o overshoot é uma conclusão integral."

Mini Estojo

O engenheiro de controle Kerem ajusta o controle de temperatura de uma extrusora. Com os ganhos sugeridos pela IA, o sistema atinge o alvo rapidamente, mas a cada mudança definida ele faz um grande overshoot e aos poucos se estabiliza. Kerem explica o sintoma à IA; AI suspeita de encerramento integral porque o aquecedor permanece em potência máxima (saturado) por um tempo. Kerem adiciona anti-windup ao código PID e o overshoot diminui significativamente. Mas agora há uma ligeira oscilação na saída do aquecedor; Ele atribui isso ao termo D que amplifica o ruído do sensor de temperatura e adiciona um filtro passa-baixa à derivada. Finalmente, valida aproximadamente os ganhos com Ziegler-Nichols e realiza ajustes experimentais. A IA acelerou o diagnóstico; Mas Kerem confirmou cada correção medindo a resposta real ao degrau – se a finalização foi corrigida ou se a oscilação desapareceu, ela só poderia ser vista graficamente.

Erros Comuns

  • Falha ao adicionar saturação de saída e anti-windup ao PID e ocorre uma grande ultrapassagem no limite do atuador.
  • Tirando a derivada da derivada da medição ruidosa e vibrando o atuador.
  • Supondo que dt seja constante, enquanto o período de amostragem varia.
  • Realização do teste de oscilação Ziegler-Nichols em hardware sem precauções de segurança.
  • Aceitar ganhos gerados por IA como “finais” sem verificação específica do sistema.
  • Alterar um único ganho com passos muito grandes e levar o sistema à instabilidade.

Em resumo

  • PID; Ele reage com P (erro atual), I (erro acumulado), D (taxa de variação do erro).
  • O PID de campo deve incluir saturação de saída, anti-windup e filtro derivativo.
  • Grande overshoot de enrolamento integral, ruído derivado causa vibração do atuador.
  • Ziegler-Nichols começa a ganhar; É implementado com medidas de segurança no hardware.
  • A IA é rápida no diagnóstico, do sintoma à causa; A correção é verificada por medição.
  • dt real medido; As alterações nos ganhos são feitas em pequenos passos e observação.

Tarefa de aplicativo

Escolha um sistema (motor/aquecedor real ou um modelo simples de primeira/segunda ordem em Python) e faça a IA gerar uma classe PID com saturação + anti-windup. Então: (1) observe o comportamento da oscilação começando apenas com P e aumentando Kp, (2) adicione Ki para eliminar o erro permanente e veja como o overshoot aumenta, (3) compare o efeito no grande overshoot ativando e desativando o anti-windup. Trace a resposta ao degrau em cada degrau e observe qual ganho altera qual comportamento. Compare os ganhos de Ziegler-Nichols com os ganhos que você mesmo obteve.