Évaluer les marges de gain et de phase
Cet exemple montre comment examiner l’effet des marges de stabilité sur les caractéristiques de réponse en boucle fermée d’un système de contrôle.
Stabilité d’une boucle de rétroaction
En général, la stabilité signifie que tous les signaux internes restent bornés. C’est une exigence standard des systèmes de contrôle qui permet d’éviter les pertes de contrôle et l’endommagement des équipements. Pour les systèmes de réaction linéaire, la stabilité peut être évaluée en examinant les pôles de la fonction de transfert en boucle fermée. Considérons par exemple la boucle de rétroaction SISO :

Figure 1 : Boucle de rétroaction SISO.
Pour un gain de boucle unitaire k, vous pouvez calculer la fonction de transfert en boucle fermée T au moyen de :
G = tf([.5 1.3],[1 1.2 1.6 0]); T = feedback(G,1);
Pour obtenir les pôles de T, saisissez
pole(T)
ans = -0.2305 + 1.3062i -0.2305 - 1.3062i -0.7389 + 0.0000i
La boucle de rétroaction de k=1 est stable étant donné que tous les pôles présentent des parties réelles négatives.
Stable oui, mais stable à quel point ?
La vérification des pôles en boucle fermée nous donne une évaluation binaire de la stabilité. Dans la pratique, il est plus utile de connaître la robustesse (ou la fragilité) de la stabilité. La robustesse est notamment indiquée par l'ampleur de la variation du gain en boucle avant que la stabilité ne soit perdue. Vous pouvez utiliser le tracé des lieux des racines afin d’estimer la plage de valeurs k pour laquelle la boucle est stable :
rlocus(G)

Cliquer sur le point où le lieu croise l’axe des y révèle que cette boucle de rétroaction est stable pour

Cette plage montre qu’avec k=1, le gain de boucle peut augmenter de 270 % avant de perdre en stabilité.
Marges de gain et de phase
Les changements de gain en boucle ne constituent que l’un des aspects d’une stabilité robuste. En règle générale, une modélisation imparfaite du système physique signifie que le gain et la phase ne sont pas connus avec exactitude. Puisque les erreurs de modélisation sont plus dommageables près de la fréquence de crossover du gain (fréquence à laquelle le gain en boucle ouverte s’élève à 0 dB), il est également important de connaître la variation de phase admissible à cette fréquence.
La marge de phase mesure l’ampleur de variation de phase nécessaire au niveau de la fréquence de crossover de gain pour perdre en stabilité. De même, la marge de gain mesure la variation de gain relative nécessaire au niveau de la fréquence de crossover de phase pour perdre en stabilité. Ensemble, ces deux nombres permettent d’estimer la « marge de sécurité » pour la stabilité en boucle fermée. Plus les marges de stabilité sont faibles, plus la stabilité est fragile.
Vous pouvez afficher les marges de gain et de phase sur un diagramme de Bode comme suit. D’abord, créez le tracé :
bode(G), grid

Ensuite, faites un clic droit sur le tracé et sélectionnez le sous-menu Characteristics -> Minimum Stability Margins. Enfin, cliquez sur les marqueurs en points bleus. Le tracé qui en résulte est présenté ci-dessous :

Cela indique une marge de gain d’environ 9 dB et une marge de phase d’environ 45 degrés. La réponse indicielle en boucle fermée correspondante présente environ 20 % de dépassement et quelques oscillations.
step(T), title('Closed-loop response for k=1')

Si l’on augmente le gain à k=2, les marges de stabilité sont réduites à
[Gm,Pm] = margin(2*G); GmdB = 20*log10(Gm) % gain margin in dB Pm % phase margin in degrees
GmdB =
2.7435
Pm =
8.6328
et la réponse en boucle fermée présente des oscillations mal amorties, ce qui montre une instabilité proche.
step(feedback(2*G,1)), title('Closed-loop response for k=2')

Systèmes ayant plusieurs croisements de gain ou de phase
Certains systèmes ont plusieurs fréquences de crossover de gain ou de crossover de phase, ce qui entraîne plusieurs valeurs de marges de gain ou de phase. Par exemple, considérons la boucle de rétroaction

Figure 2 : Boucle de rétroaction avec plusieurs crossovers de phase
La réponse en boucle fermée pour k=1 est stable :
G = tf(20,[1 7]) * tf([1 3.2 7.2],[1 -1.2 0.8]) * tf([1 -8 400],[1 33 700]);
T = feedback(G,1);
step(T), title('Closed-loop response for k=1')

Pour évaluer à quel point cette boucle est robustement stable, tracez sa réponse de Bode :
bode(G), grid

Ensuite, faites un clic droit sur le tracé et sélectionnez le sous-menu Characteristics -> All Stability Margins pour afficher toutes les fréquences de crossover et leurs marges de stabilité associées. Le tracé qui en résulte est présenté ci-dessous.

Notez qu’il y a deux croisements de phase de 180 degrés avec des marges de gain correspondantes de -9,35 dB et +10,6 dB. Les marges de gain négatives indiquent une perte de stabilité due à une réduction du gain, tandis que les marges de gain positives indiquent une perte de stabilité due à une augmentation du gain. Cela est confirmé si l’on trace la réponse indicielle en boucle fermée pour une variation de gain de plus/moins 6 dB autour de k=1 :
k1 = 2; T1 = feedback(G*k1,1); k2 = 1/2; T2 = feedback(G*k2,1); step(T,'b',T1,'r',T2,'g',12), legend('k = 1','k = 2','k = 0.5')

Ce tracé montre davantage d’oscillations aussi bien pour les valeurs de gain plus petites que plus grandes.
Vous pouvez utiliser la commande allmargin pour calculer toutes les marges de stabilité. Notez que les marges de stabilité sont exprimées en rapports de gain, et non en dB. Utilisez mag2db pour convertir les valeurs en dB.
m = allmargin(G) GainMargins_dB = mag2db(m.GainMargin)
m =
struct with fields:
GainMargin: [0.3408 3.3920]
GMFrequency: [1.9421 16.4807]
PhaseMargin: 68.1140
PMFrequency: 7.0776
DelayMargin: 0.1680
DMFrequency: 7.0776
Stable: 1
GainMargins_dB =
-9.3510 10.6091
Voir aussi
margin | pole | diskmargin (Robust Control Toolbox)