Simulatore interattivoPrincipiante

Simulatore di controllore PID per sistemi robotici

Regola i guadagni proporzionale, integrale e derivativo visualizzando risposta, errore, saturazione e disturbi in un simulatore di controllore PID.

Categoria
Controlli automatici
Tempo
60–120 min
Piattaforma
Browser · Arduino
Schema tecnico: Simulatore di controllore PID per sistemi roboticiRESPONSETIMESETPOINT

01 / Inizia qui

Introduzione

Il controllo PID è presente ovunque nella robotica: velocità delle ruote, orientamento, posizione dei giunti, temperatura e sistemi di bilanciamento dipendono tutti dalla retroazione. Questo progetto trasforma il controllore in un esperimento visibile. Cambia un guadagno, disturba il sistema e collega la curva risultante al codice che potrebbe essere eseguito su un Arduino o un microcontrollore integrato.

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.

Controlli

Il simulatore espone valore di riferimento, guadagni proporzionale, integrale e derivativo, intervallo di campionamento, limite dell’attuatore e ampiezza del disturbo. I grafici allineati mostrano valore di riferimento, uscita misurata, errore e sforzo di controllo. Il reset cancella la memoria del controllore, così gli esperimenti restano confrontabili.

Teoria

Un controllore di retroazione calcola l’errore come valore di riferimento meno misurazione. L’azione proporzionale reagisce immediatamente, quella integrale accumula l’errore persistente e quella derivativa risponde alla velocità di variazione. La loro somma diventa il comando dell’attuatore.

Le prestazioni del controllore sono limitate dal sistema. Campionare troppo lentamente nasconde il movimento; superare il limite dell’attuatore causa saturazione; misurazioni rumorose rendono instabile un termine derivativo non filtrato. La regolazione è quindi un esperimento che coinvolge controllore e sistema.

Grafico della risposta a gradino che confronta tre regolazioni di un sistema del secondo ordine. Una curva ad alto guadagno supera il valore di riferimento e oscilla prima di stabilizzarsi. Una curva ben regolata sale rapidamente con un leggero overshoot e si stabilizza in fretta. Una curva a basso guadagno sale lentamente e non supera mai il valore di riferimento.
Lo smorzamento dà forma alla risposta a gradino: troppo guadagno produce overshoot e oscillazioni, troppo poco rende il sistema pigro e una regolazione equilibrata si stabilizza rapidamente. Scarica SVG

Algoritmo

  1. Leggi la misurazione a intervalli fissi e calcola l’errore.
  2. Accumula un integrale limitato usando il passo temporale effettivo.
  3. Stima la derivata dalla misurazione o dall’errore e applica un filtraggio adeguato.
  4. Somma i tre termini pesati e limita il risultato all’intervallo dell’attuatore.
  5. Applica il comando, memorizza il campione precedente e registra le metriche.
  6. Reimposta l’integrale e la storia quando la modalità di controllo o il sistema cambiano in modo significativo.

Codice sorgente

Questa implementazione include una semplice condizione 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;
}

I controllori di produzione definiscono anche il comportamento per misurazioni non valide, overrun del timer, transizioni di modalità e guasti degli attuatori.

Ipotesi e differenze hardware

Il sistema qui è un modello pulito del secondo ordine, con massa, smorzamento e ritardo noti che imposti con i cursori, non un vero motore con attrito, zona morta, coppia che diminuisce con la velocità e un driver che si scalda. Il campionamento è fisso per costruzione, quindi il termine derivativo resta ben comportato; su un Arduino, delay() o altro lavoro bloccante fa oscillare l’intervallo e il termine D si comporta male anche quando i guadagni non cambiano. La saturazione dell’attuatore è modellata come un limite rigido con anti-windup, ma un sistema fisico ha anche limiti di corrente, cali della tensione di alimentazione e calore che modificano il limite durante il funzionamento. Regola la forma qui, poi verifica sull’hardware dove il sistema è noto solo approssimativamente.

Schema elettrico

Il sensore di retroazione riporta l’uscita effettiva; non sostituisce la limitazione della corrente né l’arresto di sicurezza hardware. Il controllore confronta il valore di riferimento con la lettura condizionata del sensore, poi comanda l’attuatore tramite uno stadio PWM dimensionato per il carico.

Diagramma a blocchi di un ciclo di retroazione PID chiuso. Il valore di riferimento entra in un nodo di somma, l'errore risultante alimenta il controllore PID, la sua uscita comanda un attuatore e uno stadio PWM, che comanda il sistema, e un sensore misura l'uscita del sistema e la restituisce con segno negativo al nodo di somma.
Il ciclo PID chiuso: il sensore chiude il percorso dall'uscita del sistema al nodo di somma, dove la retroazione viene sottratta dal valore di riferimento. Scarica SVG

Esperimenti guidati

Leggere dell’overshoot non equivale a produrlo deliberatamente. Ogni esperimento seguente richiede un paio di minuti e isola esattamente un effetto.

1. Trova il guadagno critico

Imposta Ki e Kd a zero. Aumenta Kp finché l’uscita oscilla con ampiezza costante, né crescente né decrescente. Annota quel guadagno (Ku) e il periodo di oscillazione (Tu).

Quei due numeri sono tutto ciò che serve per una prima regolazione:

Controllore Kp Ki Kd
PID (classico) 0.6 Ku 1.2 Ku / Tu 0.075 Ku Tu
PID (senza overshoot) 0.2 Ku 0.4 Ku / Tu 0.066 Ku Tu

Inseriscili e confrontali. La riga classica è aggressiva e produce un overshoot del 20–40%; la seconda arriva senza overshoot ma richiede più tempo. Nessuna delle due è «corretta»: sono risposte diverse a requisiti diversi, ed è questo il punto.

2. Osserva il windup integrale verificarsi

Imposta un limite basso per l’attuatore, intorno al 20% del suo intervallo, poi comanda un grande gradino del valore di riferimento. Osserva il grafico dello sforzo di controllo: satura immediatamente e resta lì, mentre l’integrale continua ad accumulare un errore su cui non può agire. Quando l’uscita raggiunge finalmente il valore di riferimento, tutta quell’azione memorizzata si scarica e il sistema va ben oltre.

Ora aumenta il limite dell’attuatore e ripeti con gli stessi guadagni. L’overshoot scompare in gran parte. Nulla del controllore è cambiato: è questo il punto. Il windup è una proprietà dell’interazione tra controllore e attuatore che satura, non dei guadagni.

3. Dimostra che è il ritardo, non il rumore, a distruggere il ciclo

Aumenta l’intervallo di campionamento dal valore minimo a incrementi, mantenendo fissi i guadagni. La risposta peggiora molto prima che il grafico appaia rumoroso: l’overshoot cresce, compare l’oscillazione, poi il sistema diventa instabile.

Intervallo di campionamento Cosa vedi con una regolazione altrimenti buona
5 ms Pulita, come impostata
20 ms Leggermente più overshoot
50 ms Oscillazioni visibili
100 ms Oscillazione persistente
200 ms Instabile

Ecco perché rimuovere un delay() dal ciclo di un robot spesso migliora il tracciamento più di qualsiasi altra regolazione. Un’informazione obsoleta non può essere recuperata da un guadagno.

4. Fornisci rumore al termine derivativo

Aumenta l’ampiezza del disturbo con Kd a zero, poi aumenta Kd. L’andamento dello sforzo di controllo diventa frastagliato molto prima di quello dell’uscita: stai osservando la differenziazione amplificare il contenuto ad alta frequenza, esattamente come deve.

È questo comportamento a portare le persone a concludere che D sia inutile e a impostarlo a zero. La correzione reale è a monte: filtra la misurazione o filtra direttamente il termine derivativo.

Cosa devi osservare

Impostazione Forma prevista Se vedi qualcos’altro
Solo Kp, basso Sale lentamente, si stabilizza sotto il valore di riferimento —
Solo Kp, alto Supera, oscilla, decade Un’oscillazione crescente significa che hai superato Ku
Kp + Kd Salita rapida, poco overshoot, piccolo offset a regime Sforzo frastagliato significa che D amplifica il rumore
Kp + Ki Raggiunge esattamente il valore di riferimento, più lentamente Se va oltre, c’è windup o troppo Ki
PID completo Rapido, overshoot minimo, nessun offset —

L’offset a regime con P e D ma senza I vale la pena produrlo deliberatamente almeno una volta. È la dimostrazione più chiara di ciò a cui serve realmente il termine integrale: l’azione proporzionale ha bisogno di un errore diverso da zero per produrre qualsiasi uscita, quindi necessariamente si ferma leggermente prima.

Passaggio all’hardware

I guadagni trovati qui sono un punto di partenza, non un trasferimento. Ciò che si trasferisce perfettamente è la procedura; non si trasferiscono i numeri, perché descrivono questo sistema.

Questo laboratorio Un robot reale
L’intervallo di campionamento è esatto Oscilla se non misuri dt e non lo passi
Il sistema è un modello pulito del secondo ordine Attrito, zona morta, coppia che diminuisce con la velocità
Il limite dell’attuatore è un limite rigido Anche limiti di corrente, calo della tensione e calore
Nessun rumore del sensore se non lo aggiungi Sempre rumore, e raramente gaussiano
Il sistema non cambia mai Tensione della batteria, carico e temperatura lo cambiano tutti

L’ultima riga causa la maggiore confusione nella pratica. Una regolazione perfetta con batterie nuove diventa pigra con batterie scariche, perché lo stesso comando produce ora meno coppia. Non è un fallimento del metodo: i guadagni sono proprietà del sistema, e il sistema è cambiato. Le risposte professionali sono un ciclo di velocità interno oppure la pianificazione dei guadagni. Segui come regolare un controllore PID per la procedura completa, poi porta tutto nel laboratorio di inseguimento della linea, dove il sistema contrattacca.

Checklist hardware

Componenti

  • Microcontrollore con un timer stabile
  • Sistema misurato, come un motore DC o un servomotore
  • Encoder, potenziometro o altro sensore di retroazione
  • Driver di uscita dimensionato per l'attuatore
  • Fonte di alimentazione regolata e arresto di emergenza

Esplora il grafo

Dove si usa questo simulatore

I progetti, i percorsi di apprendimento e i tutorial che si basano su questo laboratorio.

Continua a costruire

Scarica le risorse

Usa questi riferimenti nella pagina mentre lavori al progetto. I pacchetti di progetto scaricabili verranno aggiunti solo dopo la pubblicazione del loro codice sorgente e della loro versione.

Domande comuni

Domande frequenti

Cosa devo regolare per primo?

Inizia con guadagni integrale e derivativo a zero. Aumenta il guadagno proporzionale finché la risposta è utile ma oscillante, poi aggiungi smorzamento derivativo. Aggiungi il guadagno integrale per ultimo e solo se rimane un errore a regime riproducibile. Una regola pratica comune: P dà velocità, D riduce l'overshoot e I elimina l'offset: aggiungili in quest'ordine, uno alla volta.

Come impedisco a un controllore PID di andare in overshoot?

L'overshoot nasce di solito da un'azione proporzionale o integrale eccessiva. Riduci prima il guadagno proporzionale, poi aumenta quello derivativo per smorzare l'avvicinamento. Se l'overshoot compare solo dopo che l'attuatore raggiunge il limite, la causa è il windup integrale anziché il guadagno: in quel caso limita invece il termine integrale.

Perché il mio controllore PID oscilla?

Un'oscillazione persistente indica quasi sempre che il guadagno proporzionale è troppo alto per il ciclo o che il termine derivativo è troppo debole per smorzarlo. Riduci il guadagno proporzionale di circa metà, poi aggiungi guadagno derivativo. L'oscillazione può anche derivare da un ciclo di controllo troppo lento o con intervalli inconsistenti, il che rende inaffidabile il termine derivativo.

Che cos'è il windup integrale e come lo prevengo?

Il windup si verifica quando l'attuatore satura — un motore alla velocità massima, una valvola completamente aperta — ma l'errore integrale accumulato continua a crescere, così il controllore supera ampiamente il bersaglio quando l'errore si inverte. Previenilo con il clamping (interrompi l'accumulo sull'integrale mentre l'uscita è saturata) o con il back-calculation (riduci l'integrale usando la differenza tra l'uscita richiesta e quella effettivamente fornita).

Quanto rapidamente deve funzionare un ciclo PID?

Il ciclo dovrebbe campionare diverse volte più rapidamente del sistema controllato, a intervalli consistenti. Su un microcontrollore evita lunghi ritardi bloccanti: un ciclo variabile o lento modifica i termini effettivi integrale e derivativo anche quando i guadagni non cambiano, una causa nascosta frequente di regolazione mediocre.

Posso usare il PID solo con i termini P e D?

Sì. Il controllo PD (senza integrale) è comune quando un piccolo errore a regime è accettabile e vuoi evitare il windup; il controllo PI (senza derivativo) è adatto a segnali rumorosi, dove un termine derivativo amplificherebbe il rumore. Usa solo i termini necessari al problema invece di eseguire sempre il PID completo.

Qual è la differenza tra regolazione manuale e Ziegler–Nichols?

La regolazione manuale modifica un guadagno alla volta osservando la risposta, un approccio intuitivo e sicuro per imparare. Ziegler–Nichols è un metodo basato su una formula che ricava i guadagni dal punto di oscillazione sostenuta; è più rapido ma spesso aggressivo, quindi il suo risultato è soltanto un punto di partenza da affinare a mano.

Per approfondire

Fonti

Fonti autorevoli per andare oltre il modello didattico, volutamente limitato, di questo simulatore.