E-steps (or extrusion steps per millimeter) define how many stepper motor steps are required to move one millimeter of filament. When this value is wrong, every print is wrong: over-extruded at high values, under-extruded at low ones. Getting it right is one of the highest-impact calibrations you can do.
This is the machine-agnostic procedure and the firmware reference. If you are working on a stock Bowden Ender 3 and want the exact G-code sequence with the Marlin-specific commands typed out step by step, use how to calibrate e-steps on Ender 3 instead. If you are not sure whether e-steps are even the right thing to be tuning right now, the 3D printer calibration order shows what depends on what.
What E-Steps Actually Control
When your slicer tells the printer to extrude 10mm of filament, the printer sends pulses to the extruder stepper motor. The E-steps value tells the firmware how many pulses equal 1mm of filament movement. If your extruder is set to 93 steps/mm but the true value is 100 steps/mm, you’re extruding 7% less material than intended — on every print, at every speed, regardless of temperature.
This is different from flow rate, which is a percentage multiplier applied in software. E-steps is the hardware-level calibration. Set E-steps correctly first, then use flow rate only for fine-tuning per-material.
Equipment Required
- A ruler or calipers
- A marker or a piece of tape
- Access to your printer’s console (USB terminal, OctoPrint, or LCD menu)
- Filament loaded and hotend at print temperature
Step 1: Mark 100mm and 120mm on Your Filament
With the hotend at print temperature, mark your filament at 100mm and 120mm above the extruder inlet (the point where filament enters the extruder). Use calipers for accuracy — you’re measuring in millimeters, so precision matters.
A common mistake: mark from the wrong reference point. Measure from the top of the extruder body (or wherever the filament enters the drive mechanism), not from the bowden tube connector or the nozzle.
Step 2: Command 100mm of Extrusion
Using a terminal or your printer’s interface, send:
M83 ; relative extrusion mode
G1 E100 F100 ; extrude 100mm at 100mm/min
Go slowly so the hotend can keep up. The hotend must be at a supported printing temperature with clearance to extrude. After the manual check, let the slicer’s start G-code establish the extrusion mode for the next print.
Step 3: Measure What Was Actually Extruded
After the command completes, measure from the same extruder inlet reference to your 120mm mark. Subtract that distance from 120mm to get the actual extrusion. The farther mark remains visible if slightly more than 100mm moves.
Example: if the 120mm mark is now 28mm above the inlet, you actually extruded 92mm instead of 100mm.
Actual extrusion = 120mm − distance remaining to the 120mm mark
Step 4: Calculate New E-Steps
New E-steps = (Current E-steps × Requested mm) ÷ Actual mm
Example:
- Current E-steps: 93 steps/mm
- Requested: 100mm
- Actual: 92mm
- New E-steps = (93 × 100) ÷ 92 = 101.1 steps/mm
Step 5: Set and Verify
Set the new value:
M92 E101.1 ; set new E-steps
M500 ; save to EEPROM
Re-run the test with a fresh 120mm reference mark. The expected remaining distance is 20mm after a 100mm move. Check repeatability within the resolution of your measuring tool before accepting the value.
Common Issues
Bowden extruder vs direct drive: The measurement method is the same, but bowden printers have more variables (tube friction, slight compression). Focus on getting within ±1mm on a bowden printer — the rest of the variation comes from factors the E-steps value can’t fix.
Slipping extruder: If the filament mark doesn’t move predictably with the motor, you have slippage — the gear is skipping on the filament. Fix the mechanical issue first (idler tension, filament path alignment, worn gear) before calibrating.
Extrusion inconsistency: If repeated measurements give different results, you have a mechanical problem. E-steps calibration produces repeatable results on a healthy extruder.
Setting the Value in Each Firmware
The measurement above is identical on every machine. What differs is the command that stores the result, and — importantly — whether the firmware even expresses the calibration in steps per millimetre. Klipper does not: it uses rotation_distance, the length of filament moved per full revolution of the drive gear, which is a physical dimension rather than a stepper-resolution figure. The correction is therefore a division rather than a multiplication, which is the single most common place people get the maths backwards when moving from Marlin to Klipper.
| Firmware | Setting | Command or key | Correction | Persisting it |
|---|---|---|---|---|
| Marlin | E steps/mm | M92 E<value> | new = old × (requested ÷ actual) | M500, or the value reverts at power-off |
| Klipper | rotation_distance | [extruder] in printer.cfg | new = old × (actual ÷ requested) | Edit printer.cfg, then RESTART |
| RepRapFirmware | E steps/mm | M92 E<value> | new = old × (requested ÷ actual) | Edit the M92 line in config.g (M500 does not store steps/mm) |
| Prusa Firmware | E steps/mm | M92 E<value> | new = old × (requested ÷ actual) | M500; stock profiles assume the factory value |
| Bambu / closed firmware | Not user-exposed | — | — | Handled in factory calibration |
Two practical notes on that table. First, M500 is the step people skip on Marlin: without it, Marlin accepts the new value happily, prints correctly for the rest of the session, and silently reverts on the next power cycle. Read the value back with M503 after a reboot before trusting it. RepRapFirmware is different: its M500 does not save M92, a gap a Duet3D forum thread confirms and RepRapFirmware issue #1195 still tracks, so the calibrated value belongs in config.g itself. Second, Klipper’s inverted formula is the reason a machine converted from Marlin sometimes ends up worse after calibration — multiplying where you should divide doubles the original error rather than removing it.
Firmwares that do not expose the setting are not defective, they have simply moved this calibration behind a factory process. There is nothing to do on those machines except verify the symptom is genuinely extrusion volume and not one of the software-layer settings above it.
When to Recalibrate
- After replacing the extruder
- After changing stepper motor drivers
- After updating firmware with different default values
- If you notice systematic over or under-extrusion across multiple prints and materials
E-steps are stable once set correctly. You shouldn’t need to change them unless you change hardware.
Relationship to Flow Rate
After setting E-steps correctly, you can tune flow rate per-material to compensate for material-specific factors (filament diameter variance, melt characteristics). A common workflow:
- Calibrate E-steps once (hardware calibration)
- Calibrate flow rate per material profile (software compensation)
- Tune per-print using live adjustment
Keep E-steps as the hardware baseline. Don’t compensate for wrong E-steps by setting flow rate to 85% or 115% — that hides the real problem and makes every material profile harder to reason about.
With the baseline set, the next steps are a temperature tower for each new filament, then flow ratio after e-steps, then pressure advance to fix the timing of the extrusion rather than its volume. The full dependency map, including what each stage invalidates when you change hardware, is in the 3D printer calibration order. If you are working on a stock Bowden Ender 3 specifically, the machine-specific walkthrough with the exact G-code is how to calibrate e-steps on an Ender 3.