introduzione
In primo luogo, dobbiamo considerare cosa è esattamente questa cosa chiamata risposta all'impulso di un sistema e cosa significa. Questo è un concetto astratto che richiede un po 'di pensiero per visualizzare. Non entrerò in matematica rigorosa. Il mio punto è provare a dare un po 'di intuizione su cosa sia questa cosa, il che porta a come utilizzarla.
Esempio di problema di controllo
Immagina di avere un grosso resistore di potenza con un sensore di temperatura montato su di esso. Tutto inizia a temperatura ambiente. Quando si accende l'alimentazione, si sa che alla fine la temperatura del sensore aumenterà e si stabilizzerà, ma l'equazione esatta sarebbe molto difficile da prevedere. Diciamo che il sistema ha una costante di tempo di circa 1 minuto, sebbene la "costante di tempo" non sia completamente applicabile poiché la temperatura non aumenta in modo esponenziale come in un sistema con un singolo polo, e quindi una singola costante di tempo . Supponiamo che tu voglia controllare la temperatura in modo accurato e farlo cambiare a un nuovo livello e rimanere costantemente significativamente più rapidamente di quello che farebbe se accendessi al livello di potenza appropriato e aspetti.
Fondamentalmente, hai un problema con il sistema di controllo. La risposta ad anello aperto è ragionevolmente ripetibile e c'è da qualche parte un'equazione che la modella abbastanza bene, ma il problema è che ci sono troppi sconosciuti per derivare quell'equazione.
Controllo PID
Un modo classico per risolverlo è con un controller PID. Nel pleistocene, quando questo doveva essere fatto nell'elettronica analogica, le persone si sono fatte intelligenti e hanno escogitato uno schema che funzionava bene con le capacità analogiche a portata di mano. Tale schema era chiamato "PID", per proporzionale , integrale e derivato .
Termine P
Inizi a misurare l'errore. Questa è solo la risposta del sistema misurata (la temperatura segnalata dal sensore nel nostro caso) meno l'ingresso di controllo (l'impostazione della temperatura desiderata). Di solito questi potrebbero essere organizzati per essere disponibili come segnali di tensione, quindi trovare l'errore era solo una differenza analogica, il che è abbastanza facile. Potresti pensare che sia facile. Tutto quello che devi fare è guidare la resistenza con una potenza maggiore maggiore è l'errore. Ciò cercherà automaticamente di renderlo più caldo quando fa troppo freddo e più freddo quando fa troppo caldo. Funziona, sortof. Si noti che questo schema necessita di errori per causare un'uscita di controllo diversa da zero (alimentazione del resistore). In realtà, significa che maggiore è la potenza necessaria, maggiore è l'errore poiché è l'unico modo per ottenere la massima potenza. Ora potresti dire che tutto ciò che devi fare è aumentare il guadagno in modo che l'errore sia accettabile anche a potenza elevata. Dopotutto, questa è praticamente la base per il modo in cui vengono utilizzati gli opamp in molti circuiti. Hai ragione, ma il mondo reale di solito non ti consente di cavartela. Questo può funzionare per alcuni semplici sistemi di controllo, ma quando ci sono tutti i tipi di rughe sottili nella risposta e quando può richiedere un tempo significativo, si finisce con qualcosa che oscilla quando il guadagno è troppo alto. Detto in altro modo, il sistema diventa instabile. ma quando ci sono tutti i tipi di rughe sottili alla risposta e quando può richiedere un tempo significativo, si finisce con qualcosa che oscilla quando il guadagno è troppo alto. Detto in altro modo, il sistema diventa instabile. ma quando ci sono tutti i tipi di rughe sottili alla risposta e quando può richiedere un tempo significativo, si finisce con qualcosa che oscilla quando il guadagno è troppo alto. Detto in altro modo, il sistema diventa instabile.
Ciò che ho descritto sopra era la parte P (proprietaria) del PID. Proprio come è possibile rendere l'uscita proporzionale al segnale di errore, è anche possibile aggiungere termini propri della derivata temporale e integrale dell'errore. Ognuno di questi segnali P, I e D ha il proprio guadagno separato prima di essere sommato per produrre il segnale di uscita di controllo.
Io termine
Il termine I consente all'errore di annullarsi nel tempo. Finché si verifica un errore positivo, il termine I continuerà ad accumularsi, aumentando infine l'uscita di controllo al punto in cui l'errore complessivo scompare. Nel nostro esempio, se la temperatura è costantemente bassa, aumenterà costantemente la potenza nel resistore fino a quando la temperatura di uscita non sarà finalmente più bassa. Spero che tu possa vedere che questo può diventare instabile ancora più velocemente di quanto possa fare un termine alto. Il termine AI di per sé può facilmente causare overshoots, che diventano facilmente oscillazioni.
Termine D.
Il termine D è talvolta escluso. L'uso di base del termine D è quello di aggiungere un po 'di stabilità in modo che i termini P e I possano essere più aggressivi. Il termine D in sostanza dice che se sto già andando nella giusta direzione, spegni un po 'il gas poiché quello che ho ora sembra ci sta portando lì .
Ottimizzazione del PID
Le basi del controllo PID sono piuttosto semplici, ma ottenere i termini P, I e D non è giusto. Questo di solito viene fatto con molta sperimentazione e ottimizzazione. L'obiettivo finale è quello di ottenere un sistema globale in cui l'output risponda il più rapidamente possibile ma senza eccessivo superamento o squillo, e ovviamente deve essere stabile (non iniziare a oscillare da solo). Sono stati scritti molti libri sul controllo PID, su come aggiungere piccole rughe alle equazioni, ma in particolare su come "ottimizzarle". L'accordatura si riferisce alla divinazione dei guadagni P, I e D ottimali.
I sistemi di controllo PID funzionano e c'è sicuramente molta conoscenza e trucchi là fuori per farli funzionare bene. Tuttavia, il controllo PID non è l'unica risposta corretta per un sistema di controllo. Le persone sembrano aver dimenticato perché il PID è stato scelto in primo luogo, che aveva più a che fare con i contorni dell'elettronica analogica che non come una sorta di schema di controllo ottimale universale. Purtroppo oggi troppi ingegneri identificano il "sistema di controllo" con il PID, che non è altro che una reazione istintiva al ginocchio. Ciò non rende sbagliato il controllo PID nel mondo di oggi, ma solo uno dei molti modi per attaccare un problema di controllo.
Oltre PID
Oggi, in un microcontrollore verrebbe realizzato un sistema di controllo a circuito chiuso per qualcosa come l'esempio di temperatura. Questi possono fare molte più cose oltre a prendere la derivata e l'integrale di un valore di errore. In un processore puoi fare divisioni, radici quadrate, tenere una cronologia di valori recenti e molto altro. Sono possibili molti schemi di controllo diversi dal PID.
Risposta impulsiva
Quindi dimentica le limitazioni dell'elettronica analogica e fai un passo indietro e pensa a come potremmo controllare un sistema che ritorna ai primi principi. E se per ogni piccolo output di controllo sapessimo cosa avrebbe fatto il sistema. L'uscita di controllo continuo è quindi solo la somma di molti piccoli pezzi. Dato che sappiamo qual è il risultato di ciascun pezzo, possiamo sapere qual è il risultato di qualsiasi storia precedente delle uscite di controllo. Si noti ora che "un piccolo pezzo" dell'uscita di controllo si adatta perfettamente al controllo digitale. Stai per calcolare quale dovrebbe essere l'uscita di controllo e impostarla su quella, quindi tornare indietro e misurare di nuovo gli ingressi, calcolare la nuova uscita di controllo da quelli e impostarla di nuovo, ecc. Stai eseguendo l'algoritmo di controllo in un ciclo, e misura gli ingressi e imposta nuovamente l'uscita di controllo ad ogni iterazione di loop. Gli ingressi vengono "campionati" in momenti discreti e anche l'uscita viene impostata su nuovi valori a intervalli fissi. Finché puoi farlo abbastanza velocemente, puoi pensare che ciò accada in un processo continuo. Nel caso di un riscaldamento della resistenza che normalmente richiede alcuni minuti per stabilizzarsi, sicuramente più volte al secondo è molto più veloce di quanto il sistema risponda intrinsecamente in modo significativo che l'aggiornamento dell'uscita a 4 Hz sembrerà continuo al sistema. Questo è esattamente lo stesso della musica registrata digitalmente che cambia il valore di uscita in passi discreti nell'intervallo 40-50 kHz e che è così veloce che le nostre orecchie non riescono a sentirlo e sembra continuo come l'originale. puoi pensare che questo accada in un processo continuo. Nel caso di un riscaldamento della resistenza che normalmente richiede alcuni minuti per stabilizzarsi, sicuramente più volte al secondo è molto più veloce di quanto il sistema risponda intrinsecamente in modo significativo che l'aggiornamento dell'uscita a 4 Hz sembrerà continuo al sistema. Questo è esattamente lo stesso della musica registrata digitalmente che cambia il valore di uscita in passi discreti nell'intervallo 40-50 kHz e che è così veloce che le nostre orecchie non riescono a sentirlo e sembra continuo come l'originale. puoi pensare che questo accada in un processo continuo. Nel caso di un riscaldamento della resistenza che normalmente richiede alcuni minuti per stabilizzarsi, sicuramente più volte al secondo è molto più veloce di quanto il sistema risponda intrinsecamente in modo significativo che l'aggiornamento dell'uscita a 4 Hz sembrerà continuo al sistema. Questo è esattamente lo stesso della musica registrata digitalmente che cambia il valore di uscita in passi discreti nell'intervallo 40-50 kHz e che è così veloce che le nostre orecchie non riescono a sentirlo e sembra continuo come l'originale. sicuramente più volte al secondo è molto più veloce di quanto il sistema risponda intrinsecamente in modo significativo che l'aggiornamento dell'uscita a 4 Hz sembrerà continuo al sistema. Questo è esattamente lo stesso della musica registrata digitalmente che cambia il valore di uscita in passi discreti nell'intervallo 40-50 kHz e che è così veloce che le nostre orecchie non riescono a sentirlo e sembra continuo come l'originale. sicuramente più volte al secondo è molto più veloce di quanto il sistema risponda intrinsecamente in modo significativo che l'aggiornamento dell'uscita a 4 Hz sembrerà continuo al sistema. Questo è esattamente lo stesso della musica registrata digitalmente che cambia il valore di uscita in passi discreti nell'intervallo 40-50 kHz e che è così veloce che le nostre orecchie non riescono a sentirlo e sembra continuo come l'originale.
Quindi cosa potremmo fare se avessimo questo modo magico di sapere cosa farà il sistema nel tempo a causa di un campione di output di controllo? Poiché la risposta di controllo effettiva è solo una sequenza di campioni, possiamo sommare la risposta da tutti i campioni e sapere quale sarà la risposta del sistema risultante. In altre parole, possiamo prevedere la risposta del sistema per qualsiasi forma d'onda di risposta di controllo arbitraria.
È fantastico, ma semplicemente prevedere la risposta del sistema non risolve il problema. Tuttavia, e qui è il momento, è possibile capovolgere e trovare l'output di controllo che sarebbe stato necessario per ottenere qualsiasi risposta di sistema desiderata. Si noti che sta risolvendo esattamente il problema del controllo, ma solo se possiamo in qualche modo conoscere la risposta del sistema a un singolo campione di output di controllo arbitrario.
Quindi probabilmente stai pensando, è facile, basta dare un impulso grande e vedere cosa fa. Sì, funzionerebbe in teoria, ma in pratica di solito no. Questo perché ogni campione di controllo, anche di grandi dimensioni, è così piccolo nello schema generale delle cose che il sistema ha a malapena una risposta misurabile. E ricorda, ogni campione di controllo deve essere piccolo nello schema delle cose in modo tale che la sequenza dei campioni di controllo sia continua al sistema. Quindi non è che questa idea non funzionerà, ma che in pratica la risposta del sistema è così piccola da essere sepolta nel rumore di misurazione. Nell'esempio del resistore, colpire il resistore con 100 W per 100 ms non causerà abbastanza cambiamenti di temperatura da misurare.
Risposta passo
Ma c'è ancora un modo. Mentre mettere un singolo campione di controllo nel sistema ci avrebbe dato la sua risposta ai singoli campioni direttamente, possiamo ancora dedurlo inserendo una sequenza nota e controllata di risposte di controllo nel sistema e misurando la sua risposta a quelle. Di solito questo viene fatto mettendo una fase di controlloin. Ciò che vogliamo veramente è la risposta a un piccolo blip, ma la risposta a un singolo passo è solo l'integrale di quello. Nell'esempio del resistore, possiamo assicurarci che tutto sia stabile a 0 W, quindi accendere improvvisamente l'alimentazione e inserire 10 W nel resistore. Ciò causerà eventualmente un cambiamento di temperatura ben misurabile sull'uscita. La derivata di ciò con il giusto ridimensionamento ci dice la risposta a un singolo campione di controllo, anche se non siamo riusciti a misurarlo direttamente.
Quindi, per riassumere, possiamo inserire un input di controllo step in un sistema sconosciuto e misurare l'output risultante. Questa è chiamata la risposta al passaggio . Quindi prendiamo il tempo derivato da quello, che è chiamato la risposta all'impulso . L'output del sistema risultante da qualsiasi campione di input di controllo è semplicemente la risposta all'impulso opportunamente ridimensionata in base alla forza di quel campione di controllo. La risposta del sistema a un'intera storia di campioni di controllo è tutta una serie di risposte all'impulso sommate, ridimensionate e inclinate in tempo per ciascun ingresso di controllo. L'ultima operazione arriva molto e ha il nome speciale di convoluzione .
Controllo della convoluzione
Quindi ora dovresti essere in grado di immaginare che per qualsiasi set desiderato di uscite di sistema, puoi inventare la sequenza di ingressi di controllo per causare quell'uscita. Tuttavia, c'è un gotcha. Se diventi troppo aggressivo con ciò che desideri fuori dal sistema, gli input di controllo da raggiungere richiederanno irrealizzabili con valori alti e bassi. Fondamentalmente, più velocemente ti aspetti che il sistema risponda, più grandi devono essere i valori di controllo, in entrambe le direzioni. Nell'esempio del resistore, puoi matematicamente dire che vuoi che passi immediatamente a una nuova temperatura, ma ciò richiederebbe un segnale di controllo infinito per raggiungere. Più lentamente si consente alla temperatura di cambiare al nuovo valore, minore è la potenza massima necessaria per poter scaricare nel resistore. Un'altra ruga è che a volte anche il potere nel resistore dovrà diminuire. Puoi'
Un modo per far fronte a questo è che il sistema di controllo passa il filtro passa-basso all'ingresso del controllo utente prima di utilizzarlo internamente. Figura utenti fanno quello che gli utenti vogliono fare. Lascia che sbattano rapidamente l'input. Internamente filtri passa-basso che per lisciarlo e rallentarlo al più veloce che sai di poter realizzare data la potenza massima e minima che puoi mettere nel resistore.
Esempio del mondo reale
Ecco un esempio parziale di utilizzo dei dati del mondo reale. Questo da un sistema incorporato in un prodotto reale che tra l'altro deve controllare una dozzina di riscaldatori per mantenere vari serbatoi chimici a temperature specifiche. In questo caso, il cliente ha scelto di eseguire il controllo PID (è quello con cui si sentiva a proprio agio), ma il sistema stesso esiste ancora e può essere misurato. Ecco i dati grezzi dalla guida di uno dei riscaldatori con un input graduale. Il tempo di iterazione del loop è stato di 500 ms, il che è chiaramente un tempo molto breve considerando che il sistema si sta ancora visibilmente stabilizzando su questo grafico di scala dopo 2 ore.
In questo caso puoi vedere che il riscaldatore è stato guidato con un passo di circa 0,35 dimensioni (il valore "Out"). Mettere un passo 1.0 completo per molto tempo avrebbe provocato una temperatura troppo alta. L'offset iniziale può essere rimosso e il risultato ridimensionato per tenere conto del piccolo passo di input per inferire la risposta del passo unitario:
Da questo penseresti che sarebbe solo sottrarre i valori di risposta del gradino successivi per ottenere la risposta all'impulso. In teoria è corretto, ma in pratica si ottiene principalmente il rumore di misurazione e quantizzazione poiché il sistema cambia così poco in 500 ms:
Nota anche la piccola scala dei valori. La risposta all'impulso è mostrata in scala di 10 6 .
Chiaramente grandi variazioni tra singole o anche poche letture sono solo rumore, quindi possiamo passare il filtro passa basso per eliminare le alte frequenze (il rumore casuale), che speriamo ci faccia vedere la risposta sottostante più lenta. Ecco un tentativo:
È meglio e mostra che ci sono davvero dati significativi da avere, ma ancora troppo rumore. Ecco un risultato più utile ottenuto con un filtro passa-basso più basso dei dati di impulso grezzi:
Questo è qualcosa con cui possiamo davvero lavorare. Il rumore rimanente è piccolo rispetto al segnale complessivo, quindi non dovrebbe interferire. Il segnale sembra essere ancora lì praticamente intatto. Un modo per vedere questo è notare che il picco di 240 è circa da un rapido controllo visivo e dal filtro oculare che filtra la trama precedente.
Quindi ora fermati e pensa a cosa significa effettivamente questa risposta all'impulso. Innanzitutto, si noti che viene visualizzato volte 1M, quindi il picco è davvero 0.000240 di fondo scala. Ciò significa che, in teoria, se il sistema fosse guidato con un singolo impulso di fondo scala solo per una delle fasce orarie di 500 ms, questa sarebbe la temperatura risultante rispetto a quella lasciata sola. Il contributo di ogni periodo di 500 ms è molto piccolo, come ha senso intuitivamente. Questo è anche il motivo per cui la misurazione diretta della risposta all'impulso non funziona, poiché 0.000240 di fondo scala (circa 1 parte su 4000) è al di sotto del nostro livello di rumore.
Ora puoi facilmente calcolare la risposta del sistema per qualsiasi segnale di ingresso di controllo. Per ogni campione di output di controllo da 500 ms, aggiungere una di queste risposte all'impulso ridimensionate in base alla dimensione del campione di controllo. Il tempo 0 di quel contributo di risposta all'impulso al segnale di uscita finale del sistema è al momento del suo campione di controllo. Pertanto, il segnale di uscita del sistema è una successione di queste risposte all'impulso compensate di 500 ms l'una dall'altra, ciascuna ridimensionata al livello del campione di controllo in quel momento.
La risposta del sistema è la convoluzione dell'ingresso di controllo con questa risposta all'impulso, calcolata ogni campione di controllo, che in questo esempio è ogni 500 ms. Per farne un sistema di controllo, lo si lavora all'indietro per determinare l'ingresso di controllo che produce l'output di sistema desiderato.
Questa risposta all'impulso è ancora abbastanza utile anche se si desidera eseguire un controller PID classico. L'ottimizzazione di un controller PID richiede molta sperimentazione. Ogni iterazione richiederebbe un'ora o due sul sistema reale, il che renderebbe molto lenta la messa a punto iterativa. Con la risposta all'impulso, è possibile simulare la risposta del sistema su un computer in una frazione di secondo. Ora puoi provare nuovi valori PID più velocemente che puoi modificarli e non devi aspettare un'ora o due affinché il sistema reale ti mostri la sua risposta. Ovviamente i valori finali dovrebbero sempre essere controllati sul sistema reale, ma la maggior parte del lavoro può essere eseguita con la simulazione in una frazione del tempo. Questo è ciò che intendevo con "Puoi usarlo come base di simulazione per trovare i parametri per il controllo PID vecchio stile" nel passaggio che hai citato nella tua domanda.