hits counter

RepRap 101: Calibrating your extruder, part 1: E-steps

So you’ve got your printer built, and you’re ready to start spitting plastic. Maybe you get a few test prints done, which turns out to be just enough to demonstrate that something isn’t quite right. In any case, you’re going to need to make an initial calibration of your extrusion.

This is also something you’ll need to do if you install a new extruder, or make any modifications to your setup. Some may also make the point, which has merit, that you’ll need to calibrate your extrusion any time you make any change to your configuration, even something so small as changing from one spool of filament to another. While I agree that any change in configuration will require adjustments to your extrusion, I use another technique, which I will show in another post, to fine tune the extrusion. Today, I will show you the technique I use to make a coarse calibration, which I will fine tune and adjust later.

Here is a video:

If you prefer reading to watching, here are the instructions:

Before you get started, you’ll want to know your printer’s current E-step value. You can get this from a Marlin LCD by looking in Control -> Motion -> Esteps/mm. If you don’t have an LCD, look in Marlin’s Configuration.h file for the following line:

#define DEFAULT_AXIS_STEPS_PER_UNIT {xx,xx,xxxx,XXX}

The last value in the braces is what you’re after. In my case, the value is 900.

Okay, now we can get started.

1) Make sure your hotend is up to temperature for the filament you have loaded, and that your idler tension is at least approximately correct.

2) Find a spot on your extruder from which you can make a reliable measurement, and make a mark on the filament 120mm from your reference point.

3) Using your LCD, Pronterface, or whatever method you prefer, command your printer to extrude 100mm of filament (During the extrusion, carefully observe that the filament is flowing freeely. If your hob or hobbed bolt grinds the filament rather than driving it, or your extruder motor skips steps, stop, fix it, and try again).

4) Once the extrusion has completed, measure the distance between your reference point and the mark on your filament. You are checking to see how much the filament has moved. If it has moved EXACTLY 100mm (in our example, your post-extrusion measurement would be PRECISELY 20mm), congratulations, you’re calibrated! Most of the time, however, you’ll be off by a few mm one way or another. Subtract the post-extrusion measurement from your pre-extrusion measurement to get the total amount of filament that was actually extruded.

– You initially make a mark 120mm from your reference point.
– You command an extrusion of 100mm.
– After extrusion, the mark is now 17mm from the reference point.
– 120mm – 17mm = 103mm actually extruded.

5) Plug your numbers into the following formula:

(What you asked for / What you actually got) * current E-steps.

In our example, we would have (100/103) * 900,

Slightly simplified: (100/103) = 0.9709 * 900 = 873.786, which rounds to 874.

6) If you are using the LCD method, go back to Control -> Motion -> Esteps/mm, and adjust to your computed value. If you do not have an LCD, change the value in the line in your Configuration.h file that we looked at earlier (where we found your current E-steps value). Without an LCD, you will need to re-flash Marlin for this to take effect. With an LCD, you can test the new value without having to re-flash or even saving the values to EEPROM.

7) Repeat the Mark-Extrude-Measure procedure we just did. You’re looking to be within about a milimeter of your desired extrusion. If you’re still off, repeat the calibration procedure, using your most recent measurement until you get the accuracy you’re looking for.

8) Once you get your value, either save it to EEPROM via the LCD (My preferred method), or enter it in your Configuration.h and re-flash.

Congratulations! You’re calibrated!

Of course, at some point, you’re going to want to change filament. You don’t actually need to completely repeat this procedure for every little change, but the variation between individual spools of filament is great enough to require some adjustment. Stay tuned for part two of this series, where I will show you an easy and simple technique to really fine-tune your extrusion, and make it very easy to switch between filaments.

7 comments to RepRap 101: Calibrating your extruder, part 1: E-steps

  • Dave


    accidentally stumbled on you while searching You Tube. I recently purchased the MakerFarm i3V and just got done assembling it on Sunday. I followed your video regarding calibrating my feed rate. After running through the process I fund that mine was off significantly. I’m not sure if this has anything to due with mine being a 1.75 mm filament vs 3mm or not but mine was set in the 841 range and I had to take it up to 966. Once I checked it again everything came out very close. The main issue I have is that within my LCD menu I don’t have a setting for storing the changes. In your video you mentioned you might do a blog post regarding how to turn this on. Is this something you could share with me.

    Thanks Dave

  • errehache

    Thanks again for another very useful guide.

    If you save in the firmware (using the LCD) does that number override the one in the marlin software? or do they need to match? or do nothing in changing the DEFAULT_AXIS_STEPS_PER_UNIT?

    Would the same procedure work for x and y?

    • That is a VERY good and important question! The answer is that the number stored in the EEPROM (IE: the LCD value), will be the default, even after a reboot of the printer. And yes, you can modify any of the steps/mm values and save to EEPROM.

  • errehache

    Thanks, so if I send some changes via the marlin software, and they are different from the ones stored in firmware do they supersede the default (EEPROM). I have not tested this, currently I am using the same values.

    • Hi. Yes, the values saved in EEPROM will remain after a reboot, and even after a re-flash, since the values are saved in a diffrent part of the Arduino’s memory than Marlin. If you need to revert to “known good” values, the “load defaults” option in Marlin will reload whatever is in Configuration.h.

  • Roger

    I”m confused in your video you use totally different numbers compared to what you have in this written forum, resulting in different Estep Numbers. Video Estep = 927.8 Written Esteps= 874. Big differences, which is correct?

    • Read the post and watch the video again. I suspect you are just looking for numbers to plug into your printer without actually doing the measuring and comparing. You have to do the work, my numbers will absolutely positively NOT work with your printer. In both cases, the METHOD of determining the values is exactly the same. Also, the word “Example” ought to be a clue…

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>