Tutorial · Iniciante · 25 min
Passos/mm: correias, fusos de comando e resolução
De onde vêm 80 e 400 passos/mm, por que correias e fusos de comando trocam resolução por velocidade e como calibrar esse número com uma régua.
Um número, uma fórmula
O controlador de um motor de passo (driver) conta pulsos. Sua máquina se desloca em milímetros. O número que faz a conversão entre eles é passos por milímetro (passos/mm), e todas as outras calibrações da máquina dependem de ele estar correto.
A fórmula nunca muda:
steps/mm = (full steps per revolution × microstepping) ÷ travel per revolution
O numerador é definido pelo motor e pelo controlador — um motor de 1,8° com 1/16 de passo fornece 200 × 16 = 3200 micropassos por volta, sempre. O denominador é a única parte que depende da sua máquina, e é uma questão mecânica: quanto o eixo se desloca quando o eixo rotativo do motor dá uma volta?
Correias
Para uma correia dentada, o deslocamento por volta é simplesmente o número de dentes da polia vezes o passo da correia. A correia GT2 tem passo de 2 mm, e uma polia de vinte dentes é o padrão em quase toda máquina hobby:
travel = 20 teeth × 2 mm = 40 mm per revolution
steps/mm = (200 × 16) ÷ 40 = 80
Ali está — os 80 passos/mm na configuração X e Y de toda impressora 3D. Não é uma constante mágica; é uma GT2 de vinte dentes com 1/16 de passo e, se você instalar uma polia de dezesseis dentes, o valor passa a ser 100.
| Polia | Deslocamento por volta | Passos/mm com 1/16 de passo | Resolução |
|---|---|---|---|
| GT2 de 16 dentes | 32 mm | 100 | 0,010 mm |
| GT2 de 20 dentes | 40 mm | 80 | 0,0125 mm |
| GT2 de 30 dentes | 60 mm | 53,33 | 0,019 mm |
| GT3 de 20 dentes (3 mm) | 60 mm | 53,33 | 0,019 mm |
Observe que a linha de trinta dentes não produz um número inteiro de passos/mm. 53,333… passos/mm é perfeitamente válido — o firmware armazena esse valor em ponto flutuante (float) e acumula passos fracionários — mas significa que nenhuma posição estará exatamente sobre um limite de passo, e esse é um pequeno argumento a favor das contagens de dentes que todo mundo usa.
Fusos de comando
Para um fuso de comando, o deslocamento por volta é o avanço — e avanço não é passo. Este é o erro mais comum de todo o assunto.
- Passo é a distância entre roscas adjacentes.
- Avanço é quanto a porca percorre em uma volta.
- Avanço = passo × número de inícios de rosca.
Um fuso de comando de um único início tem avanço igual ao passo. Mas o onipresente fuso de comando “T8” tem passo de 2 mm com quatro hélices de rosca separadas enroladas lado a lado, portanto uma volta avança a porca em quatro roscas:
lead = 2 mm pitch × 4 starts = 8 mm per revolution
steps/mm = (200 × 16) ÷ 8 = 400
E está aí o outro número que você já viu. Se você medir o espaçamento das roscas de um T8 com paquímetros, encontrará 2 mm, calculará 1600 passos/mm e cada movimento sairá quatro vezes mais curto. Conte os inícios de rosca na extremidade do fuso de comando — você vê as quatro hélices separadas — ou simplesmente gire-o uma volta completa contra uma régua.
| Fuso de comando | Passo | Inícios de rosca | Avanço | Passos/mm com 1/16 de passo |
|---|---|---|---|---|
| T8, 4 inícios (“T8x8”) | 2 mm | 4 | 8 mm | 400 |
| T8, 2 inícios (“T8x4”) | 2 mm | 2 | 4 mm | 800 |
| T8, 1 início (“T8x2”) | 2 mm | 1 | 2 mm | 1600 |
| Haste roscada M5 | 0,8 mm | 1 | 0,8 mm | 4000 |
| Fuso de comando de esferas 1605 | 5 mm | 1 | 5 mm | 640 |
Escolhendo entre eles
Resolução não é gratuita. Um fuso de comando com dez vezes mais resolução que uma correia também precisa de dez vezes mais pulsos para a mesma distância — portanto, com uma taxa máxima de passos fixa, ele é dez vezes mais lento. Essa é a troca, e ela é difícil:
| Correia GT2, 20T | Fuso de comando T8 | |
|---|---|---|
| Deslocamento por volta | 40 mm | 8 mm |
| Resolução com 1/16 de passo | 0,0125 mm | 0,0025 mm |
| Passos/s para 100 mm/s | 8 000 | 40 000 |
| Velocidade máxima prática | 300+ mm/s | ~30 mm/s |
| Força no eixo | Baixa — a correia estica | Alta — vantagem mecânica de 5× |
| Mantém a posição sem alimentação | Não | Geralmente sim (autobloqueante) |
| Folga mecânica | Baixa se tensionada | Real, e está na porca |
| Aplicação | X e Y — rápido, leve | Z — lento, pesado, não pode cair |
É exatamente por isso que uma impressora 3D usa correias em X e Y e um fuso de comando em Z. X e Y se movem rápido e quase não carregam nada. Z se move devagar, carrega o peso de uma mesa ou de um pórtico e não pode ceder quando a alimentação é cortada — e o ângulo raso da hélice de um T8 o torna autobloqueante, portanto ele não recua sob carga.
O número de 40 000 passos/s nessa tabela também é um teto real, não teórico. Um Arduino Uno gerando pulsos de passo por manipulação direta de bits (bit-banging) chega a cerca de 10 000 a 15 000 por segundo antes de o loop deixar de acompanhar, o que em um T8 com 1/16 de passo equivale a aproximadamente 30 mm/s. Se precisar que um eixo com fuso de comando se mova mais rápido que isso, as respostas são usar menos micropassos, uma placa mais rápida ou um temporizador dedicado — não um motor maior.
Torque, e o que a tabela não diz
Mudar o mecanismo muda a carga que o motor vê, não apenas a velocidade. Um fuso de comando multiplica a força aproximadamente por 2π × radius ÷ lead, então um T8 transforma um torque modesto do motor em uma força axial substancial — é por isso que um eixo Z com um motor pequeno consegue levantar uma mesa pesada.
A correia faz o contrário. Uma polia GT2 de vinte dentes tem um diâmetro primitivo de 12,7 mm, portanto a tensão da correia é o torque do motor dividido por 6,4 mm. Um motor produzindo 0,3 N·m gera cerca de 47 N na correia, e é tudo o que você terá. Se seu eixo X perder passos ao encontrar algo, essa conta explica por quê.
A inércia refletida também muda, na mesma direção: quanto mais fino o mecanismo, menos a massa do conjunto móvel importa para o motor, e essa é parte da razão pela qual um eixo com fuso de comando tolera acelerações agressivas que um eixo de correia não tolera. Você pode ver o efeito diretamente no simulador de motor de passo — mude o mecanismo de correia para fuso de comando, mantendo todo o resto constante, e observe o que acontece com o ângulo de atraso.
Calibre, não confie
O número calculado é um ponto de partida, não uma resposta. Correias esticam, polias têm tolerância de fabricação e os fusos de comando são vendidos com descrições otimistas. Meça:
- Marque o conjunto móvel em relação a uma referência fixa. Uma fita e uma linha feita com lápis.
- Comande um movimento longo — 100 mm, não 10 mm. O erro é uma porcentagem, portanto um movimento maior o mede com mais precisão.
- Meça o que realmente aconteceu com paquímetros ou uma régua de aço.
- Corrija com uma razão:
new steps/mm = old steps/mm × (commanded ÷ measured)
Com 100 mm comandados, 98,4 mm medidos e atualmente em 80: 80 × 100 ÷ 98.4 = 81.3 steps/mm.
Depois repita a medição para confirmar. Uma única correção que não converge significa que o erro não é de escala — e a diferença é diagnóstica:
| Padrão de medição | Causa |
|---|---|
| Desvio de uma porcentagem constante em todas as distâncias | Passos/mm errados — o cálculo acima corrige |
| Desvio de uma quantidade constante, independentemente da distância | Folga mecânica ou um parafuso sextavado interno da polia frouxo |
| Desvio de uma quantidade diferente cada vez | Perda de passo — corrente, velocidade ou aceleração |
| Correto em um sentido, curto no outro | Folga mecânica, e você mediu nas duas direções |
| Exatamente 2×, 4× ou 16× errado | Os jumpers de micropassos não correspondem ao firmware |
| Exatamente 4× curto em um eixo com fuso de comando | Você usou passo onde precisava de avanço |
As duas últimas linhas resolvem a maioria das primeiras montagens, e ambas são aritmética, não mecânica.
Eixos rotativos: passos por grau
Nem todo eixo é linear. Uma mesa rotativa, um extrusor de filamento, o eixo de panorâmica de um trilho de câmera e uma articulação de robô têm a mesma pergunta com um denominador diferente — e, em um eixo rotativo, o denominador normalmente é uma relação de transmissão, e não um mecanismo:
steps/degree = (full steps × microstepping × gear ratio) ÷ 360
Um motor de 1,8° com 1/16 de passo e uma redução 5:1 fornece (200 × 16 × 5) ÷ 360 = 44.4 steps per degree, o que corresponde a uma resolução de 0,0225°. Vale observar: essa é a mesma conta de uma correia, com 360 graus no lugar dos milímetros por volta.
O extrusor de uma impressora 3D é a exceção, porque é especificado em passos por milímetro de filamento apesar de ser um acionamento rotativo. O denominador é a circunferência efetiva da engrenagem fresada, que não é seu diâmetro nominal — os dentes mordem o filamento, portanto o raio real de contato é menor que o impresso na peça. É por isso que ninguém calcula os E-steps e todo mundo os mede:
- Marque o filamento 120 mm acima da entrada do extrusor.
- Extruda exatamente 100 mm.
- Meça novamente da entrada até a marca. Se a leitura for 27 mm, você extrudou 93 mm, não 100.
new = old × 100 ÷ 93. Com 93 passos/mm, isso dá 100 passos/mm.
O ponto inicial de 120 mm é deliberado: deixa filamento suficiente para que a marca nunca chegue à entrada, mesmo se o extrusor extrudar muito além do previsto.
Passos por milímetro não inteiros
Depois da calibração, o número deixa de ser redondo — 80 se torna 81,3, e um movimento de 10 mm se torna 813,0 passos. O firmware trata isso corretamente, mas códigos escritos à mão normalmente não, porque a implementação óbvia descarta a fração a cada movimento:
// Wrong: truncates on every call. Two hundred 0.1 mm moves land 1.4 mm short.
long stepsFor(float mm) { return (long)(mm * stepsPerMm); }
Em 81,3 passos/mm, um movimento de 0,1 mm equivale a 8,13 passos, que são truncados para 8. O 0,13 é descartado e é descartado novamente no movimento seguinte, e no seguinte. Ao longo de algumas centenas de segmentos curtos — exatamente os que formam uma curva ou um padrão de preenchimento — o erro se acumula até algo visível.
A correção é manter o resto em vez da posição:
// 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;
}
Agora o pior erro em qualquer momento é meio passo — 0,006 mm neste eixo — e ele nunca cresce. Este é o mesmo truque que a rasterização de linhas de Bresenham usa, e a mesma razão pela qual o firmware guarda a posição em passos, e não em milímetros: uma contagem inteira de passos não pode derivar, mas uma posição em milímetros representada em ponto flutuante (float) pode.
No firmware
Marlin e GRBL mantêm o número como um parâmetro ajustável, portanto raramente você precisa 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
Anote o que você definiu. A versão mais frustrante desse problema é uma máquina que foi calibrada corretamente uma vez, recebeu um novo firmware e voltou silenciosamente aos padrões do firmware.
Próximo passo
O número acima informa à máquina o quanto ela se moveu. Não diz nada sobre onde ela começou — e uma máquina em malha aberta não tem como saber isso ao ligar. É para isso que serve o referenciamento com um fim de curso.
Explore o grafo
Faz parte destas montagens
Projetos e caminhos de aprendizagem que incluem este tutorial.
Leitura complementar