vendredi 1 février 2013

Contrôle d'un moteur pas à pas avec un L293D (Arduino)

Voici un petit guide sur la façon de contrôler un moteur pas à pas au moyen d'un Arduino et d'un circuit intégré L293D.

1°  Le moteur:  bipolaire ou unipolaire?

Il existe deux types de moteurs pas à pas:  ceux qui sont bipolaires sont munis de 4 fils, et ceux qui sont unipolaires comportent 5 ou 6 fils. Les deux types de moteur peuvent être contrôlés sans problème avec un L293D.

2°  Identification des fils du moteur

Les moteurs bipolaires sont constitués de deux bobinages distincts; au moyen d'un multimètre, il est facile de déterminer quels fils partagent le même bobinage.  Si la résistance entre deux fils est faible (quelques ohms, ou quelques dizaines de ohms), c'est qu'ils partagent le même bobinage.  Si les deux fils font partie de bobinages différents, la résistance entre les deux fils est infinie.

Par exemple, j'ai un moteur bipolaire Mitsumi muni de 4 fils:  jaune, orange, brun et noir.  La résistance entre le fil jaune et le fil orange est de 31 Ω, et la résistance entre le fil brun et le fil noir est de 31 Ω également.   La résistance est infinie pour toutes les autres combinaisons de fils (jaune-noir, jaune-brun, orange-noir, orange-brun).  Je peux en déduire que le premier bobinage est alimenté par le fil jaune et le fil orange, et que le deuxième bobinage est alimenté par le fil brun et le fil noir.

Pour les moteurs unipolaires, c'est un peu plus compliqué:  chacun des deux bobinages est muni de 3 fils:  un à chaque extrémité, et un au centre.  De plus, il est fréquent que le centre des deux bobines soit branché au  même fil.

Par exemple:  J'ai un moteur de marque Brother qui comporte 6 fils.  La résistance entre le fil 1 et le fil 3 est de 70 Ω, la résistance entre le fil 1 et le fil 5 est de 140 Ω:  ces trois fils partagent le même bobinage et le fil 3 est au centre.   Un lien similaire existe entre les fils 2, 4 et 6.

Autre exemple:  j'ai un moteur Mitsumi muni de 5 fils: blanc, jaune, noir, rouge, brun.  La résistance est de 80 Ω entre le fil noir et n'importe quel autre fil, alors qu'elle est de 160 Ω pour toutes les autres paires de fil.  J'en déduis que le fil noir est relié au centre des deux bobinages.  Mais comment savoir quel fil (parmi jaune, rouge et brun) partage le même bobinage que le fil blanc?  Il faudra faire des essais:  si on branche les fils de façon incorrecte, le moteur ne tournera pas aussi bien qu'il le devrait (il s'agira alors de permuter les fils jusqu'à ce que le moteur fonctionne correctement).

3° Connections du L293

Le circuit intégré L293D est muni de 16 pins, qui seront branchées de la façon indiquée sur le dessin ci-dessous.


  • La pin 16 est l'alimentation du L293D, la pin 1 est le "chip enable" du bobinage 1 et la pin 9 est le "chip enable" du moteur 2.  Vous branchez tout ça à la sortie 5 V de l'Arduino.
  • Si vous désirez utiliser les exemples fournis avec le logiciel Arduino sans trop de modifications, vous branchez les pins 2, 7, 10 et 15 aux sorties 8, 9, 10, 11 de l'Arduino (vous pouvez utiliser d'autres sorties de l'Arduino à la place:  il s'agira de modifier le sketch en conséquence).
  • Les pins 3 et 6 sont branchées aux deux extrémités d'un même bobinage du moteur.  Les pins 11 et 14 sont branchées aux deux extrémités de l'autre bobinage.  Si vous moteur est unipolaire, vous branchez le centre des deux bobinages à la pin 8 du L293D.
  • Pour éviter d'endommager votre Arduino, votre moteur devrait être alimenté au moyen d'une alimentation externe dont la borne positive est reliée à la pin 8 .   
  • Les 4 pins "GND" doivent être reliées ensemble (ainsi qu'au GND de l'Arduino et à la borne négative de l'alimentation externe du moteur).

4° Programmation de l'Arduino

Grâce à la librairie "stepper", la programmation de l'Arduino est triviale.  Dans le menu Fichier → Exemples → Stepper,  vous pouvez choisir "stepper_oneRevolution":  votre moteur fera un tour complet dans un sens, puis un tour complet dans l'autre sens (pour ce faire, il faut régler la variable "stepsPerRevolution" à la bonne valeur (qui est de 48 pour la majorité des moteurs que je possède).  Vous pouvez aussi utiliser l'exemple "stepper_oneStepAtATime" et compter le nombre de pas effectués par votre moteur pendant un tour complet.

5°  Et sur un MSP430 Launchpad?

Pour contrôler un moteur pas à pas avec le MSP430, un L293 et le logiciel Energia, vous suivez exactement les mêmes instuctions qu'avec l'Arduino, sauf que les sorties 8, 9, 10 et 11 de l'Arduino sont remplacées par les sorties P2.0, P2.1, P2.2 et P2.3 du Launchpad.  Évidemment la sortie 5 V de l'Arduino est remplacée par la sortie VCC du Launchpad, et le GND de l'Arduino est remplacé par le GND du Launchpad.  Il ne vous reste plus qu'à essayer les exemples fournis dans Energia:  File → Examples → Stepper.


À lire aussi:

Contrôle d'un moteur pas à pas avec un ULN2003

Yves Pelletier (Twitter: @ElectroAmateur)

11 commentaires:

  1. salut à tous .
    Je voudrais savoir s'il est possible de juste tester mon moteur pas à pas avec seulement une launchPad , sans avoir à utiliser la puce L293 .
    Merci

    RépondreSupprimer
  2. Bonjour,
    Avec votre montage, ma carte arduino a planté et ne fonctionne plus. Je ne pense pas qu'il soit judicieux de brancher le 5V de l'arduino sur les chip enable de la L293D, qui m'ont délivré un courant de 12V en sortie lorsque j'ai branché mon alimentation externe. Si vous avez une idée du dysfonctionnement je suis preneur.

    RépondreSupprimer
    Réponses
    1. Les deux pins "chip enable" sont des entrées, et il est tout à fait judicieux de les contrôler avec une tension de 5 volts. Si les vôtres se comportent comme des sorties, votre L293D est défectueux ou mal branché.

      Supprimer
  3. salut j'ai un moteur bipolaire dont le nombre de pas est inconnue... j'aimerai le brancher directement à l'arduino sans passer par un microcontroleur car c'est un moteur que j'ai recuperer sur une imprimante et j'aimerai l'utiliser sans frais supplementaire (exepte le prix d'une arduino ;) ) pouvez vous m'aidez?

    RépondreSupprimer
    Réponses
    1. Un Arduino sans microcontrôleur, je ne crois pas que ça existe.

      Supprimer
  4. bonjour Monsieur
    merci pour votre article très intéressant sur les moteur pas à pas
    je me suis donc lancé , au montage de votre schéma et j'ai fait un copier/coller de votre code ..tout fonctionne hormis une chose ..mon moteur qui est un nema 17 " crante " en clair il tourne, mais on sent les vibrations de chaque pas ...? n’étant pas un connaisseur en moteur pas à pas , je me demande si c'est normal ou le moteur devrait avoir un fonctionnement " fluide " ..?
    en espérant un début de réponse de votre part
    cordialement
    christophe

    RépondreSupprimer
    Réponses
    1. La rotation d'un moteur pas à pas n'est jamais aussi fluide que celle d'un moteur électrique conventionnel. À certaines vitesses de rotation, ça peut passer inaperçu, mais si la vitesse est lente on perçoit chaque pas individuellement.

      Supprimer
  5. merci pour l'article ,j'ai une problème avec un moteur a 6 fils.s'il vous plaît quelqu'un peut m'aider et merci

    RépondreSupprimer
    Réponses
    1. Votre moteur a 4 fils actifs + 2 fils communs; Faites une recherche internet en utilisant la référence moteur pour les identifier!

      Supprimer
  6. moteur pas a pas bipolaire ne tourne pas

    RépondreSupprimer