Moteur pas à pas NEMA 17 tremble mais ne tourne pas

Bonjour à tous, et merci d'avance pour votre aide sur ce problème qui me tracasse depuis un certain temps.

Je souhaite réaliser un bras qui s'étend à sa longueur maximale, y placer des objets, puis se replie. C'est aussi simple que ça. Voici une image du système, et il est question d'ajouter une plaque sur le dessus et de la faire avancer jusqu'au bout de la vis sans fin, puis de la faire reculer après un certain temps.

Pour ce faire, j'ai acheté deux moteurs pas à pas afin de contrôler de manière précise les mouvements, et je les pilote à l'aide de deux ponts en H.

Voici les caractéristiques des moteurs pas à pas :

  • Nema17 Bipolaire 42BYGH48-4170.
  • Nombre de phases : 2.
  • Angle de pas : 1,8°.
  • Courant de phase : 1,7A.
  • Résistance : 3,3Ω ±10%
  • Inductance : 2,8mH ±20% (1KHz).
  • Nombre de fils : 4 (longueur de 100 cm).
  • Longueur du corps du moteur : 48 mm.
  • Couple de maintien : 55N.cm.
  • Diamètre de l'arbre : Ø5mm en forme de "D".
  • Inertie du rotor : 57gcm
  • Élévation de la température : 80°C maximum.
  • Rigidité diélectrique : 500VAC/1 minute.
  • Masse : 300g

Dans le cadre de mes tests, j'alimente le circuit avec une alimentation réglable de 24V - 1,2A.

J'ai réussi à faire fonctionner le système par le passé avec le code suivant :

#include <AccelStepper.h>

const int stepsPerRevolution = 200;

AccelStepper stepper1(AccelStepper::FULL4WIRE, 8, 9, 10, 11);
AccelStepper stepper2(AccelStepper::FULL4WIRE, 4, 5, 6, 7);

int stepsToMove = 25500; // Nombre de pas à avancer pour un aller simple
bool direction = true;   // Pour suivre la direction de mouvement

void setup() {
  stepper1.setMaxSpeed(1000);
  stepper1.setAcceleration(900);

  stepper2.setMaxSpeed(1000);
  stepper2.setAcceleration(900);

  Serial.begin(9600);
  Serial.println("Appuyez sur une touche pour faire un aller-retour pour les moteurs ou 'q' pour quitter.");
}

void loop() {
  if (Serial.available() > 0) {
    char input = Serial.read();
    if (input == 'q' || input == 'Q') {
      Serial.println("Sortie du programme.");
      while (true) {
        // Attendre indéfiniment
      }
    } else {
      // Faites un aller simple pour les moteurs
      stepper1.moveTo(-stepsToMove);
      stepper2.moveTo(-stepsToMove);

      // Tant que les moteurs n'ont pas atteint leur position cible, continuez à les faire avancer
      while (stepper1.run() && stepper2.run()) {
        // Attendez que les moteurs atteignent leur position
      }

      if (direction) {
        Serial.println("Aller simple terminé. Attente...");
        delay(1000); // Attendre une seconde à la fin de l'aller
        direction = !direction; // Inverser la direction pour le retour
      } else {
        stepper1.moveTo(stepsToMove);
        stepper2.moveTo(stepsToMove);
        Serial.println("Retour terminé. Attente...");
        delay(1000); // Attendre une seconde à la fin du retour
        direction = !direction; // Revenir à la direction de l'aller
      }
    }
  }
}

Actuellement, les moteurs ne fonctionnent plus avec ce même code, et ce, malgré l'absence de changements. Ils ne bougent plus et tremblent jusqu'à ce qu'Arduino MEGA compte le nombre de pas effectués, puis ils s'arrêtent. Aucun mouvement dans aucun sens n'est observé.

Pouvez-vous m'aider ? Merci d'avance.

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

(bravo cependant pour avoir posté les images et le code correctement)

Bonjour harold_lionel_nanfack

Comment est fait ton montage, fais une photo en gros plan.
N'aurais tu pas un fil déconnecté, plus particulièrement un GND?
Ou un problème mécanique, la vis sans fin trop dure à tourner?

Cordialement
jpbbricole

Voici une image de mon câblage, c'est ce qui est en place et ne fonctionnait pas dans le passé.

Je tiens également à préciser qu'auparavant, le courant était à 0A et la tension était de 24V lorsque le moteur était à vide. À présent, la tension est à 8V et le courant est de 1A.

Je ne sais pas si cela explique le nouveau comportement des moteurs, mais voilà.

Bonjour harold_lionel_nanfack

Fonctionnai ou ne fonctionnai pas dans le passé?

A+
Cordialement
jpbbricole

Bonjour @jpbbricole , Le Code suivant fonctionnait super bien avant mais désormais, il ne fonctionne plus

vous n''avez vraiment rien changé entre temps ? les moteurs ont ils forcé ?

avez vous testé les ponts en H avec un code simple en dehors de votre montage ?

Non 0 Changement entre-temps , et les moteurs n'ont pas forcé

En ce qui concerne le pont en H , avec un code simple, je n'ai pas eu l'occasion de le tester, mais en effet, c'est une piste, mais cela m'étonnerait qu'il soit grillé

quand un truc ne fonctionne plus il faut procéder méthodiquement

prendre un code qui fonctionne pour une seule opération (faire tourner un moteur dans les 2 sens par exemple) et tester les composants individuellement (en les enlevant du montage). Ne pas hésiter à changer les fils, revérifier les connexions etc

Bonjour,

Pour ma part, lorsque quelque chose ne fonctionne plus, une seule question:

  • Qu'est ce qui a changé depuis ?
    Toute manipulation, modification, changement aussi minime soit-il peut être la source de l'incident. C'est une excellente piste pour commencer les investigations.

Si c'est vraiment rien, alors il y a une panne !

A+

hello
si le code est le même, c'est ton hard qui a changé.

ton hard n'est pas le même ? tu as du refaire les branchements des moteurs sur les ponts en H?
es tu sur que tes fils moteur ne sont pas croisés, inversés?

Je note quand même que le moteur est un 5,6V et que l'alim est une 24V qui n'est pas forcément conçue pour fonctionner en limitation de courant.

Bonjour @vileroi

Svp, pourrez-vous m'aider à trouver où vous avez vu la valeur de la tension admissible ? D'avance Merci

@J-M-L @jelopo @dfgh , Je vais tester le hardware et je vous reviens , cependant il se pourrait que je l'aie suralimentée 24v au lieu de 5.6v comme a mentionné @vileroi

J'apporte les modifications et je vous reviens

Dans le premier post, il est indiqué la résistance et le courant nominal. Le produit donne la tension maximale que l'on peut mettre à l'arrêt.
Mais ce moteur n'est pas construit pour être alimenté en tension mais au travers d'un driver qui va faire une régulation en courant. En rotation, on a alors 12V, 24V ou même plus, mais pas à l'arrêt.
Dans le cas présent, c'est l'alim qui doit s'effondrer et donner par exemple 2A pour les deux enroulements.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.