How To Calibrate the Extruder Steps (Ender-3 / Ender-5 / CR-10)

After I setup the new Creality Ender-5, it was under extruding by a rather significant amount… 12% to be exact. This came as no surprise, my Ender-3 and CR-10 had both arrived with similar problems in the past, badly in need of a proper calibration to the Extruder Steps.

When our 3D prints are less than perfect, the Extruder Steps (or e-steps) are often checked as a last resort. There are plenty of other tweaks that can improve results, but e-steps should be the first suspect on every new 3D Printer. It’s responsible for how much plastic gets pushed in to the hotend, and the wrong setting can leave gaps, blobs and other surface defects.

On the upside, Creality does make it easy to check, change and fix the Extruder Steps. No need to connect the 3D Printer to your computer over USB, we can just dial in the correct settings right from the LCD control screen.

Calibration Tools

We just need a couple of tools, something to measure and something to mark. In my case, I am using Digital Calipers from Amazon and a sharpie.

  • Calipers / Ruler
  • Permanent Marker

Calibrate Extruder Steps Tools

Calculate Extruder Steps

To check if our current Extruder Steps are correct, we first need to tell the 3D Printer to extrude a specific amount of filament. We then measure how much was actually extruded, find the difference and calculate the correct e-steps based on that.

1) Measure

Using calipers or a ruler, measure out exactly 100mm in length from the extruder and mark it on the filament with a sharpie. It’s a good idea to make several additional marks at 110 and 120 too, just in case it extrudes more than we want and additional points of reference are needed.

Calibrate E-Steps Measure Filament

2) Extrude

Go ahead and preheat your hotend up to normal printing temperatures. From the LCD control screen, press the knob once to bring up the main menu and navigate to Prepare -> Preheat PLA or Configure -> Temperature -> Nozzle to set a specific value.

It’s a good idea to set the temperature +5° C hotter than you would normally print this filament. We don’t want any resistance at the nozzle to throw off our measurements, it should flow out nice and smooth.

Once the hotend is preheated, bring up the menu again and this time go to Prepare -> Move Axis -> Move 1mm -> Extruder. Turn the knob to the right until you reach our desired value of 100mm, then wait until it has finished extruding the filament.

3) Check

If our 100mm mark on the filament is right at the extruder, the e-steps are perfectly calibrated and we’re finished.

Otherwise, if the mark shows that it extruded more or less filament than we wanted, we will need to check how much. To do this, measure the distance from the extruder to our mark once more and see how much filament was actually pushed through the hotend.

If the 100mm mark is still visible…

The 3D Printer is under extruding and not pushing out as much plastic as it should be.

Subtract the new_measurement from the original_measurement to find the difference. In my case, I still had 12mm of filament left before my 100mm mark, so my calculations are…

100 - 12 = 88

If the 100mm mark is no longer visible…

The 3D Printer is over extruding, feeding more plastic than we wanted.

Use one of the additional reference marks we made and measure to that instead. Subtract the new_measurement from the reference_point, then add that value to our original_measurement.

As an example, let’s say we measured from the extruder to our mark at 120mm, and there was a length of 16mm filament between them. In that case, we would do…

(120 - 16) + 100 = 104

Write down this value and save it for the next step.

Calibrate Extruder Steps

Before we can figure out the new correct value for our Extruder Steps, we need to first check and see what the current wrong value is.

From the LCD screen, push the knob and navigate to Control -> Motion -> ESteps/mm to view the original setting. Unless it was previously changed, the default e-step values from Creality are set as…

  • Creality CR-10: 93.0 steps/mm
  • Creality Ender-3: 95.0 steps/mm
  • Creality Ender-5: 92.6 steps/mm

Using the formula below, multiply the current E-Steps/mm for your machine by the desired amount of filament (100) we asked it to extrude. Divide that number by the filament it actually used (the value we wrote down in the previous step) and we find the correct Extruder Steps for our machine.



This is the math for my Creality Ender-5, which gave me a new E-Steps/mm value of roughly 105.2. That’s a significant difference from what was previously configured stock.

EEPROM Settings

Now that we have found the correct Extruder Steps for our machine, we need to set and store this value in the EEPROM. This is the board’s read-only memory where firmware settings are saved.

From the LCD control screen, navigate to Control -> Motion -> Esteps/mm. Press the knob to select it, then turn it to adjust the number until it matches our new Extruder Steps value. Press the knob once more to back out and make sure that it’s correct.

Since this will revert back if we power off the 3D Printer, we need to store the changes as well. Go back to the LCD control screen, scroll down to the bottom and look for an option such as Store Memory (Ender-5), Store Settings (Ender-3) or Save to EEPROM (CR-10). The option name changes a bit between models, but does the exact same thing.

Select that and our new Extruder Steps are now saved.

For 3D Printers that do not have EEPROM controls on the LCD menu, the e-steps can alternatively be set via the G-Code Start Script in your slicer software. This is specified as “M92 E105.2;” without quotation marks, and replace the number with your correct e-step value.

Other Thoughts

Having now purchased several different Creality 3D Printers, I think it’s safe to assume they almost always need to be calibrated. Given the low budget price point, we can’t reasonably expect each machine to be tested and tuned before shipment, which means this work falls to us as the consumer.

The problem is this isn’t necessarily obvious, especially to new owners buying the Ender-3 as their first 3D Printer. The g-code examples on the SD card are just smoke and mirrors, where the Test Dog prints fantastic because it uses ultra quality settings that can hide issues.

Related: How to Upgrade the Extruder (Ender-3)

In the long run, it’s a good idea to just upgrade the stock extruder with an all metal version. The plastic lever and brass gears will work for a while, but even a Stainless Steel 40T Gear will make a huge difference for a couple bucks.

11 thoughts on “How To Calibrate the Extruder Steps (Ender-3 / Ender-5 / CR-10)

  1. Thanks for your help! I am new to 3D printing and bought the Ender 5. Now switched to the MKS Gen L, TFT28 and BL Touch. Configuring the setup to learn how all those different components en setting are closely working with each other.

    1. Hi Ralph,

      No problem, glad it helped! For those that are new to 3D Printing, I generally don’t recommend any upgrades until you are very familiar with your machine. These are pretty phenomenal 3D Printers and should print great right out of the box. In your case however, all 3 of those are wonderful upgrades that won’t have much impact on print quality but rather just improve the user experience.

  2. My ender 5 did 88 MM out of the box when i told it to extrude 100MM.

    Thank you for tutorial. Funny how they are all broken the same from the factory 🙂

    1. Hey Frank,

      I’m guessing all of the Ender-5 3D Printers have the e-steps miscalibrated from the factory, doubt they even take the time to check. They make great budget machines, but definitely leave some stuff up to the customer to fix. Thankfully this is a pretty simple one and takes just a few minutes!

      1. With different materials that people use its probably best to pick a margin of error and have the machine under extrude, rather than over extrude by default. The majority of people won’t notice under extrusion until they try to do taller prints.

  3. When i go in the main screen or instalize EEPROM it still goes back to 93 and i need 100. When i try to save it it give a hard beep…. so this does not work on nu Ender 3 Pro 🙁

    1. Hi Max,

      I believe “Initialize EEPROM” pulls in the settings from memory, so that would overwrite any changes you made. You would want to use the Save EEPROM or Store EEPROM option, although it sounds like your firmware may not have the option to write changes.

      If that is the case, just use the instructions from the yellow box where I made a note about an alternative method. You can add “M92 E100.0” to your Start G-Code in the slicer software, or whatever your desired E-Steps value is. This won’t permanently store it on the machine, but it will set the value before starting the print job.


  4. Sounds easy to do but not so much. I can find all the settings and indeed change the temp of the hot end with no problem. Once the hot end is heated, I can go and tell it to extrude 100 mm of filament. I’ve done it both ways; press the knob, it sounds like it wants to do something but then reboots and don’t press the knob, it does nothing. So, not quite sure where to go from here. Running an Ender 5.

    1. Hi Stewart,

      This is actually some kind of firmware problem with the Creality Ender-5. I had the same problem on my own machine, but thought it was a glitch. I have since seen others complain about it on /r/Ender5 recently so it seems to be an issue from the factory.

      With that said, it doesn’t make it impossible, just a bit more of a hassle. From what I could tell, it would reset when scrolling the knob too fast (likely overloading the board with a queue of too many instructions). When I took it slow and just extruded about 25 to 30mm at a time, it never reset.

      So far I haven’t seen any exact answer for the reason this happens on the Ender-5, it doesn’t occur on the Ender-3 or CR-10. Definitely give it a try going slower and see if that works, otherwise you could potentially just use a G-Code file to extrude 100mm filament instead as a workaround.


Leave a Reply

Your email address will not be published. Required fields are marked *