Dual-monitor engineering workspace displaying Simulink control block diagrams and Bode plots next to an active suspension hardware testbench setup for LQR design

Maîtriser Simulink : Mon guide pratique de simulation de systèmes de contrôle et de conception de relais LQR

  • Auteur: Johnny Liu, PDG de Dowway Vehicle
  • Date de publication : 29 avril 2026
  • Catégorie: Systèmes de contrôle / Ingénierie automobile / Simulation

À propos de l’auteur

Je suis Johnny Liu, le PDG de Véhicule Dowway. Nous développons des groupes motopropulseurs propres et des systèmes de dynamique de véhicule intelligents. Depuis plus de vingt ans, je travaille sur les suspensions actives, la direction électrique et la sécurité des châssis. Dans notre atelier, nous ne fabriquons jamais une pièce sans l’avoir préalablement testée sur écran.

Simulink nous aide à y parvenir. Il nous permet d’effectuer des tests de sécurité et de tester de nouveaux algorithmes de contrôle avant même de manipuler le métal. Dans ce guide, je vous présenterai les flux de travail précis que nous utilisons pour modéliser, analyser et contrôler les systèmes dynamiques.

Partie 1 : Théorie des systèmes de contrôle

Il est indispensable de maîtriser les mathématiques avant de manipuler les blocs. La théorie du contrôle divise les modèles en trois formes principales.

1.1 Modélisation mathématique

Un modèle dynamique montre comment l’état et les sorties d’un système évoluent au fil du temps lorsqu’on lui applique une entrée.

1. Modèles entrée-sortie

  • Équations différentielles : Ces formules décrivent les lois physiques du système dans le domaine temporel. On peut citer comme exemples les systèmes masse-ressort ou les réseaux électriques.
  • Fonctions de transfert (TF) : On obtient ces expressions en appliquant la transformée de Laplace aux équations différentielles linéaires invariantes dans le temps (LTI), en supposant que toutes les conditions initiales sont nulles : $$G(s) = \frac{Y(s)}{U(s)} = \frac{b_m s^m + b_{m-1} s^{m-1} + \dots + b_0}{a_n s^n + a_{n-1} s^{n-1} + \dots + a_0}$$
  • Caractéristiques de fréquence : On obtient ces résultats en inversant $s$ et $j\omega$ dans la fonction de transfert. Cela montre comment le système réagit à des signaux sinusoïdaux d’entrée à différentes fréquences.

2. Modèles d’espace d’état

La théorie moderne du contrôle utilise des modèles d’espace d’état. Au lieu de considérer le système comme une boîte cachée, on suit des variables internes appelées états. Ces états définissent l’énergie et le comportement du système à chaque instant : $$\dot{x}(t) = Ax(t) + Bu(t)$$$$y(t) = Cx(t) + Du(t)$$

Où:

  • $x(t)$ est le vecteur d’état.
  • $u(t)$ est le vecteur d’entrée.
  • $y(t)$ est le vecteur de sortie.
  • $A$ est la matrice du système (elle régit la dynamique interne).
  • $B$ est la matrice d’entrée (elle montre comment les entrées affectent les états).
  • $C$ est la matrice de sortie (elle associe les états aux sorties mesurées).
  • $D$ est la matrice de passage direct.

Voici une comparaison entre les fonctions de transfert et les modèles d’espace d’état :

FonctionnalitéFonction de transfert (TF)Espace d’état (SS)
Compatibilité du systèmeFonctionne uniquement pour les configurations à entrée unique et sortie unique (SISO) et linéaires invariantes dans le temps (LTI).Fonctionne pour les configurations multi-entrées multi-sorties (MIMO), non linéaires et variables dans le temps.
UnicitéUnique pour toute paire entrée-sortie donnée.Non unique. Vous pouvez choisir différents états, ce qui modifie vos matrices.
ComplétudeNe montre que le contrôlable parties. Les annulations pôle-zéro masquent des dynamiques cachées.Il montre tout. Il couvre à la fois contrôlables et incontrôlables parties, plus parties observables et parties non observables.
CalculUtilise l’algèbre du domaine fréquentiel.Adapté aux ordinateurs et aux solveurs d’algèbre linéaire.

3. Diagrammes fonctionnels

Nous connectons les systèmes physiques à l’aide de trois configurations simples :

  • Série (Cascade) : Les fonctions de transfert se multiplient : $G_{\text{total}}(s) = G_1(s) \cdot G_2(s)$
  • Parallèle: Les fonctions de transfert s’additionnent : $G_{\text{total}}(s) = G_1(s) + G_2(s)$
  • Retour: La formule de la boucle de rétroaction fermée $H(s)$ est : $$G_{\text{closed}}(s) = \frac{G(s)}{1 \mp G(s)H(s)}$$

Indicateurs de performance du système

Lors de l’exécution de tests par paliers, nous évaluons les performances transitoires à l’aide de quatre chiffres :

  • Dépassement ($M_p$): La valeur maximale par rapport à la valeur stable finale, exprimée en pourcentage : $$M_p = \frac{y(t_p) – y(\infty)}{y(\infty)} \times 100\%$$
  • Temps de stabilisation ($t_s$): Le temps nécessaire au système pour se stabiliser et rester dans une petite marge d’erreur (généralement 2 % ou 5 %) de sa valeur finale.
  • Heure de pointe ($t_p$): Le temps nécessaire pour atteindre le tout premier pic de dépassement.
  • Temps de montée ($t_r$): Le temps nécessaire pour passer de 10 % à 90 % (ou de 0 % à 100 %) de la valeur finale.

1.2 Méthodes d’analyse

Nous devons tester la stabilité d’un système avant de concevoir un contrôleur.

1. Analyse dans le domaine temporel

Nous appliquons des signaux de test standard au système. Ceux-ci comprennent impulsion unitaire, pas unitaire, rampe unitaire, accélération unitaire, ou ondes sinusoïdales unitaires.

  • Règle de stabilité : Un système LTI est stable si tous ses pôles (les racines du dénominateur) ont une partie réelle négative. Si un seul pôle se trouve à droite du plan complexe, le système explosera.
  • Outils MATLAB :
    • zpk: Définit un système à gain nul et à pôles.
    • racines: Trouve les racines de votre dénominateur pour vérifier l’emplacement des pôles.

2. Analyse du lieu des racines

Nous traçons la façon dont les pôles en boucle fermée se déplacent dans le plan s lorsque nous faisons passer le gain ($K$) de $0$ à $\infty$.

  • Deux règles doivent correspondre pour qu’un point quelconque de l’intrigue soit valide :
    • Condition de magnitude : $|KG(s)H(s)| = 1$
    • Condition de phase : $\angle G(s)H(s) = (2k+1)\pi$
  • Outils MATLAB : Utiliser rlocus(sys) pour tracer les lignes. Utilisez toujours axe égal Ensuite, les axes horizontal et vertical utilisent la même échelle, ce qui permet de conserver des angles corrects.

3. Analyse dans le domaine fréquentiel

Nous vérifions comment un système gère les ondes sinusoïdales stables à différentes fréquences.

  • Les intrigues :
    • Diagramme de Nyquist : Un diagramme polaire de $G(j\omega)$ en fonction de la fréquence ($\omega$) va de $-\infty$ à $+\infty$.
    • Diagramme de Bode : Deux graphiques distincts. Celui du haut représente l’amplitude en décibels ($20\log_{10}|G(j\omega)|$). Celui du bas représente l’angle de phase en degrés.
    • Intrigue de Nichols : Cela permet d’afficher les deux diagrammes de Bode sur un seul écran. Il représente directement les décibels en fonction de l’angle de phase, la fréquence servant de marqueur caché le long de la courbe.
  • Outils MATLAB : Utiliser nyquist(), présager(), et nichols().
  • Chiffres clés : Pic de résonance ($M_r$), fréquence de résonance ($\omega_r$), bande passante et gain à fréquence nulle.
  • Contrôles de stabilité (règle de Nyquist) : Votre système est stable si la ligne de Nyquist fait le tour du point $(-1, j0)$ dans le sens antihoraire $N$ fois, où $N$ est égal à votre nombre de pôles en boucle ouverte instables ($P$).
    • Marge de gain ($G_M$): Combien de gain supplémentaire peut-on ajouter avant que le système ne devienne instable ?
    • Marge de phase ($\Phi_M$): Le déphasage supplémentaire nécessaire pour rendre le système instable.
    • Commande MATLAB : marge(sys) calcule ces marges de sécurité pour vous.

4. Analyse de l’espace d’état

Nous utilisons des matrices pour étudier les systèmes complexes comportant de nombreuses entrées et sorties.

  • Formulaires standard : Il est possible de faire correspondre une seule fonction de transfert à différentes configurations d’espace d’état à l’aide d’une matrice de transformation ($x = Pz$). Les quatre configurations principales sont :
    1. Forme canonique contrôlable (aide à concevoir des contrôleurs à retour d’état).
    2. Forme canonique observable (contribue à la construction d’estimateurs d’état).
    3. Forme canonique diagonale (états découplés le long de la diagonale, utilisés lorsque les pôles sont distincts).
    4. Forme canonique de Jordan (utilisé lorsque les pôles se répètent).
    • Commandes MATLAB : ss(), tf2ss(), zp2ss(), canon(), et Jordanie().
  • Stabilité de Lyapunov : Un système est stable si l’on peut trouver une fonction d’énergie définie positive $V(x)$ dont la dérivée temporelle, $\dot{V}(x)$, est toujours négative. Pour les systèmes linéaires, on résout le système d’équations différentielles suivant : Équation de Lyapunov: $$A^TP + PA = -Q$$ Si nous choisissons une matrice définie positive quelconque $Q$ et obtenons une matrice définie positive unique $P$, notre système est stable.
    • Commandes MATLAB : lyap(A, Q) ou lyap2() Résolvez cette équation.

Examinons maintenant les blocs que nous utilisons pour construire ces systèmes dans Simulink.

2.1 La bibliothèque de blocs standard

1. Sous-bibliothèque continue

C’est ici que nous construisons des modèles à temps continu.

  • Bloc d’espace d’état : Calcule $\dot{x} = Ax+Bu$ et $y=Cx+Du$. Vous devez saisir Matrices A, B, C et D, ainsi que le vecteur d’état initial $x_0$.
  • Bloc de fonction de transfert : Vous entrez dans le numérateur (num) et dénominateur (den) vecteurs comme puissances décroissantes de $s$.
  • Bloc à gain de pôle nul : Vous entrez les tableaux pour zéros (z), pôles (p), et la constante de gain (K).
  • Blocs de contrôle PID (1 degré de liberté et 2 degrés de liberté) : Ces blocs calculent les termes proportionnels, intégraux et dérivés.
    • Paramètres : Vous configurez le type de contrôleur, son format (parallèle ou idéal), le domaine temporel, les coefficients (P, I, D) et la constante de filtrage (N). Vous pouvez définir les états de départ et activer les seuils supérieur et inférieur. limites de saturation Pour éviter que l’intégrateur ne se mette en marche, vous pouvez définir des limites dans l’onglet « Types de données ». Par défaut, il utilise des règles héritées sans vérification des limites.
    • En quoi un PID à 2 degrés de liberté diffère-t-il d’un PID à 1 degré de liberté ? Un contrôleur standard à 1 degré de liberté ne prend en compte que l’erreur $e = r – y$. PID à 2 degrés de liberté Le contrôleur dissocie le suivi des commandes du rejet du bruit. Il utilise des pondérations $b$ et $c$ sur les chemins proportionnel et dérivé : $$u(t) = P \cdot (b \cdot r – y) + I \cdot \int (r – y) dt + D \cdot \frac{d}{dt}(c \cdot r – y)$$ Ceci évite les à-coups de la dérivée lors de changements rapides de la consigne, assurant ainsi la fluidité des mouvements de l’actionneur.

2. Sous-bibliothèque des discontinuités

Le matériel physique n’est jamais parfait. Nous utilisons ces blocs pour modéliser les limites du monde réel :

  • Bloc de réaction : Simule le jeu aux vitesses. Vous réglez la largeur de la zone morte et la puissance de sortie initiale.
  • Blocage de la zone morte : La sortie du bloc reste à zéro jusqu’à ce que l’entrée dépasse vos limites haute ou basse.
  • Bloc de saturation : Limite la sortie. Vous définissez les limites haute et basse. Toujours activer détection de passage par zéro Le solveur détermine ainsi le moment précis où le signal atteint la limite.

3. Sous-bibliothèque discrète

Nous utilisons ces blocs pour modéliser les processeurs numériques et les calculateurs électroniques.

  • Bloc de retard d’unité ($z^{-1}$): Conserve la valeur d’entrée pendant un cycle d’horloge, puis la restitue.
  • Blocage Zero-Order Hold (ZOH) : Échantillonne un signal continu et maintient sa valeur stable pendant une durée d’échantillonnage définie ($T_s$).

? Conseil : Comment les paramètres du solveur affectent votre simulation

Voyons ce qui se passe lorsque vous utilisez un Retard de l’unité bloc:

  • Si vous utilisez un solveur à pas variable (comme ode45) : La taille des pas du solveur peut varier dynamiquement. Cela peut entraîner des erreurs d’interpolation au sein de vos blocs discrets, donnant l’impression que vos signaux sont continus alors qu’ils ne le sont pas.
  • Si vous utilisez un solveur à pas fixe : Configuration du solveur Pas fixe Avec un intervalle d’échantillonnage de 1,0 s, tout fonctionne de manière synchronisée. Le bloc « Délai unitaire » conserve la valeur pendant exactement une seconde, créant ainsi un graphique en escalier net et précis sur votre oscilloscope.

2.2 Utilisation du bloc système LTI

Si vous avez un modèle linéaire dans votre espace de travail MATLAB, vous pouvez l’importer dans Simulink en utilisant la fonction appropriée. Bloc système LTI (disponible dans la boîte à outils du système de contrôle).

  • Comment le configurer :
    1. Saisissez-le directement : Saisissez la commande TF directement dans la zone des paramètres du bloc (comme tf([1 1],[1 5 1])).
    2. Utilisez les variables d’espace de travail : Commencez par définir votre modèle dans un script MATLAB :G1 = tf([1 1],[1 5 1]); Ensuite, il suffit d’entrer. G1 dans le bloc LTI. Chez Dowway Vehicle, nous utilisons cette méthode de script pour organiser nos paramètres. Notez que vous ne pouvez définir les états initiaux que si votre modèle LTI est sous forme d’espace d’états.

Partie 3 : Projets étape par étape

Construisons et mettons en œuvre deux systèmes pratiques.

Projet 1 : Analyse de la stabilité de la fonction de transfert

Nous allons analyser une fonction de transfert continue pour observer son comportement sous des entrées en échelon et des balayages de fréquence.

Notre modèle d’usine :

$$G(s) = \frac{25(s + 17)}{(s + 25)(s + 37)} = \frac{25s + 425}{s^2 + 62s + 925}$$

Le script MATLAB :

Exécutez ce script pour générer vos diagrammes de Bode, Nyquist et Nichols.

% Project 1: Frequency Response Analysis
clear; clc; close all;

% Define numerator and denominator
num = 25 * [1 17];                 % 25s + 425
den = conv([1 25], [1 37]);        % s^2 + 62s + 925

% Create Transfer Function
G = tf(num, den);
disp('System Transfer Function:');
printsys(num, den);

% Draw Bode Plot
figure(1)
bode(G)
grid on;
title('System Bode Diagram');

% Draw Nyquist Plot
figure(2)
nyquist(G)
axis equal % Keeps the scale of real and imaginary axes equal
grid on;
title('System Nyquist Plot');

% Draw Nichols Plot
figure(3)
nichols(G)
grid on;
title('System Nichols Chart');
  1. Ouvrez un modèle vierge dans Simulink.
  2. Ajouter un Étape bloc du Sources bibliothèque. Définissez son temps d’étape à 0 $.
  3. Ajouter un Transfert Fcn bloc du Continu bibliothèque. Définir les « coefficients du numérateur » sur [25 425] et « coefficients du dénominateur » à [1 62 925].
  4. Ajouter un Portée bloc du Éviers bibliothèque.
  5. Reliez les blocs : [Step]->[Transfer Fcn]->[Scope].
  6. Lancez la simulation pendant 1,0 s. L’oscilloscope affichera une réponse indicielle stable et régulière, sans oscillations.

Projet 2 : Commande par retour d’état LQR pour un pendule inversé

Un pendule inversé est instable et difficile à contrôler. Nous allons linéariser son comportement, vérifier ses propriétés et concevoir un système optimal. Régulateur linéaire quadratique (LQR) pour maintenir l’équilibre.

Notre vecteur d’État :

$$x = \begin{bmatrix} x & \theta & \dot{x} & \dot{\theta} \end{bmatrix}^T$$

Où $x$ est la position du chariot, $\theta$ est l’angle du pendule, $\dot{x}$ est la vitesse du chariot et $\dot{\theta}$ est la vitesse angulaire.

Matrices linéarisées (instables en boucle ouverte) :

$$A = \begin{bmatrix} 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & -0.524 & -3.129 & 0 \\ 0 & -15.332 & 9.012 & -0.562 \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\ 0 \\ 81.23 \\ -120.1 \end{bmatrix}$$$$C = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix}, \quad D = \begin{bmatrix} 0 \\ 0 \end{bmatrix}$$

Ceci est un MIMO système. L’entrée est la force ($u$). Les sorties sont la position du chariot ($x$) et l’angle d’inclinaison du pendule ($\theta$).

Le script d’optimisation MATLAB :

Exécutez ce code pour calculer votre matrice de rétroaction LQR $K$.

% Project 2: Inverted Pendulum LQR Design
clear; clc; close all;

% System Matrices
A = [0,       0,      1,      0;
     0,       0,      0,      1;
     0,  -0.524, -3.129,      0;
     0, -15.332,  9.012, -0.562];

B = [0; 
     0; 
 81.23; 
-120.1];

C = [1, 0, 0, 0;    % Output 1: Cart Position
     0, 1, 0, 0];   % Output 2: Pendulum Angle

D = [0; 
     0];

% Create state-space model
sys = ss(A, B, C, D);

% Calculate eigenvalues
E = eig(A);
fprintf('Open-Loop Eigenvalues:\n');
disp(E);

% Test Controllability
OC = ctrb(A, B);
N_C = rank(OC);
fprintf('Controllability Rank: %d\n', N_C);

% Test Observability
OB = obsv(A, C);
N_B = rank(OB);
fprintf('Observability Rank: %d\n', N_B);

% LQR Tuning Matrices
Q = diag([10, 0.01, 0.01, 0.1]); 
R = 45;
N = 0; 

% Compute feedback gain matrix K
[K, S, e] = lqr(sys, Q, R, N);
fprintf('Calculated LQR Feedback Gain Matrix K:\n');
disp(K);

% Create Closed-Loop System (u = -Kx)
sysT = ss(A - B*K, B, C, D);

% Plot closed-loop step response
figure(1)
step(sysT)
grid on;
legend('Cart Position (x)', 'Pendulum Angle (theta)');
title('Closed-Loop LQR Step Response');

Les valeurs propres en boucle ouverte indiquent que le système initial est instable. Les matrices de contrôlabilité et d’observabilité sont toutes deux de rang 4. Cela signifie que notre système est parfaitement contrôlable et observable, ce qui nous permet de concevoir un correcteur LQR.

Pour exécuter ce modèle dans Simulink :

  1. Ajouter un Espace d’état bloc de la bibliothèque continue.
  2. Configurez ses paramètres :
    • Ensemble UN à A - B*K.
    • Ensemble B à B.
    • Ensemble C à C.
    • Ensemble D à D. (Assurez-vous d’abord que votre script MATLAB a été exécuté afin que ces variables soient actives dans votre espace de travail).
  3. Connectez un Étape bloquer le port d’entrée.
  4. Connectez un Portée bloquer le port de sortie.
  5. Lancez la simulation. Votre oscilloscope affichera deux lignes. La position du chariot se stabilise progressivement et l’angle du pendule revient à 0 (position verticale) après une brève oscillation contrôlée.

Liste de contrôle de Johnny pour des systèmes de contrôle sûrs

Pour finir, voici ma liste de contrôle personnelle pour la création de boucles de contrôle dans Simulink :

  • Tester d’abord la contrôlabilité : Avant de perdre des heures à optimiser les gains d’une installation complexe, exécutez ctrb sous MATLAB. Si le rang est trop faible, aucun algorithme ne pourra stabiliser votre système.
  • Choisissez le bon solveur : Pour les systèmes comportant des blocs non linéaires comme Saturation ou Contrecoup, allumez Détection du passage par zéro. Utilisez des solveurs à pas variable (comme ode45) pour des tests rapides, mais passez à un solveur à pas fixe lorsque vous êtes prêt à compiler du code pour du matériel réel.
  • Conservez vos variables au même endroit : Ne saisissez jamais directement de valeurs numériques brutes dans les champs de paramètres de Simulink. Centralisez toutes les données dans un script d’initialisation MATLAB. Votre travail restera ainsi propre et organisé.

N’hésitez pas à me signaler tout problème de réglage ou erreur de résolution. Laissez un commentaire ci-dessous, et nous pourrons en discuter !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Need a Quote or Have Questions?

Please fill out the form below, our engineers will contact you within 24 hours.