Unità 5 / 9

Algoritmi di controllo: ottimizzazione supportata da PID e AI

Guadagni:

  • Capacità di spiegare e applicare i termini P, I, D e gli effetti del controller PID all'IA con il giusto contesto
  • Capacità di eseguire metodi Ziegler-Nichols e di ottimizzazione sperimentale passo dopo passo con l'aiuto dell'intelligenza artificiale
  • Capacità di riconoscere ed eliminare le trappole PID come windup integrale e rumore derivato nelle raccomandazioni AI

Mantenere costante la temperatura di un forno, portare la velocità di un motore al valore desiderato, bilanciare l'angolo di un drone; Al centro di tutti c’è un algoritmo di controllo. Il più comune di questi è il controller PID, che costituisce la spina dorsale del settore. PID; È semplice, robusto e funziona su una vasta gamma di problemi. Ma "semplice" non significa "facile da regolare": un PID impostato in modo errato oscillerà, andrà oltre, si fermerà in ritardo o diventerà completamente instabile. L'intelligenza artificiale è un prezioso assistente in questo caso: spiega i termini PID, guida attraverso i metodi di ottimizzazione, diagnostica le insidie ​​tipiche e scrive il codice di ottimizzazione. Tuttavia, la regolazione finale viene effettuata osservando il comportamento fisico del sistema e la decisione sulla stabilità spetta all'ingegnere. In questa unità spieghiamo come installare, ottimizzare e verificare le trappole PID con l'intelligenza artificiale.

Tre termini del PID

Il PID risponde al segnale di errore (e = target − misurato) in tre modi:

termine

Cosa guarda?

Effetto

in estremo

P (proporzionale)

errore attuale

risposta rapida

Oscillazione, errore permanente

Io (integrale)

Errore passato accumulato

Reimposta l'errore permanente

superamento, avvolgimento, oscillazione

D (derivato)

Tasso di variazione dell'errore

Lo smorzamento riduce il superamento

Amplifica il rumore

Riepilogo verbale: P risponde alle domande “quanto sono lontano adesso”, I “da quanto tempo sono lontano”, D “a che velocità mi sto avvicinando”. Un buon controller bilancia tutti e tre.

class 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 calcola(self, target, misurato, dt): errore = target - misurato # P p = self.Kp * errore # I -- self.integral con protezione windup += errore * dt i = self.Ki * self.integral # D -- derivativo sensibile al rumore d = self.Kd * (errore - self.previous_error) / dt self.previous_error = error out = p + i + d # Saturare l'uscita e limitare il windup se output > self.output_max: output = self.out_max self.integral -= errore * dt # anti-windup: annulla l'output integrale elif < self.output_min: output = self.output_min self.integral -= errore * dt return output

Questo codice non è un "PID di addestramento", ma uno scheletro vicino alla logica di produzione: include la saturazione dell'uscita e l'anti-windup. Molti semplici PID forniti dall'intelligenza artificiale ignorano queste due protezioni; Senza di essi, quando l'attuatore raggiunge il suo limite, l'integrale si gonfierà e il sistema supererà inaspettatamente il limite.

Suggerimento: quando si chiede all'IA il PID, dire "aggiungi saturazione di uscita e anti-windup, applica la derivata sulla misurazione al termine derivativo". Queste tre aggiunte convertono il PID del libro di testo nel campo PID.

Windup integrale e rumore derivato

Due trappole classiche sono le cause più comuni di fallimento del PID:

Avvolgimento integrale: quando l'attuatore satura (ad esempio il motore è già a piena potenza) l'errore persiste e il termine integrale continua a crescere. Questo integrale gonfiato porta a un ampio superamento quando il sistema raggiunge il target. Soluzione: arrestare o ripristinare l'integrale quando l'uscita è saturata (anti-windup, dimostrato nel codice sopra).

Rumore derivativo: il termine D prende la derivata dell'errore; La derivata di una misurazione rumorosa è molto più rumorosa e farà vibrare l'attuatore. Soluzioni: ricavare la derivata della misura (derivata della misura invece dell'errore), aggiungendo un filtro passa basso al termine derivativo.

# Riduzione del rumore derivativo: derivata della misurazione + filterd_raw = -(misurato - self.previous_measered) / dt invece dell'errore

L’intelligenza artificiale è brava a identificare queste insidie; Se dici "Il mio PID supera notevolmente quando raggiunge il target", consiglia il windup. Ma verifichi misurando se la correzione funziona sul tuo sistema.

Ambientazione con Ziegler-Nichols

Un metodo classico per trovare i guadagni (Kp, Ki, Kd) da zero è Ziegler-Nichols. La sua essenza: iniziare solo con P e aumentare Kp finché il sistema non entra in oscillazione sostenuta; Calcola Kp, Ki, Kd dalla tabella con il guadagno critico Ku e il periodo di oscillazione Tu a questo punto.

controllore

kp

Ti

Td

p.

0,5 · Ku

PI

0,45 · Ku

Ma/1.2

PID

0,6·Ku

Ma/2

Mar/8

Passi Ziegler-Nichols (piano da realizzare da parte dell'AI):1. Prendi Ki=0, Kd=0. Basta eseguire P.2. Aumentare LENTAMENTE Kp finché non inizia un'oscillazione stabile e sostenuta.3. Questo Kp = Ku (guadagno critico), periodo di oscillazione = Tu.4. Calcolare Kp, Ti, Td dalla tabella; Ki = Kp/Ti, Kd = Kp*Td.5. Inizia con questi valori, quindi apporta modifiche sperimentali.

Attenzione: Ziegler-Nichols porta deliberatamente il sistema al limite di stabilità (oscillazione sostenuta). Esiste il rischio di sollecitazione meccanica, sovracorrente e pericolo quando si esegue questa operazione su hardware reale; Se possibile, eseguilo prima in simulazione, quindi lavora con il limite di potenza basso e l'arresto di emergenza nell'hardware. Il Ku suggerito dall’AI è un punto di partenza, viene misurato e verificato nel tuo sistema.

Diagnostica assistita dall'intelligenza artificiale

È possibile diagnosticare il comportamento PID descrivendolo all'intelligenza artificiale. Sintomo → possibile mappatura delle cause:

sintomo

possibile causa

La direzione suggerita dall'intelligenza artificiale

seduta lenta

Kp/Ki basso

aumentare kp

Errore permanente

I è assente o molto basso

Ki aggiunge/aumenta

Overshoot + oscillazione

Kp/Ki alto, nessun D

Aggiungi Kd, diminuisci Ki

L'attuatore trema

rumore derivato

Filtra/riduci D

Quando raggiungi il grande superamento

carica integrale

Aggiungi anti-windup

Prompt debole / Prompt forte

DEBOLE: "Dai i guadagni PID." (Quale sistema? Com'è il comportamento? Ci sono misurazioni? Vengono forniti numeri casuali.) FORTE: "Sto regolando il PID per un controllo della velocità del motore CC. Attualmente, Kp=2, Ki=0,5, Kd=0. Supera il 35% sull'ingresso del passo e quando raggiunge il target, c'è un ampio secondo superamento; ci vuole molto tempo per stabilizzarsi. Il campionamento è 100 Hz. Elenca le possibili ragioni da questi sintomi, che guadagnano "Suggerisci in quale direzione dovrei cambiarlo e dimmi come verificare se il superamento è un windup integrale".

Mini custodia

L'ingegnere di controllo Kerem regola il controllo della temperatura di un estrusore. Con i guadagni suggeriti dall'IA, il sistema raggiunge rapidamente l'obiettivo, ma ad ogni cambio di set effettua un ampio superamento e si stabilizza lentamente. Kerem spiega il sintomo ad AI; L'IA sospetta un avvolgimento integrale perché il riscaldatore rimane a piena potenza (saturo) per un po'. Kerem aggiunge l'anti-windup al codice PID e l'overshoot diminuisce significativamente. Ma ora c'è un leggero sfarfallio all'uscita del riscaldatore; Lo attribuisce al termine D che amplifica il rumore del sensore di temperatura e aggiunge un filtro passa-basso alla derivata. Infine, convalida approssimativamente i guadagni con Ziegler-Nichols ed esegue la messa a punto sperimentale. L’intelligenza artificiale ha una diagnosi rapida; Ma Kerem ha confermato ogni correzione misurando la risposta al gradino effettiva: sia che il caricamento fosse corretto o che lo sfarfallio fosse scomparso, poteva essere visto solo graficamente.

Errori comuni

  • Impossibile aggiungere la saturazione dell'uscita e l'anti-windup al PID e si verifica un ampio superamento del limite dell'attuatore.
  • Prendendo la derivata dalla derivata della misurazione rumorosa e facendo vibrare l'attuatore.
  • Supponendo che dt sia costante, mentre il periodo di campionamento varia.
  • Esecuzione del test di oscillazione di Ziegler-Nichols sull'hardware senza precauzioni di sicurezza.
  • Accettare i guadagni generati dall'intelligenza artificiale come “definitivi” senza verifica specifica del sistema.
  • Modificare un singolo guadagno con incrementi molto ampi e spingere il sistema nell'instabilità.

In sintesi

  • PID; Reagisce con P (errore corrente), I (errore accumulato), D (velocità di variazione dell'errore).
  • Il PID di campo deve includere la saturazione dell'uscita, il filtro anti-windup e quello derivativo.
  • Ampio superamento dell'avvolgimento integrale, il rumore derivato provoca vibrazioni dell'attuatore.
  • Ziegler-Nichols inizia a guadagnare; È implementato con misure di sicurezza nell'hardware.
  • L’intelligenza artificiale è rapida nella diagnosi dal sintomo alla causa; La correzione viene verificata mediante misurazione.
  • dt effettivo misurato; Le modifiche agli utili vengono apportate a piccoli passi e osservazione.

Compito dell'applicazione

Scegli un sistema (motore/riscaldatore reale o un semplice modello del primo/secondo ordine in Python) e chiedi all'intelligenza artificiale di generare una classe PID con saturazione + anti-windup. Quindi: (1) osservare il comportamento dell'oscillazione iniziando solo con P e aumentando Kp, (2) aggiungere Ki per eliminare l'errore permanente e vedere come aumenta il superamento, (3) confrontare l'effetto sul grande superamento attivando e disattivando l'anti-windup. Traccia la risposta al gradino ad ogni passo e nota quale guadagno cambia quale comportamento. Confronta i guadagni di Ziegler-Nichols con i guadagni che hai trovato tu stesso.