How the steps per mm are worked out
A stepper motor turns a fixed angle per step: 1.8° on most motors, so 200 full steps per turn, or 0.9° and 400 steps. The driver splits each full step into microsteps, usually 16. Steps per mm are the microsteps in one turn divided by how far one turn moves the axis.
steps/mm = full steps per turn × microsteps × gear ratio ÷ travel per turn belt: travel per turn = belt pitch × pulley teeth leadscrew: travel per turn = thread pitch × starts (the lead)
Example: a GT2 belt (2 mm pitch) on a 20-tooth pulley moves 40 mm per turn. With a 1.8° motor at 1/16 that is 200 × 16 ÷ 40 = 80 steps/mm, and each microstep moves the axis 12.5 µm.
Common setups
| Drive | Travel per turn | 1.8° · 1/16 | 0.9° · 1/16 | Full step (1.8°) |
|---|---|---|---|---|
| GT2 belt, 16 teeth | 32 mm | 100 | 200 | 0.16 mm |
| GT2 belt, 20 teeth | 40 mm | 80 | 160 | 0.2 mm |
| GT2 belt, 36 teeth | 72 mm | 44.444 | 88.889 | 0.36 mm |
| T8 (Tr8x8) | 8 mm | 400 | 800 | 0.04 mm |
| Tr8x2 | 2 mm | 1,600 | 3,200 | 0.01 mm |
| M8 threaded rod | 1.25 mm | 2,560 | 5,120 | 0.0063 mm |
| SFU1605 ball screw | 5 mm | 640 | 1,280 | 0.025 mm |
| SFU1610 ball screw | 10 mm | 320 | 640 | 0.05 mm |
At 1/16 microstepping, without gearing. At 1/32 the steps per mm double, at 1/8 they halve.
Pitch, lead and starts on a leadscrew
The pitch is the distance between two threads; the lead is how far the nut moves in one turn. On a single-start screw, such as a threaded rod or a Tr8x2, they are the same. A T8 leadscrew (Tr8x8) has a 2 mm pitch and four starts, so its lead is 8 mm: look at its end and you will see four separate threads. Ball screws are named by diameter and lead: an SFU1605 is 16 mm across with a 5 mm lead.
Klipper’s rotation_distance
Klipper doesn’t use steps per mm. It asks for rotation_distance, the distance the axis moves in one full turn of the motor (or of the last gear, when gear_ratio is set), together with microsteps and full_steps_per_rotation. For a belt it is pitch × teeth, for a screw its lead. To convert an old value: rotation_distance = full steps × microsteps ÷ steps/mm.
The Klipper docs note that almost all printers have a whole-number rotation_distance on X, Y and Z, such as 32, 40 or 8. A value with decimals there usually points to a wrong pitch or tooth count, unless the parts are MXL or imperial.
Calibrating the extruder
- Heat the hot end to printing temperature, so the filament melts freely.
- Mark the filament 120 mm above the point where it enters the extruder.
- Extrude slowly. Marlin: M83, then G1 E100 F100. Klipper: G91, then G1 E50 F60, and enter 50 mm as the requested length.
- Measure from the entry to the mark again: 120 minus that distance is the length actually extruded.
- Enter the values above and save the new figure: M92 E… and M500 on Marlin, rotation_distance on Klipper.
- Repeat the test if the result was more than about 2 mm off.
Microsteps: resolution is not accuracy
More microsteps make the movement smoother and quieter, not more precise. Each microstep holds only a fraction of the torque, sin(90° ÷ microsteps): about 20 % at 1/8 and 5 % at 1/32, as Monolithic Power Systems explains, so a little friction is enough to stop the shaft between two microsteps. Typical NEMA 17 motors are specified to ±5 % of a full step. Drivers such as the TMC2209 interpolate to 256 microsteps internally, so 1/16 at the step input is enough for smooth motion.
Layer heights on the Z axis
With a T8 leadscrew and a 1.8° motor, a full step moves Z by 0.04 mm. Layer heights that are a whole number of full steps (0.12, 0.16, 0.2, 0.24 mm…) put the nozzle where the motor holds best. Prusa’s calculator explains that if the motors are switched off on a microstep, the axis can snap to the nearest full step.
Step rate and top speed
Every millimetre per second costs steps per second: 200 mm/s at 80 steps/mm is 16,000 steps per second. When nothing else is set, Marlin assumes 5 MHz for TMC2xxx drivers, 500 kHz for the A4988, 250 kHz for the DRV8825, 150 kHz for the TB6600 and 15 kHz for the TB6560. The processor and the firmware are often a tighter limit than the driver: Marlin sends steps in bursts at high rates, and Klipper publishes step-rate benchmarks for each processor. Lower microstepping is the simplest way to cut the step rate.
Stepper driver Vref calculator →
Sources: Klipper documentation (Rotation distance), Marlin documentation (M92, motion settings) and planner source code, Prusa’s RepRap calculator, Monolithic Power Systems on microstepping, the TMC2209 product page, the Bondtech BMG page, the Sorotec ball screw datasheet and a 17HS4401 motor datasheet.
Frequently asked questions
What are the steps per mm for a GT2 belt with a 20-tooth pulley?
80 with a 1.8° motor at 1/16 microstepping, 160 with a 0.9° motor. In Klipper that is rotation_distance: 40 with microsteps: 16. A 16-tooth pulley gives 100 steps/mm, rotation_distance 32.
What are the steps per mm for a T8 leadscrew?
A T8 (Tr8x8) has an 8 mm lead, so a 1.8° motor at 1/16 gives 400 steps/mm and rotation_distance is 8. A single-start Tr8x2 gives 1600 steps/mm, rotation_distance 2.
How do I calibrate the e-steps?
Mark the filament 120 mm above the extruder, extrude 100 mm slowly with the hot end at temperature and measure what is left to the mark. New value = current × 100 ÷ millimetres actually extruded: for example 93 × 100 ÷ 95 = 97.89. Save it with M92 E97.89 and M500.
Should I adjust the X and Y steps per mm after measuring a printed cube?
No. On belts and screws the calculated value is exact, and the Klipper docs advise against trimming X, Y or Z by measuring prints. If a part comes out the wrong size, look at extrusion, belt tension and slicer settings instead.
Does more microstepping make my printer more accurate?
It makes the movement smoother, not more precise. A microstep holds only sin(90° ÷ microsteps) of the full-step torque, about 5 % at 1/32, and motors are typically specified to ±5 % of a full step. It also multiplies the step rate the board has to produce.
How do I convert steps/mm into Klipper’s rotation_distance?
rotation_distance = full steps per turn × microsteps ÷ steps/mm. With a 1.8° motor (200 steps) at 1/16: 3200 ÷ 80 = 40. For an extruder at 415 steps/mm without gear_ratio: 3200 ÷ 415 = 7.711. If you set gear_ratio, the value changes: for a Bondtech BMG with gear_ratio: 50:17 it is 22.679, as in the Klipper docs.
Which layer heights suit a T8 leadscrew?
With a 1.8° motor a full step moves Z by 0.04 mm, so 0.04, 0.08, 0.12, 0.16, 0.20, 0.24, 0.28 and 0.32 mm are whole numbers of full steps. With a 0.9° motor the full step is 0.02 mm.