Que signifie microstep pour un stepper moteur?

Bonjour,

Dans mon projet, je voudrais faire tourner un moteur pas à pas jusqu'au moment ou un chariot touche un endStop. A ce moment là, le moteur part en sens inverse.
J'ai pas mal de choses qui bugs et j'essaye de débroussailler les choses que je ne comprends pas bien.
La 1ere est au niveau de StepPin et des micro secondes dans mon code (c'est adapté,à un code trouvé bien sûr)
Pourriez vous m'expliquer ce que font ces 4 lignes SVP ?
Pourquoi on met stepin 1fois sur high puis juste après sur low ??
Pourquoi on attend des micro secondes ?

const int stepPin = 3;
const int dirPin = 4;
const int bouton = 2;

int btnetat;

void setup() {
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(bouton, INPUT);
Serial.begin(9600);
}
void loop() {
btnetat = digitalRead(bouton);
Serial.print(btnetat);

if (btnetat == LOW){
digitalWrite(dirPin,LOW);

digitalWrite(stepPin,HIGH); 
delayMicroseconds(500); 
digitalWrite(stepPin,LOW); 
delayMicroseconds(500);

//exit(0);
}

if (btnetat == HIGH){
digitalWrite(dirPin,HIGH);

digitalWrite(stepPin,HIGH); 
delayMicroseconds(500); 
digitalWrite(stepPin,LOW); 
delayMicroseconds(500); 
}

}

Par la même occasion, si vous voyez des erreurs, je suis preneur bien sûr.

Bonjour azard

Ces 4 lignes créent une impulsion (step) pour le moteur pas à pas (MPAP)

Pour créer une impulsion, un pas dans ce cas puisque c’est la pin stepin qui fait haut/bas.
C’est en microsecondes pour augmenter de la précision de l’impulsion et de toute façon, sur l’Arduino, moins précis serait de travailler en millisecondes (millis()) et il faudrait écrire delayMicroseconds(0.5); pour avoir l’équivalent ce qui n’est pas possible.
Les microsteps sont un artifice de gestion, au niveau du driver, pour créer des pas entre les vrais pas. C‘est au détriment du couple.
Recherches un tuto qui te convient, pour mieux appréhender les MPAP.

Cordialement
Jpbbricole

Merci !
Tu as était parfaitement clair !

Faire attention que ce programme ne fonctionne qu'avec un driver qui a des broches Step et Dir. Cela ne fonctionne pas avec des pilotes à ULN2003.
Pour les driver qui ont cette broche Step (les plus connus sont les A4899, DRV8825, DM556, TB6600) pour avancer d'un pas, il faut mettre une impulsion sur Step (de l'état bas, mettre un état haut, puis revenir à l'état bas.
Quand au "juste après" c'est contredit par "Pourquoi on attend des micro secondes ?"

Souvent les moteurs ont 200 pas par tour et pour faire tourner un moteur on ne peut pas dépasser la vitesse limite. Supposons que l'on veuille faire 5tr/s (on est pas loin de la limite), il faudra alors 1 tour en 200ms ou encore 200 pas en 200ms ou encore 1 pas toutes les ms.
Il faut donc:

  • mettre step à HIGH
  • attendre un temps X
  • mettre step à LOW
  • attendre un temps X'
    Si on n'attend pas la deuxième fois, le pas suivant arriverait trop tôt.
    X+X' doit donner 1ms
    X doit être supérieur à 1µs à 3µs (suivant les drivers)
    Dans l'exemple qui est pris, a été choisi X=X'=500µs, mais X=3µs et X'=997µs donne le même résultat.

Etant rationaliste, je suis intéressé par ce "C‘est au détriment du couple". Les essais en vitesse maximale, départ arrêté, m'ont montré que je gagne quelques pourcent en 16 micros-pas par rapport aux pas entiers. J'ai vu plusieurs fois cette affirmation, mais je ne sais pas d'où cela sort, ni quelle pourrait en être la cause.

La page Les bonnes pratiques du Forum Francophone donne quelques conseils pour avoir plus de chances d'avoir des réponses et notamment comment présenter son code pour que les habitués arrivent à lire les programmes. C'est mon cas, le code tel que présenté m'est illisible tel quel.

Vileroi merci ! je viens de comprendre un bug : mon moteur repondait de façon aléatoire parfois, je n'avais pas compris l'importance du temps d'attente entre LOW et HIGH. En augmentant le temps je repond au problème. Genial.

Bonsoir vileroi

J'ai voulu voire ce qu'était être rationaliste, dans Wikipédia... je ne suis pas arrivé au bout de l'explication.

Je suis plus simple, voire simpliste et je confirme

J'ai fait mes essais en pinçant, avec 2 doigts, la poulie au bout de l'axe du MPAP.

Cordialement
jpbbricole

J’ai lu que C’est une mauvaise interprétation de la phrase tirée de Cette note

The real compromise is that as you increase the number of microsteps per full step, the incremental torque per microstep drops off drastically.

Il s’agit de couple INCREMENTAL et pas du couple.

Pour être pragmatique, J’ai bien aimé l’explication de Mariss Freimanis ici sur ce qui compte et il y a aussi cette explication

J'aime beaucoup la deuxième explication, mais dans la première je n'aime pas

Cela tend à faire croire qu'il vaut mieux utiliser un full step qu'un micro-pas. Sauf que si on peut faire passer 1A maxi dans les bobines, alimenter en full step avec les deux bobines permet d'être au point nominal, alors qu'en micros pas, on est √2 fois en dessous. C'est pour cela qu'avec un A4988, en full step le courant maxi dans une bobine est de 70% du réglage et en micro-pas on est au maxi à 100% du réglage.

Merci à toi Jean-Marc, cela faisait un moment que je me posais cette question.

Je ne suis pas du tout un expert donc j’ai pas creusé cette histoire de racine de 2 mais le fait que souvent on cherche un couple en mouvement et pas le couple à l’arrêt était un point intéressant

(Jean-Marc :slight_smile: )

Je reste persuadé que si on alimente correctement un moteur, que l'on soit en mode une seule phase à la fois, deux phases à la fois, en demi pas ou en micro-pas, les couples statique et dynamiques sont toujours les mêmes pour un moteur deux enroulements. Sauf qu'en micro-pas on n'a quasiment plus de résonance et que du coup on grade le couple pour certaines vitesses.

Pardon.
Olivier :slight_smile: (vilerOi est un anagramme)

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.