Vitesse Max Moteur Pas à Pas

Bonjour,

Je rencontre un soucis avec mon moteur PàP (42BYGHW208 Stepper Motor).
Voila, pour des exo je le faisait tourner à 40 RPM, mais la pour mon utilisation réelle j'aurais besoin de 1200 RPM, je sais que ça peut être beaucoup pour un moteur PàP, mais en cherchant un peux il me semble qu'il est censé l'atteindre.

Sauf que dans mon cas même à 50 RPM il décroche, il ne tourne plus ou quasiment plus voir BIP uniquement(1200 RPM)

J'utilise un Arduino Uno avec un motor Shield V3 et ce moteur PàP mais la datasheet est plutôt incomplète.
Mais je devrais pouvoir monter un minimum, 40RPM c'est rien du tout, je trouve ça vraiment étrange non ?

Merci par avance aux personnes qui prendront le temps de me répondre.
Voici le code que j'utilise ( juste pour mes essais de vitesse):

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
                          // for your motor

// initialize the stepper library on the motor shield
Stepper myStepper(stepsPerRevolution, 12,13);     

// give the motor control pins names:
const int pwmA = 3;
const int pwmB = 11;
const int brakeA = 9;
const int brakeB = 8;
const int dirA = 12;
const int dirB = 13;

int x = 0;
void setup() {
Serial.begin(9600);
// set the PWM and brake pins so that the direction pins  // can be used to control the motor:
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, LOW);

// initialize the serial port:
Serial.begin(9600);
// set the motor speed (for multiple steps only):
myStepper.setSpeed(900);
}


void loop() {

  myStepper.step(200);
   delay(1000);
  myStepper.step(-200);
  delay(2000);

}

le 42BYGHW208 a les caractéristiques suivantes

12V
0.4A
200 steps (1.8°)
37mH

ces caractéristiques définissent - si tout est de bonne qualité - les performances max de votre stepper (qui ne sont pas prévu pour tourner super vite généralement)

si vous allez sur le site Stepper Motor Maximum Speed and Power Calculator

ça vous donne 2.03 RPS soit ~122 RPM max... vous serez loin des 1200.

Bonjour J-M-L,

Merci pour le site, très utile, j'ai beau avoir cherché sur internet toute la matinée je ne l'avais pas trouvé!
En revanche j'ai continué mes test en début d'après midi et j'arrive maintenant a monté dans les 400 RPM sans décrochage avec ce code :frowning: ne faite pas attention au digital.read c'est unqiuement pour ne pas qu'il tourne non stop lorsque je téléverse)

#include <Stepper.h>

const int stepsPerRevolution = 100;  // change this to fit the number of steps per revolution
                          // for your motor

// initialize the stepper library on the motor shield
Stepper myStepper(stepsPerRevolution, 12,13);     

// give the motor control pins names:
const int pwmA = 3;
const int pwmB = 11;
const int brakeA = 9;
const int brakeB = 8;
const int dirA = 12;
const int dirB = 13;

const int ButPin = 4;

int buttonState = 0;
int x = 0;
void setup() {
Serial.begin(9600);
// set the PWM and brake pins so that the direction pins  // can be used to control the motor:
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, LOW);
pinMode(ButPin, INPUT_PULLUP);

// initialize the serial port:
Serial.begin(9600);
// set the motor speed (for multiple steps only):
myStepper.setSpeed(450);
 myStepper.step(100);
}


void loop() {
buttonState = digitalRead(ButPin);
  while (buttonState == HIGH) {
  myStepper.step(200);
   delay(1000);
  myStepper.step(-200);
  delay(2000);
  buttonState = digitalRead(ButPin);}

}

Mon moteur est bien a 200 pas (1.8°), mais en disant qu'il en fait 100 il tourne plus vite je ne comprend pas tout, quelqu'un pourrait m'expliquer ?

Avez vous un moyen réel de mesurer la vitesse de rotation ?

A moins que vous ne le connaissiez déjà, je vous propose cet article très intéressant.

Cordialement.

Pierre

Bonjour,

@J-M-L
Non je ne dispose pas de tachymètre malheureusement mais je vois bien ou vous voulez en venir es-ce que les 400 RPM annoncés sont bien réels, bonne question :confused:

@ChPr

Article intéressant en effet, mais qui ne m'a pas permis de comprendre pourquoi je peux monter plus ou moins en vitesse uniquement en déclarant un nombre de pas inférieur (100 à la place de 200).

Merci à vous deux pour vos réponses :slight_smile:

Arnaud_G:
... comprendre pourquoi je peux monter plus ou moins en vitesse uniquement en déclarant un nombre de pas inférieur (100 à la place de 200). ...

En déclarant 100 pas au lieu de 200, selon la fonction suivante de la bibliothèque Stepper :

void Stepper::setSpeed(long whatSpeed)
{
  this->step_delay = 60L * 1000L * 1000L / this->number_of_steps / whatSpeed;
}

vous avez simplement multiplié step_delay par deux. Votre moteur ne tourne donc pas plus vite. A une vitesse commandée de 450 tours/mn, il tourne en fait à 450 / 2 = 225 tours/mn

Vous auriez eu strictement la même chose en écrivant :

myStepper.setSpeed(225);
myStepper.step(200);

ou bien encore :

myStepper.setSpeed(900);
myStepper.step(50);

...

Cordialement.

Pierre

Hmm oui je pensais à ça également mais pourquoi alors lorsque je déclare mon stepper en 200 pas sa vitesse max est de 40 RPM(0.66HZ) il décroche avec des valeurs supérieures.
Tandis que si je le déclare en 100 Pas il monte à 400 RPM/2=200 RPM(3.33HZ) sans décrocher :o

Plutôt bizarre comme résultat non ?

Vous avez essayé avec succès :

Stepper myStepper(100, 12,13);  
...
myStepper.setSpeed(450);

Avez-vous essayé cela directement :

Stepper myStepper(200, 12,13);  
...
myStepper.setSpeed(225);

Peut-être que si vous êtes monté progressivement en vitesse, vous êtes tombé sur une plage de fréquences de résonance.

Cordialement.

Pierre