E-steps & Rotation Distance Calculator

Calibrate how far your extruder actually pushes filament. Mark the filament, extrude a set length slowly, measure what is left, and get the corrected Marlin e-steps or Klipper rotation_distance.

Measure from the same fixed point (usually the top of the extruder body) both times, with digital calipers. Results are estimates; double-check before saving to your printer.

How to do the test

Marlin

  1. Heat the hotend to your normal printing temperature for the loaded filament. Cold extrusion can damage the extruder.
  2. Send M92 (or M503 on older firmware) and note the current E value.
  3. Mark the filament 120 mm above the extruder inlet and measure the exact distance.
  4. Send M83 (relative extrusion), then G1 E100 F100 to push 100 mm slowly (about one minute).
  5. Measure from the same point to the mark again. If it extruded perfectly, 20 mm remains.
  6. Enter the numbers above, then send the new M92 E… line followed by M500 to save it to EEPROM.

Klipper

  1. Heat the hotend and load filament.
  2. Mark the filament about 70 mm from the extruder intake and measure it precisely.
  3. Send G91 then G1 E50 F60. Wait the full ~50 seconds. Don't use a front-end "extrude" button, which is too fast.
  4. Measure the mark again and enter the numbers above.
  5. Put the new value in the [extruder] section of printer.cfg, rounded to three decimals, and restart Klipper. If the result was more than about 2 mm off, repeat the test.

Formulas

Actual extruded = mark before − mark after.

Marlin: new e-steps = current e-steps × commanded ÷ actual. Example: 93 steps/mm, 100 mm commanded, 97 mm actual → 93 × 100 ÷ 97 = 95.88.

Klipper: new rotation_distance = current × actual ÷ commanded. Example: 7.74, 50 mm commanded, 48 mm actual → 7.74 × 48 ÷ 50 = 7.430. Note the formulas are inverted: e-steps count steps per mm, while rotation_distance is millimetres per motor turn, so under-extrusion raises e-steps but lowers rotation_distance.

Convert e-steps ↔ rotation_distance

Moving from Marlin to Klipper? rotation_distance = full steps per rotation × microsteps ÷ steps per mm (and the same formula the other way round).

Typical starting values

Extruder typeTypical Marlin e-steps (16 microsteps)
Bowden / direct, no gear reduction (e.g. Ender-3 stock)~93
Geared extruders (BMG-style 3:1, Orbiter, Sherpa etc.)~400–700

These are only rough starting points [estimate]. Always use your firmware's current value and the manufacturer's figure for your extruder, then calibrate.

Sources

Next step: calibrate flow rate per filament · filament length ↔ weight

FAQ

What are e-steps on a 3D printer?

E-steps are the number of stepper motor steps the firmware uses to push 1 mm of filament. If the value is wrong the printer under- or over-extrudes on every print, whatever filament you use.

What is rotation_distance in Klipper?

It is how many millimetres of filament the extruder moves for one full turn of the motor. Klipper uses it instead of steps per mm; you can convert between the two with full steps × microsteps ÷ steps per mm.

Should I calibrate e-steps or flow first?

E-steps or rotation_distance first, because it corrects the extruder hardware. Then calibrate flow (extrusion multiplier) for each filament.

Why extrude so slowly?

Fast extrusion builds pressure in the hotend, the filament slips and the test reads low. Klipper recommends 50 mm at F60 (1 mm/s); for Marlin, 100 mm at F100 is common.

Do Bambu Lab printers need e-steps calibration?

Usually not. Bambu Lab firmware does not offer user e-steps calibration like Marlin or Klipper, so use flow ratio calibration in Bambu Studio or OrcaSlicer instead.