Contenuto principale

Progettazione di controller PID dalla riga di comando

Questo esempio illustra come progettare un controller PID per l'impianto dato da:

sys=1(s+1)3.

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.
Model Properties
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)

MATLAB figure

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.
Model Properties
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')

MATLAB figure

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.
Model Properties
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');

MATLAB figure

È 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');

MATLAB figure

Questo grafico mostra che il controller PIDF fornisce inoltre una più rapida reiezione dei disturbi.

Vedi anche

|

Argomenti