E-Steps Calibration Calculator for 3D Printers
Mark your filament, ask the extruder for 100 mm, measure the mark again and enter the numbers.
Your measurements
Choose your firmware, enter the current value and the two mark measurements. Everything updates as you type.
Firmware
Marlin uses e-steps (steps per mm). Klipper uses rotation_distance (mm per motor turn), and the correction goes the other way.
Send M503 and read the M92 line, or check your firmware config. The starting figure is only an example.
The test
The extrusion length in your command, usually 100 mm.
From the extruder entrance to the mark on the filament, measured before extruding.
From the extruder entrance to the mark, measured after extruding. It should be less than the first distance.
Results
New e-steps
steps/mm
The extruder pushed 98 mm instead of 100 mm. Change the e-steps from 93 to 94.9, then run the test again.
- Actually extruded
- 98mm
- 120 − 22
- Error
- -2%
- Under-extruding
- Change to value
- +2.04%
- From 93 to 94.9
Send these commands:
M92 E94.9 M500
M92 sets the e-steps for now. M500 saves them to the printer's memory so they survive a restart.
How this was calculated
The correction with your numbers.
How this was calculated
The correction with your numbers.
Step 1: Filament that really went through
mark distance − distance left after the test
= 120 − 22
= 98 mmThe mark started this far from the extruder entrance and ended up closer by the length the extruder pulled in.
Step 2: How far off it was
(actual − requested) ÷ requested
= (98 − 100) ÷ 100
= -2%A negative number means the extruder pushed less than you asked for (under-extrusion).
Step 3: New e-steps (Marlin)
current e-steps × requested ÷ actual
= 93 × 100 ÷ 98
= 94.9 steps/mmE-steps are motor steps per millimetre of filament. If the extruder pushed less than asked, it needs more steps per mm, and the other way round.
Step 4: Set it
M92 E<new value>, then M500 to save
= M92 E94.9 ; M500
= 2.04% changeRun the test again after changing the value. If the new result is within 1% of the request, you are done.
In short
New e-steps = current e-steps × requested ÷ actual. With 93 steps/mm, 100 mm asked and 98 mm pushed (the mark moved from 120 mm to 22 mm), the new value is 94.9 steps/mm. In Klipper it is current rotation_distance × actual ÷ requested.
The calculator gives the new Marlin e-steps or Klipper rotation_distance and the commands to set it.
What the measurement means for the new value
For the example above: 93 steps/mm, 100 mm requested, mark 120 mm from the entrance. The highlighted row is the calculator's starting example. Enter your own numbers in the tool.
| Left after the test | Actually extruded | Error | New e-steps (Marlin) |
|---|---|---|---|
| 14 mm | 106 mm | +6% | 87.74 |
| 16 mm | 104 mm | +4% | 89.42 |
| 18 mm | 102 mm | +2% | 91.18 |
| 20 mm | 100 mm | 0% | 93 |
| 22 mm | 98 mm | -2% | 94.9 |
| 24 mm | 96 mm | -4% | 96.88 |
| 26 mm | 94 mm | -6% | 98.94 |
| 28 mm | 92 mm | -8% | 101.09 |
| 30 mm | 90 mm | -10% | 103.33 |
A measurement that leaves less on the mark means more filament went through, so the e-steps go down. These numbers come from the formula, not from any particular printer.
Worked example: 93 steps/mm, 100 mm requested
The mark started 120 mm from the extruder and ended 22 mm away. The same test in Klipper, starting at a rotation_distance of 22.5 mm, gives 22.05 mm.
Step 1: Filament that really went through
mark distance − distance left after the test
= 120 − 22
= 98 mmThe mark started this far from the extruder entrance and ended up closer by the length the extruder pulled in.
Step 2: How far off it was
(actual − requested) ÷ requested
= (98 − 100) ÷ 100
= -2%A negative number means the extruder pushed less than you asked for (under-extrusion).
Step 3: New e-steps (Marlin)
current e-steps × requested ÷ actual
= 93 × 100 ÷ 98
= 94.9 steps/mmE-steps are motor steps per millimetre of filament. If the extruder pushed less than asked, it needs more steps per mm, and the other way round.
Step 4: Set it
M92 E<new value>, then M500 to save
= M92 E94.9 ; M500
= 2.04% changeRun the test again after changing the value. If the new result is within 1% of the request, you are done.
How to run the test
- Heat the nozzle to the temperature you normally print the filament at, so the extruder pushes against real melt resistance. Cold filament would give a wrong result.
- Make sure the nozzle is clear of the bed and the filament is loaded, with the extruder gear gripping it firmly.
- Measure 120 mm from the extruder entrance along the filament and mark it with a fine pen. A flat-edged ruler or calipers give better readings than a tape.
- Command a slow extrusion of 100 mm in relative mode: send
M83, thenG1 E100 F100. A slow feed rate keeps the extruder from skipping. Change the 100 if you ask for a different length. - Measure from the extruder entrance to the mark again. Enter both distances above. Do not trust the first try alone: run it two or three times and use the average.
Use the e-steps or rotation_distance your printer is set to right now as the current value. If you do not know it, read it from the firmware before testing. A change of more than 20% usually points to a wrong starting value, a wrong extruder type or a bad measurement, so the calculator shows a warning.
E-steps: common questions
What they are, Klipper and when to stop.
What are e-steps?
E-steps are the number of motor steps the firmware sends to the extruder for each millimetre of filament it should push. If the number is wrong, the printer pushes more or less filament than it thinks. In Marlin you set it with M92 E and save it with M500.
Why is the Klipper correction the other way round?
Klipper does not use steps per millimetre. It uses rotation_distance, the length of filament pushed for one turn of the motor. A longer distance means less filament per turn, so the new value is current × actual ÷ requested, where Marlin's is current × requested ÷ actual. Both give the same physical change.
How close is close enough?
Within about 1% of the length you asked for is usually fine, and the calculator says so when you get there. Measuring with a ruler adds some error, so after changing the value, run the test once more. If the new result is already within 1%, stop.
Will this fix under-extrusion?
Only if the extruder is pushing the wrong length. Under-extrusion can also come from a partial clog, a nozzle that is too cool, wet filament, a hotend flow limit or a wrong flow setting in the slicer. Calibrate e-steps first, then check the other causes, and keep the flow setting for fine tuning.