Étape 1: Let's talk basics ! Ce que je fais, pourquoi ?
J’utilise beaucoup de mots pour décrire ma méthode, mais je respecte aussi que tout le monde serait s’approcher d’un endroit différent. Si vous êtes expérimenté, Désolé pour les mots supplémentaires, mais si vous n’êtes pas familier avec arduino et que vous voulez faire tourner un moteur pas à pas plus vite que vous pouvez actuellement avec accelstepper, alors s’il vous plaît poser toutes les questions du tout.
Le Plan :
Accelstepper utilise un profil d’accélération non linéaire, pour augmenter progressivement la cadence de votre moteur pas à pas. Il fait ceci de façon très abstraite, lors de l’appel de stepper.run(), qui est une fonction que (idée approximative) vérifie si vous êtes dû pour une nouvelle étape et si vous êtes, pas le pilote et calcule alors la prochaine étape est due. Vous devez l’appeler fréquemment, mais vous pouvez faire d’autres choses au cours de la boucle de régulation. Donc, ici par exemple, vous pouvez rencontrer :
Tandis que (digitalRead(someSensor)==high) {}
faire des choses
faire plus de choses
stepper.Run() ;
}
Tant que les « choses » ne tarde pas, stepper.run() est exécuté très fréquemment, et vous avez stepper lisse opération. Mais stepper.run() n’est pas une fonction très rapide, et à un moment donné, c’est le facteur limitant ! Ensuite, cette boucle while prend trop de temps.
Ma proposition et la méthode est donc de faire ce qui suit :
//starting from the non-moving position while(condition){ //do stuff stepper.run(); if (stepper.Speed()==maxAccelstepperSpeed){ <extraFastMode(); //Extrafast mode is a simple linear acceleration program. Not as nice as stepper.run(), but much faster. break; //let's get out of this while loop! }
extraFastMode() pseudo code :
//calculate a starting stepdelay based on what speed you're transitioning away from the accelstepper library. The new method of stepping will just be: "While(condition){ "Do stuff/ check extra if statements Take a step wait manually with a delay add to a counter //if the counter hits a trigger number, and you're not at your final target speed, then decrease your delay [which increases your motor speed" }//loop back to the top
Cela a-t-il un sens ? Prochaine étape, nous allons plonger dans mon code commenté tout aussi verbeux et revenir si vous avez des questions.