[Résolu] Moteur pas à pas et shield Keyestudio

Bonjour

J'essaye de construire un distributeur de croquettes. J'ai un arduino nano, un moteur pas à pas bipolaire et un shield keyestudio avec les drivers a4988. J'alimente tout ça en 12V et je teste avec le code générique fourni par Keyes

#define EN 8 // stepper motor enable, low level effective
#define X_DIR 5 //X axis, stepper motor direction control 
#define Y_DIR 6 //y axis, stepper motor direction control
#define Z_DIR 7 //z axis, stepper motor direction control
#define X_STP 2 //x axis, stepper motor control
#define Y_STP 3 //y axis, stepper motor control
#define Z_STP 4 //z axis, stepper motor control
/*
// Function: step -control the direction and number of steps of the stepper motor
// Parameter: dir -direction control, dirPin corresponds to DIR pin, stepperPin correspomds to 


step pin, steps is the number of steps.
// no return value
*/
void step(boolean dir, byte dirPin, byte stepperPin, int steps)
{
 digitalWrite(dirPin, dir);
 delay(50);
 for (int i = 0; i < steps; i++) {
 digitalWrite(stepperPin, HIGH);
 delayMicroseconds(800); 
 digitalWrite(stepperPin, LOW);
 delayMicroseconds(800); 
 }
}
void setup(){// set the IO pins for the stepper motors as output 
 pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
 pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);
 pinMode(Z_DIR, OUTPUT); pinMode(Z_STP, OUTPUT);
 pinMode(EN, OUTPUT);
 digitalWrite(EN, LOW);
}
void loop(){
 step(false, X_DIR, X_STP, 3200); // x axis motor rotates CCW for 1 circle, as in 200 steps
 step(false, Y_DIR, Y_STP, 3200); // y axis motor rotates CCW for 1 circle, as in 200 steps
 step(false, Z_DIR, Z_STP, 3200); // z axis motor rotates CCW for 1 circle, as in 200 steps
 delay(1000);
 step(true, X_DIR, X_STP, 3200); // X axis motor rotates CW for 1 circle, as in 200 steps
 step(true, Y_DIR, Y_STP, 3200); // y axis motor rotates CW for 1 circle, as in 200 steps
 step(true, Z_DIR, Z_STP, 3200); // z axis motor rotates CW for 1 circle, as in 200 steps
 delay(1000);
}

Le moteur ne tourne pas. Si j'appuie sur le bouton reset, parfois il tourne, puis ensuite il "clique" sans tourner.
J'ai vérifié les connexions du moteur (paires), j'ai essayé les 3 drivers...rien à faire. J'ai essayé sans le shield, juste avec le driver, rien non plus. J'ai cherché sur internet et notamment sur ce forum, mais je ne touve pas la solution.
Peut-être un problème d'alimentation insuffisante?

A cette page on peut apprendre comment présenter le code (respect des règle les du forum.

Je ne vois pas à priori d'erreur dans le code. L'erreur peut provenir: (il y en a peut être d'autres, on verra après)

  • on demande au moteur d'aller trop vite
  • l'alimentation n'est pas correcte
  • le courant des A4988 est top faible
  • Le moteur n'est pas compatible

On demande au moteur d'aller trop vite:

Le programme est écrit pour un moteur 200 pas par tour en mode 16 micros pas (3200 impulsions par tour:
[ ... ] 3200); // [ ... ] for 1 circle, as in 200 steps
Si tu n'as pas mis de cavaliers pour passer en 16 micros pas tu est en mode deux phases à la fois et une impulsion toutes les 1,6ms (2 fois toutes les 800µs) en mode 200 pas par tour fait environ 3tr/s. C'est beaucoup pour un démarrage direct.

Pour vérifier cela:

  • diminue la vitesse par 10 en passant les delayMicroseconds() de 800µs à 16000µs (attention delayMicroseconds() n'accepte que des valeurs comprises entre 0 et 16383). Ou remplace delayMicroseconds(800) par delay(20)
  • passe en mode 16 micros pas, pour cela il faut mettre les trois cavalier sous les A4988

L'alimentation n'est pas correcte
Pour en dire plus on a besoin d'un schéma de branchement complet, la Uno ( je suppose) et le shild ne faisant qu'un bloc, quels sont les fils qui sont branchés sur ce bloc (alimentation, USB...).

Le courant des A4988 est top faible
Ce courant a-t-il été réglé? En principe cela devrait fonctionner en mettant la résistance ajustable des A4988 "au milieu". Ce n'est pas optimum, mais à vide et pas trop vite cela devrait passer.

Le moteur n'est pas compatible
Peu de chances si il n'y a que 4 fils. Quelle est la référence du moteur?

Merci pour cette réponse détaillée
L'arduino est un nano

C'est pas mon montage car je n'ai qu'un moteur, mais tout le reste est pareil. L'alim de 12v alimente tout le monde par le connecteur cylindrique du shield.
L'alim est ici 12V, 30W, 2000mA max (c'est peut-être ça le problème)
Je n'ai pas touché les cavaliers, ils sont en place
Je n'ai pas touché le potentiomètre des drivers (pas de tournevis assez petit, et je ne sais pas dans quel sens tourner...)
Le moteur a ces caractéristiques:
Type de moteur : Pas à pas bipolaire
Nombre de Phase : 2
Angle de pas : 1.8 deg.
Taux de tension : 3.3V DC
Holding de couple : 1.5A
La phase de résistance : 2.2ohms±10%(20℃)
Inductance de phase : 3.8mH±20%(1KHz)
Inertia:57g.cm2 rotor
(en gras le 1,5A car peut-être trop pour l'alim de 2A?)
J'ai vérifé le cablage car certains commentaires annonçaient une inversion.

J'ai recommencé sans le shield, et cette fois ça tourne, dans les deux sens.
Je vais laisser tomber le shield, c'est dommage, ça aurait été plus pratique que tous ces fils...à moins que quelqu'un ait une idée?

(deleted)

Merci pour l'info
Oui c'est exactement ce shield. Je vais essayer

Merci @jpbbricole2, n'ayant pas ce shield là je n'aurai jamais trouvé.

Sur ce shield cavaliers en place ou pas c'est pareil. Pour avoir les 16 micros pas , il ne faut pas mettre les cavaliers M1 ..M3 et souder comme c'est marqué en vert.

Ben alors pourquoi il y a des jumpers ?
Une dernière question

Les deux pastilles entourées en jaune sont indiquées Mot_Vcc, les deux pastilles bleues Mot_GND
Peut-on alimenter les moteurs par là? Si oui peut-on alimenter l'arduino par le connecteur cylindrique du shield, et les moteurs par les pastilles?

Ben alors pourquoi il y a des jumpers ?

Je suppose que c'est une erreur de conception. Broches en l'air, Mx=0; Broches à Vcc, Mx=1
Avec ce shield, les jumpers mettent les broches Mx à 0; cela ne sert à rien avec un A4988. Peut être avec un autre circuit?

Peut-on alimenter les moteurs par là? Si oui peut-on alimenter l'arduino par le connecteur cylindrique du shield, et les moteurs par les pastilles?

Voici ce que dit Keyestudio:

Can supply the power for 3 stepper motor drive modules and Nano board via an external power jack (DC 12V).

Les broches du connecteur d'alimentation et les broches Mot_Vcc, Mot_GND doivent être reliées, et selon la phrase ci dessus, le 1V est relié à Vin; On peut certainement tout alimenter que par le connecteur d'alimentation.
Pour le voir: si tu alimentes par le 12V, la Nano devrait fonctionner.
Tu n'a donc pas besoin d'utiliser les pastilles, tout est relié. Tu ne peux mettre qu'une seule alimentation.

Bonjour Ariane

Je suppose que l'inversion des signaux STEP DIR était la cause de ton problème?

Peut-on alimenter les moteurs par là? Si oui peut-on alimenter l'arduino par le connecteur cylindrique du shield, et les moteurs par les pastilles?

Oui, ce peut être une bonne solution pour alimenter ton ou tes moteurs, à condition d'enlever le jumper Mot_VOT_Sel.
Le driver A4988 supporte de 8 à 35V. donc, dans certains cas c'est indispensable.

Cordialement
jpbbricole

Merci pour ces réponses très précises (et précieuses)

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