Outils pour utilisateurs

Outils du site


wiki:tutoriels:arduino:moteur-pas-a-pas

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
wiki:tutoriels:arduino:moteur-pas-a-pas [2020/11/06 18:38]
damien.muti [Précaution d'emploi]
wiki:tutoriels:arduino:moteur-pas-a-pas [2022/06/21 15:31] (Version actuelle)
damien.muti [Câblage]
Ligne 40: Ligne 40:
   * [[https://components101.com/sites/default/files/component_datasheet/28byj48-step-motor-datasheet.pdf|sur le web : 28BYJ-48]]   * [[https://components101.com/sites/default/files/component_datasheet/28byj48-step-motor-datasheet.pdf|sur le web : 28BYJ-48]]
   * {{ :wiki:tutoriels:arduino:28byj48-step-motor-datasheet.pdf |En local : 28BYJ-48}}   * {{ :wiki:tutoriels:arduino:28byj48-step-motor-datasheet.pdf |En local : 28BYJ-48}}
 +
 +{{ :wiki:tutoriels:arduino:fiche_technique_moteur_pas_a_pas.png?400 |}}
 +
  
 Il est à noter que le couple de rotation de ce moteur est de **34.3mN.m** (à 120Hz). Il est à noter que le couple de rotation de ce moteur est de **34.3mN.m** (à 120Hz).
Ligne 52: Ligne 55:
 {{ :wiki:tutoriels:arduino-capteurs:pins_unl2004_1.png?400 |}} {{ :wiki:tutoriels:arduino-capteurs:pins_unl2004_1.png?400 |}}
  
-==== Précaution d'emploi ====+==== Précaution d'emploi (À vérifier) ====
 La datasheet du moteur 28BYJ-48 donne : La datasheet du moteur 28BYJ-48 donne :
   * Speed Variation Ratio (rapport de variation de vitesse) : 1/64    * Speed Variation Ratio (rapport de variation de vitesse) : 1/64 
Ligne 70: Ligne 73:
  
 Une expérience montre qu'avec le moteur 28BYJ-48 le paramètre //rpm// fixé à 200 entraîne une période de rotation T=9600ms, soit 2048 pas effectués en 9,600s. Ceci implique, par proportionnalité un rpm (nombre de pas par minute) de 12800. On remarque que cette valeur (12800) est 64 fois plus importante que le //rpm// fixé initialement comme paramètre d'entrée de la fonction myStepper.setSpeed(). On retrouve le rapport (1/64) précisé dans la datasheet concernant le "Speed Variation Ratio". Une expérience montre qu'avec le moteur 28BYJ-48 le paramètre //rpm// fixé à 200 entraîne une période de rotation T=9600ms, soit 2048 pas effectués en 9,600s. Ceci implique, par proportionnalité un rpm (nombre de pas par minute) de 12800. On remarque que cette valeur (12800) est 64 fois plus importante que le //rpm// fixé initialement comme paramètre d'entrée de la fonction myStepper.setSpeed(). On retrouve le rapport (1/64) précisé dans la datasheet concernant le "Speed Variation Ratio".
 +
 +A VOIR: Le facteur 64 peut aussi venir du paramètre stepsPerRevolution fixé lors de l'instanciation de la classe Stepper, au tout début du programme (voir Code2 ci-après). 
  
 En pratique cela signifie que, si //rpm// est le paramètre d'entrée de la méthode myStepper.setSpeed(), le nombre de coup par minute effectué par le système (arduino+moteur) est:  En pratique cela signifie que, si //rpm// est le paramètre d'entrée de la méthode myStepper.setSpeed(), le nombre de coup par minute effectué par le système (arduino+moteur) est: 
Ligne 88: Ligne 93:
   * //nbTour// = 2   * //nbTour// = 2
  
-La période de rotation du moteur pas à pas est donc : T = //tour// / //rpm'//+La période de rotation du moteur pas à pas est donc : T = //tour/////rpm'// = 2048/12800 = 0,16 min = 9,6 s.
  
  
Ligne 160: Ligne 165:
 Le code Arduino est le suivant : {{ :wiki:tutoriels:arduino:stepper_speedcontrol_1.ino.zip |}} Le code Arduino est le suivant : {{ :wiki:tutoriels:arduino:stepper_speedcontrol_1.ino.zip |}}
  
 +Une vidéo de test est disponible sur ce lien Youtube : [[https://youtu.be/qvqsy-rCk5o|Arduino - Moteur pas à pas 28BYJ-48 - Réglage de la vitesse de rotation]]
 +
 +===== Code 2 : tour complet et sens inverse - mesure de la période =====
 +<code>
 + 
 +/*
 +  Stepper Motor Control - one revolution
 +
 +  This program drives a unipolar or bipolar stepper motor.
 +  The motor is attached to digital pins 8 - 11 of the Arduino.
 +
 +  The motor should revolve one revolution in one direction, then
 +  one revolution in the other direction.
 +
 +*/
 +
 +#include <Stepper.h>
 +
 +const int stepsPerRevolution = 64;  // change this to fit the number of steps per revolution
 +// for your motor
 +
 +// initialize the stepper library on pins 8 through 11:
 +Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
 +
 +int compteurLoop = 0, tour = 2048, nbTour = 2; // 1 tour représente 2048 pas du moteur
 +unsigned long timer0 = 0;
 +
 +void setup() {
 +  // set the speed at N steps/s:
 +  myStepper.setSpeed(200);
 +  // initialize the serial port:
 +  Serial.begin(9600);
 +}
 +
 +void loop() {
 +  // step one revolution  in one direction:
 +  if (compteurLoop == 0) {
 +    timer0 = millis();
 +  }
 +
 +  // step one revolution  in one direction:
 +  //Serial.println("clockwise");
 +  timer0 = millis(); // lancer chrono
 +  myStepper.step(nbTour * tour); // effectuer nbTour=2 tours c'est à dire 2*2048 pas
 +
 +  unsigned long t = (millis() - timer0);
 +  Serial.print("Période : ");
 +  Serial.print(t/2);
 +  Serial.println("ms");
 +  delay(500);
 +
 +  // step one revolution in the other direction:
 +  //Serial.println("counterclockwise");
 +  timer0 = millis(); // lancer chrono
 +  myStepper.step(-nbTour * tour); // effectuer 1 tour et demi en sens inverse, c'est à dire 1.5*2048 pas
 +  t = (millis() - timer0);
 +  Serial.print("Période : ");
 +  Serial.print(t/2);
 +  Serial.println("ms");
 +  delay(500);
 +}
 +
 +</code>
 +
 +
 +Le code Arduino est le suivant : {{ :wiki:tutoriels:arduino:stepper_test_angle_roration.ino.zip |}}
 +
 +Voir aussi la documentation d'Arduino : [[https://www.arduino.cc/en/Tutorial/LibraryExamples/StepperOneRevolution|Stepper One Revolution]].
 +
 +
 +===== Moteur pas à pas 28BYJ-48 avec module de contrôle basé sur un UNL2003ARG =====
 +==== Matériel et tutoriels ====
 +
 +  * Gotronic : [[https://www.gotronic.fr/art-moteur-pas-a-pas-driver-stp01-23568.htm|Moteur pas-à-pas + driver STP01]]
 +
 +
 +
 +==== Câblage ====
 +
 +{{ :wiki:tutoriels:arduino:stepper-28byj48-arduino-wiring.png?600 |}}
 +
 +
 +====Programme Arduino====
 +Le programme de test consiste à effectuer des Aller et Retour de 360° ad vitam æternam. Le programme se trouve sur le site [[https://www.aranacorp.com/fr/pilotez-un-moteur-pas-a-pas-avec-arduino/| Anacorp]]. Téléchargeable ici : {{ :wiki:tutoriels:arduino:moteur_pas_a_pas_module_commande_ntours.zip |}}
 +
 +<code>
 +
 +///////////////// MOteur pas à pas 
 +#define IN1  11
 +#define IN2  10
 +#define IN3  9
 +#define IN4  8
 +int Steps = 0;
 +int Direction = 0;
 +int number_steps = 512; //= 2048/  : 512 pas correspond à un tour complet...
 +int unTour = 518; // valeur expérimentale
 +int nTours = 2;
 +
 +void setup()
 +{
 +  Serial.begin(9600);
 +  pinMode(IN1, OUTPUT);
 +  pinMode(IN2, OUTPUT);
 +  pinMode(IN3, OUTPUT);
 +  pinMode(IN4, OUTPUT);
 +  // delay(1000);
 +
 +  // calcul du nombre de pas relatif à nTours
 +  number_steps = nTours * unTour;
 +}
 +void loop()
 +{
 +  //1 rotation counter clockwise
 +  stepper(number_steps);
 +  delay(500);
 +  //1 rotation clockwise
 +  stepper(-number_steps);
 +  delay(500);
 +//  //Keep track of step number
 +//  for (int thisStep = 0; thisStep < number_steps; thisStep++) {
 +//    stepper(1);
 +//  }
 +//  delay(500);
 +//  for (int thisStep = number_steps; thisStep > 0; thisStep--) {
 +//    stepper(-1);
 +//  }
 +//  delay(500);
 +}
 +
 +
 +void stepper(double nbStep) {
 +  if (nbStep >= 0) {
 +    Direction = 1;
 +  } else {
 +    Direction = 0;
 +    nbStep = -nbStep;
 +  }
 +  for (int x = 0; x < nbStep * 8; x++) {
 +    switch (Steps) {
 +      case 0:
 +        digitalWrite(IN1, LOW);
 +        digitalWrite(IN2, LOW);
 +        digitalWrite(IN3, LOW);
 +        digitalWrite(IN4, HIGH);
 +        break;
 +      case 1:
 +        digitalWrite(IN1, LOW);
 +        digitalWrite(IN2, LOW);
 +        digitalWrite(IN3, HIGH);
 +        digitalWrite(IN4, HIGH);
 +        break;
 +      case 2:
 +        digitalWrite(IN1, LOW);
 +        digitalWrite(IN2, LOW);
 +        digitalWrite(IN3, HIGH);
 +        digitalWrite(IN4, LOW);
 +        break;
 +      case 3:
 +        digitalWrite(IN1, LOW);
 +        digitalWrite(IN2, HIGH);
 +        digitalWrite(IN3, HIGH);
 +        digitalWrite(IN4, LOW);
 +        break;
 +      case 4:
 +        digitalWrite(IN1, LOW);
 +        digitalWrite(IN2, HIGH);
 +        digitalWrite(IN3, LOW);
 +        digitalWrite(IN4, LOW);
 +        break;
 +      case 5:
 +        digitalWrite(IN1, HIGH);
 +        digitalWrite(IN2, HIGH);
 +        digitalWrite(IN3, LOW);
 +        digitalWrite(IN4, LOW);
 +        break;
 +      case 6:
 +        digitalWrite(IN1, HIGH);
 +        digitalWrite(IN2, LOW);
 +        digitalWrite(IN3, LOW);
 +        digitalWrite(IN4, LOW);
 +        break;
 +      case 7:
 +        digitalWrite(IN1, HIGH);
 +        digitalWrite(IN2, LOW);
 +        digitalWrite(IN3, LOW);
 +        digitalWrite(IN4, HIGH);
 +        break;
 +      default:
 +        digitalWrite(IN1, LOW);
 +        digitalWrite(IN2, LOW);
 +        digitalWrite(IN3, LOW);
 +        digitalWrite(IN4, LOW);
 +        break;
 +    }
 +    delayMicroseconds(1000);
 +    if (Direction == 1) {
 +      Steps++;
 +    }
 +    if (Direction == 0) {
 +      Steps--;
 +    }
 +    if (Steps > 7) {
 +      Steps = 0;
 +    }
 +    if (Steps < 0) {
 +      Steps = 7;
 +    }
 +  }
 +}
 +</code>
 +
 +
 +====Tutoriel ====
 +
 +  * https://www.aranacorp.com/fr/pilotez-un-moteur-pas-a-pas-avec-arduino/
 +  * https://www.youtube.com/watch?v=ThJ6nTEJG-U
 +
 +
 +
 +==== achat sur Amazon ====
 +https://www.amazon.fr/gp/product/B07VGV1XFT/ref=ppx_yo_dt_b_asin_title_o01_s00?ie=UTF8&psc=1
 ===== Références ===== ===== Références =====
 Sites : Sites :
Ligne 170: Ligne 396:
   * [[https://youtu.be/ThJ6nTEJG-U|U=RI ]]   * [[https://youtu.be/ThJ6nTEJG-U|U=RI ]]
   * [[https://youtu.be/IJ0WSn7Oj9s|Retro Geek]]   * [[https://youtu.be/IJ0WSn7Oj9s|Retro Geek]]
 +  * [[https://www.youtube.com/watch?v=nPx2PWKQ4RQ|Utilisation pratique du driver A4988 pour un moteur bipôlaire]]
wiki/tutoriels/arduino/moteur-pas-a-pas.1604684285.txt.gz · Dernière modification: 2020/11/06 18:38 de damien.muti