Alors j'ai fait plusieurs test avec votre programme et également avec le miens.
Avec votre programme il semble que ce soit un peu mieux mais ça fait toujours des escaliers pendant l'accélération.
Par contre j'ai testé les 2 programmes avec différents paramètres sur le driver et je trouve des résultats similaires. A chaque fois je refaisais le calcul des distances, vitesses et accélération bien sur :
Driver 10000 step/tr j'ai une rampe d'accélération avec escaliers et la vitesse est au moins divisé par 2
Driver 3200 step/tr j'ai une rampe d'accélération avec escaliers (paramètres souhaités), la vitesse semble correct.
Driver 400 step/tr j'ai une rampe d'accélération constante et vitesse correcte.
Mes conclusions:
L'envoie sur le port série vers IHM ne semble pas interférer dans le calcul d'accelstepper.
Il ne semble pas y avoir de différences entre mon programme et le votre pour accelstepper.
Accelstepper n'arrive pas à faire de bon calcul d'accélération avec un trop grands nombre de step/tour
j'ai peut être une question bête, mais si vous utilisez un code d'exemple basic de la Bibliothèque AccelStepper, avec accel et decel, cela fait aussi des escaliers?
C'est un peu compliqué et ça demande pas mal de temps de câblage pour essayer. Le 48V permet juste d'avoir un moteur plus réactif, avec une accélération plus rapide par exemple. Dans mon cycle d'initialisation j'ai une grande accélération et le moteur y va sans soucis.
J'ai essayé de comprendre la bibliothèque Fastaccelstepper que vous m'avez suggéré, et j'avoue patauger sans documentation. Je suis débutant en code et même Accelstepper j'ai mis beaucoup de temps a l'appréhender.
Connaissez vous cette bibliothèque ?
En stand by pour l'instant, il me faudrait revérifier, si il n'y a pas d'avertissement pendant la compilation. Je suis débordé. Comme je ne peux pas calculer les temps entre pas en direct à vitesse élevée, je passe aussi par des paliers (255 paliers maxi). Mais accelStepper ne passe pas par paliers, chaque intervalle de temps est calculé indépendamment. Comme le calcul est long, cela limite le nombre de pas à 1000/s. Si il y a des paliers, c'est dans doute dû à la résolution des 4µs de l'horloge utilisée.
J'ai vu 1000 pas/s, mais je crois que dans la pratique on peut monter à environ 2000.
Pour le nombre de micros-pas, l'expérience que j'ai montre qu'on gagne beaucoup en passant à 10 ou 16 micros pas et qu'après cela devient illusoire. Si on passe en 16 micros-pas, et pour peu que l'on est des frottements secs, le moteur ne va pas avancer à chaque micros pas. Si il avance une fois sur deux, on a quasiment pareil que si on était en 8 micros pas. Un pas à pas aligné (pôles nord du rotor en face des pôles sud du stator) présente un couple parfaitement nul. si on lui demande d'avancer d'un pas entier, il va présenter le couple maximum. si on lui demande d'avancer d'1/10 pas, le couple doit être d'environ 1/5 du couple maximum. Et si on lui demande 1/100 pas, le couple étant faible, le moteur ne va pas bouger.
Ce que j'ai mentionné c'est la vitesse et le calcul que peut faire accelstepper et non la résolution du moteur, pour être sur qu'on parle de la même chose et que j'ai bien compris.
Dans mon cas j'essaie d'avoir une rampe douce sans saccade avec une résolution moteur 1/16 de pas soit 3200 micros pas par tour moteur. Ce qui n'est pas le cas.
Je suis obligé de régler mon driver à 800 micros pas maxi pour avoir une accélération linéaire.
Effectivement, AccelStepper parle de pas c'est en fait d'impulsions, les pas ou micros pas sont gérées par le driver et pas par les bibliothèques. On ne devrait pas parler de pas mais de micros-pas. AccelStepper va donner 4000 micros pas par seconde.
La bibliothèque que j'utilise ne tourne pas sur ESP, je ne connais pas (encore) les interruptions sur ESP. Il faut dire qu'avec une Uno je suis limité par le moteur lui même (environ 1600tr/mn pour un hybride 200 pas/tour et 3200tr/mn pour un 28BJmachin (avant réduction). Je ne me suis donc pas intéressé à 'ESP.
Je ne comprends pas d'où peut venir les paliers avec AccelStepper (que je n'utilise pas). Ce n'est pas dans leur algorithme.