🌙
  • 🇺🇸 English
  • 🇫🇷 Français
  • 🇪🇦 Español

On a un système sous forme de représentation d’état, naturellement instable mais commandable. Comment le commande-t-on ?

Définition de la loi de commande

Dans un premier temps, il faut définir la loi de commande que nous allons utiliser. Pour un retour d’état, le plus simple est de poser :

u(t)=−Kx(t)u(t) = -Kx(t)

Ici, K est un gain sous forme de matrice, et x(t) est le vecteur d’état de notre système.

Euh, je n’ai pas accès à l’état de mon système…

Pas de problème, il faudra juste l’estimer avec un observateur.

Bref, avec cette commande en entrée du système u(t), le système ira vers 0. Il faut donc prendre en compte le signal de référence r(t) en ajoutant une précompensation statique N :

u(t)=−Kx(t)+Nr(t) u(t) = -Kx(t) + Nr(t)

Trouver les pôles désirés

Le système en boucle fermée, c’est-à-dire quand il est asservi par notre loi de commande, possède un polynôme caractéristique.

Ce polynôme caractéristique, qu’on appelle polynôme caractéristique désiré, a des pôles et un degré. Le degré du polynôme est égal au nombre d’états, et on choisit nous même les pôles de ce polynôme. En clair :

deg(Pdes(s))=ndeg(P_{des}(s)) = n

et on choisi p1, p2, …, pn.

Le choix des pôles représente la physique que l’on désire pour le système. Déjà, ils doivent être tous les deux négatifs pour garantir la stabilité du système en boucle fermée

E.g :

On a un système de deux états. On veut que le système en boucle fermée ait deux pôles p1 = -2 et p2 = -5.

Le polynôme désiré est alors :

Pdes(s)=(s+2)(s+5)=s2+7s+10P_{des}(s) = (s+2)(s+5) = s^2 + 7s + 10

Matrice d’états en boucle fermée

On pose la matrice d’états A_bf en boucle fermée comme ceci :

ABF=A−BKA_{BF} = A - BK

où K est une matrice ayant n colonnes et m lignes, c’est-à-dire le même nombre de colonnes que A et autant de ligne que B n’a de colonne.

E.g :

Pour les matrices :

A=[0132];B=[01];n=2 A = \begin{bmatrix} 0 & 1 \\ 3 & 2 \end{bmatrix} \quad ; \quad B = \begin{bmatrix} 0 \\ 1 \end{bmatrix} \quad ; \quad n = 2

on a pu vérifier que le système est commandable. On pose alors K comme étant :

K=[k1k2]K = \begin{bmatrix} k_1 & k_2 \end{bmatrix}

On obtient alors :

ABF=A−BK=[013−k12−k2]A_{BF} = A - BK = \begin{bmatrix} 0 & 1 \\ 3-k_1 & 2-k_2 \end{bmatrix}

Déterminer numériquement K

Une fois qu’on a déterminé la matrice d’états en boucle fermée, on peut calculer son polynôme caractéristique :

PBF(λ)=∣ABF−λI∣ P_{BF}(\lambda) = |A_{BF} - \lambda I|

Puis de faire une identification terme à terme avec le polynôme caractéristique désiré, et enfin, reconstruire pleinement A_bf

E.g :

Dans notre exemple : ABF=[013−k12−k2]A_{BF} = \begin{bmatrix} 0 & 1 \\ 3-k_1 & 2-k_2 \end{bmatrix}   ⟹  PBF(λ)=∣ABF−λI∣=λ2+(k2−2)λ+(k1−3) \implies P_{BF}(\lambda) = |A_{BF} - \lambda I| = \lambda^2+(k_2-2)\lambda+(k_1-3)

Par identification avec notre polynôme caractéristique désiré, on obtient :

{(k2−2)=7(k1−3)=10  ⟹  {k2=9k1=13\begin{cases} (k_2-2) &=7 \\ (k_1-3) &= 10 \end{cases} \quad \implies \quad \begin{cases} k_2 &= 9 \\ k_1 &= 13 \end{cases}   ⟹  ABF=[01−10−7]\implies A_{BF} = \begin{bmatrix} 0 & 1 \\ -10 & -7 \end{bmatrix}

Déterminer K par Ackermann

Si le système est SISO (single input / single output), on peut appliquer la formule d’Ackermann en utilisant la matrice de commandabilité et le polynôme caractéristique désiré :

K=[0  0  0...  1]C−1Pdes(A)K = [0 \; 0 \; 0 ... \; 1]\mathscr{C}^{-1}P_{des}(A)

E.g :

Pour l’exemple ci-dessus, on a :

C−1=[−2110]\mathscr{C}^{-1} = \begin{bmatrix} -2 & 1 \\ 1 & 0 \end{bmatrix} Pdes(s)=s2+7s+10  ⟹  Pdes(A)=A2+7A+10I P_{des}(s) = s^2 + 7s + 10 \quad \implies \quad P_{des}(A) = A^2 + 7A + 10I   ⟹  K=[139] \implies \quad K = \begin{bmatrix} 13 & 9 \end{bmatrix}

Déterminer K et A_bf depuis Matlab

Définition des matrices du système :

A = [0 1; 3 2];
B = [0; 1];
C = [1 0];
D = 0;

On pose les pôles désirés comme dans notre exemple :

poles_desires = [-2, -5];

Détermination de K :

K = place(A, B, poles_desires);

Détermination de la matrice d’états en boucle fermée :

A_bf = sys.A - sys.B * K;

En temps discret

Si la loi de commande doit être implémentée sur un micro contrôleur, il faudra passer par un système à temps discret :

sys_d   = c2d(ss(A, B, C, D), Te);
P_d     = exp(P_c * Te);
Kd      = place(sys_d.A, sys_d.B, P_d);

Les pôles désirés à temps discret P_d sont calculés à partir de ceux à temps continu P_c et du temps d’échantillonnage du micro contrôleur.

Implémenter le système