Partage
  • Partager sur Facebook
  • Partager sur Twitter

Décalage du rapport cyclique d'un moteur DC

Sujet résolu
    29 juin 2020 à 9:39:45

    Bonjour à tous, le titre n'est pas très explicite alors je vais tenter de faire au mieux pour vous expliquer mon soucis.

    Je pilote actuellement un moteur DC via un arduino en lui injectant indirectement une PWM à rapport cyclique variable. Ce moteur est relié par une courroie à un chariot qui se déplace dans les deux sens selon un axe. Le soucis est que le chariot à déplacer est assez lourd (environ 0.6kg) et que les frottements sont très présents. Le résultat est donc que le moteur DC n'a pas assez de couple pour mettre en mouvement le chariot à petite vitesse (rapport cyclique < 20%).

    J'ai donc appliqué un "offset" à ma pwm pour que lorsque ma commande est proche de 0, le rapport cyclique soit de 20%. Cela marche plutôt bien mais le soucis c'est que la commande n'est maintenant plus représentative du rapport cyclique que je dois envoyer au moteur DC.

    A terme, je compte passer sur un moteur qui possède un couple plus important, mais pour le moment peut-être avez vous une solution pour améliorer ce comportement et faire en sorte d'avoir une PWM qui soit plus cohérente à ma commande en résolvant le soucis des 20% de rapport cyclique minimum à appliquer au moteur pour qu'il tourne ?

    J'ai conscience que je me suis peut-être très mal exprimé sur l'explication du problème alors n'hésitez pas à me poser des questions si ce n'est pas clair !

    • Partager sur Facebook
    • Partager sur Twitter
      29 juin 2020 à 17:47:43

      La vitesse d'un moteur DC dépend de la tension a ses bornes mais aussi du couple qu'il doit fournir par rapport à la résistance au mouvement.

      Donc avec un même rapport cyclique, tu n'iras pas à la même vitesse si ton chariot est vide (peu de résistance) ou si il est plein (plus de résistance).

      Si tu veux avoir une commande en vitesse, il te faut mettre un place un asservissement, avec un correcteur PI par exemple.

      Pour cela, il te faut mettre un capteur de vitesse sur le moteur et laisser le correcteur agir en conséquence.

      Ainsi, si le chariot ne va pas assez vite par rapport à la consigne que tu lui donnes, le correcteur PI va augmenter le rapport cyclique pour compenser et augmenter la vitesse jusqu'à la consigne souhaitée.

      Et inversement, si le moteur va trop vite, le correcteur va baisser le rapport cyclique pour faire ralentir le moteur.

      • Partager sur Facebook
      • Partager sur Twitter
        29 juin 2020 à 21:51:12

        Bonjour lorrio et merci de ta réponse,

        Je pense m'être mal exprimé. J'asservis un pendule inversé en position verticale grâce à une commande par retour d'état.

        Le problème que j'ai actuellement c'est que mon moteur n'a pas assez de couple pour déplacer le chariot à de très petites vitesses (typiquement, lorsque l'angle du pendule est de 0° -> pendule à la verticale). Du coup, j'ai du bidouiller un peu mon code pour que lorsque la commande est très proche de 0, le rapport cyclique ne soit pas nul mais de 20% (car de 0 à 20% mon moteur ne parvient pas à faire bouger le chariot).

        Le soucis avec ça est que lorsque la commande augmente un peu, je devrais avoir un rapport cyclique de 5 ou 10% mais étant donné que j'ai été obligé de "déplacer" le 0 à 20% de rapport cyclique, je me retrouve avec un rapport cyclique de 25 ou 30%.

        Ma question portait donc sur le fait de pouvoir "compenser" cet offset que j'ai appliqué à mon rapport cyclique de telle sorte à avoir un comportement un peu meilleur que celui que j'ai actuellement, à savoir : le pendule est maintenu à la verticale sans soucis mais le chariot oscille entre -20cm et +20cm alors qu'il devrait se stabiliser en 0 idéalement.

        Évidemment, la solution simple serait d'acheter un moteur avec un couple plus important (chose que je ne vais pas tarder à faire) mais j'aurais aimé savoir si un semblant de solution à mon problème existait afin d'avoir un comportement plus proche de celui que j'attends pour commencer à jouer un peu avec l'affinage des gains.

        -
        Edité par leo0617 29 juin 2020 à 21:53:34

        • Partager sur Facebook
        • Partager sur Twitter
          29 juin 2020 à 22:15:55

          Je rejoins Lorrio. Pour avoir une vitesse image de la commande, il faut l'asservir. Le problème de l'offset sera automatiquement géré par l'asservissement.

          Je suppose que ton système à retour d'état asservit l'angle du pendule inversé. Il faudrait que cette boucle d'asservissement pilote celle de la vitesse.

          -
          Edité par zoup 29 juin 2020 à 22:16:10

          • Partager sur Facebook
          • Partager sur Twitter
            30 juin 2020 à 8:17:51

            Si tu tiens absolument à mettre un offset à basse vitesse, tu peux faire en sorte de l'appliquer progressivement.

            Mais je ne vois clairement pas l’intérêt de faire ça si un asservissement est mis en place.

            C'est l'asservissement qui va compenser le manque de couple, quitte à rajouter lui même un offset de 20%, ou plus, jusqu'à atteindre la consigne.

            Enfin bon, si tu veux mettre un offset progressif, tu peux utiliser la fonction map.

            Celle-ci permet de convertir une variable de la plage [A;B] vers la plage [C;D].

            Tu pourrais par exemple faire map(x, 0, 100, 20, 100); pour que l'entrée x variant de 0 à 100 soit convertie en une valeur entre 20 et 100.
            • Partager sur Facebook
            • Partager sur Twitter
              30 juin 2020 à 15:54:25

              Bonjour à vous deux et merci de vos réponses.

              C'est parfait alors, j'ai les informations qu'il me fallait !

              Un grand merci.

              • Partager sur Facebook
              • Partager sur Twitter

              Décalage du rapport cyclique d'un moteur DC

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown