La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.
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 :
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)
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')
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');
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');
Ce tracé indique que le contrôleur PIDF permet également un rejet des perturbations plus rapide.