Qual è il vantaggio di un'implementazione PID derivata dalla trasformazione Z?


29

Ho visto molti articoli PID, come questo , usare una trasformata Z dell'equazione PID generica per ricavare un'equazione di differenza folle che può quindi essere implementata nel software (o in questo caso un FPGA). La mia domanda è: qual è il vantaggio di tale implementazione rispetto al PID tradizionale e molto più intuitivo senza un dottorato di ricercatipo di implementazione? Il secondo sembra più facile da capire e implementare. Il termine P è una moltiplicazione diretta, l'integrale utilizza una somma corrente e la derivata viene stimata sottraendo il campione precedente dal campione corrente. Se è necessario aggiungere una funzionalità come la protezione Integral Windup, è un'algebra diretta. Cercare di aggiungere la protezione Integral Windup o altre funzionalità a un algoritmo del tipo di differenza, come quello sopra riportato, sembra che sarebbe molto più complicato. C'è qualche motivo per usare una simile implementazione, oltre al tipo "Sono un brutto culo a cui piace fare trasformazioni Z per divertimento" che si accompagna con esso?

EDIT: il PID senza un articolo PHD che ho collegato è un esempio dell'implementazione più semplice che utilizza una somma corrente per il termine integrale e la differenza tra campioni consecutivi per il termine derivato. Può essere implementato con la matematica a punto fisso in modo deterministico e può includere nel calcolo informazioni costanti in tempo reale, se lo si desidera. In pratica sto cercando un vantaggio pratico per il metodo di trasformazione Z. Non riesco a vedere come potrebbe essere più veloce o utilizzare meno risorse. Invece di mantenere una somma parziale dell'integrale, il metodo Z sembra utilizzare l'output precedente e sottrarre i componenti P e D precedenti (per arrivare alla somma integrale mediante calcolo). Quindi, a meno che qualcuno non possa indicare qualcosa che mi manca, accetterò il commento di AngryEE che sono essenzialmente gli stessi.

MODIFICA FINALE: grazie per le risposte. Penso di aver imparato un po 'su ciascuno, ma alla fine, penso che Angry abbia ragione in quanto è solo una questione di preferenza. Le due forme:

e(k-2)=e(k-1),

u(k)=u(k1)+Kp(e(k)e(k1)+KiTie(k)+KdTi(e(k)2e(k1)+e(k2))
u ( k - 1 ) = u ( k )
e(k2)=e(k1),e(k1)=e(k)
u(k1)=u(k)

o

sum=sum+e(k)
u(k)=Kpe(k)+KiTisum+KdTi(e(k)e(k1))
e(k1)=e(k)

valuterà essenzialmente la stessa cosa. Alcuni menzionano il primo che può essere implementato in un DSP o FPGA più velocemente, ma non lo compro. Entrambi potrebbero essere vettorializzati. Il primo richiede due operazioni di post, il secondo richiede un'operazione di pre e una di post, quindi sembra uniformarsi. Il primo richiede anche 1 ulteriore moltiplicazione nel calcolo effettivo.


Intendevi "Equazione differenziale"?
Kevin Vermeer,

Devo aver frainteso i tuoi commenti, basandomi almeno su questo feedback. Rimuoverò il mio commento!
Kortuk,

1
Passare a dsp.stackexchange.com
Jason S

Risposte:


7

Ti stai confondendo tutta la fantasia della trasformata Z. I due approcci sono fondamentalmente gli stessi: il PID senza approccio PHD ha solo un numero minore di sottoscrizioni. Eseguono la stessa funzione di base e usano la stessa matematica di base.

L'unica grande differenza tra i due che posso vedere è che il PID senza PHD non tiene conto del tempo di campionamento. Per fare qualcosa che potrebbe essere instabile, il tempo di campionamento è una considerazione molto importante. Il vantaggio dell'approccio con trasformata Z in questo caso è che non è possibile utilizzarlo senza tenere conto del tempo di campionamento: ti obbliga a mostrare il tuo lavoro e ti aiuta a progettare un sistema più stabile.

Sembra anche che il case study che hai trovato implementando l'approccio con trasformata Z sia stato progettato per essere altamente deterministico. Questo spiega il loro uso di FPGA: i calcoli impiegheranno sempre lo stesso tempo. Il PID senza implementazione del PHD non è decisamente deterministico. L'uso di raddoppia come variabili invece di un'implementazione a virgola fissa sicuramente causerà un comportamento non deterministico su qualsiasi microcontrollore senza un'unità a virgola mobile (e probabilmente anche su UC con una FPU). Il caso di studio sta lavorando su un livello completamente diverso di complessità rispetto all'approccio PID senza PHD.

Quindi, fondamentalmente, l'approccio matematico e di controllo è lo stesso, ma l'approccio caso di studio / trasformazione Z è più rigoroso e teoricamente fondato. L'approccio PID senza PHD funzionerà solo con sistemi molto semplici, non critici per il tempo e relativamente stabili.


Il PID senza un articolo PHD è solo un esempio dell'implementazione più semplice, che utilizza una somma parziale per l'integrale e la differenza tra campioni consecutivi per la derivata. L'articolo afferma che il tempo di campionamento dovrebbe essere coerente. Il tempo di campionamento potrebbe essere facilmente aggiunto ai calcoli I e D, ma nella maggior parte dei casi non viene eseguito nel calcolo effettivo. La GUI del controller (o altra interfaccia) presenterà i termini I e D all'utente in termini di secondi in base al tempo di loop.
BT2

@ bt2 sembra che tu abbia un caso molto specifico in cui il PID con PhD è l'approccio migliore. La maggior parte dei sistemi non mostra in alcun modo i termini I e D. È il risultato del controller PID che ha alcune modifiche sul sistema nel suo insieme che viene quindi ricollegato su se stesso. Se stai solo visualizzando un utente, non c'è davvero alcun motivo di preoccuparsi della stabilità.
Kellenjb,

"L'approccio PID senza PHD funzionerà solo in modo molto semplice" - Non sono d'accordo. Puoi sicuramente ottimizzare i sistemi di controllo digitale usando l'analisi della trasformata Z, ma il rovescio della medaglia è che puoi rimanere coinvolto nella modellazione del tuo sistema in modo così preciso da perdere la foresta per gli alberi.
Jason S,

10

Il metodo di trasformazione Z per progettare il controller PID alla fine porterà a un'implementazione molto più efficiente. Questo è fondamentale se si sta progettando il più piccolo FPGA / DSP / Microcontroller per la propria applicazione.

Il "PID senza PHD" menzionato è probabilmente l'approccio più semplice per implementare un controllo PID nel software, ma diventa ingombrante a frequenze di campionamento più elevate.

Inoltre, la trasformata Z si presta meglio alla progettazione in un dominio discreto (digitale). Il tradizionale metodo di progettazione (trasformata di Laplace) è più per il tempo continuo. Esistono diversi modi per la conversione tra i due (Zero-Order Hold, Linear Interpolazione, Pole Placement, Bilinear / Tustin), ognuno presenta i suoi punti di forza e i suoi svantaggi in termini di stabilità e risposta del sistema. In genere è più semplice eseguire l'intero progetto nel dominio discreto.

Per farla breve, se si utilizza un sistema relativamente "lento" (tutti i comportamenti principali si verificano in modo significativo a circa 100 kHz o giù di lì), allora il primo progetto probabilmente va bene. Puoi implementarlo su un microcontrollore o un PC ed essere fatto con esso. Man mano che i sistemi diventano più veloci, potrebbe essere necessario utilizzare il metodo di trasformazione Z per ottenere le velocità di cui hai bisogno (l'articolo menziona 9.5MHz, supponendo che tu abbia A / D e DAC in grado di tenere il passo).


1
Stesso numero di operazioni matematiche, diversa rappresentazione dei numeri. I doppi sono una rappresentazione dei numeri molto più complessa rispetto al metodo a virgola fissa utilizzato nel caso di studio. Meno complesso significa meno operazioni (sul silicio).
AngryEE,

2
@ bt2, direi più efficiente, nel senso che i chip DSP sono impostati per i set di istruzioni SIMD (Single Instruction, Multiple Data). Mentre è lo stesso numero di operazioni matematiche, la trasformazione Z consente di eseguire tutti i moltiplicazioni in un ciclo di istruzioni, quindi sommare tutti gli elementi del vettore risultante in un ciclo (dipendente dalla piattaforma). Quindi, mentre la matematica è la stessa, la complessità del tempo è significativamente inferiore, producendo accelerazioni più elevate.
mjcarroll,

1
@ bt2 la forma z si presta all'implementazione come equazione di differenza, che dipende solo dagli output passati e dall'input corrente, senza richiedere una somma corrente che a un certo punto traboccerà (o underflow). I DSP sono progettati per consentire un'attuazione efficiente dei filtri digitali mediante l'approccio dell'equazione delle differenze. Vedi en.wikipedia.org/wiki/Digital_filter esp. forme dirette - questo è ciò per cui i DSP sono ottimizzati.
freespace il

1
Penso che ti manchi qualcosa. La somma corrente non potrà mai traboccare in circostanze normali. I filtri IIR non saranno sempre saturi e, nel caso di un controllo PID, ciò non avverrà normalmente. Dire che lo farà con un algoritmo ma non con un altro è falso. Anche la somma corrente si basa sugli output precedenti. Se uno causa uno straripamento, lo faranno entrambi. Pensala in questo modo, il 2 ° impianto È il primo, con alcuni calcoli matematici presi in considerazione ... u (k-1) - kp (e (k-1) - kd / Ti (e (k-1) - e ( k-2) == (somma corrente).
bt2

1
-1: le trasformazioni Z non offrono un'implementazione più efficiente. Infatti, se si confronta un filtro passa basso a 1 polo con il metodo digitale "ingenuo" con un filtro passa basso a 1 polo con la trasformazione bilineare, con questo approccio si otterrà un'implementazione leggermente meno efficiente. Indipendentemente dalla derivazione del filtro, lo stesso numero di variabili di stato = circa la stessa efficienza di implementazione. In gran parte si tratta di una quantità indipendente dal modo in cui è stato progettato il filtro.
Jason S,

5

Ecco l'affare, nella mia esperienza:

  • Le trasformazioni Z aiutano per alcune analisi: la teoria dei sistemi campionati a tempo discreto è modellata al meglio tramite trasformazioni Z.
  • La progettazione di controller PID o filtri passa-basso può essere effettuata sia tramite trasformazioni Z sia mediante analisi classica, con una delle diverse approssimazioni utilizzate per trasformare derivate / integrali da tempo continuo a tempo discreto. Se i tuoi poli e zeri sono a basse frequenze rispetto alla frequenza di campionamento, non importa. Attenersi a qualsiasi approccio con cui ti senti più sicuro.
  • La derivazione della trasformata Z di filtri e controller spesso oscura il significato fisico dei parametri di tali filtri e controller. Se ho un loop PID con un guadagno integrale, un guadagno proporzionale e un guadagno differenziale, so cosa fa direttamente ciascuno di quei parametri. Se uso trasformazioni Z, sono solo numeri che ho dovuto derivare in qualche modo.
  • L'implementazione di filtri e controller può oscurare o meno il significato fisico dei parametri di tali filtri e controller. Questa qualità è in gran parte indipendente dal punto precedente: se ho un design basato sulla trasformata Z, posso convertirlo in un'implementazione dall'aspetto classico e viceversa. Il tuo esempio in FINAL EDIT è valido perché la seconda implementazione mantiene l'integratore (" sum") separato nella sua variabile di stato. Quella variabile di stato ha un significato. La prima implementazione mantiene la variabile di stato come cronologia passata dell'errore; questo ha significato, ma a mio avviso fornisce meno informazioni.

Infine ci sono altri problemi che coinvolgono la non linearità o l'analisi che spesso ti fanno scegliere un'implementazione piuttosto che un'altra (per me è sempre l'approccio classico per i controller, per i filtri FIR è la trasformata Z, e per i filtri IIR a 1 o 2 poli di solito è il approccio classico):

  • Per i controller, tengo sempre un integratore come variabile di stato, piuttosto che esempi di errori passati. Il motivo è che i sistemi reali spesso richiedono l'anti-windup in cui è necessario bloccare l'integrale perché diventi troppo positivo o troppo negativo. (E se stai implementando in virgola fissa, devi farlo comunque, perché la condizione avvolgente quando colpisci l'overflow farà cose cattive al comportamento del tuo circuito di controllo)

  • Per lo stesso motivo, calcolo sempre l'integratore in un modo riferito all'output: ad es . sum += Ki*error; out = stuff + sumAnziché sum += error; out = stuff + Ki*sum. Con il secondo approccio, se si modifica il guadagno Ki, questo consente di ridimensionare l'effetto dell'integratore sull'output su e giù, che probabilmente non è quello che si desidera e il limite cambia in base al guadagno. Se moltiplichi l'errore per Ki prima dell'integrazione, le tue unità dell'integratore sono le stesse unità dell'uscita del circuito di controllo e ha un significato fisico più evidente.

(aggiornamento: ho scritto un post sul blog su questo argomento in modo più dettagliato.)


4

Modifica :

L'uso della trasformata Z semplifica la combinazione e la semplificazione dei sistemi LTI per l' analisi . Ad esempio, una serie in cascata di k sistemi LTI con funzioni di trasferimento H1, H2, ..., Hk si combinerà come un semplice prodotto H = H1*H2*...*Hk. Inoltre, la funzione di trasferimento di un loop di feedback negativo è T = G/(1 + G*H), dove H si trova sul percorso di feedback. Una volta che hai una funzione di trasferimento generale, puoi analizzare la stabilità (posizione dei poli) e le prestazioni (transitori, errore di stato stazionario), aggiungendo filtri e feedback aggiuntivi per ottimizzare il design.

Per sottosistemi di ordine superiore, è possibile partizionare la funzione di sistema e implementarla come una serie di biquad in cascata (cioè da coppie di zeri e poli, come coniugati complessi o radici ripetute), che diminuisce l'instabilità causata dalla quantizzazione. Un biquad di forma canonica:

sezione biquad


La tua risposta sembra impressionante, ma non ho praticamente idea di quello che hai detto. Cos'è la stabilità della quantizzazione, per esempio, e in che modo è superiore per una forma dell'equazione rispetto all'altra?
BT2

1
La funzione di trasferimento H (z) è una funzione razionale B (z) / A (z). Ogni polinomio in z è un fattore di N zeri per un sistema di ennesimo ordine. Gli zeri di A (z), quelli nel denominatore, sono chiamati poli (questo è il percorso di feedback). Per un fattore di ridimensionamento costante, un sistema Linear Time Invariant (LTI) è descritto dai suoi zeri e poli.
Eryk Sun,

1
Un sistema LTI a tempo discreto è stabile se tutti i suoi poli si trovano all'interno del cerchio dell'unità sul piano z. Ma la quantizzazione con precisione digitale finita introduce rumore che può far sì che un sistema sia marginalmente stabile, instabile o scivoli nell'instabilità nel tempo. Inserendo H (z) in un prodotto biquadratics (biquads), questo tipo di errore viene minimizzato.
Eryk Sun,

2
Un biquad è la partizione minima preferita poiché gli zeri di un polinomio con coefficienti reali sono reali o in coppie di coniugati complessi. Il biquad B (z) / A (z) è (b0 + b1z ^ -1 + b2z ^ -2) / (a0 + a1z ^ -1 + a2z ^ -2).
Eryk Sun,

Ho aggiunto e quindi rimosso un esempio per il rumore di quantizzazione confrontando un quadratico in cascata con un poli diretto del 4 ° ordine. Ma era troppo. Ho bisogno di dormire un po '. Scusa, Tyblu.
Eryk Sun,

3

La parte difficile di un controller PID non è il codice stesso. I problemi si presentano effettivamente quando si tenta di ottimizzare il controller. Sicuramente puoi fare prove ed errori e ottenere un controller abbastanza decente, ma alcuni sistemi sono troppo complessi per essere facili da eseguire con un metodo di prova ed errore. Questi stessi sistemi tendono ad essere quelli che hanno bisogno di un controller molto buono anziché solo decente. In questo caso la trasformazione Z è molto più facile da analizzare.

Un'altra cosa a cui pensare è la stabilità di un sistema. Potresti avere a che fare con un sistema che è piuttosto difficile diventare instabile, o anche se lo fa non danneggia nulla. Ma ci sono molti sistemi che possono avere risultati catastrofici se il controller lo rende instabile. La trasformata Z è un altro luogo in cui è molto più facile identificare se ci saranno problemi.

E 1 nota finale. Quando si analizza un sistema nel suo complesso, è necessario ottenere equazioni per tutti i componenti del sistema. Sicuramente puoi ottenerlo dal PID senza un dottorato, ma se hai già lavorato con esso nel metodo di trasformazione Z c'è molto meno lavoro avanti e indietro che devi fare.

Ora, come preferenza personale, utilizzo sempre il metodo PID senza metodo di dottorato. Questo è solo perché sto usando microcontroller con sistemi che non dipendono in modo terribile dal controller.


2

Esistono diversi punti per cui la forma di trasformazione Z ha una maggiore utilità.

Chiedi a chiunque promuova l'approccio basato sul tempo / semplice / sans-PHD a cosa ha impostato il termine Kd. Probabilmente risponderanno a "zero" e probabilmente diranno che D è instabile (senza filtro passa basso). Prima di sapere come tutto questo si riuniva, avrei detto e detto cose del genere.

L'ottimizzazione di Kd è difficile nel dominio del tempo. Quando puoi vedere la funzione di trasferimento (la trasformata Z del sottosistema PID) puoi facilmente vedere quanto sia stabile. Inoltre, puoi facilmente vedere come il termine D influisce sul controller rispetto agli altri parametri. Se il parametro Kd contribuisce con 0,00001 ai coefficienti polinomiali z ma il termine Ki sta inserendo 10,5, il termine D è troppo piccolo per avere un effetto reale sul sistema. Puoi anche vedere l'equilibrio tra i termini Kp & Ki.

I DSP sono progettati per calcolare equazioni alle differenze finite (FDE). Hanno codici op che moltiplicheranno un coefficiente, sommeranno ad un accumulatore e sposteranno un valore in un buffer in un ciclo di istruzioni. Questo sfrutta la natura parallela di FDE. Se la macchina non ha questo codice operativo ... non è un DSP. I PowerPC (MPC) incorporati hanno una periferica dedicata al calcolo degli FDE (la chiamano unità di decimazione). I DSP sono progettati per calcolare gli FDE perché è banale trasformare una funzione di trasferimento in un FDE. 16 bit non è abbastanza gamma dinamica per quantificare facilmente i coefficienti. Molti dei primi DSP in realtà avevano parole a 24 bit per questo motivo (credo che le parole a 32 bit siano comuni oggi).

IIRC, la cosiddetta trasformata bilineare assume una funzione di trasferimento (una trasformata z di un controller di dominio del tempo) e la trasforma in un FDE. Dimostrarlo è 'difficile', usarlo per ottenere un risultato è banale: hai solo bisogno della forma espansa (moltiplica tutto) e i coefficienti polinomiali sono i coefficienti FDE.

Un controller PI non è un ottimo approccio: un approccio migliore è quello di costruire un modello di come si comporta il sistema e utilizzare PID per la correzione degli errori. Il modello dovrebbe essere semplice e basato sulla fisica di base di ciò che stai facendo. Questo è il feed-forward nel blocco di controllo. Un blocco PID corregge quindi l'errore utilizzando il feedback dal sistema sotto controllo.

Se si utilizzano valori normalizzati, [-1 .. 1] o [0 ... 1], per setpoint (riferimento), feedback e feed-forward, è possibile implementare un algoritmo a 2 poli 2-zero in gruppo DSP ottimizzato e puoi utilizzarlo per implementare qualsiasi filtro del 2 ° ordine che includa PID e il filtro passa-basso (o passa-alto) più elementare. Questo è il motivo per cui i DSP hanno codici op che presumono valori normalizzati, ad esempio uno che produrrà una stima dello squareroot inverso per l'intervallo (0..1] È possibile inserire due filtri 2p2z in serie e creare un filtro 4p4z, questo consente per sfruttare il tuo codice DSP 2p2z per, ad esempio, implementare un filtro Butterworth passa basso a 4 tocchi.

La maggior parte dell'implementazione nel dominio del tempo inserisce il termine dt nei parametri PID (Kp / Ki / Kd). La maggior parte delle implementazioni del dominio z no. dt viene inserito nelle equazioni che prendono Kp, Ki e Kd e le trasformano in coefficienti [] & b [] in modo che la calibrazione (tuning) del controller PID sia ora indipendente dalla velocità di controllo. Puoi farlo funzionare dieci volte più veloce, avviare la matematica a [] & b [] e il controller PID avrà prestazioni costanti.

Un risultato naturale dell'utilizzo di FDE è che l'algoritmo è implicitamente "glitchless". Puoi cambiare i guadagni (Kp / Ki / Kd) al volo mentre corri ed è ben educato - a seconda dell'implementazione nel dominio del tempo questo può essere negativo.

Di solito si spende molto per i controller PID nel dominio del tempo per prevenire la chiusura integrale. C'è un semplice trucco con il modulo FDE che consente al PID di comportarsi bene, è possibile bloccare il suo valore nel buffer della cronologia. Non ho fatto i calcoli per vedere come questo influisce sul comportamento del filtro (per quanto riguarda i parametri Kp / Ki / Kd), ma il risultato empirico è che è "liscio". Questo sta sfruttando la natura "glitchless" del modulo FDE. Un modello feed-forward contribuisce a prevenire lo scioglimento integrale e l'uso del termine D aiuta a bilanciare il termine I. Il PID in realtà non funziona come previsto con un guadagno D. (I setpoint di rotazione sono un'altra caratteristica chiave per prevenire un riavvolgimento eccessivo.)

Infine, le trasformazioni Z sono un argomento di laurea non "Ph.D." Avresti dovuto imparare tutto su di loro in Analisi complessa. Qui è dove vai l'università, l'istruttore che hai e lo sforzo che fai per imparare la matematica e imparare a usare gli strumenti disponibili può fare una differenza significativa nella tua capacità di esibirti nel settore. (La mia lezione di Analisi complessa è stata orribile.)

Lo strumento industriale defacto è Simulink (che manca di un sistema di algebra computerizzata, CAS, quindi è necessario un altro strumento per avviare equazioni generali). MathCAD o wxMaxima sono risolutori simbolici che puoi usare su un PC e ho imparato a farlo usando una calcolatrice TI-92. Penso che anche la TI-89 abbia un sistema CAS.

Puoi cercare equazioni di z-domain o laplace-domain su wikipedia per filtri PID e passa-basso. C'è un passo qui che non mi lamento, credo che tu abbia bisogno della forma del dominio del tempo discreto del controller PID, quindi devi prendere la trasformazione z di esso. La trasformazione laplace dovrebbe essere molto simile alla trasformazione z ed è data come PID {s} = Kp + Ki / s + Kd · s Penso che la trasformazione z spiegherebbe meglio i Dt nelle seguenti equazioni. Dt è delta-t [ime], uso Dt per non confondere questa costante con una derivata 'dt'.

b[0] = Kp + (Ki*Dt/2) + (Kd/Dt)
b[1] = (Ki*Dt/2) - Kp - (2*Kd/Dt)
b[2] = Kd/Dt

a[1] = -1
a[2] = 0

E questo è l'FDE 2p2z:

y[n] = b[0]·x[n] + b[1]·x[n-1] + b[2]·x[n-2] - a[1]·y[n-1] - a[2]·y[n-2]

I DSP in genere avevano solo un moltiplicare e aggiungere (non un moltiplicare e sottrarre) in modo da poter vedere la negazione rotolata nei coefficienti a []. Aggiungi più b per più poli, aggiungi più a per più zero.


1

È meglio utilizzare il metodo di trasformazione Z in generale, poiché in questo modo si preserva il comportamento esatto del sistema analogico equivalente. Esistono noti metodi di ottimizzazione, come Ziegler-Nichols, che funzionano nel dominio analogico come pubblicato. Se usi il metodo di trasformazione Z, hai un'aspettativa matematicamente rigorosa che il tuo controller risultante farà la stessa cosa per gli stessi valori dei guadagni P, I e D, che farà nel dominio analogico, dati quei guadagni. Inoltre, è possibile disegnare un locus radice discreto per il sistema e prevedere la stabilità per un determinato set di guadagni, cosa che non si può fare se si crea un controller ad hoc direttamente nel codice.

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.