Répondre à la discussion
Affichage des résultats 1 à 27 sur 27

Contrôler plusieurs moteurs brushless avec un minimum d’E/S



  1. #1
    invite97037714

    Question Contrôler plusieurs moteurs brushless avec un minimum d’E/S


    ------

    Bonjour, j'ai un projet de robotique utilisant une carte arduino (2560) et pour lequel je dois commander au moins 24 petits moteurs brushless (4 fils) pilotés par des ULN2003.
    L'arduino possède 54 E/S, donc en supposant que je les utilise toutes pour ça, je ne peux commander que 13 moteurs.

    Je cherche donc le moyen le plus simple pour réduire le nombre de sorties nécessaires.
    J'ai pensé à utiliser un composant (un genre de pile FIFO ?) qui fasse tourner 4 bits dans un sens avec un état haut sur un fil et dans l'autre sens avec un aute fils, ce qui diviserait par deux le nombre de fils.
    Ou deuxième solution, utiliser un multiplexeur (ou démultiplexeur) suivi d'un composant mémorisant les états (un mémoire) pour controler les moteurs séquentiellement, ça ne devrait pas ralentir le mouvement, les moteurs étant limités à un pas toutes les ~1ms et l'arduino étant cadencé à 16MHz, avec l'avantage d'utiliser beaucoup moins d'E/S.

    Voila, je ne sais pas s'il y a d'autres solutions meilleures, et surtout il me manque le jargon pour trouver les composants, je sais qu'ils existent mais ça fait un moment que je n'ai pas fait d'électronique.

    Merci d'avance pour toute aide !

    -----

  2. Publicité
  3. #2
    penthode

    Re : Controller plusieurs moteurs brushless avec un miminum de fils

    vaste projet ....

    perso j'envisagerais un BUS i2C ,

    et une interface par moteur...

    y'a des os à ronger !
    [B]Le drame de notre temps, c'est que la bêtise se soit mise à penser[/B]

  4. #3
    invite97037714

    Re : Controller plusieurs moteurs brushless avec un miminum de fils

    Pas bête, je n'avais pas pensé à l'i2c, quel circuit intégrer utiliser ? Il y en a peut etre meme qui puisse supporter l'alim des moteurs pour se passer des ULN20003 ?

  5. #4
    jiherve

    Re : Controller plusieurs moteurs brushless avec un miminum de fils

    Bonjour
    même avis avec en esclave I²C soit des circuits dédiés (PCF8534 par exemple) ou bien de petits µC 8bit (attiny 4313 par exemple) ou même une autre carte arduino ce qui permettrait en plus d'envisager du traitement //.
    JR
    l'électronique c'est pas du vaudou!

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

    Re : Controller plusieurs moteurs brushless avec un miminum de fils

    j'ai pas approfondi la question.....

    on en cause sur des forums
    [B]Le drame de notre temps, c'est que la bêtise se soit mise à penser[/B]

  8. #6
    vincent66

    Re : Controller plusieurs moteurs brushless avec un miminum de fils

    Bonjour...

    Il y a des années j'ai utilisé un circuit produit par Allegro qui intégrait une interface spi, un latch et l'étage de sortie de puissance... Mais j'ignore si ça se trouve encore...

    Belle journée...!
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  9. Publicité
  10. #7
    Unitrode

    Re : Controller plusieurs moteurs brushless avec un miminum de fils

    Bonjour,

    l'idée du démultiplexeur, par exemple 2x 74HC4514 associés à des ULN2003 devrait convenir.
    En I2C 2x PCF8575 permettraient de gagner quelques I/O.

  11. #8
    invite97037714

    Re : Controller plusieurs moteurs brushless avec un miminum de fils

    J'hésite quand même entre l'i2c et le demultiplexage suivi de "latch"... Est-ce que je peux dans un cas ou dans l'autre, me passer du pilote (ULN2003), j'ai du mal à trouver un latch avec un courant de sortie d'au moins 500mA, est-ce que ça existe ? Même question pour un slave i2c ?

  12. #9
    invite97037714

    Re : Controller plusieurs moteurs brushless avec un miminum de fils


  13. #10
    polo974

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    à l'ancienne: accès // et adresse et contrôle (bref, un bus 8 bits...):
    2 hc138, 12 hc374 (ou 373 ou 574 ou 573 selon qu'on préfère des bascules D ou de simple latch et dans le désordre ou bien ordonnées)

    (plus les 14 uln probablement indispensables (il faudrait avoir la doc du moteur).

    => 8 sorties data, 4 sorties adresses, 1 sortie enable/clock...

    mettre des découplages et maintenir une bonne masse...
    Jusqu'ici tout va bien...

  14. #11
    objelec

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Bonjour,
    Les composants utilisés pour augmenter le nombre d'entrée/sortie sont des "expander IO". Il sont pilotés via un bus série : I2C ou SPI.
    Voici un exemple de composant très utilisé : MCP23017 (I2C) ou MCP23S17 (SPI). Ils se trouvent très facilement sur internet.
    Ce composant possède 16 entrées/sorties configurables (voir datasheet). Chaque composant est associé à une adresse sur 3bits. Sur un même bus I2C on peut en mettre 8 et donc piloter 8x16 = 128 Entrées Sorties.
    L’inconvénient de ce genre de composants est qu'ils ne peuvent pas être utilisés sur des signaux trop rapides.

  15. #12
    nornand

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Voir l' ULN2008 qui fournie 8 sorties donc plus facile pour des moteurs 4 fils .

  16. Publicité
  17. #13
    Antoane
    Responsable technique

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Bonjour,

    Une autre solution est d'utiliser un driver de moteur par moteur (e.g. https://www.pololu.com/file/0J450/a4...translator.pdf), qui communiquera avec le µC sur deux fils : un pour le sens de rotation, l'autre pour la vitesse. Les 54 IO de l'arduino permettent alors de commander 27 moteurs, soit 3 de plus que demandé.

    La solution proposée par Jihervé (utiliser un circuit programmable comme expandeur de port) peut, en plus de diminuer le nombres d'IO prises sur le µC principal, fortement simplifier la programmation et le débug du projet : en dédiant un µC au contrôle des moteurs, tu limites la charge de travail dévolue au µC principal. Au lieu de devoir constamment envoyer les deux ou 4 signaux correspondant à chaque moteur, il peut se contenter de dire au second µC "fait tourner le moteur de 10 tours dans tel sens".
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  18. #14
    invite97037714

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    J'aime bien l'idée, après c'est peu être un peu gros, disons que si je remplace les ULN par ça j'y gagne vu que je peux me passer composants intermédiaires, mais les phases des moteurs ne demandant pas plus de 500mA, l'option MIC5800 avec des démultiplexeur sera plus compact et j'utiliserai moins d'E/S, mais peut etre que j'oublie un détail génant car vous n'avez pas tous l'air très fan de l'idée...
    Pour l'expandeur de port, je pense effectivement que ça peut etre une bonne idée.

  19. #15
    Antoane
    Responsable technique

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Bonjour,

    Quelle solution est "un peu grosse" ? celle utilisant un µC comme expandeur de port : rien n'oblige à utiliser un arduino complet pour cela (au contraire ) et on trouve des µC dans des boitiers minuscules. Il faudra par ailleurs un interface de puissance quelle que soit la solution retenue.

    Tu as noté que le MIC5800 est limité à 500 mA, que la tension perdue en son sein est déjà de 1.3 à 1.6 V sous 350 mA, que la puissance max dissipable est limitée à environ 1 W (attention si plusieurs sorties doivent être commandées en même temps) et, enfin, qu'il ne peut qu'absorber du courant et non en fournir.

    Tu parles de moteurs "brushless 4 fils" : il s'agit de moteurs pas-à-pas bipolaires (ou de brushless dont le neutre est accessible) ? Le MIC5800 ne permet pas de commander de moteurs pas-à-pas bipolaire.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  20. #16
    invite97037714

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Non, je parlais de la solution avec des drivers qui est effectivement pas mal pour des moteurs plus puissants mais tiens quand même un peu de place.
    Pour le MIC5800 la limitation de 500mA, c'est aussi celle de ULN2003 donc je sais que ça suffit, les moteurs d'alimentent en 5V et mon alim sera entre 6 et 7V, donc la tension perdue en vce pourra passer (à tester), enfin les moteurs sont à 5 fils comme sur le montage qu'il donne dans le datasheet du MIC5800. Ca devrait ête bon ?
    Désolé de ne pas avoir donné plus de détails dès le début mais la question était assez générale au début.

  21. #17
    invite97037714

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Après réflexion ce n'est peut etre pas si gros, je ne trouve pas les dimensions mais si les pins son au pas, ça doit fait 2cm, si j'en met 5 rangées de 5 ça me fait 10x10cm , je ne suis pas sûr de faire mieux avec les MIC5800. Et je peux passer sur des moteurs plus gros si nécessaire.

  22. #18
    polo974

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    tu peux trouver des modules A4988 ou DRV8825 à 60 ou 90 cts pièce sur ali.
    ces modules sont fait pour piloter en courant les moteurs, pas juste envoyer sauvagement la pleine alim.

    attention, les moteurs 5 fils sont une plaie, car le 5ème fil est la mise en commun du point milieu des bobines... impossible de les utiliser directement en bipolaire.

    parfois, on peut couper cette jonction, pas toujours. mais du coup, les bobines sont en série, donc il faudrait doubler la tension (par ex, prendre des 5V et alimenter en 12...).

    parfois, on peut séparer les 2 bobines et les mettre en parallèle, mais là, ça devient chaud...

    le fait de mettre les bobines en // et de piloter en courant permet de monter en vitesse, car quand un moteur tourne, il apparaît une tension (FCEM: force contre électromotrice pour les intimes) aux bornes qui s'oppose au passage du courant (si alimenté en tension (ULN and co) moteur bloqué (ou ici, pas de step) => fort courant, fort couple, mais 0 puissance. moteur à vide, (ici step rapide), => forte FCEM, faible courant, faible couple (perte de step) et quasi 0 puissance...)

    d'où l'intérêt des modules A4988 ou DRV8825 qui maintiennent un courant quelque soit la vitesse... (mais il faut tout sauf des 5 fils)

    attention, en pour chaque module il faut une capa de 100uF (35V pour pouvoir brancher en 24V). voir les cartes ramps 1.4 par exemple...
    Jusqu'ici tout va bien...

  23. Publicité
  24. #19
    invite97037714

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Oui j'ai vu pour les 5 fils, ceux que j'ai sont modifiable en coupant la jonction, mais il faut que j'oublie mon alim 6-7V, de toute façon apparemment le minimum pour les A4988 c'est 8V...

  25. #20
    invite97037714

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Pour info, je vais donc partir sur des A4988 connectés directement sur l'arduino (pour l'instant), avec une alim 12V.
    Je conserve mes moteurs (28BYJ-48) en supprimant le 5e fil et la jonction entre les deux bobines car j'ai du mal à trouver l'équivalent en moteur bipolaire. Apres test, avec seulement 200mA (12V) j'ai déjà une force (torque) importante et je ne perds pas de pas à 500Hz, je verrais si je peux aller plus haut en augmentant l'intensité plus tard...

    Merci pour votre aide en tout cas, je ne manquerai pas de vous tenir informé si je touche au but

  26. #21
    invite97037714

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Petite question au sujet des condensateurs près de chaque A4988, je suis en train de dessiner la carte et je remarque que si je mettais un condensateur sur deux je ne serai pas plus loin de chaque A4988, du coup est-ce que je peux mettre un seul condensateur de capacité double pour chaque couple de A4988 ? Est que la tension doit aussi être plus élevé si les pics de tension s'additionnent ?
    Dernière modification par greg2fs ; 27/08/2019 à 12h16.

  27. #22
    Antoane
    Responsable technique

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Bonjour,

    Veux-tu nous proposer un routage ?
    Le routage/câblage des condensateurs de découplage est critique et il semble difficile d'admettre que si je mettre un condensateur sur deux n'augmenterait pas l'impédance de l'alimentation.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  28. #23
    invite97037714

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Je place les condensateurs juste au dessus des A4988, au plus proche du VMOT et comme tous mes A4988 sont cote à cote, le placer entre les deux (toujours au dessus) ça n'ajoute que quelques millimètres. Peut être qu'il faut que se soit vraiment à coté ? Mais la doc ne parle que de "proche" donc c'est vague...

  29. #24
    Antoane
    Responsable technique

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Difficile à dire sans routage sur lequel discuter.
    On sait néanmoins que quelques millimètres de piste en plus peuvent avoir un gros impact sur l'inductance parasite, et par suite sur les sur-tensions au blocage. Regarde par exemple le layout proposé dans la datasheet du A4988 :
    Nom : fs233.jpg
Affichages : 48
Taille : 119,5 Ko
    il n'était pas physiquement possible de faire plus dense.

    Quelques planches sur le découplage (même si a priori destiné au découplage de circuits logiques), voir en particulier la #29 : http://web.mst.edu/~jfan/slides/Archambeault1.pdf sur comment router ce genre de composants
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  30. Publicité
  31. #25
    invite97037714

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    J'ai un doute, quand je parlais du A4988 par abus de langage je voulais parlais d'un montage utilisant le A4988 (comme celui ci : https://www.gotronic.fr/art-driver-d...1182-21718.htm) mais j'ai l'impression d'après le layout que tu montre, que le condensateur en question est déjà intégré au montage pourtant le shéma minimal donné sur la page de gotronic montre bien un condensateur externe, peux tu m'éclairer ?
    Dernière modification par greg2fs ; 29/08/2019 à 17h50.

  32. #26
    invite97037714

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Apparemment il en faut un quand même :
    Warning: This carrier board uses low-ESR ceramic capacitors, which makes it susceptible to destructive LC voltage spikes, especially when using power leads longer than a few inches. Under the right conditions, these spikes can exceed the 35 V maximum voltage rating for the A4988 and permanently damage the board, even when the motor supply voltage is as low as 12 V. One way to protect the driver from such spikes is to put a large (at least 47 µF) electrolytic capacitor across motor power (VMOT) and ground somewhere close to the board.
    Au plus loin je dois être à 0.6 pouces, je verrais, si les cartes plus éloignées des condensateurs grillent je saurai pourquoi
    Dernière modification par greg2fs ; 29/08/2019 à 17h58.

  33. #27
    Antoane
    Responsable technique

    Re : Contrôler plusieurs moteurs brushless avec un minimum d’E/S

    Bonsoir,

    Le condensateur intégré au module distribué par Gotronic est un petit MLCC capable de répondre aux demandes rapides de courant liées aux premiers instants suivantes les commutations. Ce composant n'a cependant pas une capacité suffisante pour fournir de l'énergie pendant longtemps. Il faut donc un condensateur de plus forte capacité, éventuellement situé un peu plus loin du module.
    Cet article propose une explication du rôle des différents condensateurs découplant une cellule de commutation (le circuit-intégré A4988 en contient 2), et en particulier la découpe du spectre en plusieurs bandes fréquentielles.

    Il est alors effectivement possible de ne mettre qu'un condensateur pour plusieurs cartes.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

Discussions similaires

  1. [Programmation] Déclenchement de plusieurs moteurs avec un voltmètre arduino
    Par batlight dans le forum Électronique
    Réponses: 8
    Dernier message: 04/12/2017, 14h36
  2. Contrôler un moteur brushless ?
    Par roger2000 dans le forum Technologies
    Réponses: 5
    Dernier message: 01/02/2015, 18h53
  3. Contrôler deux moteurs pas-à-pas avec un joystick
    Par Yvan_Delaserge dans le forum Électronique
    Réponses: 26
    Dernier message: 28/07/2014, 13h35
  4. Contrôler un moteur brushless ?
    Par chimico² dans le forum Électronique
    Réponses: 16
    Dernier message: 13/07/2014, 08h59
  5. Contrôler 2 moteurs avec un Picaxe.
    Par kioub dans le forum Électronique
    Réponses: 5
    Dernier message: 29/05/2010, 02h15
Découvrez nos comparatifs produits sur l'informatique et les technologies.