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. Ender3’s default extruder steps is 93 steps/mm.
    I had to increase this to 142.5 steps/mm to get 100mm as in this instruction.
    That seems pretty big difference. How can it be off by so much?

    My prints are printing perfect now, however, extruder is having hard time feeding. It is missing steps time to time.
    At first I thought spring tension was weak, but after increasing spring tension, the motor is just failing to make a step (pushes then rolls back).
    Am I feeding too much?


  2. Im running a Makerbot Rep2 w/ Sailfish software and use Simpilify3D as a slicer, so I went into the Machine Control Panel and tried `M503`, all it says is ‘The printer only supports binary commands’. Do you know of an easy way to convert them?


  3. Thanks man, I did this, but My printer needs E461! Ender 3 pro. Well the nozzle can’t handle that speed and it ‘pulses’ Can’t be a clog, it’s anew nozzle, Any ideas?


    1. Thanks for your comment! I would first recommend resetting back to your default E steps. Then check your extruder and make sure that the drive gear is engaging well with the filament and its not slipping.

      As a test you can pinch the filament in the area right before it enters the extruder, while extruding, making it harder for the printer. As you do this, watch the drive gear turning against the filament. It should still be able to pull it through. You might need to tension your extruder more to ensure it grips the filament proplerly.

      Once you’ve checked all of this, repeat the calibration process


  4. This was very helpful, thanks Matt. Since we are saving everything to the eprom there would be no need to change anything else except filament diameter and extrusion width if going back and forth between Simplify and Prusa slicer? Is this a correct assumption?


  5. You are a complete and utter lifesaver! Thank you so much.
    I’ve had so many problems with brittle and fragile parts – turns out I was under-extruding by 13%


  6. So, I read all the comments and didn’t find my issue :
    I have an ender 3 and did the tutorial just fine.

    But !
    It appears that (even with the M500 command) the printer doesn’t save the change after a disconnect / connect :

    On pronterface what I do :

    M503 => getting E93
    M92 E96.5
    M503 => getting E96.5
    M503 => getting E93

    So I’m a bit annoyed with that ^^

    Thanks for your input !


  7. Great guide indeed! Curious about one thing, though. In one section you mention extruding slowly but doesn’t the F100 and E100 mean extrude at 100%?


  8. Hi, all… Note that if your extruder does not move when giving the G1 E100 F100 command may have a simple solution. It needs to get the commands G1 E100 F100 in relative mode… i.e. G91 first to set into relative mode then G1 E100 F100. If your printer is in absolut mode it might even backup… or just do nothing. G90 would return it to absolut mode. Hope it helps!


  9. Very helpful, thanks a lot. Turns out my MK3 was underextruding a little bit. Using this guide, I now get perfect 0.45 mm wall thickness on both PETG and PLA.
    The only thing that really puzzles me is that even though my extrusion multiplier seems to be tuned correctly, I still get a bit of filament buildup around the nozzle when printing PETG.

    Any Idea what causes this and how to prevent it?


  10. Fantastic, just the kind of foolproof guide I was looking for; managed to dial in the steps and extruder very quickly. Massively helpful; thankyou for taking the time to write it 🙂


  11. So I’m trying to calibrate my Prusa i3 MK3 using the instructions here:

    1) I opened Machine Control Panel and entered M83
    2) I set the extruder to 200C for PLA, and once temp was reached:
    3) I entered G1 E100 F100

    However, the extruder did not extrude any filament at all! The verbose report I received:

    SENT: G1 E100 F100
    READ: ok
    READ: fsensor_autoload_check_stop – autoload DISABLED
    READ: fsensor_stop_and_save_print
    READ: fsensor_oq_meassure_start
    READ: echo:Enqueing to the front: “G1 E-3 F200”
    Enqueing to the front: “G1 E-3 F200”
    READ: echo:Enqueing to the front: “G1 E3 F200”
    Enqueing to the front: “G1 E3 F200”
    READ: fsensor_oq_meassure_stop, 4 samples
    READ: st_sum=716 yd_sum=41 er_sum=0 er_max=0
    READ: yd_min=22 yd_max=10 yd_avg=10 sh_avg=1
    READ: fsensor_err_cnt = 0
    READ: fsensor_restore_print_and_continue
    READ: Resend: 1
    READ: ok
    SENT: M105
    READ: ok T:200.0 /200.0 B:23.2 /0.0 T0:200.0 /200.0 @:32 B@:0 P:30.9 A:31.5
    SENT: M105
    READ: ok T:199.6 /200.0 B:23.3 /0.0 T0:199.6 /200.0 @:37 B@:0 P:30.9 A:31.5
    SENT: M105
    READ: ok T:199.4 /200.0 B:23.1 /0.0 T0:199.4 /200.0 @:40 B@:0 P:30.8 A:31.4
    SENT: M105
    READ: ok T:199.3 /200.0 B:23.0 /0.0 T0:199.3 /200.0 @:41 B@:0 P:31.0 A:31.5
    READ: fsensor_autoload_check_start – autoload ENABLED

    Any ideas for what happened?


    1. It looks like there was a problem with the filament sensor. Try going into settings and disabling the sensor while you do this.

      Also please make sure you send the M83 command before issuing the G1 command


  12. For extrusion multiplier, it can be changed and save in the Slicer. However, for the steps/mm value ( M92 ), does it need to be changed every time for different type of filaments (PLA, ABS or PETG.. etc.. ) ?? Or we only need to change once only.


  13. Hi,I’ve been applying this method for a while,I switched to an all-metal mk8 and I printed a new feeder :I can no longer use this method, I get oversized values (i use 84 and I get 105 … then I do the test and the feeder eat everything after 120 on 3 cm ..),so I did tests to the eye and it works well I have beautiful print but I do not understand why I have value overdimensions. (i translate)


  14. Only thing I noticed that is off is the cube in the link is a solid cube and not hollow like in your pictures. Just thought I would throw that out there.


    1. Disregard, It is a solid cube in preview but when removing top and bottom solid layers the slicer shows it to be like in the picture above. My apologizes


  15. Duders, you saved my printer. I’ve been having issues since the start, they prints look good but not perfect. Your instructions were very clear and I was able to solve my issue.


  16. Thank you for this guide! Helped me out with my printing problems!
    Changed the steps from 161 to 143.5! So the extruder is no longer jamming.


  17. For people having trouble with the 100mm extrusion, such as nothing happening, grinding or other noises the speed is probably too high. On my Prusa Mk3 I used the following:

    G1 E100 F30

    This resulted in a nice slow flow as intended.


    1. This did not work for me. It just blasted through as fast as it could I’ve never seen it extrude so fast… bot G1 E100 F30 and G1 E100 F100 did the same turbo speed extrusion.


  18. HUGE help, thank you!

    My printer extruded 70mm when I told it to extrude 100mm so I figured it was slipping. Tightened down the extruder tensioner and, sure enough, it extruded more. 80mm instead of 100mm. XD

    Followed your instructions and changed the esteps from their default 400 to, in the end, 565 and now it extrudes about 100mm each time. =)

    Had a similar issue with the calibration cube, as well. First run, the walls were supposed to be 0.4mm but ended up 0.56mm. Followed your instructions again and changed the multiplier to 0.71 and it printed the walls at exactly 0.4mm. =D

    Thank you again!


  19. Hi!

    I am trying to send G1 E100 F100 (with Simplify3D), after heating the extruder, to my Original Prusa Mk2S (with up to date firmwire) but nothing happens. Does this happen to anyone else?


    1. i had the same problem with anet a8 flashed with marlin.i used the lcd to extrude the 100mm.s3d when sending M83 send,the eeprom replied ok then G100 E100 F100….nothing happens on printer.eeprom stated ok.


  20. HI MATT, this is a great tutorial, but i can got a problem, if i calibrate the extruder without hotend o got same result every extrusion, but if i go with the hotend connected i got another values that are not constant they have a range between 0-3mm offset from what i measure previously. and cant understand why. can you help me mate? what do you think about this?


    1. Likely your extruder is slipping but you only see it with the back pressure “load” of having to push through the hotend. This is why you do it this way to set the steps in a no load scenario. So either the gear is slipping, the teeth of the gear are clogged causeing a slip, the gear is slipping on the motor shaft, or the hotend is not hot enough for the filament and providing too much resistance.


  21. Very useful article, and thank you very much; the it worked great for me to calibrate the extruder. I’m not sure about your test for the perimeter/wall, though. From your picture, you’re measuring several layers all together, so the value you get includes the positioning error on the axis perpendicular to that wall. It’s not just the thickness of a single extrusion; they don’t line up perfectly, When I measured as you showed, I was getting about 0.48mm vs. the 0.45 in my settings. I then used the snippers I use to cut angled tips in filament to cut out one of the vertical corner edges of the cube so I could measure just one or two layers at a time while holding the caliper parallel to the print bed. Those measurements came out almost exactly at 0.45mm. Something to think about.


  22. I am having issues with esun ABS+
    Every time that I extrude 100mm I get a different result, ranging from 30mm – 20mm
    What else could be effecting this
    hotend at 250 deg C


  23. This is a great guide and worked perfectly for me. Except I’m not sure that setting the single wall thickness of a test cube to the extrusion width is actually correct. If the slicer spaces the lines according to the extrusion width, then the extruded filament needs to be slightly larger than the spacing or the lines won’t squish together and stick and there will be airgaps caused by the difference between a row of circles/ellipses and a row of squares.

    If you print a single wall with nothing for the extruded plastic to stick to either side then the outer width that you measure with calipers will be at the outer edge of the curved surface of each layer, but if you want a print without voids and good side to side adhesion then the correct width to calibrate to would be the average width of that surface, taking into account the dips between layers. Obviously this is much harder to measure.

    Sure enough when I calibrate as suggested (ending up with a 0.89 extrusion multiplier) the bottom of the cube doesn’t stick together in the XY plane even though the measured wall thickness is now perfect.

    Have I misunderstood something? I’m new to this and it is quite possible!


      1. Indeed a good article and very much what i was thinking. I’m pretty sure though that in S3D the extrusion width setting is the path spacing, since when I set my wall thicknesses in my model to an exact multiple of the extrusion width (and set a high number of perimeters that the wall in entirely made of perimeters) I get nice parallel extrusions without infill and partial lines, but when they are not multiples S3D does messy things with fill and overlap to make the wall the right thickness even though it doesn’t divide to an integer multiple of the extrusion width. If S3D was applying a overlap separately I wouldn’t get that result. Maybe that is different in slic3r.

        Liked by 1 person

  24. This worked perfectly with stock filament and stock setup, but after a few changes everything got real weird. I was very close to just putting the printer on Craigslist and finding an simpler hobby, like string theory or brain surgery.

    I fixed the issues, and I hope someone else can benefit from my experience.

    Short version:
    Triple check your filament. Some filaments are terrible, even from reputable brands.

    Long version.
    I changed to a 0.6mm nozzle and tried again. First try extruded 95mm, and I adjusted accordingly. With new settings it extruded 130mm! Did the procedure again and now it extruded 85mm! I reset to original values, tried again, and again got wildly inconsistent results. Rinse and repeat for 2 hours.

    I had averaged 5 measurements of the filament diameter, each measurement was within 0.05 mm of 1.75 mm, and the average was 1.736 mm. Pretty good.

    Out of options I started taking measurements every 10 mm. I found some sections of filament, 1mm or so long, where the diameter went up to 1.95 mm! And this is fancy expensive filament from a highly recommended brand.

    These “blobs” are what threw off the calibration. I went back to the ugly silver colored stock filament and had the extruder calibrated in 10 minutes.

    Liked by 1 person

    1. I think I’m going to make a seperate G-code file with just the:
      M92 E169.7
      command ( That way if there is an update that saves it, and if the value changes for some reason ) I don’t have to change a lot of Gcode files )
      I’m positive that I’ll forget about this if I add it as custom Start G-code in the slicer.
      Tough it might turn out to be a bothersome action to do every time I turn the printer on. 😛 Currently not that often, but still.


  25. Great tutorial Matt, but given I am running 3.0.12 firmware, I am unable to save values.

    If I use starting gcode in the Slic3r Prusa edition software, will I still need to provide the M83 command?

    If so, I assume my starting gcode in Slic3r (given my extruder is also only extruding 94mm instead of 100mm) will simply be:

    M92 E171.6

    Is that all i’ll need?




    1. Hi Steve, thanks for the comment. You won’t need to enter the M83 command to set the extruder steps/mm in your starting gcode, so you only need the M92 E171. 6. If you add the M83 that might actually cause a lot of trouble with the print, as slic3r uses absolute extrusion values and not relative


      1. I’m don’t understand. I extruded 100mm of filament on the first extruder but how do I do the others?


      2. There’s no point in doing the others, because you can only set one value anyway. So just use the one that you calculated from the first extruder. I also don’t know if it’s possible to manually change extruders with gcode commands either, due to the way the multiplexer works


  26. Hi. Nice article, but I have problem with M92 E***.* value saving. Used M500 command, but after reset / reboot, it is still stock 161.30.
    Prusa i3, with latest firmware


  27. I’m struggling to get down to the proper extrusion width. I can’t get closer than 0.48 to the 0.45 I’m targeting. Also, as I lower the extrusion multiplier, I get a rough surface and tiny holes too as if I’m under extruding. And, I’m getting different measurements on each side of the cube, by as much as 0.03. What am I doing wrong?


  28. So I seem to get tiny holes in my print after I set the extrusion multiplier and a rough surface, as if the printer is under extruding, and I’m still above the proper width by 0.04 at least. Also I get different measurements on different sides of the cube by as much as 0.03.


      1. If that works, can I trust the calibration will work when printing other parts to tight tolerances?


      2. Calibrating the extrusion doesn’t directly correspond to dimensional accuracy, there are a lot of other things that can affect that too


  29. Excellent article! I was pretty happy with my prints before, but having followed your instructions, I found that I was underextruding by 5%. I tweaked the extruder steps/mm, printed the 25mm, and to the naked eye, it looks perfect. Based on the wall thickness, it’s just .03mm off.

    I’ve just modified the extrusion multiplier, and I’m in the process of printing the second cube now to see if things are really dialed in now.


  30. For the Prusa i3 MK2s, the command ‘G1 E100 F100’ didn’t work as expected. I had to send two distinct commands:
    G1 F100
    G1 E100


      1. With the single line command, the extruder motor tries to spin really fast for half second and then stops.
        The same odd behavior happens when I use Pronterface’s dedicated “Extrude” button.


      2. This same thing just happened to me as well, though slightly differently. I had to send the G1 E100 F100 twice. After the first send, it almost sounded as if the motor was skipping, but the filament wasn’t moving. After sending the second command, filament was extruder as expected.

        I reset the printer and tried again — same result — first command makes a grinding noise, second command actually extrudes.. Nothing in the firmware immediately jumps out at me, but I need to take a better look.

        I’m not sure if this is related, but after calibrating the extruder, the cube printed great (just slightly too thick w/~.49mm walls). The bottom layers, however, look very under-extruded. With two bottom layers I can see light through all the intersections of the layers. Any ideas?


      3. That’s weird about the gcode command not working properly, in theory it should work fine. I’m not sure why it’d be doing that.

        I was going to say your bottom layers are most likely related to your live z :p


      4. When you send the G1 E100 F100 command, the firmware does the following sequence.
        Enqueing to the front: “G1 E-3 F100”
        Enqueing to the fron: “G1 E3 F100”

        So for the Prusa 3.2.0 firmware, you do have to do the G1 command on two seperate lines


      5. Ok, just tried something else… and it worked correctly.

        For Prusa firmware, use the following command
        G1 F100 E100

        The Speed command has to go before the Extrude command


      1. In your above example, since it was extruding .5mm when set at .45, would you put in 90%

        Thanks for the help


  31. Where do I find the extrusion width? Do I measure what comes out of the nozzle or in slic3r(prusa) in the advanced tab in the default extrusion width? Thanks.


    1. As a rule of thumb, generally around 1.2 times the nozzle diameter works well for the extrusion width. So 0.48mm for a 0.4mm nozzle, which would be set in the slicer like you said


      1. Ok, Prusa MK2S, stock .4 nozzle. 1.75mm filament, printed the cube with what I think is the stock settings and the wall came out at 1.34x mm with a digital micrometer.
        And that was after the extrusion fix.
        What could I be doing wrong?


Leave a 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