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
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.
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.
- 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.
Algoritmo
- Leggi la misurazione a intervalli fissi e calcola l’errore.
- Accumula un integrale limitato usando il passo temporale effettivo.
- Stima la derivata dalla misurazione o dall’errore e applica un filtraggio adeguato.
- Somma i tre termini pesati e limita il risultato all’intervallo dell’attuatore.
- Applica il comando, memorizza il campione precedente e registra le metriche.
- 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.
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.