Progettazione di controller PID dalla riga di comando
Questo esempio illustra come progettare un controller PID per l'impianto dato da:
Come primo passo, creare un modello dell'impianto e progettare un semplice controller PI per l'impianto stesso.
sys = zpk([],[-1 -1 -1],1);
[C_pi,info] = pidtune(sys,'PI')
C_pi = 1 Kp + Ki * --- s with Kp = 1.14, Ki = 0.454 Continuous-time PI controller in parallel form.
info = struct with fields:
Stable: 1
CrossoverFrequency: 0.5205
PhaseMargin: 60.0000
C_pi
è un oggetto controller pid
che rappresenta un controller PI. I campi info
mostrano che l'algoritmo di sincronizzazione sceglie una frequenza di crossover a loop aperto di circa 0,52 rad/s.
Esaminare la risposta al gradino a loop chiuso (tracking di riferimento) del sistema controllato.
T_pi = feedback(C_pi*sys, 1); step(T_pi)
Per migliorare il tempo di risposta, è possibile impostare una frequenza target di crossover più alta rispetto a quella di 0,52 che pidtune
seleziona automaticamente. Aumentare la frequenza di crossover a 1,0.
[C_pi_fast,info] = pidtune(sys,'PI',1.0)
C_pi_fast = 1 Kp + Ki * --- s with Kp = 2.83, Ki = 0.0495 Continuous-time PI controller in parallel form.
info = struct with fields:
Stable: 1
CrossoverFrequency: 1
PhaseMargin: 43.9973
Il nuovo controller raggiunge la frequenza di crossover più alta, ma a costo di un margine di fase ridotto.
Confrontare la risposta al gradino a loop chiuso con i due controller.
T_pi_fast = feedback(C_pi_fast*sys,1); step(T_pi,T_pi_fast) axis([0 30 0 1.4]) legend('PI','PI,fast')
Questa riduzione delle prestazioni è dovuta al fatto che il controller PI non dispone di sufficienti gradi di libertà per ottenere un buon margine di fase a una frequenza di crossover di 1,0 rad/s. L'aggiunta di un'azione derivativa migliora la risposta.
Progettare un controller PIDF per Gc
on una frequenza target di crossover di 1,0 rad/s.
[C_pidf_fast,info] = pidtune(sys,'PIDF',1.0)
C_pidf_fast = 1 s Kp + Ki * --- + Kd * -------- s Tf*s+1 with Kp = 2.72, Ki = 0.985, Kd = 1.72, Tf = 0.00875 Continuous-time PIDF controller in parallel form.
info = struct with fields:
Stable: 1
CrossoverFrequency: 1
PhaseMargin: 60.0000
I campi informazione mostrano che l'azione derivativa nel controller consente all'algoritmo di sincronizzazione di progettare un controller maggiormente aggressivo che raggiunge la frequenza target di crossover con un buon margine di fase.
Confrontare la risposta al gradino a loop chiuso e la reiezione dei disturbi per i controller PI e PIDF veloci.
T_pidf_fast = feedback(C_pidf_fast*sys,1); step(T_pi_fast, T_pidf_fast); axis([0 30 0 1.4]); legend('PI,fast','PIDF,fast');
È possibile confrontare la reiezione dei disturbi in input (carico) del sistema controllato con i controller PI e PIDF veloci. A tal fine, tracciare la risposta della funzione di trasferimento a loop chiuso dall'input dell'impianto all'output dell'impianto.
S_pi_fast = feedback(sys,C_pi_fast); S_pidf_fast = feedback(sys,C_pidf_fast); step(S_pi_fast,S_pidf_fast); axis([0 50 0 0.4]); legend('PI,fast','PIDF,fast');
Questo grafico mostra che il controller PIDF fornisce inoltre una più rapida reiezione dei disturbi.