Moteur pas à pas unipolaire + driver ULN2003 + Arduino

Utilisation de capteurs et composants électroniques avec Arduino.
Une fiche de tutoriel pour chaque.

Moteur pas à pas unipolaire + driver ULN2003 + Arduino

Messagepar tiptop » Jeu 5 Déc 2013 22:57

Pilotage avec une carte Arduino d'un moteur pas à pas unipolaire avec un driver ULN2003.

Image

Composants utilisés
La puce ULN peut aussi être utilisée séparément, par exemple ULM2803 (dip 18) qui comporte huit transistors Darlington et autorise jusqu'à 50V, 500mA (ULN2003 en dip 16 comporte 7 darlington et max 30V).

Principe de fonctionnement
Le moteur pas à pas à 4 phases réducté (1:64) peut être positionné sur une valeur angulaire précise.
Il possède un couple important permettant de l'utiliser dans la plupart des petits montages. Son driver ULN2003 (réseau de transistors Darlington) lui apporte la puissance que la carte Arduino ne peut pas fournir directement.

Image

Applications
Petits robots, mécanismes divers, modélisme ferroviaire, jouets, machines, etc...

Caractéristiques
  • Ce petit moteur très économique permet de motoriser précisément vos montages. Il fonctionne en 5V.
  • Le moteur comporte 64 pas par tour, soit une résolution angulaire de 5.625 °
  • Le couple de rotation est de 34 mN.m (~340 g.cm)
  • Des diodes de visualisation permettent de contrôler le bon fonctionnement des 4 phases (A, B, C, D).
  • Le driver ULN2003 fonctionne avec des moteurs unipolaires (avec 5 ou 6 fils) mais pas avec les moteurs bipolaires (4 fils) qui nécessitent un pont en H pour être pilotés.

Image

Câblage
Image

Le moteur se branche sur le driver ULN2003 avec son fil (fourni), muni d'un connecteur à 5 broches (avec détrompeur de sens de branchement).
  • Rouge = Commun
  • Orange = Pin1
  • Jaune = Pin2
  • Pourpre = Pin3
  • Bleu = Pin4
Image

Le driver ULN2003 est relié
  • à une alimentation de 5V DC pour le moteur (l'ULN supporte jusqu'à 30V mais pas les 4 LEDS de la carte ni le moteur DC) : +V et GND.
  • à la carte Arduino sur 4 pins digitales (pin 8- pin 11), configurées en sorties, avec 4 fils Dupont mâle / femelle.
    In1 -> pin 8
    In2 -> pin 9
    In3 -> pin 10
    In4 -> pin 11
  • Relier les masses de l'Arduino et de celle de l'alimentation séparée du moteur.

La position du jumper dépend de la source de tension utilisée, en position 3-4 avec une alimentation externe.

Image

Utilisation du driver avec d'autres moteurs
Le driver peut s'utiliser avec d'autres moteurs unipolaires.
Dans ce cas, repérer les 2 bobines avec un Ohmmètre en mesurant la résistance entre les 5 fils pris 2 à 2.
Le fil qui avec les autres présente la résistance maximale est le commun, c'est la broche 1 du connecteur.

Image

Dimensions mécaniques
  • Le moteur a pour diamètre 28 mm, épaisseur 19.3 mm, il entraîne un axe de 5 mm de diamètre avec méplat de 20.9 mm, de 8.2 mm de long.
    Il se fixe par deux trous (2 mm) diamétralement opposés espacés de 35 mm.
  • Le PCB rectangulaire de 31.7 x 3.5.0 mm se fixe par 4 vis aux coins.

Image

Image

Programmation
Le code pour Arduino, fait tourner le moteur 1 tour et marque une pause, affiche le temps de rotation par tour.

Code: Tout sélectionner
//**************************************************************
//Commande de moteur pas-à-pas unipolaire 4 fils
//tiptopboards.com 05/12/2013
// Driver ULN2003 et moteur réducté au 1:64
//
//**************************************************************
//Inclure la librairie stepper.h
 #include <Stepper.h>
 #define STEPS 100
 
  //Créer une instance de la classe stepper
  //Le moteur (fils 1 2 3 4) est branché sur les sorties 8 9 10 11 de l'Arduino (et sur GND, +V)
  Stepper small_stepper(STEPS, 8, 10, 9, 11);     // Sens horaire
 
  //Stepper small_stepper(STEPS, 11, 10, 9, 8);  // Sens anti-horaire en inversant 8 et 11 (si on préfère)
  int  Steps2Take = 0;  //Nombre de pas de rotation demandé au moteur
  long temps =0;          //Durée de rotation pour un tour
  //************************************************************
  // Pour un moteur de ce type : http://tiptopboards.com/151-moteur-pas-%C3%A0-pas-r%C3%A9duct%C3%A9-de-5v-4-fils-driver-.html
  // 64 pas par tour, 4 phases, angle de 5.625° selon les spécifications du moteur
  // Démultiplication 1:64 pour ce moteur réducté mécaniquement
  //   360° / 5.625° * 64 = 4096 angles avec la démultiplication
  //   360° / 5.625° * 64  * 4 bobines / 2 bipolaire = 2048 step / tour
 

void setup()
 {               
  Serial.begin(9600);     // 9600 bps
  Serial.println("Test de moteur pas a pas"); 
  }

void loop()
  {
  Serial.println("Moteur en marche "); 
  //Faire tourner le moteur
  small_stepper.setSpeed(10); //Vitesse de 300 (max) réduire ce chiffre pour un mouvement plus lent
  //100 permet d'éavoir un couple élevé >300 le moteur vibre sans tourner
 
  Steps2Take  = 2048;  // Une rotation complète avec 2048 pas (1 tour environ 4.5sec)
  //Pour tourner à l'envers de 6 fois 1/30eme de tour, simplement multiplier Steps2Take par 6/30 et mettre un moins pour inverser le sens
  // Exemple  Steps2Take  = -6*2048/30;
  temps = millis();
  small_stepper.step(Steps2Take);  //Ca tourne
  temps =  millis()- temps ;  //Chronomètre un rour complet  6.236 sec par tour à vitesse 200
  Serial.println(temps);      //Affiche le temps (en ms) pour un tour complet
  delay(2000);  //pause
 }


Réglage de la vitesse
Pour ce modèle de moteur :28byj-48
    Le couple décroît avec la vitesse de rotation. Au delà d'une vitesse = 300, le moteur ne tourne plus mais vibre : décrochage du pas à pas.
  • Avec vitesse = 200, un tour se fait en 6.2 sec.
  • Avec vitesse = 100, un tour se fait en 12.4 sec.
  • Une vitesse très lente =10 permet de visualiser avec les 4 leds la rotation des phases (effet de chenillard).

Références
Datasheet du circuit intégré ULN2003 Réseau de 7 transistors Darlington avec diode

Exemple d'utilisation : table XY
Image
http://letsmakerobots.com/node/31381
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 93
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Re: Moteur pas à pas unipolaire + driver ULN2003 + Arduino

Messagepar jdp2b » Jeu 26 Fév 2015 11:02

Bonjour merci pour se tuto, je voulais savoir si en utilisant le meme montage que vous, ce code permettrait de controler le moteur ??

#include <Stepper.h>

//pour un moteur de 200 pas par tour et brancher sur les broches 2, 3, 4, 5
Stepper moteur(200, 2, 3, 4, 5);

void setup()
{
moteur.setSpeed(30); //30 tours par minute
//(rappel : ici le moteur fait 200 pas par tour, on fera donc 6000 pas par minute)
}

void loop()
{
moteur.step(1000);
delay(100);
moteur.step(-1000);
delay(2000);
}
jdp2b
 
Messages: 1
Inscription: Mer 25 Fév 2015 19:54

Re: Moteur pas à pas unipolaire + driver ULN2003 + Arduino

Messagepar tiptop » Jeu 26 Fév 2015 11:54

Code: Tout sélectionner
setSpeed(30); //30 tours par minute

il tournera mais pas à 30t/min, dans un sens puis dans l'autre avec 2 pauses.
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 93
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Re: Moteur pas à pas unipolaire + driver ULN2003 + Arduino

Messagepar nationnal98 » Mar 12 Avr 2016 14:52

Bonjour,
Dans le cadre d'un projet j'ai également investi dans un moteur PAP dont le nom est 28BYJ-48 (ce qui semble semblable au vôtre).
Lorsque je téléverse le code dans l'arduino, le moteur PAP vibre mais ne tourne pas. De plus, les LEDs du driver basé sur un ULN2003A s'allument deux à deux, ce qui peut expliquer le fait que mon moteur ne tourne pas. D'où peut provenir ce problème ? Du code ou bien du branchement ? Je vous envoie mon code afin que vous puissiez le vérifier.

#include <Stepper.h>

int nombreDePas = 64;

Stepper monMoteur(nombreDePas,2,3,4,5);

void setup() {
monMoteur.setSpeed(9); //9 tours par minute

}

void loop() {
monMoteur.step(100);
delay(1000);

}
nationnal98
 
Messages: 1
Inscription: Mar 5 Avr 2016 17:09


Retourner vers Capteurs et composants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 10 invités