Moteur pas à pas

Bonjour,

J’ai un petit problème avec mon moteur pas à pas : quand je met le programme d’exemple ci-dessous, il ne fonctionne pas. J’ai volontairement changé les Pins car je suis sur que c’est celle-là. J’en suis sur car avec un programme pour moteur DC, c’est sur ces Pins que le moteur tourne. Cependant il ne tourne pas avec le programme d’exemple pour pas à pas… J’aimerai savoir ce qu’il ne va pas car c’est un programme d’exemple tout de même. Ca ne vient ni de l’alim, ni du moteur car il a tourné avec le programme pour moteur DC.

#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 pins 8 through 11:
Stepper stepper(stepsPerRevolution, 8,11,12,13);            

void setup() {
  // set the speed at 60 rpm:
 stepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // step one revolution  in one direction:
   Serial.println("clockwise");
  stepper.step(stepsPerRevolution);
  delay(500);
  
   // step one revolution in the other direction:
  Serial.println("counterclockwise");
  stepper.step(-stepsPerRevolution);
  delay(500); 
}

Merci d’avance de votre compréhension !

Alors Mme Irma ?..

Et la je sens le pire (enfin le crâmé plutôt) : y'a quoi entre ton Arduino et le moteur ?

Entre mon moteur et l'arduino bah y'a le shield, et le moteur pas à pas fonctionne avec le programme pour moteur DC, sauf qu'il fait pas de tour régulier, il tourne dans tous les sens. Et avec le programme exemple d'arduino pour moteur pas à pas bah... ça tourne pas

Il eut été important de dire que tu avais un shield non ? Lequel ?

www.seeedstudio.com/wiki/Motor_Shield_V1.0 voici le lien du shield

Est-ce que tu est sûr que le moteur est bien branché ? Une bobine sur chaque bornier.

Sinon essaye ça :

#define PAUSE 2000
#define M1 8
#define M2 12
#define M3 11
#define M4 13

byte Etape;

void setup()
{
  pinMode(M1,OUTPUT);
  pinMode(M2,OUTPUT);
  pinMode(M3,OUTPUT);
  pinMode(M4,OUTPUT);

  Serial.begin(9600);

}

void loop()
{

  if(Serial.available()){

    delay(20);
    int i;
    char Buffer[10];

    while(Serial.available()){
      Buffer[i++]=Serial.read();
    }

    long Move=strtol(Buffer,NULL,10);

    Serial.println(Move);

    Bouge(Move);
  }


}

void Bouge(long Pas){

  if(Pas>0){
    for(int y=0;y<Pas;y++){
      FaireUnPas();
      Etape++;
      if(Etape>4) Etape=1; 
    }
  }

  if(Pas<0){
    for(int x=0;x<(-Pas);x++){
      FaireUnPas();
      Etape--;
      if(Etape<1) Etape=4; 
    }
  }

  digitalWrite(M1,LOW);
  digitalWrite(M2,LOW);
  digitalWrite(M3,LOW);   
  digitalWrite(M4,LOW);


}

void FaireUnPas(){

  switch(Etape) {

  case 1:
    digitalWrite(M1,HIGH);
    digitalWrite(M2,HIGH);
    digitalWrite(M3,LOW);   
    digitalWrite(M4,LOW);
    break;

  case 2:
    digitalWrite(M1,LOW);
    digitalWrite(M2,HIGH);
    digitalWrite(M3,HIGH);   
    digitalWrite(M4,LOW);
    break;

  case 3:
    digitalWrite(M1,LOW);
    digitalWrite(M2,LOW);
    digitalWrite(M3,HIGH);   
    digitalWrite(M4,HIGH);
    break;

  case 4:
    digitalWrite(M1,HIGH);
    digitalWrite(M2,LOW);
    digitalWrite(M3,LOW);   
    digitalWrite(M4,HIGH);
    break;
  }

  delayMicroseconds(PAUSE);

}

Les broches enable sont bien à 1?

fdufnews: Les broches enable sont bien à 1?

Par défaut y'a les cavaliers, s'il ne les a pas enlevé évidemment

Apparament les broches enables ne sont pas activé... On a fait des test avec un oscilloscope, les pins fonctionnent, sauf les enables. Et je ne sais pas comment les activer

S'il y a les cavaliers c'est ok normalement

#include <Stepper.h>

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

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8,11,12,13);            

void setup() {
  
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  analogWrite(speedpinA,stepsPerRevolution);//input a simulation value to set the speed
  analogWrite(speedpinB,stepsPerRevolution);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // step one revolution  in one direction:
  myStepper.step(stepsPerRevolution);
  delay(500);
  
   // step one revolution in the other direction:
  myStepper.step(-stepsPerRevolution);
  delay(500); 
}

Le moteur tourne avec ce programme… J’ai juste ajouté des analogWrite et il s’est mis a tourné…
Sauf que j’ai cramé l’alim qui supportait que 1 ampère, alors que le moteur à lui tout seul en consomme 2… 1A / phase sur la fiche technique c’est pas un peu énorme pour un moteur pas à pas tout petit en plus à 200 pas ?

Et sur le shield motor, c’est marqué Output Current(for each channel), c’est censé vouloir dire quoi ?
Merci de m’aider ^^

Kevindu55:
le moteur à lui tout seul en consomme 2… 1A / phase sur la fiche technique c’est pas un peu énorme pour un moteur pas à pas tout petit en plus à 200 pas ?

La consommation n’a rien à voir avec le nombre de pas. Elle ne dépend que de la conception du bobinage.
Trop long à expliquer. Pour plus d’info, documente toi sur le fonctionnement d’un MAP.

Kevindu55:
Et sur le shield motor, c’est marqué Output Current(for each channel), c’est censé vouloir dire quoi ?
Merci de m’aider ^^

C’est pourtant clair :
Output = sortie
Current = courant
each chanel = chaque voie

En français cela veut dire que le “shield motor” peut supporter “x” ampères pour chaque bobinage.
Et que si tu dépasses la limite indiquée tu peux en recommander un autre.

Merci beaucoup à tous pour votre aide ! J'avais bien compris que c'était du courant de sortie mais je ne savais pas ce que voulais dire "each channel"

Merci encore de votre aide qui m'a été très utile !

Bonjour,

68tjs: En français cela veut dire que le "shield motor" peut supporter "x" ampères pour chaque bobinage. Et que si tu dépasses la limite indiquée tu peux en recommander un autre.

J'aime ou I like