Extruder Calibration
Also known as “e-steps”, or extruder “rotation distance” or “steps per mm”.
This page is compatible with Klipper, Marlin, and RepRapFirmware.
Extruder calibration simply ensures that 100mm requested = 100mm extruded.
- This is separate from Extrusion Multiplier, which is a per-filament setting.
This simply guarantees that your extrusion multiplier will be the same across any (calibrated) printer, and will be comparable to others.
Hot or Cold?
You may choose to do the test cold (bypassing the hotend). This can ensure things like partial clogs don’t throw off your results.
-
With bowden, there’s no reason to do it hot. Disconnect the tube and do it cold.
-
With direct drive, however, this means taking the nozzle, hotend, or extruder off.
-
I find this to be a hassle, so I usually calibrate hot.
-
Just run the test a couple times to verify that you get exactly the same every time. I’ve never had an issue doing this.
-
Steps
-
Klipper / RepRapFirmware:
Klipper
- Open your printer.cfg and find the
[extruder]
section.- Set
max_extrude_only_distance
to 101 or higher.- (+1 just helps avoid rounding error issues)
- Set
min_extrude_temp
to 0 if doing the test cold.
- Set
- Run
RESTART
.
RepRapFirmware
- If calibrating cold, run
M302 P1
(allows cold extrusion)
- Open your printer.cfg and find the
- If calibrating hot, heat your hotend to printing temp.
-
If calibrating cold:
- Bowden: Disconnect the bowden tube from your extruder.
- Direct drive: Remove your nozzle, hotend, or extruder.
-
-
Extrude a small amount to ensure that your extruder motor is on and holding.
- You can usually do this in your printer’s web interface, if equipped.
- G-codes:
M83 ; E relative
G1 E1 F60 ; Extrude 1mm at 1mm/s (60mm/min)
-
Take a ruler and place a piece of tape at the 120mm mark.
-
Where your filament enters your extruder, pull your filament as straight as you can against the ruler. Transfer the tape to mark 120mm.
-
Extrude 100mm at 1mm/s.
If doing this hot, watch to make sure the plastic isn’t shooting out to the side (partial clog) or showing signs of skipping.
-
Measure how much is left. Subtract it from 120 and note the value for later.
-
Calculate your new
rotation_distance
/ e-steps and activate it:
Klipper
- Find the
[extruder]
section in your printer.cfg. Note your currentrotation_distance
. - Calculate your new
rotation_distance
using this formula:- <new_rotation_distance> = <previous_rotation_distance> * ( <actual_extrude_distance> / 100 )
- Temporarily set your new value with
SET_EXTRUDER_ROTATION_DISTANCE
.- Example:
SET_EXTRUDER_ROTATION_DISTANCE EXTRUDER=extruder DISTANCE=34.99312407591
- Example:
Marlin
- Run
M503
. In the output, find theM92
line and note your current E value. - Calculate your new e-steps using this formula:
- <new_e-steps> = <current_e-steps> * ( 100 / <actual_extrude_distance> )
- Temporarily set your new e-steps with
M92
.- Example:
M92 E421
.
- Example:
RepRapFirmware
- Run
M92
. In the output, note the E value. (It will look similar to the screenshot for Marlin above) - Calculate your new e-steps using this formula:
- <new_e-steps> = <current_e-steps> * ( 100 / <actual_extrude_distance> )
- Temporarily set your new e-steps with
M92
.- Example:
M92 E421
.
- Example:
- Find the
- With your new value activated, mark and extrude again. It often takes a few iterations to dial in.
-
When using the formulas above, make sure you’re using your updated
rotation_distance
/ e-steps value for the “current” value. Don’t keep using the original value. -
If you get different lengths in back-to-back tests, you have an extruder issue
(or, if printing hot, it could also be a hotend/nozzle obstruction.).
-
-
Once you settle on a value, save it permanently:
Klipper
- Find the
[extruder]
section in your printer.cfg. - Update your
rotation_distance
andRESTART
.
Marlin
- Set your new e-steps with
M92
.- Example:
M92 E421
.
- Example:
- Run
M500
to save it to EEPROM.
RepRapFirmware
- Edit the
M92
line in your config.g with the new value and reboot.
- Find the
-
Klipper only:
- If you did the test cold, set your
min_extrude_temp
in your[extruder]
section back to its previous value andRESTART
.
- If you did the test cold, set your