How to Calibrate E-Steps on a 3D Printer

the3dfix 4 min read
Contents
  1. When do you need it?
  2. The difference between e-steps and flow
  3. What you need
  4. Step by step (Marlin)
  5. Do you need to remove the nozzle on a Bowden setup?
  6. If you use Klipper
  7. If the results are inconsistent
  8. Frequently asked questions
Filament entering an extruder with 120 mm and 20 mm marks and a ruler beside it

When you tell the printer to push 100 mm of filament, does it really push 100 mm? If the e-steps value is wrong, it does not: it pushes a little too much or too little, and that error shows up in every print. A ruler, a pen and a few G-code commands are enough to check it. The process takes about 10 minutes.

When do you need it?

  • When you replace the extruder, the gear or the motor.
  • When calibrating a new printer for the first time (factory values are sometimes only approximate).
  • When you see under-extrusion or over-extrusion with every filament.

Many newer printers (especially closed-ecosystem models) do not expose this setting or do it automatically. If your printer does not support it, go straight to flow rate calibration.

The difference between e-steps and flow

  • E-steps belong to the printer's hardware. They stay the same whichever filament you use.
  • Flow (flow ratio) is a filament-specific fine adjustment in the slicer.

Calibrate e-steps first, then flow. If you do it the other way around, flow hides the e-steps error and the problem returns every time you change filament.

What you need

  • Calipers or a precise ruler.
  • A fine-tip pen (to mark the filament).
  • A way to send commands to the printer: the terminal menu on the screen, the OctoPrint/Mainsail console, or a computer connected by USB (with a program like Pronterface).

Step by step (Marlin)

1. Find the current value

Send the M503 command. In the output find the M92 X... Y... Z... E... line. The E value is the current e-steps value, for example E93.00. On some printers this value also appears in the screen's "Motion" or "Steps/mm" menu.

2. Heat the nozzle

Heat to the filament's printing temperature (for PLA, for example, 200 °C). A cold nozzle cannot push filament.

3. Mark the filament

Make a mark on the filament 120 mm above the point where it enters the extruder. Measure from the top surface of the extruder body.

4. Push 100 mm of filament

Send these commands in order:

M83
G1 E100 F100

M83 puts the extruder in relative mode. G1 E100 F100 pushes 100 mm of filament at 100 mm per minute. Pushing slowly lets you measure without being affected by the hotend's flow limit. The process takes about a minute.

5. Measure the remaining distance

When it finishes, measure the distance from the extruder entrance to the mark.

  • If the distance is 20 mm, the printer pushed exactly 100 mm. The e-steps are correct.
  • If the distance is more than 20 mm, the printer under-pushed.
  • If the distance is less than 20 mm, it over-pushed.

6. Calculate the new value

Actual amount pushed = 120 − remaining distance

New e-steps = Current e-steps × 100 ÷ Actual amount pushed

Example: current value 93, remaining distance 24 mm. Actual pushed = 120 − 24 = 96 mm. New e-steps = 93 × 100 ÷ 96 = 96.9

7. Save the new value

M92 E96.9
M500

M92 sets the new value and M500 saves it to permanent memory (EEPROM). If you do not send M500, the old value comes back when the printer powers off. On some printers EEPROM is disabled; in that case change the value in the firmware, or add M92 E96.9 to the start G-code of every print.

8. Verify

Repeat the process once more. If the remaining distance is within ±0.5 mm of 20 mm, the calibration is done.

Do you need to remove the nozzle on a Bowden setup?

Some guides recommend measuring with the nozzle removed, so the extruder pushes filament straight into the air. That way the result reflects only the extruder. But a measurement made slowly with a hot nozzle, as above, is accurate enough for most people and more practical.

If you use Klipper

Klipper uses rotation_distance instead of e-steps: the amount of filament pushed per full motor revolution. The calculation is inverted:

New rotation_distance = Current rotation_distance × Actual pushed ÷ Requested

Example: current 33.5, requested 100 mm, actually pushed 96 mm → 33.5 × 96 ÷ 100 = 32.16.

Enter the new value in the [extruder] section of printer.cfg and restart the printer. In Klipper you can use G91 and G1 E100 F100 or macros for extrusion.

If the results are inconsistent

  • The extruder gear may be dirty or loose. Clean it and check the set screw.
  • The tension of the extruder arm may vary.
  • The nozzle may be partly clogged. If you hear clicking during the measurement, see Extruder clicking.
  • The spool or filament path may be catching.

Frequently asked questions

Are e-steps set separately for each filament?

No. E-steps are a hardware setting. Differences specific to a filament are corrected in the slicer with flow (flow ratio).

The value came out very different from the factory setting. Is that normal?

A 1–5% difference is normal. If it is off by more than 10%, repeat the measurement and check for hardware problems such as gear slip or a clog.

By the3dfix. If you spot a mistake or your problem is still not solved, get in touch.