Ottimizzare i guadagni dei controller può essere difficile, quali strategie generali funzionano bene per ottenere un sistema stabile che converge alla giusta soluzione?
Ottimizzare i guadagni dei controller può essere difficile, quali strategie generali funzionano bene per ottenere un sistema stabile che converge alla giusta soluzione?
Risposte:
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:
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.
Un metodo sperimentale simile alla risposta di hauptmech che mi è stato insegnato al college:
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.
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.
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.
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.
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.
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 :)
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.
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.01sec
) per 20secs
una matrice 3
x 2000
)Esiste un approccio più rapido chiamato Ziegler – Nichols :
E in questa immagine dimostrano gli effetti dei parametri PID :