Un asservissement qui ne devrait pas fonctionner: ou est l'erreur
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Un asservissement qui ne devrait pas fonctionner: ou est l'erreur



  1. #1
    Anduriel

    Un asservissement qui ne devrait pas fonctionner: ou est l'erreur


    ------

    Bonjour à tous.

    A l'aide d'un capteur angulaire magnétique, d'une arduino et d'un moteur à courant continu, je tente un asservissement en position.

    La fonction de transfert que je considère pour le moteur est la suivante:
    Code:
    G = feedback(1/(J*s)*Km/(Rm + Lm*s), Km)/s;
    où:
    Km: constante de couple, caractérisée à 0.0025N.m/A
    Lm: inductance, inconnue, fixée à 10E-3 H
    Rm: résistance moteur, caractérisée à 3.3 Ohms:
    J: inertie de l'axe, inconnue, cependant avec les relations de base, l'axe cylindrique aurait une inertie de 1E-8 kg.m² (à un facteur 10 près )
    s: variable de laplace.
    Je considère le frottement visqueux f nul

    Pour rappel, le modèle est ici:
    http://wikimeca.org/index.php?title=...ourant_continu

    Mon capteur angulaire renvoie une tension entre 0 et 5V sur 1 tour. La arduino acquiert le signal sur 1024 valeurs.

    Mon correcteur a été synthétisé par synthèse Hinfini (vue la fonction de transfert, j'asservis des radians).

    Mon douloureux problème: mon asservissement fonctionne en pratique, mais seulement si en entrée de correcteur (discrétisé à 2kHz) mon erreur d'asservissement est en LSB (c'est à dire radians * 1024 / (2*pi)).

    Voilà, ça ne devrait donc pas fonctionner mais ça fonctionne, je ne comprends pas pourquoi... Il y a tellement de variables que ce n'est pas évident de cibler le problème.. C'est comme si un gain de ~163 dont je n'ai pas connaissance se baladait dans ma chaîne...

    Avis à ceux qui pourraient tilter sur une cause possible, je leur serais bien reconnaissant !

    Merci

    -----

  2. #2
    jiherve

    Re : Un asservissement qui ne devrait pas fonctionner: ou est l'erreur

    Bonsoir,
    Mon douloureux problème: mon asservissement fonctionne en pratique, mais seulement si en entrée de correcteur (discrétisé à 2kHz) mon erreur d'asservissement est en LSB (c'est à dire radians * 1024 / (2*pi)).
    what does it mean ?
    accessoirement comme c'est un système échantillonné je crois qu'il faut passer par une transformée en Z mais çà ce n'est pas ma tasse de thé.
    JR
    l'électronique c'est pas du vaudou!

  3. #3
    jiherve

    Re : Un asservissement qui ne devrait pas fonctionner: ou est l'erreur

    re
    1024/2pi = 163 serait ce une coïncidence ?
    JR
    l'électronique c'est pas du vaudou!

  4. #4
    Anduriel

    Re : Un asservissement qui ne devrait pas fonctionner: ou est l'erreur

    Bonjour Jiherve,

    En fait oui, le 163 venait de ce calcul ce n'était peut être pas clair
    Et mon correcteur est bien discrétisé en z^-1 par Tustin. Je ne pense pas que ça vienne de ça.
    J'ai fait une caractérisation du frottement f, j'ai trouvé 0.81, mais je trouve ça énorme (et Matlab n'a pas assez de mémoire pour prendre ne compte ce terme... bizarre...)

    Edit: normalement je pilote mon moteur avec une consigne en radian, donc mon erreur d'asservissement doit être en radian. Mais dans ce cas ça ne fonctionne pas (asservissement instable), par contre si je me place dans l'unité du capteur (LSB) , ça fonctionne... incompréhensible
    Dernière modification par Anduriel ; 21/09/2014 à 18h53.

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

    Re : Un asservissement qui ne devrait pas fonctionner: ou est l'erreur

    Re
    en fait c'est in vitro de la simul matlab pas in vivo ou me gourre je?
    JR
    l'électronique c'est pas du vaudou!

  7. #6
    Seb.26

    Re : Un asservissement qui ne devrait pas fonctionner: ou est l'erreur

    Donne la déclaration de tes variables

    + prototypes des fonctions.
    Dernière modification par Seb.26 ; 22/09/2014 à 12h50.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  8. #7
    Anduriel

    Re : Un asservissement qui ne devrait pas fonctionner: ou est l'erreur

    En simu matlab, ça fonctionne.
    En réalisation electronique ça fonctionne, au facteur multiplicatif près.
    Voilà le code matlab:

    Code:
    Rm = 3.3;               % Ohms, léger dépassement (/x5)
    Lm = 1E-3;              % H, sans impact (/x10)
    Km = 0.0025;            % Nm/A   /10, oscillations mais stable
    J = 1E-8;               % kg.m^2 x10, oscillations mais stable
    f = 0;                  % 0.1811;
    
    % Bode du systeme
    s = tf('s');
    G = feedback(1/(J*s + f)*Km/(Rm + Lm*s), Km)/s;
    Et le code arduino:

    Code:
    // Récupération de la mesure (entre 0 et 1024 LSB)
          Umes = analogRead(pinUmes);
          
          // Erreur d'asservissement
          // Théoriquement ça devrait être: e[0] = (consigne - calcul_int) * 2 * pi / 1024; <-- NE FONCTIONNE PAS
          e[0] = (consigne - calcul_int); // <-- FONCTIONNE !
          
          // Correction avec correcteur discrétisé à 2kHz par Tustin
          s[0] = 2.705339081502371*s[1] - 2.445529104688802*s[2] + 0.740189000871644*s[3] + 0.020528478212914*e[0] - 0.016882878112745*e[1] - 0.023715344171302 *e[2] + 0.020069744071133*e[3];
          
          // Choix du sens moteur avec carte puissance (alimentation sous 7.2V, PWM entre 0/0% et 255/100%)
          if (s[0] < 0) {
            pwm = constrain(round(-s[0]*255/7.2), 0, 255);
            digitalWrite(pinInv, HIGH);
            digitalWrite(pinEN, LOW);
          } else {
            pwm = constrain(round(s[0]*255/7.2), 0, 255);    
            digitalWrite(pinInv, LOW);
            digitalWrite(pinEN, HIGH);
          }
          
          analogWrite(pinUcom, pwm);
             
          // Mise à jour
          e[3] = e[2];
          e[2] = e[1];
          e[1] = e[0];
          s[3] = s[2];
          s[2] = s[1];
          s[1] = s[0];
    Dernière modification par Anduriel ; 22/09/2014 à 21h28.

Discussions similaires

  1. Asservissement numérique: erreur statique.
    Par inoxxam dans le forum Électronique
    Réponses: 4
    Dernier message: 28/10/2012, 08h36
  2. erreur processus hote windows (rundll32)a cessé de fonctionner!!!!!
    Par invite85dab4bd dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 30/03/2012, 17h38
  3. Problème d'asservissement: erreur statique et équation différentielle
    Par invite40f82214 dans le forum Électronique
    Réponses: 16
    Dernier message: 12/01/2008, 20h11
  4. 9.80v devrait être 12V.
    Par Dan dans le forum Dépannage
    Réponses: 5
    Dernier message: 24/06/2005, 08h05
Découvrez nos comparatifs produits sur l'informatique et les technologies.