De la carte des pôles à la réponse système : comparaison de 5 cas de rapports d'amortissement via MATLAB

Préparation de l'environnement : un système classique et sa carte des pôles

Avant d'aborder les cinq cas spécifiques, nous devons définir un système de référence. Ce système est un modèle classique utilisé dans les systèmes de contrôle en boucle fermée avec une fonction de transfert en boucle ouverte :

\[ G(s) = \frac{K}{s(s+2)} \]

Ici, $K$ est le gain en boucle ouverte que nous allons ajuster. Cette fonction de transfert est choisie pour sa simplicité et sa pertinence pédagogique, car elle englobe toutes les situations possibles de l'amortissement.

Création du modèle système dans MATLAB

Pour commencer, définissons ce système dans MATLAB à l'aide de la fonction tf, qui permet de créer un objet de fonction de transfert :

% Définition de la fonction de transfert en boucle ouverte G(s) = K / (s*(s+2))
% On fixe K=1 pour le modèle de base de la carte des pôles
num = [1]; % Coefficients du numérateur, correspondant à K (fixé à 1 ici)
den = conv([1, 0], [1, 2]); % Coefficients du dénominateur, produit s*(s+2)
G = tf(num, den); % Création de l'objet fonction de transfert

% Affichage des informations du système
disp('Fonction de transfert en boucle ouverte G(s):');
G

L'exécution de ce code affichera dans la console G(s) = 1 / (s^2 + 2s), confirmant que le modèle système a été correctement créé.

Affichage de la carte des pôles

Ensuite, traçons la carte des pôles qui montre le déplacement des pôles en boucle fermée lorsque $K$ varie de $0$ à $+\infty$ :

% Tracé de la carte des pôles
figure('Position', [100, 100, 800, 600]); % Définition de la taille de la fenêtre
rlocus(G);
grid on;
title('Carte des pôles du système G(s) = K / [s(s+2)]');
xlabel('Axe réel (Real Axis)');
ylabel('Axe imaginaire (Imaginary Axis)');
sgrid; % Ajout des lignes de même rapport d'amortissement et pulsation naturelle

À l'exécution, vous verrez apparaître deux branches partant des pôles en boucle ouverte ($s=0$ et $s=-2$), se rejoignant sur l'axe réel, puis se dirigeant verticalement vers l'infini. Les lignes en forme de secteur générées par la commande sgrid sont les lignes de même rapport d'amortissement. Chaque rayon forme un angle $\beta$ avec l'axe réel négatif, tel que $\cos\beta = \zeta$. Cela nous permettra de repérer facilement les pôles correspondant à un rapport d'amortissement spécifique.

Compréhension géométrique de la carte des pôles et du rapport d'amortissement

Sur la carte des pôles, on distingue clairement deux branhces. Pour de petites valeurs de $K$, les deux pôles en boucle fermée sont réels négatifs (sur l'axe réel). Lorsque $K$ augmente, les pôles se déplacent sur l'axe réel, se rapprochant l'un de l'autre. À $K=1$, ils se rejoignent en $s=-1$, ce qui correspond au cas de l'amortissement critique ($\zeta=1$). En augmentant encore $K$, les pôles quittent l'axe réel et deviennent une paire de racines complexes conjuguées, se déplaçant verticalement.

Note : Par défaut, la commande sgrid affiche les lignes de rapport d'amortissement de 0,1 à 0,9 par pas de 0,1. Pour une analyse plus précise, on peut utiliser sgrid(z, wn) pour personnaliser les paramètres, par exemple sgrid(0:0.05:1, []) pour afficher les rapports d'amortissement de 0 à 1 avec un pas de 0,05.

Sur la carte des pôles, le rapport d'amortissement en un point donné est égal au cosinus de l'angle formé entre le rayon reliant l'origine à ce point et l'axe réel négatif. Cet angle est appelé angle d'amortissement.

  • Angle de 0° : le pôle est sur l'axe réel négatif, $\cos 0 = 1$, $\zeta = 1$ ou $\zeta > 1$ (amortissement fort).
  • Angle de 60° : $\cos 60^\circ = 0.5$, $\zeta = 0.5$ (amortissement modéré).
  • Angle proche de 90° : $\cos \beta$ proche de 0, $\zeta$ proche de 0, oscillations très intenses.

Cette relation géométrique constitue un lien entre la carte des pôles abstraite et la réponse réelle du système. Dans les sections suivantes, nous allons explorer cinq cas représentatifs, en observant à la fois la carte des pôles et la réponse temporelle.

Exemple 1 : oscillations sous-amorties ($\zeta = 0.2$)

Commençons par un cas d'amortissement très faible, avec $\zeta = 0.2$. Selon la relation géométrique, l'angle d'amortissement $\beta = \arccos(0.2) \approx 78.5^\circ$. Nous devons donc identifier sur la carte des pôles le point situé à l'intersection de cette ligne de 78,5° et de la branche gauche du plan complexe.

Détermination de la position des pôles et du gain $K$

Pour le système $G(s) = K/[s(s+2)]$, l'équation caractéristique en boucle fermée est : $s^2 + 2s + K = 0$. Les pôles en boucle fermée sont donnés par :

\[ s = -1 \pm \sqrt{1 - K} \]

Lorsque $K > 1$, les pôles deviennent complexes conjugués : $s = -1 \pm j\sqrt{K-1}$. La partie réelle est $\sigma = -1$, la partie imaginaire est $\omega_d = \sqrt{K-1}$, et le rapport d'amortissement est donné par :

\[ \zeta = \frac{-\sigma}{\sqrt{\sigma^2 + \omega_d^2}} = \frac{1}{\sqrt{1 + (K-1)}} = \frac{1}{\sqrt{K}} \]

Pour obtenir $\zeta = 0.2$, nous devons donc avoir $K = 1 / \zeta^2 = 1 / 0.04 = 25$. Les pôles correspondants sont : $s = -1 \pm j\sqrt{24} \approx -1 \pm j4.899$.

Dans MATLAB, on peut utiliser la fonction rlocfind pour sélectionner interactivement un point sur la carte des pôles, mais ici, nous allons simplement valider cette valeur via le code suivant :

% Cas 1 : ζ = 0.2
zeta1 = 0.2;
K1 = 1 / (zeta1^2); % Calcul du gain nécessaire
disp(['Pour ζ = ', num2str(zeta1), ', le gain calculé est K = ', num2str(K1)]);

% Calcul des pôles en boucle fermée
poles1 = roots([1, 2, K1]); % Équation caractéristique s^2 + 2s + K = 0
disp('Les pôles en boucle fermée sont :');
disp(poles1);

% Vérification du rapport d'amortissement
sigma1 = real(poles1(1));
omega_d1 = abs(imag(poles1(1)));
zeta_verify1 = -sigma1 / sqrt(sigma1^2 + omega_d1^2);
disp(['Rapport d’amortissement vérifié : ', num2str(zeta_verify1)]);

Simulation et observation de la réponse indicielle

À présent, construisons le système en boucle fermée et observons sa réponse à un échelon unitaire :

% Création de la fonction de transfert en boucle fermée
sys_cl1 = feedback(K1*G, 1); % feedback(G, H), ici H=1 car retour unitaire

% Tracé de la réponse indicielle
figure('Position', [100, 100, 1000, 400]);
subplot(1,2,1);
% Affichage de la carte des pôles avec le point actuel mis en évidence
rlocus(G);
hold on;
plot(real(poles1), imag(poles1), 'ro', 'MarkerSize', 10, 'LineWidth', 2);
plot(real(poles1), -imag(poles1), 'ro', 'MarkerSize', 10, 'LineWidth', 2); % Pôle conjugué
title(['Carte des pôles (ζ = ', num2str(zeta1), ', K = ', num2str(K1), ')']);
grid on;
sgrid(zeta1, []); % Affichage de la ligne de rapport d’amortissement actuel

subplot(1,2,2);
step(sys_cl1);
grid on;
title(['Réponse indicielle (ζ = ', num2str(zeta1), ')']);
info = stepinfo(sys_cl1);
% Affichage des informations comme le dépassement sur le graphique
text(0.6, 0.5, sprintf('Dépassement : %.1f%%\nTemps de réponse (2%%) : %.3f s', info.Overshoot, info.SettlingTime), 'Units', 'normalized', 'BackgroundColor', 'w');

Ce que vous observez :

  • Gauche (carte des pôles) : deux points rouges apparaissent sur les branches verticales de la carte des pôles, proches de l'axe imaginaire, formant un angle proche de 90° avec l'axe réel négatif.
  • Droite (réponse indicielle) : la courbe oscille fortement, monte rapidement, dépasse la valeur finale (dépassement très élevé, pouvant dépasser 50 %), et met du temps à se stabiliser après plusieurs oscillations. Le temps de réponse est long, car bien que la fréquence d'oscillation soit élevée (déterminée par la partie imaginaire), l'atténuation est lente (la partie réelle a une valeur absolue faible, avec un terme d’atténuation exponentiel $e^{-t}$).

Cette réponse ressemble à celle d'une voiture dont les amortisseurs sont défectueux : après un passage sur un obstacle, elle oscille longtemps. En ingénierie de contrôle, sauf cas particuliers, ce type de comportement est à éviter.

Étiquettes: MATLAB Systèmes de contrôle Réponse temporelle Rapport d’amortissement Analyse des pôles

Publié le 9 octobre à 06h09