Problème moteur qui avance pas

Bonjour, je travaille actuellement sur un projet et je veux faire avancer un moteur pas à pas NEMA 17 sur l'axe y. Mon projet consiste à faire d'abord descendre un couteau et puis de le bouger horizontalement (axe y). Le moteur avance mais il ne veut pas aller jusqu'au capteur fin de course alors que dans mon code il est sensé l'atteindre pour s'arrêter. D'ailleurs, un truc qui est bizarre, c'est que le moteur de l'axe y va bien jusqu'au fin de course lorsque je débranche le driver d'un autre moteur Z1.
Est-ce que vous avez une idée de ce qui manque dans mon code ou peut-être mon cablage ? Merci d'avance.
Voici un bout de mon code :

const int RESET = 23; // Broche du bouton de réinitialisation
const int ENAY = 31;
const int DIRY = 32;
const int PULY = 33;
const int fdcY = 51; // Fin de course axe Y

void setup() {
  // Initialisation des broches
  pinMode(RESET, INPUT_PULLUP);
pinMode(ENAY, OUTPUT);
  pinMode(DIRY, OUTPUT);
  pinMode(PULY, OUTPUT);
  pinMode(fdcY, INPUT_PULLUP);

// Initialisation du moniteur série
  Serial.begin(9600);

  // Configuration initiale des broches
  digitalWrite(ENAY, HIGH);
  digitalWrite(fdcY, HIGH);
}

void loop() {
if (digitalRead(RESET) == LOW) {
    ResetMoteurY();
  }
}

void ResetMoteurY() {
  digitalWrite(ENAY, HIGH);
  digitalWrite(DIRY, LOW);

  // Boucle pour faire reculer le moteur jusqu'à l'activation du fin de course
  while (digitalRead(fdcY) == HIGH) {
    digitalWrite(PULY, HIGH);
    delayMicroseconds(500);
    digitalWrite(PULY, LOW);
    delayMicroseconds(500);
  }
  delay(1000); 
}

pouvez vous décrire le montage (schéma électronique), les alimentations et comment les fins de course sont connectés ? précisez aussi quel arduino vous avez

Bonjour,

Votre code semble correct.

Vous pouvez aller regarder sur ce sujet, la problématique est a peut près la même.

Est ce que vous pouvez envoyer un schéma de votre câblage (ou une photo au pire) ?

Ce sujet correspond au même projet sur lequel je travaille, nous sommes coéquipières. Etant donné que nous n'avons malheureusement pas encore mis à jour le schéma électrique du moteur, je vais vous envoyer celui de la data sheet du driver correspondant à notre câblage. Le câblage est identique pour les 3 moteurs (Z1 ,Z2 et Y). Le driver est un TB6600 alimenté en 24V et ENA-, DIR- , PUL- sont connectés au pins de l'Arduino Mega, tandis que ENA+, DIR+ , PUL+ sont connectés au 5V de l'Arduino.
Capture d'écran 2024-08-30 190817



Voici une photo du câblage, en espérant que ça vous aidera.

ça fait plat de spaghettis :slight_smile: - on ne peut rien y comprendre...

il faudrait un vrai schéma et clarifier l'alimentation (puissance dispo)

1 Like

Bonsoir mariam_blhn

Ton code est OK.

Il me semble que tes temps sont trop courts (Impulsions trop rapides pour le moteur).
Chez moi, mon Nema17 siffle sans avancer :wink:

    delayMicroseconds(500);
    digitalWrite(PULY, LOW);
    delayMicroseconds(500);

Essaies ça:

delayMicroseconds(20);
digitalWrite(PULY, LOW);
delayMicroseconds(2500);

Tu remarquera que da durée d'impulsion est très courte, ce n'est pas nécessaire d'en voyer de 50/50 au driver, c'est lui qui se chargera de la mise en forme des impulsions de commande du moteur.

Cordialement
jpbbricole

Un spaghetti mouvant!

S les impulsions sont trop courtes et que le moteur ou le contrôleur manque des pas, il mettrait plus de temps pour rejoindre la butée mais il finirait pas y arriver puisque c'est la condition de sortie de la boucle.

Une remarque, l'entrée du fin de course sur la carte CPU se fait avec un INPUT_PULLUP.
En théorie, cela fonctionne.
En pratique, l'entrée présente une impédance très élevée, plusieurs dizaines de kΩ, ce qui la rend sensible aux perturbations alentour. Je suggérerais l'ajout d'une résistance de pullup externe de 1 ou 2kΩ, par précaution.