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.