Main Content

Design d'un contrôleur PID en ligne de commande

Cet exemple indique comment concevoir un contrôleur PID pour le système physique fourni par :

sys=1(s+1)3.

Commencez par créer un modèle du système physique, puis concevez pour lui un contrôleur PI simple.

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 est un objet de contrôleur pid qui représente un contrôleur PI. Les champs de info indiquent que l’algorithme de réglage choisit une fréquence de crossover en boucle ouverte d’environ 0,52 rad/s.

Examinez la réponse indicielle en boucle fermée (suivi de consigne) du système contrôlé.

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.

Pour améliorer le temps de réponse, vous pouvez définir une fréquence de crossover cible supérieure au résultat sélectionné automatiquement par pidtune, à savoir 0,52. Augmentez la fréquence de crossover à 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

Le nouveau contrôleur atteint une fréquence de crossover supérieure, mais au prix d’une marge de phase réduite.

Comparez la réponse indicielle en boucle fermée avec les deux contrôleurs.

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.

Cette réduction de performance est due au fait que le contrôleur PI ne dispose pas de suffisamment de latitude pour obtenir une marge de phase correcte à une fréquence de crossover de 1,0 rad/s. L’ajout d’une action dérivée améliore la réponse.

Concevez un contrôleur PIDF pour Gc avec la fréquence de crossover cible de 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

Les champs d'information indiquent que l'action dérivée dans le contrôleur permet à l'algorithme de réglage de concevoir un contrôleur plus agressif qui atteint la fréquence de crossover cible avec une marge de phase correcte.

Comparez la réponse indicielle en boucle fermée et le rejet des perturbations pour les contrôleurs PI et PIDF rapides.

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.

Vous pouvez comparer l’entrée (charge) de rejet des perturbations du système contrôlé avec les contrôleurs PI et PIDF rapides. Pour ce faire, tracez la réponse de la fonction de transfert en boucle fermée, de l’entrée à la sortie du système physique.

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.

Ce tracé indique que le contrôleur PIDF permet également un rejet des perturbations plus rapide.

Voir aussi

|

Sujets associés