++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Découverte du moteur Nema 17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. include:: volabid.rst :Date de création: 07/06/2025 :Date dernière maj: 28/06/2025 ==================================================================================================== Introduction ==================================================================================================== Les moteurs pas à pas NEMA 17 sont un type de moteur à courant continu. Les moteurs pas à pas ne tournent pas, ils avancent par pas, et le moteur NEMA17 a un angle de pas de 1,8 degré, ce qui signifie qu’il parcourt 1,8 degré à chaque pas. Les moteurs pas à pas permettent un contrôle précis et peuvent être différenciés en fonction du couple, du nombre de pas par tour et de la tension d’entrée. .. image:: images/ pap-fonctionnement.png :width: 500 px :align: center .. index:: single: nema ==================================================================================================== Explications ==================================================================================================== .. index:: single: bobine .. index:: pair: stator; rotor .. image:: images/ schema-pap.png :width: 300 px :align: center Le rotor est généralement un aimant permanent et le stator est entouré de bobines. Lorsque le courant circule des champs magnétiques sont générés dans le stator qui attirent ou repousse le rotor. En activant les bobines étape l’une après l’autre dans un ordre particulier nous pouvons obtenir un mouvement continu du rotor et l’arrêter à n’importe quelle position. Repérage ---------------------------------------------------------------------------------------------------- .. image:: images/ enroulements-nema.png :width: 400 px :align: left Comme vous pouvez le voir, ce moteur a un agencement bipolaire à 4 fils. Ces fils sont connectés en deux enroulements séparés. .. image:: images/ moteur-bipolaire.jpg :width: 300 px :align: center Pour reconnaitre les différentes bobines, utiliser un multimètre en ohmètre et vérifier la valeur entre deux fils. Si vous obtenez un valeur qui approche 3 Ohms, vous avez trouvez une bobine, sinon aucune continuité. ==================================================================================================== Première manipulation ==================================================================================================== Matériel ---------------------------------------------------------------------------------------------------- - Moteur pas à pas Nema 17. - Carte Arduino Uno. - Pilote DRV8825. - Alimentation courant continu 12V. Plan de câblage ---------------------------------------------------------------------------------------------------- .. image:: images/ cablage-premier-test.png :width: 400 px :align: center **ATTENTION** Avant de mettre sous tension, il faut régler le courant maximum du driver DRV 8825. - `Driver de moteur pas à pas DRV8825`_ .. _`Driver de moteur pas à pas DRV8825` : https://moteur-nema.bitbucket.io/driverdrv8825.html 1) Programmation : rotation continue dans un sens ---------------------------------------------------------------------------------------------------- :: const int stepPin = 2; const int dirPin = 3; const int enablePin = 8; // Optionnel : désactivation du moteur const int stepsPerRev = 200; int pulseWidthMicros = 100; // microseconds int millisBtwnSteps = 2; void setup() { Serial.begin(9600); pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT); pinMode(enablePin, OUTPUT); digitalWrite(dirPin, HIGH); digitalWrite(enablePin, LOW); // Active le moteur Serial.println(F("DRV8825 Initialized")); } void loop() { digitalWrite(stepPin, HIGH); delay(2); digitalWrite(stepPin, LOW); delay(2); } **Fonctionnement :** 1. Initialisation (setup()): - Configure les broches stepPin, dirPin et enablePin en sortie. - Définit la direction du moteur (dirPin sur HIGH). - Active le moteur (enablePin sur LOW). - Affiche un message de confirmation sur le moniteur série. 2. Boucle principale (loop()): - Envoie une impulsion à la broche stepPin pour avancer d'un pas. - Attend 2 millisecondes (delay(2)). - Met stepPin à LOW pour compléter l'impulsion. - Attend encore 2 millisecondes avant de recommencer. Résultat : Le moteur pas à pas avance continuellement, avec un délai de 2 ms entre chaque pas. Cela permet un mouvement fluide et régulier du moteur. Si vous voulez ajuster la vitesse, vous pouvez modifier millisBtwnSteps ou utiliser une bibliothèque comme AccelStepper pour un contrôle plus précis. 2) Programmation : rotation alternative, sens horaire, sens antihoraire ---------------------------------------------------------------------------------------------------- :: const int stepPin = 2; const int dirPin = 3; const int enablePin = 8; // Optionnel : désactivation du moteur const int stepsPerRev = 200; int pulseWidthMicros = 100; // microseconds int millisBtwnSteps = 2; void setup() { Serial.begin(9600); pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT); pinMode(enablePin, OUTPUT); digitalWrite(enablePin, LOW); // Active le moteur Serial.println(F("DRV8825 Initialized")); } void loop() { Serial.println(F("Running clockwise")); digitalWrite(dirPin, HIGH); // Enables the motor to move in a particular direction // Makes 200 pulses for making one full cycle rotation for (int i = 0; i < stepsPerRev; i++) { digitalWrite(stepPin, HIGH); delay(millisBtwnSteps); digitalWrite(stepPin, LOW); delay(millisBtwnSteps); } delay(1000); // One second delay Serial.println(F("Running counter-clockwise")); digitalWrite(dirPin, LOW); //Changes the rotations direction // Makes 400 pulses for making two full cycle rotation for (int i = 0; i < 2*stepsPerRev; i++) { digitalWrite(stepPin, HIGH); delay(millisBtwnSteps); digitalWrite(stepPin, LOW); delay(millisBtwnSteps); } delay(1000); } **Fonctionnement :** 1. Déclaration des constantes et des variables : - stepPin : Broche qui envoie les impulsions pour faire avancer le moteur. - dirPin : Broche qui définit la direction de rotation. - enablePin : Active ou désactive le moteur. - Affiche un message de confirmation sur le moniteur série. - stepsPerRev : Nombre de pas nécessaires pour une rotation complète (200 pas = 360°). - pulseWidthMicros : Durée de l'impulsion envoyée au moteur. - millisBtwnSteps : Temps entre chaque pas. 2. Initialisation (setup()): - Configure les broches en sortie. - Active le moteur (enablePin sur LOW). - Affiche un message de confirmation sur le moniteur série. 3. Boucle principale (loop()): - Première phase : Le moteur tourne dans le sens horaire (dirPin = HIGH) pendant 200 pas (une rotation complète). - Pause : Attente d'une seconde. - Deuxième phase : Le moteur tourne dans le sens antihoraire (dirPin = LOW) pendant 400 pas (deux rotations complètes). - Pause : Attente d'une seconde avant de recommencer. Résultat : Le moteur tourne alternativement dans les deux sens : - Sens horaire → 1 tour → Pause. - Sens antihoraire → 2 tours → Pause. - Répétition en boucle. ==================================================================================================== Sites de référence ==================================================================================================== - `How to Use DRV8825 Stepper Motor Driver`_ .. _`How to Use DRV8825 Stepper Motor Driver` : https://www.researchcell.com/electronics/how-to-use-drv8825-stepper-motor-driver - `Comment utiliser DRV8825 Driver moteur pas a pas avec Arduino`_ .. _`Comment utiliser DRV8825 Driver moteur pas a pas avec Arduino` : https://www.moussasoft.com/drv8825-driver-moteur-pas-a-pas-avec-arduino/ - `Comment utiliser NEMA 17 moteur pas à pas avec Arduino et le module pilote de moteur pas à pas A4988`_ .. _`Comment utiliser NEMA 17 moteur pas à pas avec Arduino et le module pilote de moteur pas à pas A4988` : https://www.moussasoft.com/comment-utiliser-nema-17-moteur-pas-a-pas-arduino-pilote-a4988/ - `Pilotage de moteur pas à pas 17hs15-1504s avec bibliothèque MTulnStepper`_ .. _`Pilotage de moteur pas à pas 17hs15-1504s avec bibliothèque MTulnStepper` : https://forum.arduino.cc/t/pilotage-de-moteur-pas-a-pas-17hs15-1504s-avec-bibliotheque-mtulnstepper/997286 - `Arduino : le CNC Shield`_ .. _`Arduino : le CNC Shield` : https://www.e-techno-tutos.com/2022/03/16/arduino-le-cnc-shield/ - `Module Driver A4988 pour Moteurs Pas-à-Pas`_ .. _`Module Driver A4988 pour Moteurs Pas-à-Pas` : https://www.atelierdelarobotique.fr/produit/module-driver-a4988-pour-moteurs-pas-a-pas - `Shield CNC pour Uno ARD-CNC-K1`_ .. _`Shield CNC pour Uno ARD-CNC-K1` : https://www.gotronic.fr/art-shield-cnc-pour-uno-ard-cnc-k1-27753.htm - `Stepper Motors and Arduino - The Ultimate Guide`_ .. _`Stepper Motors and Arduino - The Ultimate Guide` : https://www.youtube.com/watch?v=7spK_BkMJys ==================================================================================================== Tables et index ==================================================================================================== * :ref:`genindex` * :ref:`search` ==================================================================================================== Weblinks ==================================================================================================== .. target-notes::