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?

Dois painéis empilhados. O painel superior mostra uma polia GT2 de vinte dentes com uma correia dentada saindo dela, um passo de dois milímetros marcado entre dois dentes da correia e a conta vinte dentes vezes dois milímetros igual a quarenta milímetros por volta, depois 200 vezes 16 dividido por 40 igual a 80 passos por milímetro. O painel inferior mostra um fuso de comando T8 com quatro inícios de rosca em cores diferentes e uma porca sobre ele, um avanço de oito milímetros marcado e a conta 200 vezes 16 dividido por 8 igual a 400 passos por milímetro.
Os dois mecanismos que quase toda máquina hobby usa e os dois números que você já viu em um arquivo de configuração. Só o denominador muda. Baixar SVG

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:

  1. Marque o conjunto móvel em relação a uma referência fixa. Uma fita e uma linha feita com lápis.
  2. Comande um movimento longo — 100 mm, não 10 mm. O erro é uma porcentagem, portanto um movimento maior o mede com mais precisão.
  3. Meça o que realmente aconteceu com paquímetros ou uma régua de aço.
  4. 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:

  1. Marque o filamento 120 mm acima da entrada do extrusor.
  2. Extruda exatamente 100 mm.
  3. Meça novamente da entrada até a marca. Se a leitura for 27 mm, você extrudou 93 mm, não 100.
  4. 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

Referências