Architecture de l'algorithme Super-Twisting (STA)
La commande par mode glissant de type Super-Twisting est une techniqeu de contrôle d'ordre supérieur conçue pour atténuer le phénomène de broutement (chattering) tout en conservant la robustesse face aux incertitudes du modèle. Contrairement aux approches classiques, le STA génère une commande continue en agissant sur la dérivée de la surface de glissement.
La structure globale du signal de commande \(u\) se compose de deux éléments principaux :
- Commande équivalente (\(u_{eq}\)) : Elle compense la dynamique connue du système pour maintenir l'état sur la surface de glissement.
- Terme de commutation non-linéaire (\(u_{sta}\)) : Il s'appuie sur une intégration de la fonction signe pour lisser les discontinuités.
L'expression mathématique de la loi de commande est définie par :
\(u = u_{eq} + \alpha |s|^{1/2} \text{sgn}(s) + \int \beta \text{sgn}(s) dt\)
Où \(s\) représente la surface de glissement, généralement définie pour un système de second ordre par \(s = \dot{e} + \lambda e\).
Développement de la S-Function dans Simulink
Pour intégrer ce contrôleur dans un schéma Simulink, nous utilisons une S-Function de niveau 1. Voici la structure de gestion des flags système :
function [sys, x0, str, ts] = sta_controller_core(t, x, u, flag)
switch flag
case 0
[sys, x0, str, ts] = init_sizes();
case 1
sys = compute_derivatives(t, x, u);
case 3
sys = generate_outputs(t, x, u);
case {2, 4, 9}
sys = [];
otherwise
error(['Code de flag non géré : ', num2str(flag)]);
end
end
Configuration des paramètres d'entrée/sortie
Dans cette phase, nous définissons le nombre de ports d'entrée et les dimensions du vecteur d'état. Pour le Super-Twisting, un état continu est nécessaire pour stocker l'intégrale de la fonction signe.
function [sys, x0, str, ts] = init_sizes()
setup = simsizes;
setup.NumContStates = 1; % Pour le terme intégral du STA
setup.NumDiscStates = 0;
setup.NumOutputs = 1; % Signal de commande u
setup.NumInputs = 3; % [Consigne, Position, Vitesse]
setup.DirFeedthrough = 1;
setup.NumSampleTimes = 1;
sys = simsizes(setup);
x0 = 0; % État initial de l'intégrateur
str = [];
ts = [0 0]; % Échantillonnage continu
end
Calcul de la loi de commande
Le calcul effectif s'effectue dans les fonctions de dérivées et de sortie. Nous séparons la logique pour respecter la structure ODE de MATLAB.
function sys = compute_derivatives(t, x, u)
% Gains de gain de robustesse
W = 1.2;
% Calcul de l'erreur et de la surface
target_pos = u(1);
current_pos = u(2);
current_vel = u(3);
error_val = current_pos - target_pos;
slope_param = 8.5;
sliding_surf = current_vel + slope_param * error_val;
% Mise à jour de la partie intégrale du Super-Twisting
sys = W * sign(sliding_surf);
end
function sys = generate_outputs(t, x, u)
% Gains du contrôleur
K1 = 2.5;
% Récupération des entrées
err = u(2) - u(1);
dot_err = u(3);
lambda = 8.5;
% Surface de glissement
s = dot_err + lambda * err;
% Terme proportionnel non-linéaire
u_prop = K1 * sqrt(abs(s)) * sign(s);
% Terme intégral (provenant de l'état continu x)
u_int = x(1);
% Loi de commande totale (sans u_eq pour simplification)
sys = u_prop + u_int;
end
Analyse de Convergence
La stabilité du système est garantie par une fonction de Lyapunov de type quadratique stricte. En choisissant des gains \(\alpha\) et \(\beta\) suffisamment élevés par rapport aux bornes supérieures des perturbations externes, la trajectoire du système atteint la surface \(s = 0\) en temps fini et y reste malgré les bruits de mesure ou les variations de paramètres.
Comparaison des performances
L'application de cette méthode sur un système mécanique oscillant (type pendule) permet de mettre en évidence les avantages suivants par rapport à une commande glissante classique (SMC) :
| Critère d'évaluation | SMC Classique (Signe) | SMC Super-Twisting |
|---|---|---|
| Amplitude du broutement | Élevée (Haute fréquence) | Quasi-nulle (Signal lisse) |
| Précision en régime établi | Moyenne (Erreur résiduelle) | Excellente (Convergence vers 0) |
| Complexité de calcul | Faible | Modérée |