Réalisé par NGUEGUIM TSAFACK AURIOL & OUATTARA IDRISS & RANNOU ELLIOTT
II. PREPARATION
1. Modélisation
Les équations différentielles représentant le comportement dynamique du système soumis à
notre étude sont :
𝐿 ∶ 𝑙 ′ 𝑖𝑛𝑑𝑢𝑐𝑡𝑎𝑛𝑐𝑒
𝑑𝑖 𝑖 ∶ 𝑙𝑒 𝑐𝑜𝑢𝑟𝑎𝑛𝑡 𝑑𝑎𝑛𝑠 𝑙′𝑖𝑛𝑑𝑢𝑖𝑡
𝐿 = −𝑅𝑖 − 𝑘𝑣 𝛺 + 𝑈 𝑓 ∶ 𝑙𝑒 𝑐𝑜𝑒𝑓𝑓𝑖𝑐𝑖𝑒𝑛𝑡 𝑑𝑒 𝑓𝑟𝑜𝑡𝑡𝑒𝑚𝑒𝑛𝑡𝑠 𝑓𝑙𝑢𝑖𝑑𝑒𝑠
𝑑𝑡
{ 𝑑𝛺 𝐴𝑣𝑒𝑐
𝐽 = 𝑘𝑐 𝑖 − 𝑓𝛺 − 𝛤𝑠𝑒𝑐 𝛤𝑠𝑒𝑐 ∶ 𝑙𝑒 𝑐𝑜𝑢𝑝𝑙𝑒 𝑑𝑒 𝑓𝑟𝑜𝑡𝑡𝑒𝑚𝑒𝑛𝑡𝑠 𝑠𝑒𝑐𝑠
𝑑𝑡
𝑈 ∶ 𝑙𝑎 𝑡𝑒𝑛𝑠𝑖𝑜𝑛 𝑑é𝑙𝑖𝑣𝑟é𝑒 𝑒𝑛 𝑠𝑜𝑟𝑡𝑖𝑒 𝑑𝑒𝑠 𝑎𝑚𝑝𝑙𝑖𝑓𝑖𝑐𝑎𝑡𝑒𝑢𝑟𝑠
{ 𝛺 ∶ 𝑙𝑎 𝑣𝑖𝑡𝑒𝑠𝑠𝑒 𝑑𝑒 𝑟𝑜𝑡𝑎𝑡𝑖𝑜𝑛 𝑑𝑢 𝑚𝑜𝑡𝑒𝑢𝑟
0 = −𝑅𝑖 − 𝑘𝑣 𝛺 + 𝑈 (1)
{ 𝑑𝛺
𝐽 = 𝑘𝑐 𝑖 (2)
𝑑𝑡
−𝑘𝑣 1
(1) ⇒ 𝑖 = ∗ 𝛺 + ∗ 𝑈 (3)
𝑅 𝑅
𝑑𝛺 −𝑘𝑐 ∗ 𝑘𝑣 𝑘𝑐
(3) 𝑑𝑎𝑛𝑠 (2) ⇒ = ∗𝛺+ ∗𝑈
𝑑𝑡 𝑅∗𝐽 𝑅∗𝐽
La représentation d’état sous la forme :
𝑥̇ = 𝐴𝑥 + 𝐵𝑢
{
𝑦 = 𝐶𝑥
𝑎𝑣𝑒𝑐 𝑥1 = 𝜃, 𝑥2 = 𝛺, 𝑢 = 𝑈 𝑝𝑜𝑢𝑟 𝑙𝑎 𝑐𝑜𝑚𝑚𝑎𝑛𝑑𝑒 𝑒𝑡 𝑦 = 𝑉𝜃𝑠 pour la sortie
𝟎 𝟏 𝟎 𝑼𝟎
On trouve : 𝑨 = (𝟎 −𝒌𝒗 ∗𝒌𝒄 ) 𝑩 = ( 𝒌𝒄 ) 𝑪=(
𝟐∗𝝅∗𝒏
𝟎)
𝑹∗𝑱 𝑹∗𝑱
𝑥𝑘+1 = 𝐴𝑑 𝑥𝑘 + 𝐵𝑑 𝑢𝑘
La représentation d’état discrète du système s’écrit sous la forme : { 𝑦𝑘 = 𝐶𝑑 𝑥𝑘
𝟏 𝟎. 𝟎𝟎𝟎𝟗𝟕𝟐𝟕 𝟎. 𝟎𝟎𝟏𝟏𝟔𝟏
𝑨𝒅 = ( ) 𝑩𝒅 = ( ) 𝑪𝒅 = (𝟎. 𝟎𝟐𝟒𝟏𝟏 𝟎)
𝟎 𝟎. 𝟗𝟒𝟓𝟗 𝟐. 𝟑𝟎𝟏
Stabilité
Pour pouvoir étudier ce système nous commençons par effectuer une analyse de la stabilité à
travers la position des pôles. L’équation caractéristique est donnée par : det(sI2-A)=0⇒
(𝑠 − 𝜆1 )(𝑠 − 𝜆2 ) = 0 . Les pôles du système sont les valeurs propres de celui-ci et représentées
−𝑘𝑣 ∗𝑘𝑐
par 𝜆1 = 0 𝑒𝑡 𝜆2 = 𝑅∗𝐽 . Vu que 𝜆1 = 0 alors le 𝑺𝒚𝒔𝒕è𝒎𝒆 𝒆𝒏 𝒃𝒐𝒖𝒄𝒍𝒆 𝒐𝒖𝒗𝒆𝒓𝒕𝒆 𝒆𝒔𝒕 𝒊𝒏𝒔𝒕𝒂𝒃𝒍𝒆.
Les zéros du système en boucle ouverte sont donnés par : z/ det[𝐴 − 𝑧𝐼2 𝐵 ] = 0.Or:
𝐶 𝐷
det[𝐴 − 𝑧𝐼𝑛 𝐵
] ≠ 0. Ainsi le système en boucle ouverte ne possède pas de zéros.
𝐶 𝐷
Commandabilité
𝑘𝑐
0
La matrice de commandabilité est donnée par :C = [B AB]= . On a rangC = 2
𝑅∗𝐽
2
𝑘𝑐 −𝑘𝑣 ∗(𝑘𝑐 )
𝑅∗𝐽 2
( (𝑅∗𝐽) )
Le système est commandable et peut à cet effet être commandé par retour d’état.
Observabilité
𝑈0
0
La matrice d’observabilité est : O = [C CA ]= (2∗𝜋∗𝑛 𝑈0
). On a rangO =2
0 2∗𝜋∗𝑛
Les blocs « Conversion en Volts » et « Conversion en nombre entier » effectue des opérations
inverses. Les équations mathématiques qui régissent ces 2 convertisseurs sont données par :On
calcule la valeur de 𝑙𝑎 𝑐𝑜𝑛𝑠𝑖𝑔𝑛𝑒 𝑐𝑘 𝑒𝑡 𝑑𝑒 𝑙𝑎 𝑠𝑜𝑟𝑡𝑖𝑒 𝑦𝑘 de la même manière car la conversion
10−(−10)
est identique : 𝑐𝑜𝑚𝑚𝑎𝑛𝑑𝑒𝑒𝑛 𝑉𝑜𝑙𝑡 = 𝑐𝑜𝑚𝑚𝑎𝑛𝑑𝑒𝑒𝑛 𝐵𝑖𝑡𝑠 − 10
212 −1
𝟏𝟎
𝒄𝒐𝒎𝒎𝒂𝒏𝒅𝒆𝒆𝒏 𝑽𝒐𝒍𝒕 = (𝒄𝒐𝒎𝒎𝒂𝒏𝒅𝒆𝒆𝒏 𝑩𝒊𝒕𝒔 − 𝟐𝟎𝟒𝟕) ∗
𝟐𝟎𝟒𝟕
Les valeurs correspondant à [-10V, +10V] sont codées sur 4096 bits.
Dans cette partie il est question de programmer une loi de commande proportionnelle
analogique et discrète et vérifier le suivi de la consigne en position. On a le correcteur
proportionnel suivant 𝑢𝑘 = 𝐾(𝑐𝑘 − 𝑦𝑘 ) . On a d’abord effectué un test avec un gain Kp=5 de
façon analogique puis numérique en vue de s’assurer du bon fonctionnement du procédé et
surtout que le câblage était bien effectué, puis Kp=50.
Comme observations :
- Le régime permanent est atteint pour une tension crête à crête de 0.2mV. Cependant on
remarque un léger dépassement de 20% lors de la montée. Le pic maximal est atteint
après 70 ms (69,505ms en simulation)
- L’erreur statique est nulle avec une précision de mesure de l’ordre de 10mV.
- On mesure également le temps de réponse à 5% qui est de 620ms.
Afin de réduire des potentielles erreurs lors de l’expérimentation (calcul, arrondi…), nous
avons effectué la programmation Arduino (pour toutes les expériences) avec les valeurs
calculées sur Matlab au format « long » (soit 10 chiffres après la virgule).
2. Simulation
On programme ainsi cette commande par retour d’état sur Matlab/Simulink
La simulation nous donne les courbes ci-après, où celle de gauche présente la commande, la
consigne et la sortie tandis que sur celle de droite on a l’erreur d’estimation. Comme
observation :
Ainsi la mise en place de la commande par retour d’état avec observateur est satisfaisante.
3. Expérimentation
La programmation sur Arduino de notre commande nous a donné la réponse suivante :
La remarque qu’on peut faire à ce niveau est qu’il y’a une différence entre la simulation et
l’expérimentation bien que la commande ne sature pas: temps de réponse plus bas et présence
d’une erreur statique. Ainsi dans le modèle il y a des éléments qui n’ont pas été pris en compte :
friction lors de la rotation du moteur.
L’objectif visé ici est d’implémenter le correcteur précédent sous la forme RST. Le système
obtenu avec une commande par retour d’état estimé est donné par :
Ce qui nous permet donc d’isoler les matrices (A,B,C,D) du RST et exposer la représentation
d’état de ce système RST suivante : 𝐴𝑅𝑆𝑇 = 𝐴𝑑 − 𝐾𝑑 𝐶𝑑 − 𝐵𝑑 𝐹𝑑 𝐵𝑅𝑆𝑇 = (𝑘𝑑 𝐵𝑑 𝐺𝑑 )
𝐶𝑅𝑆𝑇 = −𝐹𝑑 𝐷𝑅𝑆𝑇 = (0 𝐺𝑑 )
𝑦
Nous cherchons désormais à déterminer la fonction de transfert entre l’entrée (𝑦 𝑘 ) et la sortie
𝑟𝑒𝑓𝑘
𝑅(𝑧) 𝑇(𝑧)
𝑢𝑘 . De plus il faut la mettre sous la forme suivante : 𝑈(𝑧) = − 𝑆(𝑧) ∗ 𝑌(𝑧) + 𝑆(𝑧) ∗ 𝑌𝑟𝑒𝑓(𝑧)
𝑹𝒔 = (𝟎 𝟑. 𝟏𝟓𝟏𝟗 − 𝟐. 𝟗𝟖𝟏𝟓)
{ 𝑺𝒔 = (𝟏 − 𝟎. 𝟗𝟒𝟒𝟓 𝟎. 𝟎𝟎𝟏𝟕)
𝑻𝒔 = (𝟑. 𝟏𝟓𝟕𝟑 − 𝟐. 𝟗𝟗𝟐𝟎 𝟎. 𝟎𝟎𝟓𝟏)
L’objectif de cette partie est de mettre en œuvre une commande avec action intégrale sous la
forme de représentation d’état et sous forme RST ceci dans le but d’annuler l’erreur statique
observé avec toutes les commandes mises en œuvre jusqu’à présent.
1. Analyse théorique
Compte tenu du fait que l’adjonction d’une action intégrale n’a pas d’impact sur l’observateur,
alors les paramètres de l’observateur implémenté plus haut demeurent les mêmes, soit :
L’action intégrale se matérialise par une nouvelle variable d’état 𝑧𝑘+1 = 𝑧𝑘 + 𝑦𝑟𝑒𝑓𝑘 − 𝑦𝑘 . La
commande devient : 𝑢𝑘 = −𝐹𝑑 𝑥
̂𝑘 − 𝐻𝑑 𝑧𝑘 .
̂ ̇
𝑥 𝑥
̂
[ 𝑘+1 ] = 𝐴𝑑𝑒 [ 𝑘 ] + 𝐵𝑑𝑒 𝑢𝑘 + 𝐸𝑑𝑒 𝑦𝑟𝑒𝑓𝑘
𝑧𝑘+1 𝑧𝑘
Le système étendue est de la forme :
𝑥
̂
𝑦 = 𝐶𝑑𝑒 [ 𝑘 ]
{ 𝑧𝑘
𝑨𝒅 𝟎 𝑩 𝟎
Avec : 𝑨𝒅𝒆 = ( ) 𝑩𝒅𝒆 = ( 𝒅 ) 𝑪𝒅𝒆 = (𝑪𝒅 𝟎) 𝑬𝒅𝒆 = ( )
−𝑪𝒅 𝟏 𝟎 𝟏
Q est choisi toujours diagonale avec les 2 premiers éléments inchangés. Le 3e élément (celui lié
à la variable de l’action intégrale) est prise avec une pondération au moins supérieure à 1à fois
les 2 autres afin de donner plus de poids à cet état.
Le choix de R a un impact sur le caractère énergétique de la commande : plus R est grand moins
la commande est susceptible de saturer mais cela introduit un dépassement plus important et un
temps de réponse plus long.
Ainsi après quelques tests et un compromis sur les spécifications souhaitées, on a pris :
𝑄 0
Qi=( ) et Ri=5.
0 0.05
On obtient le gain 𝐹𝑑_𝑒 à l’aide de la fonction dlqr : 𝐹𝑑_𝑒 = 𝑑𝑙𝑞𝑟(𝐴𝑑_𝑒 , 𝐵𝑑_𝑒 , 𝑄𝑖, 𝑅𝑖) ; Le gain
de la commande par retour d’état représente les 2 premiers éléments de 𝐹𝑑_𝑒 et le 3e élément est
celui li é à l’action intégrale. On trouve :
2. Simulation
Le modèle Simulink pour cette nouvelle commande est le suivant :
3. Expérimentation
Ci-dessous, les courbes expérimentales. La figure de gauche est celle observée à l’oscilloscope
(présentant la consigne et la sortie) et celle de droite obtenu à l’aide du traceur série de
l’Arduino (elle présente la commande en bleu)
L’objectif visé ici est d’implémenter le correcteur précédent sous la forme RST. Le système
obtenu avec une commande par retour d’état estimé est donné par :
𝑢𝑘 = −𝐹𝑑 𝑥̂𝑘 − 𝐻𝑑 𝑧𝑘
{
𝑥̂𝑘+1 = (𝐴𝑑 − 𝐾𝑑 𝐶𝑑 )𝑥̂𝑘 + 𝐵𝑑 𝑢𝑘 + 𝐿𝑑 𝑦̂𝑘
Ce qui nous permet donc d’isoler les matrices (A,B,C,D) du RST et exposer la représentation
d’état de ce système RST suivante : 𝐴𝑅𝑆𝑇 = (𝐴𝑑 − 𝐾𝑑 𝐶𝑑 − 𝐵𝑑 𝐹𝑑 −𝐵𝑑 𝐻𝑑 ) 𝐵𝑅𝑆𝑇 = (
𝐾𝑑 0
)
𝟎 𝟏 −𝟏 𝟏
𝐶𝑅𝑆𝑇 = [−𝐹𝑑 − 𝐻𝑑 ] 𝐷𝑅𝑆𝑇 = [0 0]
𝑦
Nous cherchons désormais à déterminer la fonction de transfert entre l’entrée (𝑦 𝑘 ) et la sortie
𝑟𝑒𝑓𝑘
𝑅(𝑧) 𝑇(𝑧)
𝑢𝑘 . De plus il faut la mettre sous la forme suivante : 𝑈(𝑧) = − 𝑆(𝑧) ∗ 𝑌(𝑧) + 𝑆(𝑧) ∗ 𝑌𝑟𝑒𝑓(𝑧). Le
code Matlab permettant d’y arriver est présenté ci-dessous :
On a pu valider cette partie étant donné qu’on obtenait exactement les mêmes résultats
expérimentaux.