Problème d'activation d'un moteur pas à pas

Bonjour à tous,

J’essaie de commander un moteur pas-à-pas en fonction de la sortie digitale d’un robot.
Je souhaite faire tourner le moteur uniquement quand cette sortie est à l’état haut. Cependant mon moteur tourne sans arrêt. J’utilise une carte Arduino Mega et un driver de moteur pas-à-pas Leadshine M542.

J’ai essayé plusieurs programmations différentes, voici celle que j’utilise actuellement :

int PUL = 8 ; //Pulse : HIGH 4-5V - LOW 0-0.5V
int ROBOT = 11 ; //input


void setup() {
  // put your setup code here, to run once:
  
  pinMode(PUL,OUTPUT);
  pinMode(ROBOT,INPUT);

  Serial.begin(9600);

}


void loop() {
  // put your main code here, to run repeatedly:

 Serial.println(digitalRead(ROBOT));

  while (digitalRead(ROBOT)== HIGH) {
  
    digitalWrite(PUL,HIGH);
    delayMicroseconds(500);
    digitalWrite(PUL,LOW);
    delayMicroseconds(500);
 }
 
}

A noter que si je ne mets que digitalWrite(PUL,HIGH) ou digitalWrite(PUL,LOW) seul dans la boucle, le moteur ne tourne pas. Les délais choisis semblent correspondre à la fréquence de rotation du moteur …

Vous trouverez ci-joint un schéma fait main de mes câblages.

Merci,

handdrawn_circuit.jpg

Bonjour,

beau message, bien explique, avec shema de cablage. Ca donne envie de t'aider.

  • Tu dois connecter tout tes GND ensemble.
  • Ton driver a 3 entrees : pulse, dir et enable.
  • Ok pour le cablage de pulse, mais tu dois aussi cabler de la meme facon :
  • Le Dir (qui va indiquer dans quel sens le moteur doit tourner).
  • Le Enable. Selon que son niveau sera haut ou bas, le moteur tournera ou ne tournera pas.

Jacques

N.B.: Pas besoin de connecter les GND, les entrees de ton driver sont des optocoupleurs donc libre de potentiel

Merci pour cette réponse.

J'avais déjà branché DIR et ENA initialement mais j'avais fait avec les mêmes constatations sur le comportement du moteur. Je les avais enlevés pour mieux comprendre ce qui ne fonctionnait pas dans mon programme.

Je vais essayer ces nouveaux branchements.

Pour faire des essais, tu connectes DIR + et Enable + au 5V de l'Arduino.
Tu connectes DIR- et ENABLE- au GND de l'Arduino au travers de 2 interrupteurs.
Tu pourras ainsi mieux visualiser leur action

Jacques

N.B. : pas besoin de resistance serie si tu travailles avec 5V
Data sheet (page cablage)

J'ai trouvé la solution !
Il fallait simplement rajouter un petit délai avec la boucle while !
Voilà mon code final :

int PUL = 8 ; //Pulse : HIGH 4-5V - LOW 0-0.5V
int ROBOT = 11 ; //input


void setup() {
  // put your setup code here, to run once:
  
  pinMode(PUL,OUTPUT);
  pinMode(ROBOT,INPUT);

}


void loop() {
  // put your main code here, to run repeatedly:


  delay(550);
  while (digitalRead(ROBOT) == 1) {
  
    digitalWrite(PUL,HIGH);
    delayMicroseconds(500);
    digitalWrite(PUL,LOW);
    delayMicroseconds(500);
 }
 
}