Extruder Calibration

Extruder Calibration

Having your extruder properly calibrated is essential for perfecting your print quality. Often when you go to calibrate it for the first time, you’ll find that your calibration is actually a long way off from what it is supposed to be and you’ve been printing with it set incorrectly all along.

There are two parts to calibrating your extruder – tuning your extruder steps/mm value in your firmware, and tuning your extrusion width/extrusion multiplier. It is important to do it in this order. First, we want to sort out how much plastic is being fed in to the hot end (regardless of any values like extrusion width, extrusion multiplier, filament diameter etc), and then move on to how the printer is behaving in terms of the plastic actually being pushed out and laid down.

Calibrating extruder steps/mm

To calibrate the steps/mm value, we tell the printer to extrude 100mm of plastic. Then we’ll measure how much plastic it extruded and see if it actually was 100mm – pretty simple right!


To do this, first measure out 120mm of filament from where it enters your extruder and mark it with a pen or marker. This will be the reference point. Then, connect your computer to your printer and open up a program that allows you to send individual gcode commands to it (like Pronterface,  Simplify 3D, Repetier Host, or Octoprint web interface). Heat up your extruder to your regular printing temperature. Then we want to make sure that the extruder is in relative mode, so send the command M83 using the textbox in the bottom right hand corner if you’re using Pronterface. In Simplify 3D you’ll want to open up the machine control panel window and go to the communication tab. All the commands that I’ll be referring to later in this post should all be entered in this way.

Then, tell the printer to extrude 100mm of plastic with the command G1 E100 F100. This will take 60 seconds until it’s finished extruding. Why are we extruding it so slow? Because extruding slowly in this step ensures that the resistance of the plastic further down when it is being pushed into the nozzle, does not effect how much is fed in by the stepper motor. It also helps to take the temperature out of the equation, again by reducing the effects of pressure in the nozzle to virtually nothing.

Once the machine has finished extruding the 100mm, switch off the extruder heater and measure the distance between the point that you marked before we started, and where the plastic enters the extruder (the same point from which you measured the initial 120mm). If this is exactly 20mm, congratulations! Your extruder steps/mm are perfectly calibrated. If it is more or less than 20mm, then it means that your printer is over or under extruding. Fortunately the way to solve this is fairly easy.


In order to calculate what our new steps/mm value will be, we need to know the existing steps/mm value, and the under/over extrusion rate. To get the existing steps/mm value, send the command M503. This will print out all the current values saved in your printers EEPROM (storage that persists when it is powered off), including all your axis steps/mm values. We’re only interested in the E value, highlighted in the picture below.

Extruder steps/mm

Now we get to do some maths! Yay. We need to work out how much plastic your printer actually extruded, which can be calculated from: 120 mm – left over filament distance (measured in the previous step). For example, for me this was 120 - 26 = 94.

Remaining filament measurement

So my printer was actually only extruding 94 mm when I asked it to extrude 100 mm – that’s a 6% under extrusion! So, to calculate the new, correct extruder steps/mm value, we do the following –

Original extruder steps/mm value × 100 mm = total steps taken:
161.3 × 100 = 16130

From that, we can extrapolate that calibrated extruder steps/mm value (y) × actual extruded distance = total steps taken:
y × 94 = 16130

Therefore, calibrated extruder steps/mm value (y) = total steps taken / actual extruded distance:
y = 16130 / 94
= 171.6

This is our new calibrated extruder steps/mm value! To enter and save it to your printer use the commands M92 E###.# (replace the hashes with your calibrated extruder steps/mm value) and then M500 to save it. The Prusa i3 MK2 must be running a recent firmware version to enable saving to EEPROM.

Saving extruder steps/mm to EEPROM

To make sure that this has all worked out as intended, turn your printer off and on or reset it and then send the command M503 again to check if your new extruder steps/mm value is shown. To do a final test to make sure it’s correctly calibrated, measure out another 120 mm of filament, mark it, and then extrude 100 mm. You should have exactly 20 mm left over. If not, recalibrate using the steps above and your new steps/mm value as the original.

Calibrating extrusion multiplier

Now that we know the right amount of filament is being fed into the hotend by the extruder mechanism, we need to make sure that the filament being extruded is the same amount as what our slicer thinks it is. We can do this by printing a single perimeter cube and checking if the width of the walls are the same as our extrusion width.

To begin, accurately measure your filament diameter, preferably with some digital calipers. Enter this into your slicing software. Then, make sure that your extrusion multiplier is set to 1. Check what your extrusion width is and remember it – that’s what we’ll be comparing to later on.

Load a 25 mm cube into your slicer and set the infill to 0%, perimeters to 1, and top solid layers to 0. You’ll also want to print it at a fine resolution – I chose 0.15 mm and it actualy did make a small (0.02 mm) difference in the wall thickness as opposed to 0.3 mm. Print it out and then use digital calipers to measure the thickness of the walls. Your aim is to get this to be the same as your extrusion width set in your slicer. Adjust your new extrusion multiplier to: (extrusion width / measured wall thickness) × extrusion multiplier.

Cube comparison

For example, since my walls first came out as 0.5 mm even though I set my extrusion width to 0.45 mm, my extrusion multiplier would need to be changed to (0.45/0.5) × 1 = 0.9. Enter this into your slicer and print the model again and re test. If your measurements and your calculations were correct it should only take one adjustment, but sometimes it might take a few tries to get it right. This extrusion multiplier value should be calibrated and set on a per material basis due to the different flow characteristics of different materials when extruded (eg. viscosity).

Measurement comparison


Your extruder should now be fully calibrated! Enjoy printing knowing that you have everything dialed in perfectly. If you’re finding that your prints look like they’re over extruding or under extruding, first check your filament diameter and make sure it’s the exact same as what you have in your slicer. If it is and you’re still having minor issues, don’t be afraid to change your extrusion multiplier up or down a few %. The tests above are all prone to errors (most likely in measurements), and what’s most important is how the prints actually come out. So if you need to change it a little bit then that’s fine!

156 thoughts on “Extruder Calibration

  1. Matt, measuring one single wall thickness seems prone to errors to me: while its width can be corrected as you say, would also imply that two neighbouring perimeters (in normal prints) are touching much less and the strength is reduced?

    Maybe it’s better to print a small part at 100% infill and then saw it apart. Once roughly smoothed out with sandpaper, a photo could be taken and then the size of the voids in the corners between adjacent extrusions could be measured. The extrusion multiplier should be set to minimise the voids to ensure maximum strength.

    This way there would still be a little dimensional error in printed parts (which would be slightly bigger than expected because outer perimeters are printed last), but mechanical engineers know that some tolerance should be left around surfaces which need to move relative to each other!

    Single perimeter accuracy is (probably?) not what 3D printers are made for… you may be calibrating using wrong assumptions.

    This is my theory and I’m far from sure about it, so I’d like to hear your opinion.


  2. Hello,

    i have an Ender 3 and Calibrating extruder steps/mm. And now the extruder dosen’t work anymore.
    The Stepper ist not acitive (i can spin it easy) while printing and while sending G1 E100 F100.

    I only do “M503”, “M92 E94.0” and “M500”. After Restarting it says 94 Steps/mm but it dosen’t work. Then i Initialize EEPROM now it says the orginal 93 Steps/mm but it also not work.

    What can i do?


    1. I know it’s a while since the question is asked but I fell foul of this today by not thinking. Others may benefit.

      Make sure the hotend is up to printing temperature. The firmware probably has cold extrusion protection enabled.



    – Make sure that your control board fan is on while you do this otherwise you risk overheating your stepper drivers and therefore having missed steps. Use the command ‘M106 P1 S255’ in Pronterface to turn it on.
    – You need to do this test without the bowden tube attached. That is, you’re just checking how much filament crosses the gear, not how much is extruded. You should get a result between 93~98%. If you get something like >110% then you either have an issue with your extruder tension or you’re doing something wrong.
    – To correct for how much is actually being extruded, you will modify the flow parameter in your slicer. This is the cube portion of the instructions.


    1. Ender 3 Pro user here. I have entered the command manually in Octoprint, but M106 P1 S255 doesn’t turn the control board fan on. Tried M106 P2 S255 as well. Only M106 S255 does, but that turns the extruder fan on as well. I think the two fans are wired together, so you cannot turn only the control board fan on. For safety I have set the fan in PrusaSlicer 2.0 to ‘always on 100%’ to keep the electronics cooled while printing.


  4. I need to sue 85% flow rate. should I be concerned? My esteps work fine it seems. I had to make the speed down to F80-50 tho otherwise i’d get inconsisstent esteps (with the same esteps it’d extrude a different amount everytime.

    maybe it’s my awful cheap chinese nozzle?


  5. cant thank you enough matt, both of my ender 3’s are printing tits now! one thing i would add is that with a bowden style extruder, personally ive found that it was more accurate to remove the tube from the hot end, cut filament flush with end of tube and measure what comes out vs whats going in…i was getting a slight kick back when i was measuring the input due to extruder pressure. all is well and ive never printed so nice.


  6. I have a Titan Aero. My current estep is 618.7. Can only enter 300 max into the app as an estep so this won’t work for some people.


  7. Just what is an extruder heater? need heard of one and my Tevo tornado doesn’t heat the extruder. Jus the hot-end


  8. Hello,
    i was redirected here from prusa support :D/
    i am having issues with the esteps i did this tutorial,
    first time i obtained a new E278.1 redo it the tuto and then obtained E356.5 yes, a lot of diff.
    now it is eating more than the 120mm filament, so i am going to reduce it. and keep trying to achive the 100mm but i have at least for the moment two questions,
    1. is it normal to find so high Esteps?
    2. when i throw the “G1 E100 F100” from pronterface, the first time the extruder goes super fast extrudes like 30or 40mm and then it stops, the second time i do it it goes like it is meant to be 60seconds of slow extrusion, why? is there anything wrong? thanks


    1. Franco,

      This has happened to me, too. I think it’s probably a firmware bug (so not in all machines at all times) where it sees and executes the E100 before getting to the F100 or something like that. My workaround was to send G1 E0 F100 right after the M83. (If I recall, it made a very nasty noise trying to feed way too fast the first time.)


      1. Thanks, so let see if i understood correctly, the sequence is
        G1 E0 F100
        G1 E100 F100
        measure the distance
        calculate the new E
        M92 E###.#
        and repeat? i am right?
        also the only thing i dont know what it does is M83.


      2. That’s pretty much what I did, except I also send M503 after each M500 just ’cause I’m the sort of guy who opens the flap again after putting a letter in a public mailbox to make sure it really dropped in! M83 sets steppers to a relative movement mode (see first paragraph under “Measurement”) instead of absolute positioning so that G1 E100 always pushes a nominal 100mm of filament instead trying to move the extruder stepper to some specific, repeatable “100” point. The M83 and G1 E0 F100 are needed only once unless you restart the printer or run a print.


    2. for the moment i went changing manually by increases to find the correct value, i finish it with E292, not sure if it is okey to have this kind of values and also worried that the distance are not at all linear with the esteps.


  9. After calibrating my extruder steps I am getting 0.40mm thick walls. The multiplier is set to 1.0 and the wall thickness to 0.45. What must I change now? The multiplier to 1.12 or the wall thickness to 0.40?


  10. Hello, I have and Ender 3 Pro and the E is at 93, i do the G1 E…. filament is coming out the nozzle, slowly the process lasted for 30 sec, and from my measurement it only extruded 50 mm so my new e step is 186, but it seems like it is still being under extruded, and from what others are saying this number is way to high, for my machine, thank you for the help the very new guy


    1. I had the same problem. Look at the extruder. If filament is sliding – spring may be loose. Try printing “Ender 3 Extruder Tension Fix” (on thingiverse). If stepper motor is skipping steps – you may have a bad filament (moist or something). Try lowering printing speed (when calibrating try for example G1 E100 F50 or even lower “F” value. That’s temporary solution. I had moist filament. Bought new one, calibrated printer then, and it’s printing like a charm!

      PS: That was my problem – your’s may be different but it’s worth trying.


  11. In your tuning section, you state that when M503 command is sent: “This will print out all the current values saved in your printers EEPROM”.

    Where exactly can this print out be seen?

    Do you mean that a page or more is actually sent to a paper printer connected to the computer? I am sending Gcode using Cura 3.6.0, in the Monitor mode, and I do not see any EEPROM data displayed.


    1. You are correct, you cannot see the response from within Cura after entering that command.
      I have a Raspberry Pi attached running OctoPrint and I use the console window.
      Simplify 3D i think has a terminal window, not sure.


  12. Hi! Having some problem. At first command G1 E100 F100 forked fine, I calculated steps/mm entered and saved them. But after saving I can’t check if extrudes 100mm because command G1 E100 F100 doesn’t work properly anymore. Sending it extruder extrudes ~12mm instantly, like in half a second and then stops. I did send M83 command before G1 E100 F100 both times, even tried without it.


    1. I had the same problem. Make sure you send G91 to set it to “relative position mode”. This way every command extrudes 100mm. Otherwise, it’s saying “well this motor already went 100mm so I’m not moving”.


  13. Thanks for taking the time to write up the procedure. I tried to go through the process on my Monoprice Select Mini, but I must be missing something. When I executed the G1 E100 F100 command, the mark on the filament being fed only moved about 5cm. (50mm) While I can believe the printer could be a *little* off, I really don’t think it could that far off. The printer is generally works quite well and makes pretty good prints, so I have trouble believing that the calibration could be off by a factor of two. Can you suggest anything that I might be doing wrong?


    1. *sigh* Replied to the wrong comment.

      …but back to yours: make sure you send a G92 E0 first to reset the extrusion distance. I had a similar problem with my MP Select Mini (v2), where it went only a few mm then refused to go further. Turns out it (correctly) thought it had already extruded about 90mm.

      Also, my extruder steps were a full 8% low out of the box!


  14. Your E calibration has a couple of steps that don’t apply. Simply take your old E steps and multiply it by the ratio of 100mm/actual distance of extruded filament (ex., 100/94*161.30 = 171.60).


    1. Hi Bernard, thanks for your comment. I am well aware of this, I just found that the calculations that I included in the article help to understand better what’s going on “behind the scenes”


  15. This was very helpful–thank you! But I also notice that the command G1 E100 F100 finished in 45 seconds rather than 60. Now that I have corrected the feed steps/mm, how do I calibrate the feedrate (speed)?


  16. Not tried any of this yet
    I only have a pair of MakerTurd Printers .. ( sorry MakerBot ) and the bundled software

    Not yet tried to drive these machines with other software
    Have a Rep2 and a Mini.

    Will other software you mention work with these machines ?


  17. Thank you so much for your clear directions on properly calibrating an extruder. This was enormously helpful for getting my printer to correctly print using PETG. I can’t believe how mis-calibrated my 4 year old printer was running! The improvement in print quality that I’m seeing post-calibration is absolutely mind-blowing.


    1. I’d say that yes it will work as it is just the theory of how to do it that is being discussed….but you will need different settings for each nozzle diameter and each filament diameter


Leave a Reply to franco otaola Cancel reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s