Quali sono le buone strategie per ottimizzare i loop PID?


55

Ottimizzare i guadagni dei controller può essere difficile, quali strategie generali funzionano bene per ottenere un sistema stabile che converge alla giusta soluzione?


1
Una domanda mirata a una domanda più specifica sarebbe più utile. Altrimenti, dovresti solo guardare l' articolo PID , con una sezione sulla messa a punto
ronalchn,

2
Ho sempre trovato l'ottimizzazione dei PID molto dipendente dalle caratteristiche del sistema, motivo per cui non ho mai trovato i sistemi di ottimizzazione automatica estremamente utili. Stanno bene per un primo passaggio, set di parametri a basse prestazioni, ma sono tutt'altro che ottimali e avrai lo stesso problema con qualsiasi strategia generale che non è ottimizzata per gli aspetti meccanici, elettrici e di controllo di un determinato sistema.
Mark Booth

Risposte:


66

Per motori piccoli, a bassa coppia con ingranaggi piccoli o assenti, una procedura che è possibile utilizzare per ottenere una buona regolazione della linea di base è quella di sondare la sua risposta a un disturbo.

Per ottimizzare un PID, attenersi alla seguente procedura:

  1. Impostare tutti i guadagni su zero.
  2. Aumentare il guadagno P fino a quando la risposta a un disturbo è un'oscillazione costante.
  3. Aumentare il guadagno D fino a quando le oscillazioni non scompaiono (cioè è notevolmente smorzato).
  4. Ripetere i passaggi 2 e 3 fino a quando l'aumento del guadagno D non interrompe le oscillazioni.
  5. Impostare P e D sugli ultimi valori stabili.
  6. Aumenta il guadagno I finché non ti porta al setpoint con il numero di oscillazioni desiderate (normalmente zero ma si può avere una risposta più rapida se non ti dispiace un paio di oscillazioni di superamento)

Quale disturbo usi dipende dal meccanismo a cui è collegato il controller. Normalmente spostare il meccanismo a mano lontano dal setpoint e lasciarlo andare è sufficiente. Se le oscillazioni diventano sempre più grandi, è necessario ridurre il guadagno P.

Se si imposta un guadagno D troppo alto, il sistema inizierà a vibrare (vibrare a una frequenza superiore rispetto alle oscillazioni del guadagno P). In questo caso, ridurre il guadagno D fino a quando non si ferma.

Credo che questa tecnica abbia un nome. Lo metto qui quando lo trovo.



1
@ Throwback1986, Questo è sicuramente non Ziegler-Nichols che utilizza solo il guadagno P e dove e guadagno D vengono calcolati di conseguenza dal guadagno P oscillante e il periodo oscilation
dm76

Hai ulteriori consigli per la messa a punto specifica di un braccio robotico con giunti multipli che necessitano di messa a punto? Partite dalla base e procedete verso l'esterno verso l'effettore finale, o viceversa, o importa?
adamconkey,

1
In un ambiente accademico o industriale desidererai un metodo di controllo più sofisticato. Per un più hobbiest; la gravità ha un effetto smorzante, quindi sintonizza ogni giunto nell'angolo in cui la gravità influisce meno sui motori. Ad esempio, con il braccio rivolto verso l'alto in modo che la gravità agisca sui cuscinetti e non sul motore. L'ordine non ha importanza. L'aggiunta di un termine di compensazione della gravità feedforward al controllo è probabilmente il miglioramento più semplice (utilizzare Newton-Euler ricorsivo per un braccio seriale) se non è possibile ottenere le prestazioni desiderate.
Hauptmech,

Lo strumento pidtuner.com mi ha dato risultati migliori rispetto al metodo Ziegler-Nichols, che presenta numerosi inconvenienti noti; folk.ntnu.no/skoge/publications/2003/tuningPID/more/…
Juan Gonzalez Burgos

13

Un metodo sperimentale simile alla risposta di hauptmech che mi è stato insegnato al college:

  1. Impostare tutti i guadagni su 0.
  2. Aumenta K d fino a quando il sistema oscilla.
  3. Ridurre K d di un fattore 2-4.
  4. Impostare K p a circa l'1% di K d .
  5. Aumenta K p fino all'inizio delle oscillazioni.
  6. Diminuisci K p di un fattore 2-4.
  7. Impostare K i a circa l'1% di K p .
  8. Aumenta K i fino all'inizio delle oscillazioni.
  9. Diminuisci K i di un fattore 2-4.

Il metodo Ziegler-Nichols è più preciso se è possibile ottenere un numero preciso per il periodo di oscillazione. Generalmente provoca oscillazioni utilizzando i numeri "PID classici" indicati, quindi non è sempre ottimale.

Per le regole generali sull'effetto di ciascun termine su tempo di salita, superamento, tempo di assestamento, errore di stato stazionario e stabilità, vedere la Tabella 1 di "Analisi e progettazione del sistema di controllo PID" , di Li, Ang e Chong nei sistemi di controllo IEEE Rivista.


2
Kd prima? Ho sempre pensato che fosse meglio iniziare con Kp.
Rocketmagnet,

Sto trascrivendo da vecchie diapositive di lezione, se c'è una buona ragione per non farlo in questo modo sarei curioso di ascoltarlo.
Joe Baker,

1
Questo è l'algoritmo che io sostengo per la messa a punto del "sedile dei pantaloni". Ti avvicinerà il più possibile senza modellare il sistema o misurare la sua risposta. (Modellare e / o misurare è l'unica strada da percorrere se hai davvero bisogno della giusta messa a punto).
TimWescott,

L'ottimizzazione di Kd per prima non ha alcun senso per me, poiché in ogni PID che ho implementato il segno di Kd è negativo. Viene utilizzato per ridurre il segnale di controllo quando si verificano grandi cambiamenti negli errori, in sostanza smorzando il sistema. Se hai solo Kd, il sistema si sposterà nella direzione opposta, aumentando l'errore e aggravando il problema. Se Kd è positivo, ogni volta che si verifica un grande cambiamento nell'errore nella giusta direzione, lo farai cambiare ancora più velocemente e supererai il tuo obiettivo.
Andrew Capodieci,

In realtà, l'ottimizzazione del guadagno D per prima cosa ha un senso, ma suppongo che "aumentare" il guadagno D significhi aumentare il valore assoluto e solo aumentare lo smorzamento. Il problema più grande con il guadagno D è che amplifica il rumore ad alta frequenza ed è bello vedere quell'effetto senza il guadagno P. Quindi, essenzialmente stai iniziando cercando i guadagni a cui smette di comportarsi come smorzamento e inizia ad amplificare il rumore e i segnali di errore ritardati. Presumo per il passaggio 2, è necessario colpire la pianta per vedere se oscilla.
DrRobotNinja

7

Embedded.com ha spostato di nuovo il mio articolo, ma qui è dove si trova ora. Questo mostra sia come scrivere un loop PID (capire come farlo in qualcosa di diverso dal virgola mobile viene lasciato come esercizio al lettore) sia come sintonizzarlo.

PID senza dottorato

Il modo migliore dipende molto dalle tue capacità. Il modo per ottenere la migliore messa a punto , supponendo che tu sia una mano esperta del sistema di controllo, è di solito misurare la risposta della pianta ("pianta" == "la cosa che stai controllando"), quindi a seconda di come hai fatto le misure estraggono un modello dell'impianto e progettano quello, o semplicemente progettano direttamente le misure.

Per alcune piante difficili scoprirai che non puoi mai effettuare misurazioni soddisfacenti, nel qual caso devi seguire solo i modelli. Quelli sono rari, ma soddisfacenti quando li fai funzionare.


5

Sebastian Thrun ha presentato un semplice algoritmo per la messa a punto del PID nella sua classe "Come programmare un'auto robotica". Si chiama "twiddle", lo descrive qui .

Twiddle è molto incline a trovare minimi locali - questo significa che potresti trovare un insieme di tre costanti che vanno bene, ma non ottimali per la situazione. Il problema della regolazione delle costanti PID è un sottoinsieme di un problema di ricerca più generale per trovare determinati parametri per massimizzare l'utilità (in questo caso, minimizzando l'errore dell'algoritmo PID). Puoi esaminare altre soluzioni generali a questo problema, come l'arrampicata, la ricottura simulata, gli algoritmi genetici, ecc. Che potrebbero finire per trovare soluzioni più ottimali.


4

Contrariamente alle altre due risposte direi che un buon modo manuale di sintonizzare un PID sta ignorando il Kd. Quindi inizia da 0 e aumenta Kp fino a raggiungere l'obiettivo, quindi aumenta Ki per eliminare l'errore di stato stazionario.

Kd può confondere il problema in quanto risponde male al rumore, quindi inizi ad aggiungere filtri sul tuo ingresso analogico e poi metti in discussione ciò che fa oltre a rallentare il controllo e rendere il tutto più difficile da risolvere ...

Un'altra cosa che mi confonderà è se l'equazione PID è nella forma standard o in una forma indipendente (parallela in wikipedia). L'effetto di Ki sembra invertirsi quando la forma è la strada sbagliata per quello che pensi che sia. Entrambi i tipi sono utilizzati nell'automazione, a volte con l'opzione per passare da uno all'altro.


4

Modellazione di sistema

Ovviamente la sintonizzazione sperimentale può essere eseguita come indicato nelle altre risposte, ma se sei in grado di definire un modello dinamico ragionevole per qualsiasi cosa tu voglia controllare e sei in grado di identificarne i parametri , dovresti essere in grado di progettare il tuo controller sulla base di criteri -defined come sovraelongazione , tempo di salita , tempo di assestamento , stato stazionario di errore e così via.

Ci sono anche strumenti in MATLAB che sono in grado di ottimizzare il controller per ottimizzare una combinazione di questi criteri, il che rende ancora migliore l'utilizzo.

Conosci il tuo controller

Anche imparare cosa fa ogni parametro nel controller PID è abbastanza utile. Tutti gli algoritmi sperimentali si basano in qualche modo su questo tipo di conoscenza. Se non solo segui le istruzioni, ma riesci a percepire da solo questa sensazione, potresti trovare più facile sintonizzare il controller manualmente.

Problemi nel mondo reale

C'è una possibilità che una di queste cose, tra le altre, si metta in cammino quando si sintonizza il controller: windup , frequenza di campionamento inadeguata , saturazione .

Conclusione

Alla fine, tutto dipende da cosa puoi effettivamente fare con il tuo sistema per ottenere alcune conoscenze su come funziona e che tipo di sperimentazione può essere fatto. La cosa migliore è effettivamente imparare di più sui controller PID e sulla teoria dei controlli in generale, IMO, ma sono di parte :)


Non capisco perché le persone continuino a suggerire l' euristica per la messa a punto del PID mentre al giorno d'oggi ci vengono forniti molti strumenti automatici per l'identificazione degli impianti e la progettazione dei controller che non richiedono un profondo background teorico. Pollice su per questa risposta quindi.
Ugo Pattacini,

3

Cercherò di espandere un po 'la mia esperienza per coloro che potrebbero essere interessati. Penso che il problema sia che abbiamo molta teoria del controllo che è in qualche modo inaccessibile (e talvolta non utile) e quindi abbiamo delle regole empiriche che fanno ipotesi su sistemi che sono spesso inaccurate.

Stabilità

Parliamo prima del perché i circuiti di controllo diventano instabili. Per questa discussione assumerò un sistema lineare. Informalmente ciò significa che se il segnale di controllo è un'onda sinusoidale a una determinata frequenza, l'uscita osservata è alla stessa frequenza e se si modifica l'ampiezza del sistema di controllo, l'uscita risponde allo stesso rapporto. Questa ipotesi è una buona approssimazione per molti sistemi del mondo reale e ci consente di guardare a diverse frequenze in isolamento.

Se guardi il percorso di controllo hai un set-point, il tuo controller PID, il tuo sistema (noto anche come "Impianto") e quindi il tuo sensore. Immagina un set-point fisso e un'onda sinusoidale dal tuo sensore (questo equivale a un disturbo del mondo reale al sensore, restituito). In un sistema instabile il tuo feedback fa sì che il circuito di controllo amplifichi l'errore anziché ridurlo in modo tale che all'aumentare del tempo aumenta l'ampiezza. Il motivo per cui ciò accade è dovuto a un ritardo, o per questa particolare frequenza uno spostamento di fase tra l'ingresso e l'uscita. Per una data frequenza possiamo osservare lo spostamento e l'ampiezza dell'output ad anello aperto (cioè nessun feedback) e quando disegniamo tutti quelli su un grafico otteniamo qualcosa come un diagramma di Bode. Se abbiamo una situazione in questo grafico ad anello aperto in cui l'errore continua ad essere amplificato, allora abbiamo un sistema instabile. Se il ritardo è inferiore a 1/2 della lunghezza d'onda o il guadagno è inferiore a x1, il sistema sarà stabile . In pratica vogliamo un margine da quel punto (margine di guadagno e margine di fase) ed è per questo che vedrai questo "arretramento" in molti dei metodi manuali / euristici.

Il problema principale con questi metodi manuali è che stai volando alla cieca e sei praticamente sicuro di avere un sistema di controllo scadente.

Inoltre, tieni presente che il significato P, I e D è correlato a ciò che il sensore sta misurando e al controllo che stai applicando. Un errore comune nei controller domestici è che le persone pensano che stiano applicando P quando in realtà non lo sono. I controller del motore hanno spesso un loop di posizione, che scorre su un loop di velocità che scorre su un loop di coppia. (Una cascata )

OK, ma come ci aiuta?

Il primo punto che vorrei sottolineare è che se stai costruendo il tuo controller PID, dovresti anche costruire un modo per misurare la risposta ad anello aperto. Esegui una scansione di frequenza all'ingresso del controller e misura l'uscita del sensore con il feedback scollegato. Quindi puoi disegnare il diagramma di Bode ad anello aperto e vedere perché il tuo sistema è stabile ed essere in grado di scambiare i vari controlli. È anche utile misurare la risposta del circuito chiuso e puoi farlo con qualsiasi sistema eseguendo una scansione di frequenza del set-point mentre il circuito è chiuso. Entrambi questi non sono così difficili e non richiedono molte conoscenze teoriche.

Se stai semplicemente modificando i controlli senza capire cosa sta succedendo sotto il cofano, non sarai in grado di ottimizzare il tuo sistema. Costruire un po 'di intuizione su questi sistemi non è così difficile. Ad esempio, il guadagno proporzionale non ha alcun effetto sulla fase ma aumenta semplicemente il guadagno ad anello aperto su tutte le frequenze. Quindi quello che stai facendo quando aumenti il ​​guadagno proporzionale in tutti quei metodi di sintonizzazione manuale è trovare la frequenza in cui la fase passa a -180. Vedi questo per avere qualche idea in più sull'impatto dei vari controlli sulla risposta in frequenza.

Spesso ottenere le migliori prestazioni a circuito chiuso comporta la modifica del sistema e non solo i guadagni del controller. Quello che vuoi è rendere il sistema il più "rigido" possibile. Ciò ti consentirà di aumentare i parametri di controllo e ottenere la migliore larghezza di banda a circuito aperto e chiuso. Nella mia esperienza nelle applicazioni di controllo del motore, il guadagno proporzionale è quello che dovrebbe fare la maggior parte del "lavoro" e l'integratore il "riposo". Non penso che tu abbia bisogno di un termine D affatto. Avere un filtro passa basso e un filtro notch aiuta molto in situazioni in cui potresti avere una risonanza meccanica ma impostarle senza un diagramma di Bode è molto difficile (la frequenza di oscillazione che osservi a circuito chiuso potrebbe essere diversa da quella a circuito aperto).

Se la sicurezza è un problema (motori molto potenti o un sistema che potrebbe essere distrutto dal motore che va fuori controllo) è necessario inserire alcuni limiti prima di iniziare la sintonizzazione (ad esempio limite di corrente, errore di posizione massima) per proteggere il sistema. Quindi è necessario ottenere una sorta di sensazione per l'intervallo dei parametri. Se il tuo feedback ha 40 conteggi per rotazione o 4000 conteggi per rotazione, i tuoi parametri saranno un fattore 100 per un determinato sistema. Il mio approccio sarebbe quello di trovare prima un intervallo in cui hai una scarsa controllabilità e poi salire da lì a partire da P e poi io (anche se di nuovo stai volando alla cieca). Il backup crea questo margine di stabilità.

Oltre il circuito chiuso

Il circuito chiuso tenta di eliminare l'errore dal sistema. Avrà sempre prestazioni piuttosto limitate. Quello che vuoi fare è minimizzare l'errore che vede il tuo controller a circuito chiuso e un modo per farlo è attraverso una tecnica chiamata feed forward. In feed-forward si fa il giro del controller e si guida un comando direttamente al sistema. Un esempio di ciò sarebbe l'accelerazione feed-forward. Se sai che sei la costante di coppia del motore e conosci il carico, puoi praticamente dire quanta corrente devi guidare per ottenere una certa accelerazione del carico. È sufficiente prendere l'accelerazione di input del comando, moltiplicarla per una costante e aggiungerla al comando di azionamento del controller. Fondamentalmente stai facendo quello che sarebbe necessario per guidare il sistema se non ci fosse un controller e più ci si avvicina a meno errori si deve eliminare il loop e migliori saranno le prestazioni del sistema. Fa un'enorme differenza nella pratica.


"Nella mia esperienza nelle applicazioni di controllo del motore, il guadagno proporzionale è quello che dovrebbe fare la maggior parte del" lavoro "e l'integratore il" riposo ". Non credo che abbiate bisogno di un termine D." Concordo con quello per la tipica applicazione di controllo del motore. La P fa il lavoro principale e io compenso la deriva / errori a lungo termine. Ma qui, il quadricottero sarà soggetto a molte turbolenze esterne, quindi il termine D è importante per ottenere una risposta rapida. Per quanto riguarda il termine I, a meno che il quad non sia in modalità di navigazione autonoma, non è così cruciale.
dm76,

@ dm76: la maggior parte della mia esperienza riguarda il controllo motorio, e faccio questo disclaimer ;-) La mia intuizione però dice che c'è ancora spazio per me nell'applicazione quadricoptero e penso che se P è molto alto potrebbe occuparsi di disturbi esterni (proprio come lo fa nel controllo del motore). Avrei davvero bisogno di dare un'occhiata più da vicino a quei sistemi per dire qualcosa di preciso sui quadricotteri ... Penso che molto di ciò che dico qui si applichi (specialmente fai la tua sintonizzazione nel dominio della frequenza e hai la risposta ad anello aperto del sistema ).
Guy Sirton,

1
@ dm76: E proprio quella messa a punto PID "regola empirica" ​​porta a prestazioni mediocri nei motori e presumibilmente la stessa nei quadricotteri. A volte un filtro notch ben posizionato può fare un ordine di differenza di grandezza ...
Guy Sirton

0

Ziegler-Nichols è un metodo manuale semplice. Esistono anche metodi più solidi, che di solito si basano su soluzioni matematiche (analitiche, ottimizzazione iterativa, ecc.)

Oltre a ciò, google "auto-tuning PID" per alcune tecniche automatizzate. Il mio preferito è l'applicazione di reti neurali alla sintonizzazione PID.


0

Se si desidera avere un coefficiente PID accurato:

  • Ottieni i dati del tuo attuatore statistico (ovvero collecting input voltages+ encoder pulsesin un tempo const frequentemente ( 0.01sec) per 20secsuna matrice 3x 2000)
  • Ottieni la funzione di trasferimento (TF) dell'attuatore (utilizzando la casella degli strumenti Ident in MATLAB).
  • Infine, usa la toolbox PIDTool in MATLAB e carica la tua funzione di trasformazione.

O in modo rapido e semplice:

Esiste un approccio più rapido chiamato Ziegler – Nichols : inserisci qui la descrizione dell'immagine

E in questa immagine dimostrano gli effetti dei parametri PID :
Effetti dei parametri PID

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.