Come ottimizzare un controller PID su un processo non lineare


9

Ho un processo termico non lineare (la radiazione non lineare diventa sempre più presente man mano che la temperatura aumenta) a cui vorrei sintonizzare un controller PID. Vorrei controllare la temperatura nel modo più preciso possibile.

Ho pianificato di dividere l'intervallo di temperatura in N intervalli pseudo-lineari (da definire) e per ciascuno di questi intervalli di temperatura: montare un modello del primo ordine usando un piccolo gradino di temperatura e calcolare i parametri PID per adattarsi a questo modello. I parametri PID verrebbero automaticamente commutati in base alla temperatura del processo *.

Il mio problema è il seguente: considerare ad esempio il checkpoint a 70 ° C. P watt stanno già scorrendo per raggiungere questa temperatura. Inietterò dP watt per aumentare la temperatura di 1 ° C. Quindi prenderò nota della costante di tempo e il guadagno dello stato stazionario sarà 1 / dP ° C / W. [Per favore, puoi prendere un momento per pensare se è giusto?] Infine, sintonizzerò il PID su quell'impianto per ottenere i parametri per quell'intervallo di temperatura e passare agli altri intervalli.

Ora supponiamo che il processo raggiunga i 70 ° C. I nuovi parametri vengono caricati e il contatore integrale ripristinato. L'errore può essere 1 ° C, ma la potenza richiesta è molto più di quella per raggiungere i 21 ° C, è certo che il controller richiederà meno di P watt. Ciò significa che la temperatura scenderà molto prima che il termine integrale richieda P watt, e solo allora il watt aggiuntivo dP alla fine porterà il processo a 71 ° C (e sicuramente supererà). Più grande è la P rispetto a dP, peggio diventa.

Sembra quasi che i riscaldatori dovrebbero essere pilotati con la somma dell'uscita del controller e la potenza richiesta per rimanere alla "temperatura di riferimento" attuale (ad es. 70 ° C). Ma i controller standard non lo offrono, quindi deve esserci un altro modo.

Cosa mi sto perdendo? Qual è la strada giusta?

*: È efficacemente ottenere la pianificazione .


1
Il controller PID è generalmente destinato a sistemi lineari. È abbastanza robusto da controllare anche alcuni sistemi non lineari attorno ad un punto operativo "quasi lineare". In caso contrario, è possibile utilizzare diverse tecniche per linearizzare la pianta controllata (cercare "linearizzazione del feedback" o introdurre alcuni circuiti interni)
Eugene Sh.

Grazie per il tuo commento. Questo è ciò che sto cercando di ottenere: utilizzare un controller PID in un intervallo di temperature "quasi lineare". Mi sono già guardato intorno con quelle parole chiave ma senza molta fortuna.
user42875

1
Invece di formare più modelli, è possibile alimentare il valore di input attraverso una funzione di "linearizzazione" prima di passarlo al controller PID e addestrarlo in base a quello?
Nick Johnson,

1
Il tuo approccio mi suona bene. Stai andando a regolare il guadagno e la costante di tempo a seconda della temperatura. Dovrai pensare a cosa succede ai punti di crossover. Hai costruito qualcosa che non funziona come vorresti? Un loop di controllo può nascondere molta non linearità. E forse starai bene senza immaginarti.
George Herold,

Perché la radiazione non è lineare? Se il forno perde temperatura, la perdita di potenza è lineare Q = mc * delta_T. Se il tuo sistema sta perdendo, rimangono quasi tutte le costanti, come il tempo morto, il tempo di salita, tranne che il guadagno è ridotto. Potresti semplicemente trasformare la variabile Kp Kp (T_actual) in una funzione lineare di Kp_initial e Kp_final.
Marko Buršič,

Risposte:


11

Come ottimizzare un controller PID su un processo non lineare?

Non Si linearizza il processo, quindi si fa funzionare il controller PID sui valori lineari.

Con "linearizzare il processo", non intendo realmente rendere lineare il processo stesso. Questo di solito non può essere fatto a causa della fisica. Tuttavia, è possibile inserire qualcosa di non lineare tra l'output del controller PID e l'input del processo in modo che l'output PID controlli linearmente il processo dal punto di vista del controller PID.

Tale linearizzatore non deve essere molto preciso poiché si trova all'interno del circuito di feedback. Lo scopo è quello di dare l'apparenza di un guadagno approssimativamente costante attraverso la gamma dinamica di controllo. Un modo semplice e generale è una funzione lineare basata su tabella basata sul pezzo. 16 o 32 segmenti sono in genere sufficienti per qualsiasi cosa tranne processi molto non lineari.

L'esempio peggiore in cui mi sono imbattuto è stato il controllo della corrente attraverso un tubo elettronico cambiando la forza con cui è stato guidato il filamento del catodo. La funzione della temperatura del catodo nella corrente del fascio di elettroni è altamente non lineare e anche il sistema che controlla la corrente del filamento del catodo era in qualche modo non lineare. In questo caso era troppo difficile prevedere tutto questo casino, quindi durante la produzione ho usato una procedura di calibrazione che ha superato i valori di controllo dell'inverter, ho misurato la corrente del fascio per ciascuno, quindi ho calcolato una tabella di ricerca a 32 segmenti. Ha funzionato molto bene e siamo riusciti a mettere a punto il controller PID della corrente del fascio per una buona risposta su tutta la gamma.

Senza una funzione di linearizzazione di fronte al processo, è necessario ottimizzare il controller PID per la stabilità nel punto di guadagno incrementale più alto del processo. Ciò si traduce quindi in un comportamento molto smorzato in altri punti.

aggiunto

Nulla nella tua domanda aggiornata dice nulla sul perché il metodo sopra non sia ancora una buona idea e applicabile. Dici che stai usando un controller analogico. La mia prima reazione è "Gli anni '80 sono ormai lontani, non farlo". Tuttavia, il controller PID e il linearizzatore dell'impianto possono essere indipendenti.

Apparentemente l'ingresso dell'impianto è energia e l'uscita è temperatura. Misurare la temperatura tipica allo stato stazionario a una gamma di livelli di potenza. Da ciò è possibile calcolare la funzione che converte la "potenza" linearizzata nell'effettivo input di potenza dell'impianto. Il controller PID analogico sta presumibilmente emettendo una tensione proporzionale alla potenza. Tutto quello che devi fare è inserire una scatola nera in linea con quella tensione che fa la misura lineare per la conversione del livello di potenza effettiva.

Normalmente lo faresti con un microcontrollore che ha un A / D incorporato. Fare questa ricerca nella tabella e l'interpolazione lineare tra i punti è banale. Quindi emette il risultato in un modo che alla fine viene convertito in una tensione. Poiché l'impianto è lento rispetto a un microcontrollore, questo potrebbe essere facile come filtrare e bufferizzare un'uscita PWM. Oppure potresti guidare direttamente un D / A, anche se in questo caso non sembra necessario.

In linea con il tema degli anni '80 del controller, potresti farlo con A / D, memoria e D / A per un tocco retrò.

In ogni caso, il controller PID ora sta controllando efficacemente un impianto lineare per quanto ne sa, e dovrebbe essere possibile regolarlo su buone prestazioni.

Effettuare una trasformazione lineare a tratti sull'ingresso dell'impianto in un punto è più semplice che modificare 3 valori all'interno del controller PID nell'intervallo di uscita. Il secondo è un problema, mentre il primo affronta direttamente il problema. È anche molto più semplice misurare i dati per la funzione di linearizzazione piuttosto che determinare i guadagni P, I e D in vari punti. Anche se lo hai fatto, hai ancora problemi temporanei, poiché i guadagni giusti non vengono immediatamente applicati alla situazione. Anche in questo caso "guadagno di programmazione" è un kludge.


Molto interessante, grazie per aver presentato l'approccio linearizzatore. Sto usando controller hardware che sono direttamente collegati ai relè, quindi purtroppo devo fare la pianificazione. Il mio approccio all'identificazione è corretto? Sembra che non lo sia.
user42875,

Ho modificato la mia domanda per chiarire il mio problema, in particolare gli ultimi due paragrafi. (fermo, +1)
user42875

Ho chiesto al produttore dei controller se posso inserire una tabella di ricerca con interpolazione lineare prima dell'output - se ciò può essere fatto, sceglierò sicuramente questa opzione anche se ciò significa che dovrò dimenticare il soliti strumenti di ottimizzazione basati sulla funzione di trasferimento e simili. È elegante. In caso contrario, dovrò fare la pianificazione del guadagno molto noiosa, ma a quanto pare non c'è nulla di sbagliato nel mio approccio, che è ciò che volevo controllare.
user42875,

2

Ricorda che quando linearizzi un modello, stai effettivamente assumendo che il modello non lineare y = f (x) sia sostituito con y = A * (x-x0) + B. Nota che x0 è il punto di linearizzazione. Quando si introducono intervalli per x, si finisce con più A, B e x0. In entrambi i casi, l'ingresso al controller sarà l'errore rispetto al punto di linearizzazione corrente. Tuttavia, si compensa ancora il segnale di ingresso (con B), quindi anche se l'errore è 0 rispetto al punto di linearizzazione corrente, si continuerà comunque a trasmettere un segnale.

Nel tuo esempio, quindi, anche se l'errore è 0 gradi (al setpoint di 70 gradi), il controller emetterà comunque una potenza maggiore di 0.


Grazie. Penso che ti piaccia qualcosa, ma non capisco davvero. Detto grossolanamente, sto usando controller PID di base (analogici), di cui posso modificare i termini P, I, D in funzione della temperatura. So che subito settato a 70 ° C, la potenza non sarà zero anche se l'errore è zero. È l'insediamento che mi preoccupa: fondamentalmente sto lasciando cadere il controller a 70 ° C, e poiché è t = 0s per esso, il termine integrale impiegherà un po 'di tempo per iniziare, quindi avrò un terribile calo. Sembra quasi che il mio metodo sia sbagliato.
user42875

(Il controller richiederà pochissima energia all'inizio, al di sotto della potenza richiesta per rimanere a 70 ° C)
user42875

Ho modificato la mia domanda per chiarire, in particolare gli ultimi due paragrafi.
user42875

È difficile dare consigli senza ulteriori dettagli riguardo al tuo processo, ma sembra che tu abbia un sistema abbastanza instabile intorno ai 70 gradi e che intorno a quella temperatura la maggior parte del controllo avvenga a causa della compensazione intragrale (l'I nel PID)?
Pål-Kristian Engstad,

70 ° C è solo un esempio, probabilmente avrò 6 diversi intervalli di temperatura da sintonizzare. Detto molto approssimativamente, sto controllando la temperatura all'interno di un thermos riscaldando la superficie esterna.
user42875,

2

Un approccio al controllo non lineare con i controller PID, un approccio ampiamente utilizzato nell'industria, è chiamato "pianificazione degli utili".

Il problema del controllo non lineare viene suddiviso in una serie di regioni sufficientemente lineari e i parametri appropriati vengono utilizzati per ciascuna regione.


Questo è quello che sto cercando di ottenere, come si può leggere nella mia domanda ("I parametri PID verrebbero automaticamente commutati in base alla temperatura del processo *" "*: è effettivamente Gain Scheduling.")
user42875,
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.