Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

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

Figure contains an axes object. The axes object contains an object of type line. This object represents 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')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent 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');

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent 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');

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent PI,fast, PIDF,fast.

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

Vedi anche

|

Argomenti complementari