[Autre] Contrôle moteurs DC - projet étude
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Contrôle moteurs DC - projet étude



  1. #1
    Arsene

    Contrôle moteurs DC - projet étude


    ------

    Bonjour,
    Je réalise un projet dans le cadre de mes études, dans lequel je dois asservir en angle une balance. J'ai un bras de 50cm avec deux moteurs DC de part et d'autre. Des hélices permettent alors de faire pivoter la "balance" autour d'un axe central. Un potentiomètre y est fixé pour récupérer l'angle, puis j'utilise un arduino et un PID pour contrôler les moteurs. Voilà la théorie, mais maintenant niveau pratique je fais face à divers problèmes.

    1/ Les moteurs ont des caractéristiques différents.
    Je dispose de 3 moteurs DC (référence plus bas), mais aucun de donne les mêmes performances.
    Lorsque j'impose une tension fixe aux bornes d'un moteur, et que je mesure l'intensité, j'obtiens entre 40mA et 120mA, alors que sur le papier ce sont les mêmes moteurs.
    Solution potentielle: les moteurs ne sont pas neufs et je ne connais pas leur état d'usure (sûrement différents d'ailleurs). Si je me procure des moteurs neufs, auront ils exactement les mêmes performances ? i.e. RPM égale pour tension égale ?

    2/ Je ne parviens pas à contrôler les moteurs indépendamment.
    Pour contrôler un moteur, l'applique 9V à ses bornes, et un transistor en série. Je contrôle le transistor avec un signal PWM de l'arduino, et par un effet de moyennage, le moteurs reçoit une tension entre 0V et 9V. J'ai également un diode de roue libre aux bornes des moteurs.
    Cependant mes deux moteurs sont en parallèle sur ma source de tension (référence plus bas), et j'observe que la variation de tension d'un moteur et entraine une faible variation de l'autre.
    J'aimerais bien éviter ce phénomène, ou du moins le rendre négligeable.
    Solution potentielle: Peut être que c'est mon alimentation qui est un peu dépassée. Lorsque je la règle sur 8.4V à vide, et que je branche un moteur (sans toutes ces histoires de transistor), la tension tantôt augmente (entre 0.4V et 1.6V), tantôt diminue (0.2V). Donc peut être qu'en utilisant un bon générateur (on a des bons GBF aux labo) je pourrai me prémunir de quelques imprécisions. Cependant je ne sais pas si ça peut jouer sur les variations lorsque je fais varier les deux moteurs en parallèle.

    3/ Quelques difficultés sur la conception même du PID, dont surtout le manière de transformer mon erreur totale en une consigne pour mes deux moteurs, mais ceci fera sûrement l'objet d'une discussion ultérieure.

    Matériel:
    • Alimentation: transformateur Jouef Norma (jusqu'à 12V, 200mA)
    • Moteurs: FF-050SK-09250 9.0V

    N'hésitez pas si je n'ai pas été assez clair sur les caractéristiques du montage, ou son objectif.
    En vous remerciant par avance.
    Arsène

    -----

  2. #2
    Positron1

    Re : Contrôle moteurs DC - projet étude

    Salut,
    Fais nous un croquis pour qu'il n'y ait pas d'ambiguïté
    J'ai réglé un problème analogue et voici: ton potar asservi un servo au travers de l'arduino, sur le servo deux potars (D et G) qui ont pour but de modifier le signal au travers de 555,vers deux régulateurs alimentant les deux moteurs, si les deux moteurs n'ont pas tout à fait le même rendement ce n'est pas important, c'est récupéré par les régulateurs
    Dernière modification par Positron1 ; 15/02/2026 à 17h30.
    Le savoir des uns peut faire le bonheur des autres

  3. #3
    Antoane
    Responsable technique

    Re : Contrôle moteurs DC - projet étude

    Bonjour,

    Pourrais-tu donner un schéma/photo du montage qu'on y voit plus clair ?

    Globalement deux moteurs ne sont jamais identiques et si tu veux un mon "matching" entre leurs vitesses de rotation, il faut les controler séparément. Ici, de ce que je comprend de la mécanique, cela impose de monitorer l'angle donné par le potentiomètre et d'alimenter les moteurs avec des PWM indépendants pour maintenir/amener celui si à la bonne valeur.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  4. #4
    Positron1

    Re : Contrôle moteurs DC - projet étude

    Re,
    Jettes un oeil, tu trouveras peut-être des idées
    https://forums.futura-sciences.com/e...delisme-7.html
    Le savoir des uns peut faire le bonheur des autres

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

    Re : Contrôle moteurs DC - projet étude

    Merci pour vos réponses.
    Ci-joint un schéma de mon montage.
    L'objectif est en effet de monitorer l'angle du dispositif, donc la valeur du potentiomètre.
    Je m'excuse mais je suis novice dans le monde de l'électronique (surtout l'électronique pratique), donc j'ai du mal à comprendre ton message Positron1.
    Aussi, qu'entend on par "contrôler séparément" Antoane ? N'est ce pas déjà ce que je fais ?
    L'idéal serait de pouvoir contrôler avec précision les RPM de chaque moteurs, donc la poussée de ceux-ci. Mais je n'ai pas la possibilité de mesurer quoi que ce soit au bout des bras de la balance. Peut-être existe il d'autres moteurs offrant plus de précision sans sacrifier la légèreté.
    Images attachées Images attachées  

  7. #6
    jiherve

    Re : Contrôle moteurs DC - projet étude

    bonsoir
    l'alimentation est sans doute un peu juste et il faudrait une capa réservoir (>1000µF) pour absorber les appels de courant, ensuite avec un PID (un par moteur)tu devrais pouvoir équilibrer les moteurs.
    Amha il faut que la boucle s’exécute en moins de 100ms.
    Tu gagnerais en simplicité de commande avec des NMOS.
    JR
    l'électronique c'est pas du vaudou!

  8. #7
    Positron1

    Re : Contrôle moteurs DC - projet étude

    Salut,
    donc j'ai du mal à comprendre ton message Positron1.
    Oui pardonnes moi, je ne faisais pas attention que tu débutais !
    L'idéal serait de pouvoir contrôler avec précision les RPM de chaque moteurs, donc la poussée de ceux-ci. Mais je n'ai pas la possibilité de mesurer quoi que ce soit au bout des bras de la balance.
    Non ne te fais pas de souci pour la vitesse ou le léger défaut de puissance, l'angle te sera donné et corrigé par le potentiomètre, puisque tu utilises l'arduino, connais-tu la programmation ?
    Connais-tu également le PWM ?
    Le savoir des uns peut faire le bonheur des autres

  9. #8
    Arsene

    Re : Contrôle moteurs DC - projet étude

    Salut,
    l'alimentation est sans doute un peu juste
    Je prends note, j'emprunterai des meilleurs alims au labo à la rentrée.
    un PID (un par moteur)
    Si je comprends bien, en utilisant deux PID (donc deux jeux de gains différents), je pourrai compenser le fait que mes moteurs soient différents ?
    il faut que la boucle s’exécute en moins de 100ms
    Avec l'arduino je peux descendre beaucoup la période. J'étais déjà à 100ms, mais je peux baisser si c'est important. Cela permet d'avoir de la réactivité je suppose.
    Tu gagnerais en simplicité de commande avec des NMOS
    Je ne suis pas sûr de bien comprendre. Les NMOS semblent être des transistors, c'est déjà ce que j'utilise non ? Du moins les montages que je trouve sur internet correspondent au mien.
    connais-tu la programmation ? Connais-tu également le PWM ?
    Programmation pas de souci, c'est plus ou moins ce vers quoi je m'oriente dans mes études. Le PWM j'ai bien compris le principe, un créneau dont on règle le rapport cyclique. Je ne sais pas s'il y a d'autres choses à savoir.

  10. #9
    bibifikotin

    Re : Contrôle moteurs DC - projet étude

    Bonjour,
    Des transistors il y en a de différentes technologies...et cela s'appele toujours....transistor !
    Seule la technologie change. (avec des avantages différents )
    Bonne soirée

  11. #10
    Bounoume

    Re : Contrôle moteurs DC - projet étude

    Je ne suis pas sûr de bien comprendre. Les NMOS semblent être des transistors, c'est déjà ce que j'utilise non ? Du moins les montages que je trouve sur internet correspondent au mien.
    NON, sur ton schéma, le logo représentatif avec la flèche vers le bas fait que tu utilises des vrais transistors NPN (il y a aussi les transistors PNP, où le sens des courants est différent)
    avec les transistors, grossièrement, ils permettent une intensité collecteur ->émetteur linéairement proportionnelle à l'intensité du Courant base ->émetteur , et quand Ib= 0, alors Ic est à peu près nulle....
    Les semi-conducteurs nmos, eux, laissent passer une intensité source ->drain qui dépend de la TENSION gate-drain (courbe à voir sur le net, pas linéaire... ) mais la jonction de gate est isolée (aucun courant en mode stationnaire)
    en commutation, les 2 conviennent, même si le signal de commande est défini en intensité pour les transistors, et en tension pour les Nmos (et les Pmos aussi)
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  12. #11
    Positron1

    Re : Contrôle moteurs DC - projet étude

    Re,
    Programmation pas de souci,
    Dans ce cas c'est tout simple, partant de ton potentiomètre, mets un double ce sera plus facile, tu créés deux signaux PWM, Gauche et droite, que tu envoies à deux régulateurs G et D qui alimentent les moteurs ( genre BDESC-S10E-RTR pour te donner une idée), le principe est simple, dés que la balance penchera d'un coté, ce sera mesuré par le potentiomètre et un signal , en fonction de ta programmation enverra l'ordre de tourner plus ou mois vite aux moteurs, tu remarqueras que la différence de puissance n'intervient pas !
    Le savoir des uns peut faire le bonheur des autres

  13. #12
    Arsene

    Re : Contrôle moteurs DC - projet étude

    J'en viens alors à ma 3eme question de mon message initial. Je pense que je ne sais pas faire un PID...
    Voilà la manière dont je l'ai fait pour le moment:

    La fonction de calcul des trois formes d'erreur.
    Code:
    void computeError()
    { // Positive when balence is leaning to the right
      unsigned long time_old = time;
      time = millis();
      int elapsedTime = time - time_old;
    
    
      int pErr_old = pErr;
      int iErr_old = iErr;
      int dErr_old = dErr;
    
      pErr = position - target;
    
      int delta = (pErr * elapsedTime) / 1000;
      if ((rightIntensity < maxIntensity || delta > 0) || (leftIntensity < maxIntensity || delta < 0))
      {
        iErr = iErr_old + delta;
      }
    
      dErr =  pErr - pErr_old;
      dErr = alpha * dErr_old + (1 - alpha) * dErr; // alpha ~= 0.8, forme de filtre passe bas pour éviter le bruit. Pour mes premiers tests il était à 0.
    }
    Je rencontre un premier problème du fait que mon erreur intégrale est très grande devant les autres erreurs. Mais bon après tout les gains servent à ça.

    Voilà la fonction de calcul des intensités des moteurs.
    Kp, Ki et Kd sont des flottants, peut-être des entiers suffisent...
    L'idée de la fonction est de déterminer un taux de correction à partir des trois formes d'erreur, et de s'éloigner de meanIntensity (= 128) de manière opposée pour chaque moteur pour compenser le déséquilibre. Je vous laisse jeter un coup d'oeuil.

    Code:
    void computeForces()
    {
      int err = Kp * pErr + Ki * iErr + Kd * dErr;
      int maxErr = Kmax * maxPosition; // ??? // globalement ce que j'ai écrit ici ne correspond à rien...
    
      if (err > maxErr)
      {
        err = maxErr;
      }
      else if (err < -maxErr)
      {
        err = -maxErr;
      }
      int correction = map(err, -maxErr, maxErr, -deltaIntensity, deltaIntensity);
      leftIntensity = meanIntensity - correction; // Les valeurs d'intensité varient entre 0 et 255, et correspondent directement au rapport cyclique des PWM envoyés aux moteurs.
      rightIntensity = meanIntensity + correction; // meanIntensity vaut 128
    
    }
    Mon problème principal repose sur mon incapacité à déterminer un valeur de maxErr qui puisse fonctionner, et par la même occasion les gains qui correspondent.
    Pour le moment, j'ai tâtonné avec quelques valeurs, et soit la balance est instable (avec seulement un gain proportionnel, la balance vient frapper en butée à répétition), soit elle se stabilise comme si les moteurs étaient éteints (et oui j'essaye de stabiliser une balance déjà équilibrée ). Encore pire lorsque j'impose un angle non nul, la balance met plusieurs dizaines de secondes à l'atteindre en partant d'un position stable horizontale.
    Bref je ne sais pas comment avancer sur ce point: déterminer les gains et maxErr.

    Autre difficulté, les moteurs ne sortent pas 300 chevaux, et mes hélices sont franchement pas les plus imposantes, mais je ne parvient pas à en trouver des meilleurs (c'est du type hélice de drone pour enfant). Résultat la balance n'a pas un pêche monstrueuse. Je me dis que c'est suffisant car quand je coupe un moteur et que je met l'autre à fond, la balance bascule à fond en quelques instants. Mais voilà, avec ma méthode, c'est rare qu'un moteur soit coupé, donc lorsqu'un déséquilibre existe, s'il est faible, la différence de puissance entre les moteurs est faible et ne permet absolument pas de compenser quoi que ce soit. Chaque moteur lutte plus contre l'autre moteur que contre la gravité parfois.
    Il semblerait que cela provienne directement de ma méthode pour calculer les intensités à partir de mon taux de correction. A cela s'ajoute que mes moteurs sont différents (problème précédent) et cette méthode suppose qu'à 50% des gaz, les deux moteurs se compensent parfaitement.. invraisemblable à priori.

    Enfin, dernier problème (sûrement pas... ), la précision de mes moteurs est faible, je ne peux pas travailler à l'unité sur mes intensités, disons qu'à partir de la dizaine on commence à faire la différence. Or je me retrouve souvent à compenser avec quelques unités dans ma variable correction, et donc pas de réel changement physique.

    Je pense qu'il faudrait complètement revoir la méthode de calcul, par exemple avec un pid par moteur comme le proposait jiherve, mais la encore je ne sais pas comment m'y prendre.

    Je vous remercie sincèrement pour votre aide.

  14. #13
    Bounoume

    Re : Contrôle moteurs DC - projet étude

    sur la technologie des transistors: présentation basique avec courbes caractéristique IC en fonction de Ib https://fr.wikipedia.org/wiki/Transistor_bipolaire
    et la seule courbe que j'ai trouvé sur les Mos (avec le décalage de Vt qui bloque complètement le courant source-drain)
    https://www.electrical4u.com/mosfet-characteristics/

    et pour embrouiller encore il existe aussi les vieux transistors FET ordinaires.... field effect transistors, peu utilisés maintenant
    Dernière modification par Bounoume ; 16/02/2026 à 17h47.
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  15. #14
    Arsene

    Re : Contrôle moteurs DC - projet étude

    Merci pour toutes ces précisions Bounoume, j'y vois maintenant plus clair sur les différents fonctionnement possibles. Dans mon cas, l'idée du transistor était de laisser ou non passer le courant dans le moteur en fonction d'un signal PWM émis de l'arduino. Je n'utilise donc pas les propriétés des transistors relatives aux caractéristiques du signal entrant dans la base. Est-ce que leur utilisation pourrait résoudre l'un de mes problèmes, par exemple la dépendance entre les moteurs ?

  16. #15
    Bounoume

    Re : Contrôle moteurs DC - projet étude

    Chaque moteur lutte plus contre l'autre moteur que contre la gravité parfois.
    Il semblerait que cela provienne directement de ma méthode pour calculer les intensités à partir de mon taux de correction. A cela s'ajoute que mes moteurs sont différents (problème précédent) et cette méthode suppose qu'à 50% des gaz, les deux moteurs se compensent parfaitement.. invraisemblable à priori.
    il me semble manquer, pour une paire de moteurs définie (celui de droite et celui de gauche)... l'étalonnage de l'effet déplacement de la balance, en fonction du rapport Pwm du courant que tu lui imposes....
    Quels Pwm(droit) et Pwm(gauche) alimentant simultanément chaque moteur, faut-il fournir pour maintenir la balance horizontale... ?
    cela bêtement par essais manuels répétitifs.... faciles....
    la courbe qu va avec? un coefficient relatif pour le même effet à G et D ?
    quand tu as ces informations, ça devait permettre de définir séparément le gain en rapport pwm de tes 2 boucles d'asservissement?
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

Discussions similaires

  1. [Outils/Fab/Comp] Contrôle 2 moteurs pas à pas 1 Driver
    Par CaptainBudy dans le forum Électronique
    Réponses: 8
    Dernier message: 10/09/2023, 14h15
  2. contrôle des moteurs d'un quadricoptère
    Par lobodol dans le forum Électronique
    Réponses: 4
    Dernier message: 17/06/2015, 16h58
  3. Controle moteurs pas à pas + PIC +newbie !!!.
    Par invite2be14c13 dans le forum Électronique
    Réponses: 2
    Dernier message: 29/07/2008, 13h16
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...