mardi 10 janvier 2017

Fabrication d'un pilote pour moteur pas à pas

Je vous présente aujourd'hui un petit compte rendu de la réalisation d'un pilote de moteur pas à pas: vous y branchez un moteur et une alimentation, et il s'agit d'appuyer sur quelques boutons pour faire tourner le moteur dans un sens ou dans l'autre, modifier sa vitesse de rotation, etc.

Cet appareil peut se révéler utile lorsque vous désirez vérifier si un moteur pas à pas fonctionne correctement, ou pour utiliser un moteur pas à pas de façon manuelle, sans que son fonctionnement soit automatisé par des capteurs.

À la base de notre circuit:  le traditionnel duo Arduino/L293D, dont j'avais déjà parlé dans ce blog il y a quelques années déjà.  Mais cette fois, puisque je veux un produit autonome, j'ai choisi d'utiliser un circuit intégré Atmega 328 plutôt qu'une carte Arduino complète.

Un petit cahier des charges:
  • Une seule alimentation permet d'alimenter à la fois le moteur pas à pas et les circuits intégrés Atmega et L293D.  Ces circuits intégrés nécessitent une tension de 5 V, alors que les moteurs requièrent souvent une plus grande tension:  un régulateur de tension est donc nécessaire.
  • Un bouton poussoir  marche/arrêt permet de mettre le moteur en marche, ou de l'arrêter. Une LED s'allume pour indiquer si ce bouton  est à l'état "marche".
  • Un bouton poussoir "marche inverse" permet d'inverser le sens de rotation du moteur.  Lui aussi est accompagné d'une LED indiquant si le mode "marche arrière" est en fonction.
  • Un potentiomètre permet de modifier la vitesse de rotation du moteur.
  • Un dernier bouton permet de faire tourner le moteur d'un seul pas à la fois.
Premier prototype, comportant une carte Arduino Uno

Même si le but final était de produire un circuit autonome comportant un microcontrôleur Atmega 328, j'ai tout de même commencé, dans une première phase de développement et de débogage, par un prototype sur platine d'essai branché à une carte Arduino Uno.

À cette étape, la carte Arduino fournit l'alimentation du circuit intégré, mais le moteur est alimenté par une source de tension externe.

Pour les 3 boutons, j'ai choisi d'utiliser les résistances pull-up interne de l'Arduino.  C'est pour cette raison que mes boutons ne comportent pas de résistance pull-up ou pull-down visible sur le circuit.

Le schéma ci-dessous montre où brancher chaque pin du L293D.


Et voici un schéma du circuit complet...



Sketch

Le sketch utilise la bibliothèque "stepper" qui est fournie avec l'IDE Arduino.  Puisque j'utilise les résistances pullup internes, digitalRead retourne "0" quand les boutons sont enfoncés, et "1" quand ils ne le sont pas.



Deuxième prototype, comportant un Atmega 328 sur breadboard

Rien ne vous empêche de vous arrêter à cette étape du circuit et, par exemple, en faire un shield pour votre carte Arduino.  Mais comme je le mentionnais au début de l'article, je préférais produire un circuit pouvant fonctionner de façon parfaitement autonome.

L'étape suivante consistait donc à graver le bootloader sur un Atmega 328 vierge, puis à y graver mon sketch. Pour une marche à suivre détaillée, je vous invite à consulter mon vieil article intitulé "Fabriquer son propre Arduino sur une breadboard".

Il restait ensuite à migrer les connexions de la carte Uno vers l'Atmega, d'ajouter un quartz de 16 MHz, ainsi qu'un régulateur de tension LM7805.

Le schéma ci-dessous indique où est branchée chaque pin de l'Atmega 328.


Du côté, du L293, ça demeure la même chose que dans le circuit précédent:


Les deux circuits intégrés demandent des tension d'alimentation de 5 V, alors que notre moteur pas à pas en exigera peut-être plus, d'où l'utilisation d'un régulateur linéaire  LM7805 qui abaissera la tension de départ (7 V ou plus) en une tension de 5 V.  J'en ai profité pour ajouter une LED qui indique que la carte est alimentée.

Et voici le schéma complet du circuit...




Le produit fini 

Voici le circuit proprement soudé sur une plaque pastillée.  Tout fonctionne tel que désiré.



Yves Pelletier   (TwitterFacebook)

6 commentaires:

  1. SVP je veut le programme de ATMEGA32 pas de l arduino

    RépondreSupprimer
    Réponses
    1. Ça semble une bonne idée. Je vous souhaite beaucoup de succès dans vos efforts de programmation.

      Supprimer
  2. sur le 7805 les condensateursde découplage sont sur tous les que j'ai vu des 100nF et non pas des 10µF ?

    RépondreSupprimer
  3. Super votre description je vais récupérer et modifier une partie de Votre code pour l intégrer a mon application super clair et didactique
    encore bravo

    RépondreSupprimer
  4. Bonjour! Puis-je avoir accès au code ATMEGA32 en question?

    RépondreSupprimer
  5. Bonjour et merci pour cet exemple qui va me faire gagner un temps précieux.
    Je découvre actuellement l'Arduino. J’espère un jour pouvoir posséder suffisamment de compétences afin de pouvoir, comme vous le faite si bien, les partager avec les autres.
    Encore merci.

    RépondreSupprimer