Demo build: items marked [TO FILL] and “Field test pending” are intentional gaps for the operator to complete with real information. See our editorial policy.

Calibration

Calibrating Extruder E-Steps and Klipper Rotation Distance

Key takeaways

  • Extruder steps-per-millimeter (Marlin M92) and rotation_distance (Klipper) define the mechanical relationship between stepper motor rotation and linear filament travel.
  • The 100 mm reference mark test (measuring from a 120 mm mark on the filament) isolates mechanical drive geometry when performed slowly in free air or with the nozzle bypassed.
  • Hardware E-steps or rotation_distance should be calibrated once for the physical extruder assembly, while material-specific shrinkage and die swell are tuned per filament using the slicer flow ratio.

Extruder calibration aligns the filament length requested by your G-code with the physical length of filament pushed by the extruder drive gears. In Marlin, this parameter is stored as steps-per-millimeter (M92 E), which increases when the extruder under-extrudes (new_steps = old_steps × requested / actual). In Klipper, it is defined inversely as rotation_distance—the linear millimeter travel per full revolution of the hobbed drive gear—which scales directly with the measured distance (new_rd = old_rd × actual / requested).

Mechanical Kinematics of an FDM Extruder

Unlike belt-driven X and Y axes or lead-screw-driven Z axes—where pitch is fixed by rigid tooth geometry, as covered in Belt Pitch, Lead Screw, and Layer Heights—an extruder relies on a toothed hobbed gear biting into a cylindrical polymer rod with a nominal diameter of 1.75 mm (0.0689 in) or 2.85 mm (0.1122 in).

As the idler tension spring presses the filament against the drive gear teeth, the teeth indent the plastic surface. This indentation reduces the effective pitch diameter (d_eff) of the gear relative to its outer tip diameter (d_outer). For a single revolution of the drive shaft, linear filament travel equals the circumference at the effective bite depth:

Circumference = π × d_eff

For example, a drive gear with an 8.00 mm (0.315 in) outer diameter whose teeth sink 0.35 mm (0.0138 in) into the filament operates at an effective pitch diameter of 7.30 mm (8.00 - 2 × 0.35) or 7.65 mm depending on single- versus dual-drive tooth engagement. Because exact effective diameter varies with tooth profile and idler tension, firmware starts from a hardware baseline and refines it via physical extrusion measurement.

Converting Between Marlin Steps/mm and Klipper Rotation Distance

Both firmware architectures control the same physical stepper pulses, differing only in parameterization. A standard 1.8° stepper requires full_steps_per_rotation = 200 full steps per 360° revolution (400 for a 0.9° motor). At microsteps = 16, a 1.8° motor receives 200 × 16 = 3,200 microsteps per revolution.

In Marlin firmware (M92), E_steps (steps/mm) combines motor step angle, microstepping, gear reduction ratio, and hobbed gear circumference into a single value:

E_steps = (full_steps_per_rotation × microsteps × gear_ratio) / rotation_distance

In Klipper’s rotation_distance documentation, full_steps_per_rotation, microsteps, and gear_ratio are configured separately inside [extruder] in printer.cfg, so rotation_distance is the linear millimeter travel per full rotation of the final driven hobbed gear:

rotation_distance = (full_steps_per_rotation × microsteps × gear_ratio) / E_steps

Common Extruder Hardware Baselines

Before running an empirical test, verify that your firmware starts near the design value for your extruder mechanism. A discrepancy greater than 5% to 8% usually indicates an incorrect gear_ratio, wrong microstep setting, or a 0.9° vs. 1.8° motor mismatch rather than normal tooth bite variance.

Extruder Architecture Stepper Angle Gear Ratio (gear_ratio) Klipper rotation_distance (mm) Marlin M92 E at 16 Microsteps (steps/mm)
Mk8 Direct / Bowden (11 mm gear) 1.8° (200) None (1:1) 33.500 – 34.558 92.6 – 95.5
Dual-Gear Bowden (Creality-style) 1.8° (200) None (1:1) 22.857 – 23.021 139.0 – 140.0
Bondtech BMG / Voron Afterburner 1.8° (200) 50:17 (~2.941:1) 22.679 415.0
Voron Clockwork 2 (CW2, 50t driven) 1.8° (200) 50:10 (5:1) 22.679 705.5
LDO Orbiter v2.0 Planetary 1.8° (200) 7.5:1 (or unreduced) 34.778 (7.5:1) / 4.637 (none) 690.0
Bondtech LGX Large Gears 1.8° (200) 44:10, 37:17 (~9.576:1) 55.0 (or 8.0 unreduced) 400.0

Note why Klipper recommends whole-number tooth counts for gear_ratio: a Bondtech BMG reduction uses a 17-tooth motor pinion driving a 50-tooth ring gear. Although marketed as a 3:1 reduction, the exact ratio is 50 / 17 = 2.941176.... Specifying gear_ratio: 50:17 eliminates rounding error in the kinematics solver.

Performing the 100 mm Reference Extrusion Test

The standard calibration method requests 100 mm (3.937 in) of filament movement while placing the initial reference mark at 120 mm (4.724 in) above the extruder inlet. Leaving a 20 mm (0.787 in) buffer ensures that even if the extruder over-extrudes by 5% to 15%, the reference mark remains visible outside the extruder body after the move finishes.

Free-Air vs. Slow Through-Nozzle Testing

Two variations of this procedure are used in technical documentation:

  1. True Free-Air (Bowden Tube or Hotend Detached): Disconnecting the PTFE tube on a Bowden drive or removing the nozzle on a direct-drive toolhead feeds filament against zero melt-zone backpressure, isolating pure mechanical drive geometry.
  2. Slow Through-Nozzle Extrusion: Both the Klipper rotation distance guide and the Voron initial startup guide specify extruding through a heated nozzle at a slow feedrate of 1 mm/s (F60 in G-code, since 1 mm/s × 60 s/min = 60 mm/min).

Why does F60 (1 mm/s filament speed) prevent backpressure errors? With 1.75 mm filament (area A_fil = π × (1.75 / 2)² = 2.4053 mm²), a 1.0 mm/s feed speed produces a volumetric flow rate of only 2.41 mm³/s—well below the 11 to 25 mm³/s ceiling explained in Maximum Volumetric Speed Explained. Never use the web UI “Extrude” button unless its feedrate is explicitly set to 1 mm/s (60 mm/min), as default UI buttons often command 5 to 10 mm/s (F300 to F600) and induce drive-tooth slippage.

Step-by-Step Measurement Procedure

  1. Load rigid, dry PLA or ABS/ASA filament (avoid flexible TPU) and heat the hotend to normal printing temperature (210 °C / 410 °F for PLA) if extruding through the nozzle.
  2. Straighten the filament entering the extruder inlet. Using digital calipers and a fine-tip marker or low-tack tape edge, place a mark at L_initial = 120.0 mm (4.724 in) from a fixed reference face on the extruder inlet.
  3. In your printer’s G-code console, set relative extrusion mode and request 100 mm at 60 mm/min:
    M83          ; Set extruder to relative mode (or use G91)
    G1 E100 F60  ; Extrude 100 mm over 100 seconds (1 mm/s)
  4. Wait 100 seconds for the motor to stop, then measure the remaining distance from the extruder inlet to the mark (L_remaining).
  5. Compute the actual extruded distance:
    L_actual = L_initial - L_remaining

Exact Formulas and Worked Arithmetic Examples

Pay close attention to the numerator and denominator when updating your firmware: Marlin M92 and Klipper rotation_distance move in opposite directions.

Worked Example 1: Marlin E-Steps (M92)

Suppose a direct-drive extruder running Marlin is configured to old_steps = 415.00 steps/mm (checked via M503). You mark the filament at L_initial = 120.0 mm, run G1 E100 F60, and measure L_remaining = 23.5 mm.

L_actual = 120.0 mm - 23.5 mm = 96.5 mm

Because 96.5 mm is less than the requested 100.0 mm, the extruder under-extruded by 3.5 mm. To push more filament per millimeter commanded, the motor must take more steps per millimeter:

new_steps = old_steps × (L_requested / L_actual)
new_steps = 415.00 × (100.0 / 96.5) = 430.05 steps/mm

Save the updated value to EEPROM in Marlin:

M92 E430.05  ; Set new extruder steps/mm
M500         ; Save settings to EEPROM

Worked Example 2: Klipper rotation_distance

Suppose a Voron Clockwork 2 extruder running Klipper has rotation_distance: 22.67895 and gear_ratio: 50:10 in [extruder]. You mark the filament at 120.0 mm, command G1 E100 F60, and measure L_remaining = 18.2 mm.

L_actual = 120.0 mm - 18.2 mm = 101.8 mm

Here, the extruder pushed 101.8 mm when 100.0 mm was requested (1.8% over-extrusion), meaning one rotation of the drive gear moves the filament farther than 22.67895 mm. Multiply by actual / requested:

new_rd = old_rd × (L_actual / L_requested)
new_rd = 22.67895 × (101.8 / 100.0) = 23.08717 mm → round to 23.087

Update rotation_distance: 23.087 in printer.cfg and run RESTART.

Quick Reference Comparison: Under-Extrusion vs. Over-Extrusion

Test Outcome (L_requested = 100 mm) Remainder from 120 mm Mark Actual Extruded (L_actual) Marlin M92 E Adjustment Klipper rotation_distance Adjustment
Under-extruding (4% short) 24.0 mm 96.0 mm Increases (× 100 / 96 = × 1.0417) Decreases (× 96 / 100 = × 0.960)
Exact calibration 20.0 mm 100.0 mm Unchanged (× 1.000) Unchanged (× 1.000)
Over-extruding (3% long) 17.0 mm 103.0 mm Decreases (× 100 / 103 = × 0.9709) Increases (× 103 / 100 = × 1.030)

Why You Calibrate E-Steps Once and Use Slicer Flow Ratio per Filament

Re-calibrating M92 or rotation_distance every time you switch spools or polymers mixes hardware kinematics with material behavior. Keeping the two separate makes slicer profiles portable and predictable:

  1. Hardware Geometry Belongs in Firmware: M92 E and rotation_distance define the mechanical ratio between stepper pulses and drive gear pitch diameter. Once calibrated with a rigid baseline filament at proper idler tension, leave this setting untouched unless you replace extruder gears or motors.
  2. Polymer Properties Belong in the Slicer: Different polymers exhibit distinct thermal expansion, melt compressibility, and post-cooling shrinkage—detailed in PLA vs. PETG vs. ASA Mechanical and Thermal Properties—and softer filaments allow drive teeth to sink slightly deeper. Compensating for per-spool diameter variance and polymer hardness is the job of the slicer’s Extrusion Multiplier or Flow Ratio, tuned via Flow Rate and Extrusion Multiplier Calibration and the Flow & Volumetric Speed Calculator.
  3. Dimensional Fit Errors Are Not E-Step Errors: Lowering E-steps to make a tight part fit starves solid infill and weakens inter-layer bonds. Instead, calibrate flow for dense top surfaces first, then compensate for polygon chord error and corner swell using 3D Print Clearances and Fits and the Fit & Tolerance Calculator.

Run the numbers

Fit, Clearance & Shrinkage Calculator (+ STL Gauge)

Compute CAD dimensions for press, sliding, loose and print-in-place joints after polymer shrinkage and nozzle geometry, and download a printable STL test gauge.

Extrusion Flow, Volumetric Speed & E-Steps Calculator

Calculate capsule road cross-section, volumetric flow rate (mm³/s), speed limits, slicer flow ratio and Klipper/Marlin extruder steps.

Sources and further reading

  1. Klipper Documentation: Rotation Distance
  2. Marlin Firmware: M92 Set Axis Steps-per-unit
  3. Voron Documentation: Initial Startup Checks
  4. Klipper Documentation: Configuration Reference

3D printing guidance on this page is general. Printers, hotends, slicers and filament batches vary, so verify dimensions and settings with test prints and calipers. Always observe thermal, electrical and ventilation safety around heated components and melted polymers. Spotted an error? Tell us and we will review it under our corrections policy.