Hystérésis avec un moteur pas à pas et StepperDriver-master

Bonjour à tous,

Je m'instruit en utilisant 2 moteurs pas à pas Nema17 1,33A 3,8V piloté par Mega+A4889 12V, 16 microsteps.
J'ai dans l'idée de faire tourner 2 pas à pas, un CC, la lumière en PWM, quelques capteurs, un écran TFT (touchpad si les moteurs sont à l'arrêt). Pour l'instant je me limite à deux moteurs pas à pas.

En voulant voir ce qui se passe si au lieu de faire 2N pas d'un coup, je faisais 2 fois N pas. J'ai repris l'exemple MultiAxis de la librairie StepperDriver-master, j'ai changé pour avoir mes broches de mes moteurs et j'ai remplacée la boucle loop par:

void loop()
{
  long t = millis(); // Début de la mesure du temps
  controller.rotate(360, 360); // 360° sens positif pour les deux moteurs
  controller.rotate(360, 360);
  Serial.println(millis() - t); // Affichage du temps en ms pour 2 tours
  delay(1000);
  controller.rotate(-360 * 2, -360 * 2); // Revenir au point de départ
  delay(100000);
}

soit 2 fois 1 tour dans un sens, 2 tours dans l'autre pour les deux moteurs ensembles. Je mesure le temps des 2 tours pour avoir la vitesse de rotation.

Aux très basses vitesses, j'obtiens bien un déplacement diagonal aller-retour.
A partir d'une vitesse réelle de 9 rd/s, j'obtiens un hystérésis.
A la vitesse maximale de la bibliothèque (13,5 rd/s) voici ce que j'obtiens:

ImageCiDessus.jpg

J'interprète cette courbe comme ceci:

  • les points de départ et d'arrivés sont bons par rapport aux basses vitesses
  • les deux moteurs démarrent en même temps (c'est ce qu'ils sont censé faire). Le moteur X semble aller à sa vitesse normale, mais le moteur Y va trop lentement, du coup quand le moteur X s'arrête, le moteur Y doit continuer jusqu'à son arrivée.
  • ce qui est aussi curieux, c'est que les pentes ne soient pas les même dans un sens et dans l'autre, ce qui veut dire que les vitesses ne sont pas les mêmes si on tourne dans un sens ou si on tourne dans l'autre.

J'ai des trucs bizarres avec cette bibliothèque. Et sur 6 exemples, je n'arrive à en faire fonctionner que 3. Grand débutant, c'est pire avec Stepper et AccelStepper.

J'ai vu qu'ils utilisent micros() pour savoir quand aura lieu le prochain évènement, mais visiblement sans corrections de temps de calcul. Si le calcul est trop long, cela devrait augmenter le temps des pas, mais de façon identique pour les deux moteurs.

C'est quoi la question?

Je savais que vous alliez me dire ça. Les questions sont:

  • suis-je le seul à avoir ce problème?
  • pourquoi avec StepperDriver les moteurs ne tournent pas à la même vitesse?
  • peut-on faire tourner un moteur à sa vitesse maximale (chargé, je peux démarrer jusqu'à 40 rd/s)?
  • quelqu'un a-t-il réussi à passer en sur-vitesse (au moins 70 rd/s chez moi)

ImageCiDessus.jpg