Tutorial · Principiante · 25 min de lectura
Pasos por milímetro: correas, husillos y calibración métrica
De dónde salen los 80 y 400 pasos/mm, por qué correa y husillo cambian resolución por velocidad y cómo calibrar el factor con una regla y no con la teoría.
Un número, una fórmula
Un driver de stepper cuenta pulsos. Tu máquina se mueve en milímetros. El número que convierte entre ambos es pasos por milímetro, y toda otra calibración de la máquina depende de que esté bien.
La fórmula nunca cambia:
steps/mm = (full steps per revolution × microstepping) ÷ travel per revolution
El numerador lo fijan el motor y el driver — un motor de 1,8° a 1/16 de paso da 200 × 16 = 3200 micropasos por revolución, siempre. El denominador es la única parte que depende de tu máquina, y es una cuestión de mecánica: ¿cuánto se mueve el eje cuando el eje gira una vez?
Correas
Para una correa dentada, el recorrido por revolución son los dientes de la polea por el paso de la correa. La correa GT2 tiene un paso de 2 mm, y una polea de 20 dientes es la opción por defecto en casi todas las máquinas de hobby:
travel = 20 teeth × 2 mm = 40 mm per revolution
steps/mm = (200 × 16) ÷ 40 = 80
Ahí está — los 80 pasos/mm de la configuración X e Y de cualquier impresora 3D. No es una constante mágica; es GT2 de 20 dientes a microstepping de dieciseisavo, y si montas una polea de 16 dientes pasa a ser 100.
| Polea | Recorrido por rev | pasos/mm a 1/16 | Resolución |
|---|---|---|---|
| GT2 de 16 dientes | 32 mm | 100 | 0.010 mm |
| GT2 de 20 dientes | 40 mm | 80 | 0.0125 mm |
| GT2 de 30 dientes | 60 mm | 53.33 | 0.019 mm |
| GT3 de 20 dientes (3 mm) | 60 mm | 53.33 | 0.019 mm |
Fíjate en que la fila de 30 dientes no divide exacto. 53.333… pasos/mm es perfectamente legal — el firmware lo guarda como float y acumula pasos fraccionarios— pero sí significa que ninguna posición cae nunca exactamente en un límite de paso, y ese es un pequeño argumento a favor de los recuentos de dientes que usa todo el demás.
Husillos
Para un tornillo, el recorrido por revolución es el avance — y el avance no es el paso. Este es el error más habitual de todo el tema.
- Paso es la distancia entre hilos adyacentes.
- Avance es lo que recorre la tuerca en una vuelta.
- Avance = paso × número de inicios.
Un tornillo de un solo inicio tiene avance igual al paso. Pero el ubicuo «T8» es de paso 2 mm con cuatro hélices de hilo distintas enrolladas una junto a otra, así que una vuelta hace avanzar la tuerca cuatro hilos:
lead = 2 mm pitch × 4 starts = 8 mm per revolution
steps/mm = (200 × 16) ÷ 8 = 400
Y ahí está el otro número que has visto. Si mides el paso de rosca de un T8 con un calibre obtienes 2 mm, calculas 1600 pasos/mm, y cada movimiento sale cuatro veces más corto. Cuenta los inicios de rosca en el extremo del tornillo — puedes ver las cuatro hélices separadas — o simplemente gíralo una vuelta completa contra una regla.
| Tornillo | Paso | Inicios | Avance | pasos/mm a 1/16 |
|---|---|---|---|---|
| T8, 4 inicios («T8x8») | 2 mm | 4 | 8 mm | 400 |
| T8, 2 inicios («T8x4») | 2 mm | 2 | 4 mm | 800 |
| T8, 1 inicio («T8x2») | 2 mm | 1 | 2 mm | 1600 |
| Varilla roscada M5 | 0.8 mm | 1 | 0.8 mm | 4000 |
| Husillo de bolas 1605 | 5 mm | 1 | 5 mm | 640 |
Elegir entre ellos
La resolución no es gratis. Un husillo con diez veces la resolución de una correa necesita también diez veces más pulsos para la misma distancia — así que a una tasa máxima de pasos fija es diez veces más lento. Ese es el intercambio, y es duro:
| Correa GT2, 20T | Husillo T8 | |
|---|---|---|
| Recorrido por revolución | 40 mm | 8 mm |
| Resolución a 1/16 | 0.0125 mm | 0.0025 mm |
| Pasos/s para 100 mm/s | 8 000 | 40 000 |
| Velocidad máxima práctica | 300+ mm/s | ~30 mm/s |
| Fuerza en el eje | Baja — la correa se estira | Alta — ventaja mecánica ×5 |
| Mantiene la posición sin corriente | No | Normalmente sí (autoblocante) |
| Holgura | Baja si está tensada | Real, y en la tuerca |
| Úsalo para | X e Y — rápido, ligero | Z — lento, pesado, no debe caer |
Es exactamente por eso que una impresora 3D usa correas en X e Y y un husillo en Z. X e Y se mueven rápido y no cargan casi nada. Z se mueve despacio, carga el peso de una cama o un pórtico, y no debe ceder cuando se corta la corriente — y el ángulo de hélice tan poco marcado de un T8 lo hace autoblocante, así que no se deja arrastrar hacia atrás bajo carga.
La cifra de 40 000 pasos/s de esa tabla es también un techo real, no teórico. Un Arduino Uno que genera pulsos de paso por software topa alrededor de 10 000 a 15 000 por segundo antes de que el bucle no pueda seguir el ritmo, lo que en un T8 a 1/16 equivale a unos 30 mm/s. Si necesitas que un eje de husillo se mueva más rápido que eso, las respuestas son menos micropasos, una placa más rápida, o un timer de hardware — no un motor más grande.
Par, y lo que la tabla no dice
Cambiar el mecanismo cambia la carga que ve el motor, no solo la velocidad. Un husillo multiplica la fuerza aproximadamente por 2π × radio ÷ avance, así que un T8 convierte un par de motor modesto en una fuerza axial sustancial — por eso un eje Z con un motor pequeño puede levantar una cama pesada.
La correa hace lo contrario. Una polea GT2 de 20 dientes tiene un diámetro primitivo de 12,7 mm, así que la tensión de correa es el par de motor dividido entre 6,4 mm. Un motor que hace 0,3 N·m produce unos 47 N en la correa, y eso es todo lo que sacas. Si tu eje X pierde pasos cuando choca con algo, esta aritmética es la razón.
La inercia reflejada también cambia, y en la misma dirección: cuanto más fino es el mecanismo, menos le importa al motor la masa del carro, y por eso un eje de husillo tolera aceleraciones agresivas que un eje de correa no tolera. Puedes ver el efecto directamente en el simulador de stepper — cambia el mecanismo de correa a husillo manteniendo todo lo demás constante y observa qué le pasa al ángulo de retardo.
Calíbralo, no confíes en él
El número calculado es un punto de partida, no una respuesta. Las correas se estiran, las poleas tienen tolerancias de fabricación, y los husillos se venden con descripciones optimistas. Mide:
- Marca el carro contra una referencia fija. Una tira de cinta y una línea fina de lápiz.
- Ordena un movimiento largo — 100 mm, no 10 mm. El error es un porcentaje, así que un movimiento más largo lo mide con más precisión.
- Mide lo que pasó de verdad con un calibre o una regla de acero.
- Corrige con un cociente:
new steps/mm = old steps/mm × (commanded ÷ measured)
Ordenaste 100 mm, mediste 98,4 mm, y ahora mismo estás en 80: 80 × 100 ÷ 98.4 = 81.3 pasos/mm.
Después repite la medida para confirmarlo. Una única corrección que no converge significa que el error no es de escala — y la diferencia es diagnóstica:
| Patrón de medición | Causa |
|---|---|
| Se desvía un porcentaje constante a cualquier distancia | Pasos/mm equivocados — el cálculo de arriba lo arregla |
| Se desvía una cantidad constante sea cual sea la distancia | Holgura o un tornillo de fijación de la polea flojo |
| Se desvía una cantidad diferente cada vez | Pierde pasos — corriente, velocidad o aceleración |
| Correcto en un sentido, corto en el otro | Holgura, y has medido en ambas direcciones |
| Exactamente 2×, 4× o 16× desviado | Los jumpers de microstepping no coinciden con el firmware |
| Exactamente 4× corto en un eje de husillo | Has usado el paso donde necesitabas el avance |
Esas dos últimas filas capturan la mayoría de las primeras construcciones, y ambas son aritmética y no mecánica.
Ejes rotativos: pasos por grado
No todo eje es lineal. Una mesa giratoria, un extrusor de filamento, el eje de paneo de un deslizador de cámara y una articulación de robot tienen todos la misma pregunta con un denominador distinto — y para un eje rotativo el denominador suele ser una relación de transmisión y no un mecanismo:
steps/degree = (full steps × microstepping × gear ratio) ÷ 360
Un motor de 1,8° a 1/16 con una reducción de 5:1 da (200 × 16 × 5) ÷ 360 = 44.4 pasos por grado,
que son 0,0225° de resolución. Vale la pena notar que es la misma aritmética que una correa, con 360
grados en lugar de los milímetros por revolución.
El extrusor de una impresora 3D es el caso raro, porque se especifica en pasos por milímetro de filamento siendo un accionamiento rotativo. El denominador es la circunferencia efectiva del engranaje tallado, que no es su diámetro nominal — los dientes muerden el filamento, así que el radio real de agarre es menor que el impreso en la pieza. Por eso nadie calcula los E-steps y todo el mundo los mide:
- Marca el filamento a 120 mm por encima de la entrada del extrusor.
- Extruye exactamente 100 mm.
- Mide de nuevo desde la entrada hasta la marca. Si marca 27 mm, has extruido 93 mm, no 100.
nuevo = viejo × 100 ÷ 93. Con 93 pasos/mm eso son 100 pasos/mm.
El punto de partida de 120 mm es deliberado: deja filamento suficiente para que la marca nunca llegue a la entrada ni siquiera si el extrusor sobreextruye mucho.
Pasos por milímetro no enteros
Una vez calibrado, el número deja de ser redondo — 80 se convierte en 81,3, y un movimiento de 10 mm se convierte en 813,0 pasos. El firmware maneja esto correctamente, pero el código escrito a mano normalmente no, porque la implementación obvia tira la fracción en cada movimiento:
// Wrong: truncates on every call. Two hundred 0.1 mm moves land 1.4 mm short.
long stepsFor(float mm) { return (long)(mm * stepsPerMm); }
A 81,3 pasos/mm, un movimiento de 0,1 mm son 8,13 pasos, que se truncan a 8. El 0,13 se descarta, y se descarta otra vez en el movimiento siguiente, y en el siguiente. A lo largo de unos cientos de segmentos cortos — que es exactamente lo que son una curva o un patrón de relleno — el error se acumula hasta algo visible.
El arreglo es conservar el resto en vez de la posición:
// 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;
}
Ahora el peor error en cualquier momento es medio paso — 0,006 mm en este eje — y nunca crece. Este es el mismo truco que usa el rasterizado de líneas de Bresenham, y la misma razón por la que el firmware lleva la posición en pasos y no en milímetros: un recuento de pasos entero no puede derivar, y una posición en milímetros en float sí.
En el firmware
Marlin y GRBL guardan el número como parámetro ajustable, así que rara vez necesitas recompilar:
; 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
Anota lo que pones. La versión más frustrante de este problema es una máquina que se calibró bien una vez, se reflasheó, y volvió en silencio a los valores por defecto del firmware.
Siguiente
El número de arriba le dice a la máquina cuánto se ha movido. No dice nada de dónde empezó — y una máquina en lazo abierto no tiene forma de saberlo al arrancar. Para eso está el posicionamiento por final de carrera.
Explora el grafo
Forma parte de estos montajes
Proyectos y rutas de aprendizaje que incluyen este tutorial.
Lecturas adicionales