Moteur pas à pas BYJ48

Le moteur pas à pas est un moteur contrôlé par une série de bobines électromagnétiques. L'arbre central a une série d'aimants montés dessus, et les bobines entourant l'arbre reçoivent alternativement du courant ou non, créant des champs magnétiques qui repoussent ou attirent les aimants sur l'arbre, entraînant la rotation du moteur.

Cette conception permet un contrôle très précieux du moteur. Il existe deux types de base de moteurs pas à pas, les moteurs pas à pas unipolaires et les moteurs pas à pas bipolaires.

Dans cet instructable, je vais parler d'un moteur pas à pas unipolaire 28-BYJ48.

Le moteur pas à pas unipolaire a cinq ou six fils et quatre bobines (en fait deux bobines divisées par des connexions centrales sur chaque bobine). Les connexions centrales des bobines sont liées entre elles et utilisées comme connexion d'alimentation. Ils sont appelés steppers unipolaires car la puissance vient toujours sur ce pôle.

Étape 1: Spécifications, pilote de moteur

Il existe de nombreux types de pilotes, L293, ULN2003, A3967SLB, etc.,

Le 28-BYJ48 vient même avec Breakout utilisant ULN2003 comme puce de pilote de moteur.

Spécifications pour ce moteur "Et vous pouvez télécharger la fiche technique de la pièce jointe"

Tension nominale: 5VDC
Nombre de phases 4
Rapport de variation de vitesse 1/64
Angle de foulée 5, 625 ° / 64
Fréquence 100 Hz
Résistance DC 50Ω ± 7% (25 ℃)
Fréquence inactive de traction> 600 Hz
Fréquence de traction au ralenti> 1000 Hz
Couple en traction> 34, 3 mN.m (120 Hz)
Couple auto-positionné> 34, 3 mN.m
Couple de friction 600-1200 gf.cm
Tirez au couple 300 gf.cm
Classe d'isolation A

et les schémas de cette évasion montrés comme les images sur la pièce jointe

Notez que si vous souhaitez utiliser L293 au lieu de ULN2003, vous devrez laisser le fil rouge Aucune connexion.


Matériaux :

Tu auras besoin de :

1) Carte Arduino.

2) Moteur pas à pas BYJ48 5v

3) Module de pilote Moror ULN2003

4) Cavalier.

5) Source de tension 5v "en option".

Pièces jointes

  • 28BYJ-48.pdf Télécharger

Étape 2: Code Arduino.

L'IDE Arduino prend en charge une bibliothèque pour moteur pas à pas, très facile à utiliser, après connexion du moteur avec arduino Vous pouvez télécharger le croquis sur l'arduino.

Mais ...

Vous devez tenir compte de quelque chose:

Ce moteur a un rapport d'engrenage de 64 et un angle de foulée de 5, 625 °, ce moteur a donc un pas de 4096.

steps = Nombre d'étapes dans One Revolution * Gear ratio.

pas = (360 ° / 5, 625 °) * 64 "Rapport de démultiplication" = 64 * 64 = 4096. cette valeur la remplacera dans The arduino Sketch
Pour le moteur pas à pas adafruit, l'angle de foulée 7, 5 ° et le rapport d'engrenage sont de 16, donc le nombre d'étapes en 1 révolution est:

étapes dans One Revolution = 360 / 7, 5 = 48.

pas = 48 * 16 = 768
Ce sera différent selon le moteur que vous utilisez, alors vérifiez la fiche technique de votre moteur pas à pas pour calibrer ces valeurs

Fiche technique du moteur 28-BYJ48.

Driver Driver ULN2003 BreakOut connecté à Arduino de IN1 - IN4 à D8 - D11 respectivement

Pour alimenter votre moteur, recommandé d'utiliser une alimentation externe avec au moins 5V-500mA, ne l'alimentez pas directement à partir de la carte Arduino 5V.

Étape 3: Problème de direction de la bibliothèque ... et comment le résoudre.

Lorsque vous téléchargez l'esquisse sur l'arduino, le moteur tourne dans un sens En tapant la commande:

étape (étapes);
Vous devez donc mettre le nombre de pas pour faire tourner le moteur.

La référence a dit que vous pouvez mettre la valeur positive pour tourner dans un sens, négative pour tourner dans l'autre.

Si c'est OK avec votre moteur pas à pas, vous n'avez pas besoin de lire ce qui suit.

Sinon, votre moteur tourne dans la même direction même si vous mettez les étapes Valeur positive ou négative, quel est le problème?

Ce moteur doit fonctionner comme le tableau sur l'accessoire.

la bibliothèque arduino Stepper doit être modifiée pour correspondre à cette exigence.

J'ai écrit un code qui permet à ce moteur de se déplacer dans le sens horaire et antihoraire

Code à l'étape suivante:

Étape 4: modifier le code

le code final pour ce moteur pas à pas:

/ *
BYJ48 Code moteur pas à pas
Relier :
IN1 >> D8
IN2 >> D9
IN3 >> D10
IN4 >> D11
VCC ... 5V Préfère utiliser une source externe 5V
Gnd
écrit par: Mohannad Rawashdeh
//www.instructables.com/member/Mohannad+Rawashdeh/
28/9/2013
* /

#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
int Étapes = 0;
Direction booléenne = true; // gre
unsigned long last_time;
non signé long currentMillis;
int steps_left = 4095;
Longtemps;
void setup()
{
Serial.begin (115200);
pinMode (IN1, SORTIE);
pinMode (IN2, SORTIE);
pinMode (IN3, SORTIE);
pinMode (IN4, SORTIE);
// délai (1000);

}
boucle vide ()
{
while (steps_left> 0) {
currentMillis = micros ();
if (currentMillis-last_time> = 1000) {
pas à pas (1);
time = time + micros () - last_time;
last_time = micros ();
steps_left--;
}
}
Serial.println (heure);
Serial.println ("Attendez ...!");
retard (2000);
Direction =! Direction;
steps_left = 4095;
}

void stepper (int xw) {
pour (int x = 0; x commutateur (étapes) {
cas 0:
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
Pause;
cas 1:
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, HIGH);
Pause;
cas 2:
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
Pause;
cas 3:
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, HIGH);
digitalWrite (IN4, LOW);
Pause;
cas 4:
digitalWrite (IN1, LOW);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
Pause;
cas 5:
digitalWrite (IN1, HIGH);
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
Pause;
cas 6:
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
Pause;
cas 7:
digitalWrite (IN1, HIGH);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, HIGH);
Pause;
défaut:
digitalWrite (IN1, LOW);
digitalWrite (IN2, LOW);
digitalWrite (IN3, LOW);
digitalWrite (IN4, LOW);
Pause;
}
SetDirection ();
}
}
void SetDirection () {
if (Direction == 1) {Steps ++;}
if (Direction == 0) {Steps--; }
if (étapes> 7) {étapes = 0;}
if (étapes <0) {étapes = 7; }
}



Articles Connexes