bibliotheque AccelStepper

bonjour à tous ,

actuellement je planche sur le pilotage d'un nema 23 avec un driver type ( DM542T)

je me rends comte que je n'arrive pas à avoir les mêmes performances de vitesse avec 2 fonctions diff :

quand j'utilise la méthode :

stepper.setAcceleration(2000);
stepper.setMaxSpeed(4800);
stepper.moveTo(1000);

stepper.run();

et

stepper.setAcceleration(2000);
stepper.setMaxSpeed(4800);

stepper.runToNewPosition(1000);

avec les mêmes valeurs de ''max speed'' et Acceleration
le deplacement est bien plus rapide avec le méthode ( RUn to new position )

mais du coup cette fonction est blocquante et pour mon projet , pas possible

avez vous une idée , de la difference de comportements ?

merci à tous
et un bon dimanche '' sous vos applaudissements '' :slight_smile:

appelez vous assez souvent stepper.run(); ? est-ce la seule fonction de la loop() ?

parce que c'est cette fonction qui fait faire un pas "quand c'est nécessaire". Elle a donc besoin d'être appelée très souvent (sinon vous allez faire des pas moins souvent que nécessaire et donc aller plus lentement et en plus influencer l'algorithme de calcul de l'accélération).

La fonction bloquante ne faisant rien d'autre n'a pas ce problème potentiel.

==> qu'avez vous dans la loop qui prendrait du temps ? s'il y a le moindre delay() alors c'est un soucis surtout pour ce type de vitesse... 4800 pas par seconde c'est bcp.

Merci JML , pour votre réponse
ceci expliquerai cela , mais je ne vois pas du coup ce qui peu retarder la fonction
je n'ai pas de delay ,

void setup() {
  
   
   
  DMXSerial.init(DMXReceiver);
  DMXSerial.write(1, 0); 
  DMXSerial.write(2, 0); 
  
   

   // Set speed fast enough to follow pot rotation
  stepper.setAcceleration(2000); 
  
}

void loop() {
  
  unsigned long lastPacket = DMXSerial.noDataSince();
  
  if (lastPacket < 1000) {
  
  val = DMXSerial.read(1);
  sped = DMXSerial.read(2); 
  
  
  valnew = map(sped, 0, 255, 100, 3000); 
  
 

  }
 

if (val < 127 && val > 0  )
{
  
  stepper.move(-1000);
  
  }

if (val > 127 )
{
 
 
 stepper.move(1000);
  
}

 
stepper.setMaxSpeed(valnew);  
stepper.run();


}