Skip to main content

Stepper Motor Steps per mm, per Revolution, and Microstepping Explained

How to work out stepper motor steps per revolution and steps per mm, what microstepping changes, and how to calibrate motion for 3D printers and CNC.

Published By Li Lei
#3d-printing #cnc #stepper-motor #calibration #firmware

Stepper Motor Steps per mm, per Revolution, and Microstepping

When an axis on my 3D printer moves 98 mm after I command 100 mm, the fix almost always lives in one firmware number: steps per mm. Get that number right and the carriage lands exactly where the G-code asks. Get it wrong and every print is subtly stretched or squashed. This guide walks through where that number comes from — step angle, microstepping, and the transmission — so you can compute it instead of guessing, then trim it with calipers.

Steps per revolution: where the chain starts

A stepper motor moves in fixed angular increments called full steps. The step angle on the datasheet tells you how big each one is. Divide a full circle by that angle and you get the count of full steps in one turn:

steps per rev = 360 / step angle × microsteps

The most common motor in desktop 3D printers is a 1.8° NEMA 17. At full step that is 360 / 1.8 = 200 steps per revolution. A 0.9° motor halves the angle and doubles the count to 400. That full-step figure is fixed by the motor's physical pole geometry — you cannot change it in software. What you can change is microstepping, which is why it sits in the formula as a multiplier.

What microstepping actually does to the numbers

The stepper driver — a TMC2209, an A4988, or similar — can hold the rotor at intermediate positions between full steps by feeding partial current to each coil. That subdivision is microstepping, and the divisor (1, 2, 4, 8, 16, 32) multiplies the steps-per-revolution count directly.

So a 1.8° motor reports:

  • 200 steps/rev at full step (1×)
  • 1600 steps/rev at 1/8
  • 3200 steps/rev at 1/16

Microstepping buys smoother, quieter motion and finer positioning. It does not buy proportional accuracy, because the holding torque at each microstep shrinks as the divisor climbs — at 1/16 a single microstep holds only a fraction of the force a full step does, so the rotor can be nudged off it. The practical takeaway: 1/16 is the sweet spot for most printer axes. Higher divisors look impressive on paper and rarely improve real-world precision.

One number, two effects: doubling the microstep divisor doubles steps per revolution, and because steps per mm derives from steps per revolution, it doubles steps/mm too. Forgetting this multiplier is the classic mistake — plug 200 into a 1/16 setup and every move comes out sixteen times too short.

From steps per revolution to steps per mm

Steps per revolution is an angular figure. Firmware needs a linear one: how many steps move the axis one millimetre. That depends on the transmission, and there are two common kinds.

Leadscrew or threaded rod. Each motor turn advances the nut by the screw's lead (mm per revolution):

steps per mm = steps per rev / lead

A 1.8° motor at 1/16 microstepping is 3200 steps/rev. On a T8 leadscrew with an 8 mm lead that is 3200 / 8 = 400 steps/mm — the typical Z-axis value. Watch the lead-versus-pitch trap: a 4-start T8 screw has a 2 mm thread pitch but an 8 mm lead, and the lead is what one revolution actually advances. Feed the pitch by mistake and your steps/mm comes out four times too high.

Belt and pulley. Here the travel per revolution is the belt pitch times the pulley tooth count:

steps per mm = steps per rev / (belt pitch × pulley teeth)

A GT2 belt has a 2 mm pitch. A 20-tooth pulley therefore moves 2 × 20 = 40 mm per revolution.

A worked example: GT2 belt, 20-tooth pulley

Take a standard bedslinger or CoreXY X axis: a 1.8° motor, driver set to 1/16 microstepping, a GT2 belt, and a 20-tooth pulley.

  1. Steps per revolution: 360 / 1.8 × 16 = 3200.
  2. Travel per revolution: 2 mm pitch × 20 teeth = 40 mm.
  3. Steps per mm: 3200 / 40 = 80 steps/mm.

That 80 steps/mm is the canonical X/Y value you'll see in thousands of printer configs. If you ever see 79 or 81 in someone's Configuration.h, that is a calibrated value — the theoretical 80 trimmed against a real measurement. The stepper motor steps calculator runs all three lines for you and also reports how many steps a given travel costs: at 80 steps/mm, a 100 mm move is exactly 8000 steps.

Putting the number into firmware

In Marlin, steps/mm goes into DEFAULT_AXIS_STEPS_PER_UNIT in Configuration.h, or you set it live with M92 X80 and persist it with M500. Klipper is different: you don't enter steps/mm at all. You give it rotation_distance, and it computes steps/mm internally from rotation_distance, full_steps_per_rotation, and microsteps. The convenient part is that rotation_distance for a belt axis is just belt pitch × pulley teeth — the same 40 mm per revolution from the example above. For a leadscrew, rotation_distance is simply the lead. So the geometry you compute here drops straight into either firmware.

Calibrating when theory and reality disagree

The computed value is a starting point, not a final answer. Manufacturing tolerance, belt stretch, and pulley runout pull the real figure a hair off theory. The calibration is a single ratio:

new steps/mm = old steps/mm × commanded distance / measured distance

Command a generous move — 100 mm is good because measurement error matters less over a longer travel — then measure the actual displacement with calipers or a steel rule against a fixed mark. If 100 mm commanded produced 98 mm of real travel, multiply: 80 × 100 / 98 ≈ 81.6 steps/mm. Re-flash, repeat, and the error converges in a pass or two. That scaling ratio is the same arithmetic as any percentage calculator move — you're correcting by a measured percentage of error.

Belt and leadscrew axes usually land within a percent of theory, so they often need no trim at all. The extruder is the exception. E-steps depend on hobbed-gear diameter, filament grip, and tension, none of which the datasheet captures, so the extruder almost always needs this measured calibration — mark 120 mm of filament, extrude 100 mm, measure what's left, and apply the same ratio.

A quick checklist

  • Start from the motor's step angle: 1.8° → 200 full steps/rev, 0.9° → 400.
  • Multiply by the microstep divisor to get the steps the driver actually emits.
  • Divide by the transmission's mm-per-revolution: the screw lead, or belt pitch × pulley teeth.
  • Treat the result as a starting value and trim it with a commanded-versus-measured ratio.
  • Use the lead, never the pitch, on multi-start screws — that one swap is the most common four-fold error.

Steps per mm looks like a magic firmware constant until you see it as three honest multiplications. Once the chain is clear, a new build or a swapped pulley is a thirty-second recalculation instead of a print-ruining mystery.


Made by Toolora · Updated 2026-06-13