controle du temps avec un moteur pas à pas

Bonjour,
Je suis nouveau dans le monde arduino.
J'essaie de commander un moteur pas à pas.
Cela fonctionne bien MAIS la durée de la rotation n'est pas conforme.
J'utilise le moteur 28BYJ. Sauf erreur de ma part, c'est un moteur de 2048 pas par tour (en pas entiers)
J'utilise la lib Stepper.
Je commande 10 tours par minute et je commande le nombre de pas à faire, soit 20480 pas.
Je demande alors le temps et j'ai 41 secondes au lieu de 1 minute.
J'ai essayé:
1 tr/min: t = 59,4 s
2trs/min: t = 58,2 s
3 trs/min: t = 55,38 s
10 trs/min: t = 41,6 s
Pourquoi cela va-t-il TROP VITE? Je ne vois pas d'où vient le pb. Défaut dans Stepper? Défaut dans mon prog?
Ci dessous le code.
Merci pour votre aide.

#include <Stepper.h>
#define STEPS 2048 //nombre de pas par tour avec le réducteur
//Créer une instance de la classe stepper
//Le moteur (fils 1 2 3 4) est branché sur les sorties 8 9 10 11 de l'Arduino (et sur GND, +V)
Stepper small_stepper(STEPS, 8, 10, 9, 11); // Sens horaire 8 et 10 même bobine 9 et 11 même bobine
//Stepper small_stepper(STEPS, 11, 10, 9, 8); // Sens anti-horaire en inversant 8 et 11 (si on préfère)
int Steps2Take = 0; //Nombre de pas de rotation demandé au moteur
long temps = 0;
//
//************************************************************
void setup()
{
Serial.begin(9600); // 9600 bps
Serial.println("Test de moteur pas a pas");
}
void loop()
{
//Faire tourner le moteur
small_stepper.setSpeed(10); //variable en tours par minute avec le réducteur. Avec la valeur 10, le moteur fait 20480 pas en 41,6 secondes au lieu de 1 min
//Réduire ce chiffre pour un mouvement plus lent
//minimum 1 et maximum 14. Au delà, les pas sautent. en deçà, il faut diminuer "steps 2048" au début du prog et modifier Steps2Take
Steps2Take = 20480; // Une rotation complète avec 2048 pas
temps = millis();
small_stepper.step(Steps2Take); //Ca tourne
temps = millis() - temps ; //Chronomètre
Serial.print(Steps2Take);
Serial.print(" pas: ");
Serial.print(temps); //Affiche le temps (en ms)
Serial.println(" ms");
delay(2000); //pause
}

Je ne sais pas si cela vient de ton programme (moi aussi également débutant la dedans, et donc je ne voudrai pas te dire une ânerie...), mais par contre, comme tout composant électronique et/ou mécanique, les constructeurs indique une marge d'erreur par rapport au descriptif brute de leurs composants (exemple : une simple résistance notée 100ohms 1/4w 5℅ peut varier de 95 a 105ohms malgré ses 100ohms notifié... Ne pas oublier de prendre la marge constructeur....)

Ne serait-ce pas cela qui induit ton erreur ?

J'ai trouvé.
Le problème est bien dans Stepper. Il compte le délai entre deux pas par D = 60*1000 (ms)/S(nb de pas par tour)/x(nb de tours demandés) . Cela donne un résultat en millisecondes MAIS il tronque le résultat à l'entier inférieur.
DONC il faut le forcer à compter en microsecondes: 1000 remplacé par 1000000 et la fonction millis (ailleurs dans le prog) remplacée par la fonction micros.
Et là: bingo: les mesures de temps dans mon prog deviennent excellentes.

regardes là
edit: nos messages ont dû se croiser