Comment ajouter une perturbation dans un retour d'état ?
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Comment ajouter une perturbation dans un retour d'état ?



  1. #1
    SoloMan67

    Question Comment ajouter une perturbation dans un retour d'état ?


    ------

    Bonjour à tous,

    Je viens vers vous car j'ai une question, j'ai beau chercher partout mais je ne trouve aucune réponse:
    Comment faire un retour d'état pour un système avec une entrée, une sortie et une perturbation ?

    Le système sur lequel je travail est un moteur à courant continu. Mon objectif est de créer un système commandable en passant par la représentation d'état. Je vais vous faire un résumé de ce que j'ai fait pour l'instant, et en venir au problème où je bloque.


    Principe de la représentation d'état et du retour d'état

    La représentation d'état permet de représenter sous forme de 2 expressions matricielles n'importe quelle système et de le modéliser comme cela:


    Si on souhaite commander ce système, on peut ajouter une matrice de gains K sur la boucle de retour qui va agir comme un correcteur proportionnel, et une autre matrice N qui va permettre d'annuler l'erreur statique en régime permanent. La modélisation de ce système devient donc:



    Dans mon cas

    Je souhaite modéliser le moteur à courant continu. Le modèle et les expressions qui régissent sont fonctionnement sont les suivantes:


    Dans un premier temps je n'ai pas pris en compte le couple résistant Cr, c'est cette perturbation qui me pose problème par la suite quand j'essaye de l'ajouter comme entrée du système pour mon retour d'état. Donc sans la perturbation Cr, tout fonctionne bien, j'ai cette représentation d'état avec cette modélisation faite sur MATLAB avec le retour d'état:



    Ensuite je veux rajouter la perturbation Cr, j'ai donc la représentation d'état suivante:


    Mais le problème se pose maintenant sur la modélisation, comment calculer les matrices de gains K et N ? Et comment raccorder l'entrée Cr dans le modèle ?

    J'ai vraiment besoin d'aide, j'ai lu pleins de rapports de stage, de recherche à ce sujet mais aucun ne parle de ça ... Je vous remercie si vous pouvez m'éclairer !

    -----
    Images attachées Images attachées

  2. #2
    gts2

    Re : Comment ajouter une perturbation dans un retour d'état ?

    En représentation classique, une perturbation revient à mettre un additionneur à l'entrée de la fonction de transfert du Mcc.

    Ici, si je comprends bien, l'entrée de la commande est le vecteur (U,Cr), il faudrait un "bidule" Matlab entre le soustracteur et B à deux entrées scalaires (sortie du soustracteur U, Cr) et à sortie vectorielle (U,Cr), cela existe ?

    Pour le soustracteur, l'entrée + est une vitesse de consigne (ou un Yref), donc l'entrée - ne peut être qu'une vitesse (ou un Y), donc votre K devrait être branché en sortie de C ?

  3. #3
    SoloMan67

    Re : Comment ajouter une perturbation dans un retour d'état ?


    " Ici, si je comprends bien, l'entrée de la commande est le vecteur (U,Cr), il faudrait un "bidule" Matlab entre le soustracteur et B à deux entrées scalaires (sortie du soustracteur U, Cr) et à sortie vectorielle (U,Cr), cela existe ? "
    Avec la retour d'état et en appliquant la perturbation Cr, l'entrée serait [Omega_ref, Cr] avec Omega_ref la vitesse de consigne, mais pas [U, Cr] car ça c'est sans retour d'état.
    Oui je vois ce que tu veux dire, j'ai testé ça en ajoutant le "bidule". J'ai fais ça en gardant les mêmes valeurs de K et de N:

    J'ai lancé ensuite la simulation. Pour comparer les résultats j'ai aussi fait un schéma-blocs mais qu'avec des fonctions de transferts pour pouvoir comparer avec ce que je devrais avoir. Donc je lance la simulation en appliquant la perturbation Cr à partir de 0.3s et j'obtient:


    La courbe bleu c'est ce que je devrais avoir, et la courbe rouge c'est ce que j'ai. Enfaite en modélisant comme j'ai fait, on voit que Cr n'a aucune influence sur la dynamique, c'est pas du tout bon. Mais le problème vient du fait que comme j'ai ajouté la perturbation Cr, alors ma matrice de commande B est désormais un matrice 2x2, et par conséquent la matrice de gains K est censé être une matrice 2x2 aussi, et la matrice N je pense aussi une matrice 2x2 mais je suis pas sûr. En gros pour résumer ce que je dis avec les matrices K et N:


    Et pour calculer K et N il y a des formules:
    Calcul de K:
    Avec une fonction MATLAB : K = place(A,B,[p1 p2]) avec p1 et p2 la paire de pôles désirées pour la dynamique de la vitesse du moteur. Mais ça peut aussi se calculer à la main

    Calcul de N:

    Mais dans le cas avec la perturbation Cr, cette formule ne marche plus car elle n'est plus carrée donc plus inversible ... alors peut-être que je me suis trompé dans quelque chose sur cette formule mais je n'arrive pas à voir


    " Pour le soustracteur, l'entrée + est une vitesse de consigne (ou un Yref), donc l'entrée - ne peut être qu'une vitesse (ou un Y), donc votre K devrait être branché en sortie de C ? "
    Enfaite non justement. Je sais que c'est un peu paradoxal mais le K doit bien être branché avant la matrice C. Car la matrice de gains K doit agir sur les variables d'état (donc le courant I_L et la vitesse Omega), et doit donc être branché sur le vecteur d'état X qui se trouve juste avec la matrice C sur le modèle. L'objectif est de réguler tout les variables d'états y compris le courant, et pas seulement la vitesse du moteur Omega.



    Donc pour l'instant je suis toujours bloqué sur comment modéliser le système en ajoutant la perturbation Cr ...
    Je sais comment calculer la matrice de gains K donc ça c'est bon. Mais reste à savoir comment calculer la matrice N, quelle doit être sa dimension (je pense 2x2pour que ça colle avec le vecteur d'entrée [Omega_ref, Cr]), et comment accorder tout ça ensemble.
    D'après ce que je pense (mais pas sûr), le système devrait ressembler à ça au final:



    Si vous avez encre des pistes pour me sortir de ce problème ?
    Images attachées Images attachées

  4. #4
    gts2

    Re : Comment ajouter une perturbation dans un retour d'état ?

    Pour la comparaison que vous avez faite, que vaut N ? Pour Cr, d'après votre équation différentielle, le U vectoriel à l'entrée du bloc B est (U,Cr), donc Cr doit être sans N.

  5. A voir en vidéo sur Futura
  6. #5
    SoloMan67

    Re : Comment ajouter une perturbation dans un retour d'état ?

    Désolé j'ai sûrement mal expliqué. Pour la comparaison que j'ai faite, là où j'ai donné les courbes, c'est dans le cas où j'ai juste ajouter la perturbation Cr dans le retour d'état mais en gardant les matrices K et N comme s'il n'y avait aucune perturbation, dans ce cas j'avais donc K = [k0 k1] et N = n. Mais la matrice B est de dimension 2x2 comme je veux ajouter la perturbation Cr (ce qui n'a aucune logique physique si je veux garder K et N comme s'il n'y avait aucune perturbation mais c'est pour tenter) la représentation d'état est donc:


    Le problème qui se pose c'est dans la modélisation de l'ajout de la perturbation DANS LE RETOUR D'ETAT, j'hésite entre les deux représentation ci-dessous:



    Mais si je met Cr devant la matrice B sans le multiplier par N comme vous dites, alors je n'annule pas l'erreur statique engendré par la perturbation Cr, et j'obtient le résultat suivant:

    On voit bien qu'à partir de 0.2s quand j'ajoute la perturbation Cr le retour d'état n'arrive pas à ramener la vitesse à sa consigne 8000 rad/s, justement ca il n'y a pas N devant Cr.

    Donc je sais toujours pas comment faire, où dois-je place la perturbation Cr ? Soit en entrée je mets [U, Cr], ou soit j'ajoute juste Cr devant la matrice B ? Mais en tentant ça j'ai vu que Cr n'a aucune influence sur le système (comme indiqué dans mon précédent message). Donc je pencherai plus sur mettre [U, Cr] en entrée, qui passerait dans N de dimension 2x2 comme indiqué dans la toute fin de mon dernier message. Mais je n'ai encore trouvé aucune solution, ni comment calculer N malheureusement.

    J'espère avoir été plus claire
    Images attachées Images attachées

  7. #6
    SoloMan67

    Re : Comment ajouter une perturbation dans un retour d'état ?

    Dans la représentation d'état que j'ai mis au début de mon message faut la comparer à ce qui suit pour comprendre ce que vaut B dans mes simulations:


    Et ici le U_ est une matrice correspondant à U_ = [U, Cr] avec U_ la matrice d'entrée, U la tension du moteur et Cr la perturbation
    Images attachées Images attachées  
    Dernière modification par SoloMan67 ; 10/04/2020 à 19h40.

  8. #7
    gts2

    Re : Comment ajouter une perturbation dans un retour d'état ?

    "Désolé j'ai sûrement mal expliqué."

    C'est moi qui est du mal à comprendre.

    Si avec , il faut bien que Cr arrive directement à l'entrée de B.

    D'autre part, avec une modélisation par fonction de transfert, et un correcteur proportionnel, une perturbation de couple introduit bien une erreur statique, la courbe bleue devrait être une simple exponentielle tendant vers une nouvelle valeur de vitesse.

  9. #8
    azizovsky

    Re : Comment ajouter une perturbation dans un retour d'état ?

    Si j'ai compris quelque chose :
    avec le retour d'état (nouvelle rentrée du système ) : avec

    càd

  10. #9
    SoloMan67

    Re : Comment ajouter une perturbation dans un retour d'état ?

    Citation Envoyé par gts2 Voir le message
    "Désolé j'ai sûrement mal expliqué."

    C'est moi qui est du mal à comprendre.

    Si avec , il faut bien que Cr arrive directement à l'entrée de B.

    D'autre part, avec une modélisation par fonction de transfert, et un correcteur proportionnel, une perturbation de couple introduit bien une erreur statique, la courbe bleue devrait être une simple exponentielle tendant vers une nouvelle valeur de vitesse.
    Enfaite oui tu as tout à fait raison, Cr doit arrivé directement à l'entrée de B, donc le résultat que j'avais obtenu était normal. Le retour d'état comme je l'ai modélisé se comporte comme un correcteur proportionnel, la valeur de N à l'entrée permet seulement d'annuler l'erreur statique pour la valeur de consigne Omega_ref en entrée, mais pas pour les perturbations. Donc oui quand il y a une perturbation Cr il y aura un erreur statique dans ce modèle.

    J'ai vu qu'il existe un autre retour d'état qui s'appelle "retour d'état par action intégral" et cette fois elle se comporte bien comme un correcteur PI ! Je l'ai testé et elle fonctionne ça annule l'erreur statique même pour la perturbation Cr ! C'est à peut prêt la même façon de faire que le retour d'état simple mais il y a 2 gains en plus (Ks(3) et g, en gros ici g remplace N), et j'ai besoin d'un 3ème pôle. J'ai vu que justement ce 3ème pôle définissait la dynamique de la vitesse seulement après une perturbation. Donc plus se pôle est grand est plus le système réagit vite (mais y a une limite). J'ai donc fait ce montage:


    Et j'ai obtenu ce résultat:


    La courbe bleu c'est a nouveau avec la fonction de transfert, et la courbe rouge ce que j'ai obtenu. Maintenant on voit bien qu'à la perturbation à 0.4s les deux courbes pour la vitesse et le courant sont proches. Et justement si je fais tendre ce fameux 3ème pôle vers "-infini" alors mon résultat sera similaire à la fonction de transfert (courbe bleu).

    Donc c'est bon j'ai réussi à trouver une méthode même si j'arrive pas à tout comprendre exactement, en tout cas je te remercie pour ton aide !
    Images attachées Images attachées

  11. #10
    SoloMan67

    Re : Comment ajouter une perturbation dans un retour d'état ?

    Citation Envoyé par azizovsky Voir le message
    Si j'ai compris quelque chose :
    avec le retour d'état (nouvelle rentrée du système ) : avec

    càd
    C'est pas tout à fait ça.
    Je vais juste changer une notation pour pas s'emmêler les pinceaux: On va dire que [U] c'est la matrice d'entrée, et Ve c'est la tension du moteur (avant je l'appelai U mais on peut le confondre avec la matrice d'entrée).

    Avec le retour d'état je peux toujours dire que:
    mais cette fois, comme on peut le voir dans mon tout premier message, avec le retour d'état on peut poser

    Dans mon cas, si je ne considère pas la perturbation Cr, alors la matrice U est de dimension 1x1 avec U = Ve, et donc avec le retour d'état j'aurai:
    avec K dimension 1x2 et B de dimension 2x1 donc leur produit dans un chiffre pas une matrice.

    Et donc au final, je peux remplaçait le U de la formule de X_point avec la formule de U juste au-dessus et ça donne:

  12. #11
    SoloMan67

    Re : Comment ajouter une perturbation dans un retour d'état ?

    Petite correction à mon message:
    C’est «*-K.X*» dans les formules de U et pas «*+K.B*»
    Dernière modification par SoloMan67 ; 11/04/2020 à 16h59.

  13. #12
    azizovsky

    Re : Comment ajouter une perturbation dans un retour d'état ?

    Si N annule l'erreur statique U=Y(réf) .

  14. #13
    SoloMan67

    Re : Comment ajouter une perturbation dans un retour d'état ?

    N permet d'annuler l'erreur en sortie de système. Mais la matrice U qui se trouve juste avant B sur le schéma de modélisation vaut toujours Ve la tension du moteur. Dans le cas où y a pas la perturbation Cr on aura toujours U = Ve, et quand on ajoute la perturbation qu'on raccorde juste avant B ça devient U = [Ve, Cr].

  15. #14
    azizovsky

    Re : Comment ajouter une perturbation dans un retour d'état ?

    Ok, merci, une mise à jour au cas où ...

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/04/2020, 17h25
  2. Réponses: 3
    Dernier message: 19/12/2016, 19h12
  3. ELECTROMAGNETIQUE: comment produire une perturbation ?
    Par inviteaad7746e dans le forum Physique
    Réponses: 8
    Dernier message: 13/05/2014, 17h20
  4. Comment ajouter des règles dans Snort sans l'interrompre
    Par invite252ddf96 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 0
    Dernier message: 18/04/2012, 14h29
  5. Réponses: 3
    Dernier message: 23/03/2011, 19h26