Tutoriel · Débutant · 25 min de lecture

Pas par millimètre : courroies, vis mères, résolution

D'où viennent 80 et 400 pas/mm, pourquoi une courroie et une vis échangent résolution contre vitesse, et comment étalonner le nombre plutôt que d'y croire.

Un nombre, une formule

Un driver pas à pas compte des impulsions. Votre machine se déplace en millimètres. Le nombre qui convertit entre eux est le pas par millimètre, et chaque autre étalonnage de la machine dépend de sa justesse.

La formule ne change jamais :

steps/mm = (full steps per revolution × microstepping) ÷ travel per revolution

Le numérateur est fixé par le moteur et le driver — un moteur 1,8° au 1/16 de pas donne 200 × 16 = 3200 micropas par tour, toujours. Le dénominateur est la seule partie qui dépend de votre machine, et c’est une question de mécanique : de combien l’axe avance quand l’arbre tourne d’un tour ?

Deux panneaux empilés. Le panneau supérieur montre une poulie GT2 à vingt dents avec une courroie dentée qui en part, un pas de deux millimètres marqué entre deux dents de courroie, et l'arithmétique vingt dents fois deux millimètres égale quarante millimètres par tour, puis 200 fois 16 divisé par 40 égale 80 pas par millimètre. Le panneau inférieur montre une vis mère T8 avec quatre filets de départ de couleurs différentes et un écrou dessus, une avance de huit millimètres marquée, et l'arithmétique 200 fois 16 divisé par 8 égale 400 pas par millimètre.
Les deux mécanismes qu'utilisent presque toutes les machines amateurs, et les deux nombres déjà vus dans un fichier de configuration. Seul le dénominateur change jamais. Télécharger le SVG

Courroies

Pour une courroie dentée, le déplacement par tour est juste les dents de la poulie fois le pas de la courroie. La courroie GT2 a un pas de 2 mm, et une poulie de 20 dents est le défaut de presque chaque machine amateur :

travel  = 20 teeth × 2 mm = 40 mm per revolution
steps/mm = (200 × 16) ÷ 40 = 80

Le voilà — le 80 pas/mm dans la configuration X et Y de chaque imprimante 3D. Ce n’est pas une constante magique ; c’est de la GT2 20 dents au seizième de pas, et si vous montez une poulie de 16 dents cela devient 100.

Poulie Déplacement par tour pas/mm à 1/16 Résolution
GT2 16 dents 32 mm 100 0.010 mm
GT2 20 dents 40 mm 80 0.0125 mm
GT2 30 dents 60 mm 53.33 0.019 mm
GT3 20 dents (3 mm) 60 mm 53.33 0.019 mm

Notez que la ligne 30 dents ne divise pas juste. 53,333… pas/mm est parfaitement légal — le micrologiciel le stocke en flottant et accumule les pas fractionnaires — mais cela signifie qu’aucune position n’est jamais exactement sur une frontière de pas, un petit argument pour les nombres de dents utilisés par les autres.

Vis mères

Pour une vis, le déplacement par tour est l’avance — et l’avance n’est pas le pas. C’est l’erreur la plus courante de tout le sujet.

  • Le pas est la distance entre filets adjacents.
  • L’avance est de combien l’écrou avance en un tour.
  • Avance = pas × nombre de filets.

Une vis à un filet a une avance égale au pas. Mais l’ubiquitaire vis « T8 » est au pas de 2 mm avec quatre hélices de filet séparées enroulées côte à côte, donc un tour avance l’écrou de quatre filets :

lead     = 2 mm pitch × 4 starts = 8 mm per revolution
steps/mm = (200 × 16) ÷ 8 = 400

Et voilà l’autre nombre déjà vu. Si vous mesurez l’espacement des filets d’une T8 au pied à coulisse, vous obtenez 2 mm, calculez 1600 pas/mm, et chaque déplacement sort quatre fois trop court. Comptez les filets au bout de la vis — vous pouvez voir les quatre hélices séparées — ou tournez-la juste d’un tour complet contre un mètre.

Vis Pas Filets Avance pas/mm à 1/16
T8, 4 filets (« T8x8 ») 2 mm 4 8 mm 400
T8, 2 filets (« T8x4 ») 2 mm 2 4 mm 800
T8, un filet (« T8x2 ») 2 mm 1 2 mm 1600
Tige filetée M5 0.8 mm 1 0.8 mm 4000
Vis à billes 1605 5 mm 1 5 mm 640

Choisir entre elles

La résolution n’est pas gratuite. Une vis à dix fois la résolution d’une courroie exige aussi dix fois plus d’impulsions pour la même distance — donc à taux maximal d’impulsions fixé, elle est dix fois plus lente. Voilà le compromis, et il est dur :

Courroie GT2, 20T Vis mère T8
Déplacement par tour 40 mm 8 mm
Résolution à 1/16 0.0125 mm 0.0025 mm
Pas/s pour 100 mm/s 8 000 40 000
Vitesse de pointe pratique 300+ mm/s ~30 mm/s
Effort à l’axe Faible — la courroie s’étire Élevé — avantage mécanique 5×
Tient la position hors tension Non D’ordinaire oui (autobloquant)
Jeu Faible si tendue Réel, et dans l’écrou
Utilisez-la pour X et Y — rapides, légers Z — lent, lourd, ne doit pas chuter

C’est exactement pourquoi une imprimante 3D utilise des courroies pour X et Y et une vis pour Z. X et Y vont vite et portent presque rien. Z va lentement, porte le poids d’un plateau ou d’un portique, et ne doit pas s’affaisser à la coupure — et l’angle d’hélice faible d’une T8 la rend autobloquante, donc elle ne reculera pas en charge.

Le chiffre de 40 000 pas/s dans ce tableau est aussi un vrai plafond, pas théorique. Un Arduino Uno crachant des impulsions de pas en bit-bang plafonne vers 10 000 à 15 000 par seconde avant que la boucle ne suive plus, ce qui sur une T8 au 1/16 de pas fait environ 30 mm/s. S’il faut qu’un axe à vis aille plus vite, les réponses sont moins de micropas, une carte plus rapide, ou un timer matériel — pas un plus gros moteur.

Le couple, et ce que le tableau ne dit pas

Changer de mécanisme change la charge que voit le moteur, pas juste la vitesse. Une vis mère multiplie l’effort par environ 2π × rayon ÷ avance, donc une T8 transforme un couple moteur modeste en effort axial substantiel — et c’est pourquoi un axe Z à petit moteur peut lever un lourd plateau.

La courroie fait l’inverse. Une poulie GT2 20 dents a 12,7 mm de diamètre primitif, donc la tension de courroie vaut le couple moteur divisé par 6,4 mm. Un moteur faisant 0,3 N·m produit environ 47 N à la courroie, et c’est tout ce que vous avez. Si votre axe X saute des pas en heurtant quelque chose, cette arithmétique est pourquoi.

L’inertie réfléchie change aussi, et dans le même sens : plus le mécanisme est fin, moins la masse du chariot compte pour le moteur, et c’est en partie pourquoi un axe à vis tolère une accélération agressive qu’un axe à courroie ne tolère pas. Vous pouvez voir l’effet directement dans le simulateur de moteur pas à pas — basculez le mécanisme de courroie à vis mère tout le reste figé et regardez ce qu’il arrive à l’angle de retard.

Étalonnez-le, ne le croyez pas

Le nombre calculé est un point de départ, pas une réponse. Les courroies s’étirent, les poulies ont des tolérances de fabrication, et les vis sont vendues avec des descriptions optimistes. Mesurez :

  1. Marquez le chariot contre une référence fixe. Un bout d’adhésif et un trait de crayon fin.
  2. Commandez un long déplacement — 100 mm, pas 10 mm. L’erreur est un pourcentage, donc un long déplacement la mesure plus précisément.
  3. Mesurez ce qui est vraiment arrivé au pied à coulisse ou au réglet acier.
  4. Corrigez par un ratio :
new steps/mm = old steps/mm × (commanded ÷ measured)

Commandé 100 mm, mesuré 98,4 mm, actuellement sur 80 : 80 × 100 ÷ 98,4 = 81,3 pas/mm.

Puis répétez la mesure pour confirmer. Une correction unique qui ne converge pas signifie que l’erreur n’est pas une erreur d’échelle — et la différence est diagnostique :

Motif de mesure Cause
Décalé d’un pourcentage constant à chaque distance Mauvais pas/mm — le calcul ci-dessus corrige
Décalé d’une quantité constante quelle que soit la distance Jeu ou vis sans tête de poulie desserrée
Décalé d’une quantité différente à chaque fois Pas perdus — courant, vitesse ou accélération
Correct dans un sens, court dans l’autre Jeu, et vous avez mesuré dans les deux sens
Exactement 2×, 4× ou 16× faux Les cavaliers de micropas ne correspondent pas au micrologiciel
Exactement 4× court sur un axe à vis Vous avez pris le pas où il fallait l’avance

Ces deux dernières lignes attrapent la plupart des premiers montages, et les deux sont de l’arithmétique plutôt que de la mécanique.

Axes rotatifs : pas par degré

Tout axe n’est pas linéaire. Un plateau tournant, un extrudeur de filament, l’axe de panoramique d’un slider caméra et une articulation de robot ont tous la même question avec un autre dénominateur — et pour un axe rotatif le dénominateur est d’ordinaire un rapport de réduction plutôt qu’un mécanisme :

steps/degree = (full steps × microstepping × gear ratio) ÷ 360

Un moteur 1,8° au 1/16 via une réduction 5:1 donne (200 × 16 × 5) ÷ 360 = 44,4 pas par degré, soit 0,0225° de résolution. À remarquer : c’est la même arithmétique qu’une courroie, avec 360 degrés tenant lieu des millimètres par tour.

L’extrudeur d’une imprimante 3D est l’exception, parce qu’il se cote en pas par millimètre de filament tout en étant un entraînement rotatif. Le dénominateur est la circonférence effective du galet moleté, qui n’est pas son diamètre nominal — les dents mordent dans le filament, donc le vrai rayon de prise est plus petit que celui imprimé sur la pièce. C’est pourquoi personne ne calcule les E-steps et tout le monde les mesure :

  1. Marquez le filament 120 mm au-dessus de l’entrée de l’extrudeur.
  2. Extrudez exactement 100 mm.
  3. Mesurez de l’entrée à la marque à nouveau. S’il lit 27 mm, vous avez extrudé 93 mm, pas 100.
  4. nouveau = ancien × 100 ÷ 93. Avec 93 pas/mm cela fait 100 pas/mm.

Le point de départ à 120 mm est délibéré : il laisse assez de filament pour que la marque n’atteigne jamais l’entrée même si l’extrudeur surextrude franchement.

Pas par millimètre non entiers

Une fois étalonné, le nombre cesse d’être rond — 80 devient 81,3, et un déplacement de 10 mm devient 813,0 pas. Le micrologiciel gère cela correctement, mais le code artisanal d’ordinaire non, parce que l’implémentation évidente jette la fraction à chaque déplacement :

// Wrong: truncates on every call. Two hundred 0.1 mm moves land 1.4 mm short.
long stepsFor(float mm) { return (long)(mm * stepsPerMm); }

À 81,3 pas/mm, un déplacement de 0,1 mm fait 8,13 pas, qui se tronquent à 8. Le 0,13 est jeté, et il est jeté à nouveau au déplacement suivant, et au suivant. Sur quelques centaines de courts segments — exactement ce qu’est une courbe ou un motif de remplissage — l’erreur s’accumule en quelque chose de visible.

Le correctif est de garder le reste plutôt que la position :

// Right: carry the fraction forward, so the error never accumulates past one step.
float carry = 0;

long stepsFor(float mm) {
  float exact = mm * stepsPerMm + carry;
  long whole = lround(exact);
  carry = exact - whole;        // always within half a step
  return whole;
}

Maintenant la pire erreur à tout moment est un demi-pas — 0,006 mm sur cet axe — et elle ne croît jamais. C’est la même astuce que la rastérisation de ligne de Bresenham utilise, et la même raison pour laquelle le micrologiciel suit la position en pas plutôt qu’en millimètres : un compte de pas entier ne peut dériver, et une position millimétrique flottante peut.

En micrologiciel

Marlin et GRBL gardent tous deux le nombre comme paramètre réglable, donc rarement besoin de recompiler :

; Marlin — X, Y, Z, E
M92 X80 Y80 Z400 E93
M500          ; save to EEPROM

; GRBL
$100=80       ; X steps/mm
$101=80       ; Y
$102=400      ; Z

Notez ce que vous réglez. La version la plus frustrante de ce problème est une machine étalonnée correctement une fois, reflashée, et revenue silencieusement aux défauts du micrologiciel.

Suite

Le nombre ci-dessus dit à la machine de combien elle a bougé. Il ne dit rien de l’endroit où elle a commencé — et une machine en boucle ouverte n’a aucun moyen de le savoir à la mise sous tension. C’est à cela que sert la prise d’origine contre un fin de course.

Explorer le graphe

Fait partie de ces réalisations

Les projets et parcours d'apprentissage qui incluent ce tutoriel.

Pour aller plus loin

Références