El 28BYJ-48 est un moteur pas à pas unipolaire faible coût et haute précision, idéal pour les projets électroniques, pour les imprimantes 3D, les machines CNC et la robotique. Sa taille compacte, sa faible consommation d'énergie et sa facilité d'utilisation en font un choix populaire pour les amateurs et les professionnels de l'électronique.
De plus, avec ce moteur, un module avec ULN2003, pour votre contrôle. De cette façon, nous disposons de tout le nécessaire pour pouvoir utiliser pleinement ce système, en utilisant un microcontrôleur ou une carte. Arduino ou similaire.
Qu'est-ce que le moteur pas à pas 28BYJ-48 ?
Un le moteur pas à pas est un type de moteur électrique qui se déplace par petits pas angulaires discrets, plutôt que par une rotation continue. Il fonctionne à l'aide d'un ensemble d'électro-aimants activés dans un ordre spécifique. En activant différents électro-aimants, un champ magnétique est créé qui attire le rotor du moteur, le faisant tourner pas à pas. Le nombre de pas par tour et la précision du mouvement dépendent de la conception spécifique du moteur et de la séquence de commande utilisée.
Parmi les moteurs pas à pas, nous en avons deux types :
- Unipolaire- Ils ont un seul jeu de bobines et nécessitent un contrôleur spécial pour inverser le courant et faire tourner le moteur dans les deux sens.
- Bipolaire- Ils disposent de deux jeux de bobines indépendantes, leur permettant de tourner dans les deux sens sans avoir besoin d'un contrôleur spécial.
Dans le cas du 28BYJ-28, il est de type unipolaire, comme je l'ai mentionné précédemment. Et, au sein de ce groupe, il se caractérise par les éléments suivants lunettes:
- Moteur pas à pas unipolaire: contrôle simple avec seulement 4 câbles.
- Réducteur intégré : offre une haute précision (0.088° par pas) et un couple (3 N·cm).
- Faible consommation d'énergie: 83 mA (modèle 5V) ou 32 mA (modèle 12V).
- Alimentation: 5V ou 12V (selon modèle).
- Prix économique: à partir de 1.2 € l'unité, ou un peu plus s'ils intègrent un module ULN2003.
Quant à la applications possibles, j'en ai déjà évoqué quelques-uns auparavant, mais je vous redonne ici quelques idées pour vos projets :
- Contrôle de vannes hydrauliques et pneumatiques.
- Robots articulés et bras robotisés.
- Positionnement du capteur.
- Tables tournantes pour scanners.
- Imprimantes 3D.
- Machines CNC.
Le moteur pas à pas ne fonctionne pas seul, il nécessite un autre élément. Dans ce cas, Le 28BYJ-48 est contrôlé par une carte avec un ULN2003 intégré, qui permet d'amplifier le courant des sorties Arduino pour alimenter les bobines du moteur. En activant les bobines dans le bon ordre, le moteur tourne pas à pas avec une grande précision.
Types de séquences et de phases de contrôle
Là diverses séquences de contrôle pour le 28BYJ-48, les plus courantes sont :
- Séquence pleine onde: active toutes les bobines en même temps.
- Séquence demi-pas: Active deux bobines adjacentes en même temps.
- Séquence d'étapes microscopiques: Active une bobine à la fois.
Voyons voir las phases en détail:
- Séquence monophasée: Dans une séquence monophasée, nous allumons une seule bobine à la fois. En prenant cette séquence d'allumage dans un tableau, les éléments suivants devraient être générés dans le brochage du moteur :
Étape | A | B | UNE' | B ' |
---|---|---|---|---|
1 | ON | de remise | de remise | de remise |
2 | de remise | ON | de remise | de remise |
3 | de remise | de remise | ON | de remise |
4 | de remise | de remise | de remise | ON |
- Séquence en 2 phases: on allume deux bobines corrélatives dans chaque phase, donc le champ magnétique généré est plus grand (41% de plus) donc le moteur a plus de couple, c'est-à-dire qu'on obtient plus de force. Point négatif, on double la consommation d'énergie. Quant au tableau, ce serait :
Étape | A | B | UNE' | B ' |
---|---|---|---|---|
1 | ON | ON | de remise | de remise |
2 | de remise | ON | ON | de remise |
3 | de remise | de remise | ON | ON |
4 | ON | de remise | de remise | ON |
- Séquence en demi-pas: C'est une autre des étapes que nous allons voir, vous pourrez découvrir ce qui vous intéresse le plus. Ici, nous allumons alternativement une et deux bobines, obtenant une précision d'un demi-pas. Il est utilisé dans les applications où la plus grande précision est requise, bien que des problèmes puissent survenir lorsque l'application atteint la limite de couple. L'expression de la séquence sous forme de tableau donne :
Demi-pas | A | B | UNE' | B ' |
---|---|---|---|---|
1 | ON | de remise | de remise | de remise |
2 | ON | ON | de remise | de remise |
3 | de remise | ON | de remise | de remise |
4 | de remise | ON | ON | de remise |
5 | de remise | de remise | ON | de remise |
6 | de remise | de remise | ON | ON |
7 | de remise | de remise | de remise | ON |
8 | ON | de remise | de remise | ON |
28BYJ-28 avec Arduino
La première chose est de bien connecter le module et moteur 28byj-48 à notre carte Arduino, pour ce faire, il vous suffit de réaliser les connexions suivantes :
- Broche – de ULN2003 à GND d’Arduino.
- Broche + de l'ULN2003 à Vcc (5v ou dans d'autres cas, s'il s'agit d'un moteur 12v, il faudrait utiliser une alimentation avec cette tension) d'Arduino.
- IN1, IN2, IN3 et IN4 de l'ULN2003 aux entrées numériques D8, D9, D10 et D11 de l'Arduino.
- Le moteur 28byj-48, connectez-le simplement au port du module ULN2003.
Maintenant que vous êtes connecté, il ne reste plus qu'à utiliser un exemple dans l'IDE Arduino, que vous pouvez utiliser tel quel pour l'expérimenter ou le modifier à votre guise. Dans cet exemple, toutes les tables de phases sont commentées, comme // devant la ligne, vous savez... Si vous souhaitez en utiliser une, supprimez simplement // devant les instructions.
//Definir los pines const int motorPin1 = 8; // 28BYJ48 In1 const int motorPin2 = 9; // 28BYJ48 In2 const int motorPin3 = 10; // 28BYJ48 In3 const int motorPin4 = 11; // 28BYJ48 In4 //Definición de variables int motorSpeed = 1200; //Velocidad del motor int stepCounter = 0; //Contador de pasos int stepsPerRev = 4076; //Pasos para un giro completo //Tablas de secuencia (descomentar la que necesites) //Secuencia 1-fase //const int numSteps = 4; //const int stepsLookup[4] = { B1000, B0100, B0010, B0001 }; //Secuencia 2-fases //const int numSteps = 4; //const int stepsLookup[4] = { B1100, B0110, B0011, B1001 }; //Secuencia media fase //const int numSteps = 8; //const int stepsLookup[8] = { B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001 }; void setup() { //Declarar los pines usados como salida pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); } void loop() { for (int i = 0; i < stepsPerRev * 2; i++) { clockwise(); delayMicroseconds(motorSpeed); } for (int i = 0; i < stepsPerRev * 2; i++) { anticlockwise(); delayMicroseconds(motorSpeed); } delay(1000); } void clockwise() { stepCounter++; if (stepCounter >= numSteps) stepCounter = 0; setOutput(stepCounter); } void anticlockwise() { stepCounter--; if (stepCounter < 0) stepCounter = numSteps - 1; setOutput(stepCounter); } void setOutput(int step) { digitalWrite(motorPin1, bitRead(stepsLookup[step], 0)); digitalWrite(motorPin2, bitRead(stepsLookup[step], 1)); digitalWrite(motorPin3, bitRead(stepsLookup[step], 2)); digitalWrite(motorPin4, bitRead(stepsLookup[step], 3)); }