dimanche 18 novembre 2012

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

Voici une petite marche à suivre pour contrôler un moteur pas à pas unipolaire au moyen d'un Arduino et d'un ULN2003.

L'ULN2003 regroupe sur un même circuit intégré 7 transistors darlington, ce qui permet d'alimenter un moteur avec un courant beaucoup plus intense que ce que peut tolérer un microcontrôleur comme l'Arduino. Des modules à base d'ULN2003 sont vendus sur eBay pour moins de $2 (il s'agit de faire une recherche avec les mots clés "stepper motor driver board UL2003").

Commençons par une mise au point importante:  l'ULN2003 fonctionne très bien pour des moteurs pas à pas unipolaires (ceux qui sont munis de 5 ou 6 fils), mais il n'est pas du tout conçu pour piloter des moteurs pas à pas bipolaires (ceux qui ne comportent que 4 fils).  Pour un moteur bipolaire, il faudra utiliser un autre circuit intégré, comme par exemple le L293D ou le L297. Si j'avais su ça avant, je n'aurais pas perdu quelques heures à tenter sans succès de faire tourner un moteur bipolaire avec ce module!

Quatre connecteurs situés du côté gauche de la carte permettent de brancher les sorties numériques de l'Arduino.  Si vous désirez utiliser les exemples fournis avec l'environnement de programmation Arduino, vous branchez la sortie 8 de l'Arduino à l'entrée "IN1", la sortie 9 à "IN2, la sortie 10 à "IN3", et la sortie 11 à "IN4".

Les connecteurs situés dans le bas de la carte, juste en dessous de l'ULN2003 servent à brancher la source de tension qui alimentera le moteur:  pas question d'utiliser la sortie 5 volts de l'Arduino car le moteur risquerait de demander beaucoup trop de courant!  On suggère ici de 5 à 12 volts, même si l'ULN2003 peut en principe tolérer jusqu'à 30 V (en dépassant 12 V, je suppose qu'on risquerait de griller les LEDs indicatrices présentes sur la carte).

Il ne reste plus qu'à brancher le moteur, ce qui n'est pas tout à fait évident si votre moteur provient d'une vieille imprimante et que vous ne disposez d'aucune documentation à son sujet.  Au moyen d'un multimètre, vous pourrez probablement identifier le fil qui est commun aux deux bobines:  c'est celui qui présente la plus faible résistance électrique par rapport aux autres fils.

Par exemple, le moteur que j'ai utilisé (un moteur Mitsumi pris dans une vieille imprimante StyleWriter d'Apple) comporte 5 fils:  blanc, jaune, noir, rouge et brun.   La résistance entre le fil noir et n'importe lequel des autres fils est de 80 Ω, alors que la résistance pour toutes les autres paires (excluant le fil noir) est de 160 Ω.  Il fallait donc relier le fil noir à la cinquième sortie de la carte (celle que j'ai identifiée "Moteur commun" dans la photo ci-dessus).

Pour brancher les 4 autres fils au bon endroit, j'y suis allé par essai-erreur!  Quand le moteur est mal branché, il vibre à la place de tourner...  Après 4 tentatives infructueuses, j'ai fini par faire tourner mon moteur correctement en branchant son fil blanc à "Moteur 1", son fil brun à "Moteur 2", son fil jaune à "Moteur 3", et son fil rouge à "Moteur 4"  (ce code de couleur n'a rien d'universel:  il faut essayer de trouver l'agencement qui conviendra à votre propre moteur).

Je n'inclus pas de sketch puisque je me suis contenté d'utiliser (avec des modifications mineures) les exemples "stepper_oneRevolution" et "stepper_oneStepAtATime" qui sont fournis dans l'environnement de programmation Arduino (vous y accédez au moyen du menu Fichier / Exemples / Stepper).

Lorsque votre moteur fonctionne, vous pouvez, en l'observant, déterminer le nombre de "steps" qu'il fait à chaque tour (c'était 48 pour mon moteur).

Et si on remplaçait l'Arduino par un MSP430 Launchpad?  À la condition d'utiliser Energia, c'est exactement la même chose qu'avec un Arduino!  La librairie "Stepper" est fonctionnelle, et les mêmes exemples sont disponibles dans les menus.  Si vous ne modifiez pas les exemples, vous reliez la sortie P2.0 du Launchpad à l'entrée "Moteur 1" de la carte ULN2003 (voir photo plus haut), P2.1 à "Moteur 2", P2.2 à "Moteur 3" et P2.3 à "Moteur 4".  La tension de sortie de 3,3 volts du Launchpad est suffisante pour faire réagir l'ULN2003.

À lire aussi:  Contrôle d'un moteur pas à pas avec un L293

Yves Pelletier (Twitter: @ElectroAmateur)

4 commentaires:

  1. Bonjour, je trouve votre système tres intéressant, et j'ai donc fait le même pour moi. Juste une chose pour moi, et la je vous demanderais votre aide si vous le souhaitez. je voudrais déclencher le moteur par une impulsion de la télécommande de mon APN.Merci d'avance. Claude

    RépondreSupprimer
  2. Bonjour j'aimerais le piloté sans arduino. Peut être avec un Temporisateur électronique

    RépondreSupprimer
  3. Bonjour j'ai acquit les modules ULN2003 avec les moteurs 28byj-48,je n'ai pas de Arduino ,comment faire pour les faire fonctionner ,je suis createur d'automates et modelisme merçi et eventuellement le module arduino pour faire marcher tout ça .

    RépondreSupprimer
  4. Merci beaucoup pour ce bon travail.

    RépondreSupprimer