100mm extrusion calibration for FlashForge Creator Pro

by DrLex, published

100mm extrusion calibration for FlashForge Creator Pro by DrLex Jul 18, 2017
0 Share
Download All Files

Thing Apps Enabled

Order This Printed View All Apps

Liked By

View All

Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag.

Print Thing Tag

Thing Statistics

1388Views 449Downloads Found in 3D Printing Tests


These are ready-to-use X3G files for the FlashForge Creator Pro and similar printers, to perform the calibration procedure as explained on the MatterHackers site. The files will instruct the printer to extrude exactly 100mm of filament. Ideally, this will result in exactly 100 mm of filament going into the extruder, but in practice this will usually be less, sometimes a bit more. To compensate for this during actual printing, an extrusion multiplier must be applied.

How to use

First, load the filament of which you want to measure the extrusion multiplier.
Instead of loading it from a spool through the guide tubes as usual, it is recommended cut off a strand of filament. Insert this directly into the extruder without the guide tube, such that the strand simply sticks out from the top of the extruder carriage (as shown in the photo). The length sticking out should be at least 100mm, preferably a bit more. If you want to repeat the test a few times (which is a good idea), you'll obviously need a longer strand.

Doing the test like this, has several advantages:

  1. It is much easier to measure and mark the length of filament sticking out from the extruder. You can simply use the distance to the end of the strand as your initial length. Still, if you want to make an explicit mark, either use a marker, a piece of tape, or a clip (I find muzz64's ‘Germz’ quite handy for this purpose).
  2. The result will not be influenced by the filament bending and twisting inside the guide tubes, which could introduce a large measurement error.
  3. You do not risk unwrapping and tangling the filament spool during the tests.

Next, measure and mark a known distance on the filament, starting from a reference point. This distance should be at least 100mm, preferably with some extra (e.g. 110mm). If you follow the above recommendations and use a strand of filament, your reference point should be the top of the extruder carriage, and your mark could simply be the end of the strand.

Next, pick the x3g file for the desired extruder and temperature, and ‘print’ it. Temperature is not crucial, you should pick a temperature that is high enough for the filament to flow but not too high to bake it.
When it has finished, measure the remaining distance between the reference point and your mark (or end of the strand). You can calculate the extrusion multiplier from the difference between the measured and expected distance (100 mm).

For instance, if you marked 110 mm and the final distance is 17 mm, you extruded 17 -
(110 - 100) = 7 mm less than expected, or only 93 mm instead of 100. This means your extrusion multiplier should be 100/93 = 1.0753.
Other example: you marked 120 mm and the final distance is 9 mm. You extruded (120 - 100) - 9 = 11 mm more than expected. This means your extrusion multiplier should be 100/111 = 0.9009.

The first example is more likely than the latter, because you will usually get under-extrusion due to the extruder gear teeth biting into the filament. See the bottom of this page for an explanation.


You should repeat the test at least twice for the same filament to check consistency of the result. If the two tests deviate, do a third one to get a better estimate.
The test must be repeated for every different filament, although you can probably safely assume that different colors of the same material from the same brand will yield the same results.

The extrusion rate during the test should be slow enough for most filaments. If you find it extrudes too fast for some really flexible filament or so, either modify the source files and convert them to X3G files using GPX, or ask me.

Mind that it is not essential to get the extrusion multiplier correct to umpteen digits after the decimal point. In fact, from this test I found out that I had been under-extruding for a long time, yet my prints were accurate and reliable. In the end, use the multiplier that provides the best results in practice, not in theory.

This method will only compensate for the difference in expected versus actual extruded length. It does not compensate for incorrect filament diameter, and the extrusion multiplier is not meant for that in the first place. You should always measure the exact diameter of your filament and configure it in your slicing software.

Print Settings

Printer Brand:




Leave the build platform at the bottom of the printer, its only purpose in this test will be to catch the spiral of extruded filament.

Print the file from an SD card. Trying to print from USB might yield unexpected behavior.

The file will preheat the extruder, then beep and show a prompt to press the ‘OK’ button. After this, it will start extruding what the printer believes to be 100 mm of filament. The carriage will move in a square pattern while doing this, this ensures that the test is more or less realistic (my initial attempts to just extrude from a stationary position proved unreliable). Don't mind the weird zig-zag dance at the end, this is to ensure the file has enough commands to avoid confusing messages on the LCD display. At the end, the display should show the extrusion counter at exactly 0.100 m, because that is what the printer believes to have extruded (even though in reality, it almost never is).

Why is the extrusion multiplier needed?

Most extruder designs rely on a geared wheel that pushes against another spring-loaded wheel. The teeth of the gear provide a good grip on the filament clamped in between the two wheels. However, the softer the material, the deeper the teeth will dig into the filament, and the smaller the effective radius of the driving gear becomes. To extrude a certain length of filament, a gear with a smaller effective radius will need to make more turns than one with a larger radius.

Your printer's firmware is configured with some reasonable default conversion factor between extrusion coordinates in print commands, and the number of motor steps required to pull the instructed length of filament through the extruder. This default was chosen for some typical filament, and will not be correct for a softer or harder filament. This is where the extrusion multiplier is needed.

Some firmwares allow to send a command with the multiplier, which is then automatically applied to all coordinates. Sailfish (as used by the FFCP) however, does not allow this, therefore the extrusion coordinates themselves must already be multiplied before sending them to the printer.

More from 3D Printing Tests

view more

All Apps

Auto-magically prepare your 3D models for 3D printing. A cloud based 3D models Preparing and Healing solution for 3D Printing, MakePrintable provides features for model repairing, wall thickness...

App Info Launch App

Kiri:Moto is an integrated cloud-based slicer and tool-path generator for 3D Printing, CAM / CNC and Laser cutting. *** 3D printing mode provides model slicing and GCode output using built-in...

App Info Launch App
KiriMoto Thing App

With 3D Slash, you can edit 3d models like a stonecutter. A unique interface: as fun as a building game! The perfect tool for non-designers and children to create in 3D.

App Info Launch App

Print through a distributed network of 3D printing enthusiasts from across the US, at a fraction of the cost of the competitors. We want to change the world for the better through technology, an...

App Info Launch App

Treatstock is an online platform that offers decentralized manufacturing services such as 3D printing and CNC machining for clients all over the world. We offer free and instant access to comparati...

App Info Launch App

3D print your favourite design with NinjaPrototype, a professional 3D manufacture with consistent quality and speed.

App Info Launch App

Thanks for posting these files. Can you also post a sample calibration gcode file and the gxp command line flags you used?

(AFAIK, Simplify3D uses gpx -p -m r1d )

The gcode files are already in this Thing's downloads.
The command line I use for these files is gpx -m fcp. For these files the -p flag is not useful.
Only the most recent versions of GPX have the ‘fcp’ machine type, but it only seems to be an alias for r1d anyway because the FFCP is similar enough to the Replicator 1 Dual, so you can use either.

Thanks DrLex, yes, your are right, the gcode is already here.

I switched recently to from PLA/PETG to flex filament (Amolen TPU) and wanted to establish the extrusion multiplier. With PLA I got 100mm (good) but with the TPU only 55mm so increased the extrusion multiplier to 1.7 (which is below the theoretical 1.82) and got over extrusion and jamming. Reading around the internet, people suggest multiplier of ~1.2.

Any idea what causes the gap between the calculated and practical multipliers.

As for the -m fcp, is it in a gpx version provided by Flashforge? It's not here https://github.com/whpthomas/GPX/blob/master/gpx-main.c or in the gpx binary I got from Simplify3D. I wonder if FF use a custom gpx.

1.2 indeed is the multiplier I also established for NinjaFlex through trial-and-error. (I didn't try the calibration procedure with it because I only have a few small sample amounts, so I didn't want to ‘waste’ it on a test.)

It is possible the calibration script tries to extrude too quickly, flexible filaments need to be extruded very slowly. Try reducing the F values. Also ensure the extruder is set hot enough for this filament.

The fcp option was added in another fork of GPX: https://github.com/markwal/GPX. The one you linked to was actually forked from this one, but has no commits since 5 years, markwal's was updated less than a year ago.

Tried with a 0.3mm nozzle and only got to about 20% before the tape got to my extruder. I'm assuming this is for a 0.4mm nozzle?

So you mean the extruder has already consumed 10cm of filament while the progress indicator is only at 20%? That is pretty much impossible, unless you are using custom extruders, or have changed the extrusion steps parameter in the firmware settings. Or did you perhaps measure the distance before loading the filament? Maybe the instructions need to be clarified about that: you need to measure the distance while the filament is already loaded, as shown in the photo.

That's what I mean, stock extruders, stock firmware, measured after it was loaded.

What kind of filament are you using, and which of the files are you using for this test?
If you let it run to the end (you can simply try it without anything loaded), what does the display show for the extruded length?

The nozzle diameter should not have an effect on this test, by the way. It shouldn't even matter whether you are doing the test with a nozzle installed or not. The nozzle could only have an effect if it is too narrow for the extrusion rate, and then the extruder gear would be grinding the filament and it would extrude slower than expected, not faster.

Thank you for your file.

I'm trying to calibrate my machine that runs sailfish but i can't seem to tune my machine properly.

I can only extrude 78mm out of 100mm no matter what i try

To my understanding sailfish doesn't keep the esteps in it's eprom but uses the settings that are encoded in the .X3D file so therefore i think that's where my problem is coming from?

is it possible to post up the file as a .gcode file so i can encode it back to .x3d with my estep information to try?

thank you

Sailfish executes the raw X3G files which directly contain the number of steps. This means the extrusion multiplier must already have been taken into consideration while writing the .x3g. Even if you would find some way to apply a global multiplier between what is in the x3g files and what the printer actually extrudes, it would be a bad idea because you would need to manually change this every time you swap filaments.
You must configure the extrusion multiplier in your slicing program. Every program should allow to make a profile per filament, and enter the multiplier per filament. Again, you shouldn't try to make a global calibration for the entire printer because that doesn't make sense.

I'm not sure about how S3D treats this, I'm using Slic3r. It directly applies the multiplier to the extrusion coordinates in the gcode, because there is no standard way to specify the multiplier to be used during gcode-to-x3g conversion. This conversion (for Slic3r output) typically happens through the GPX program, which only has a fixed table for the steps-per-mm per printer type. Ideally the gcode file would contain actual millimeters for the E coordinates, and the multipliers would be included as a parameter, and it would be GPX which applies these multipliers. This is not how it currently works unfortunately, so we're stuck with this hack of directly manipulating the E coordinates, which leads to nonsensical values for anything that tries to give you an estimate of how much filament a print will require.

There is not much point in making a modified version of these test files. If you calculate the extrusion multiplier following the instructions, and ensure it is applied in your normal workflow, then the correct amount of filament will be extruded for your prints. If you would really want to verify that the multiplier works, you could make a very small test object that needs about 100mm of filament, and determine exactly how many millimeters it would require with a multiplier of 1.0. Then, set the correct multiplier and actually print it, and check whether the expected length of filament was actually consumed by the extruder.

"there is no standard way to specify the multiplier to be used during gcode-to-x3g conversion. "

There is: I don't know how slic3r works, but if it creates x3g files then it's using GPX in some form. There should be a configuration file for GPX that lets you specify steps/mm for each of the X, Y, and Z axis. There should also be a configuration setting for the "A" and "B" axis. Those are the stepper rates for the right and left extruders (respectively.)

This works the same as the "E-Steps" EEPROM setting found on many single extruder printers (except in typical sailfish fashion of requiring a pre-process to convert mm to steps.)

As for the argument of it it's better to do this in firmware (or the GPX config) or at a profile setting.... well, that's a different topic.

Ideally, there wouldn't be any slip regardless of the type of filament being used. In that case, being the A/B axis steps/mm is configuring the amount of raw filament going IN the extruder, one setting should apply regardless of what you might be feeding into it. If there IS any slip, it's not going to be consistent, so any calibration is less useful.

Simplify3D has this setting of printer spec https://imgur.com/a/yrqTqn5 .

I am not sure how it's used since the generated .gcode contains dimensions in mm, not in steps, so only the gpx conversion utility need to know these ratios (yes, S3D comes with the standard gpx binary and calls it after it generates the .gcode file).

Slic3r only outputs gcode files. To obtain an X3G file, it must be separately converted with for instance the GPX program (which of course can be configured to be an automated post-processing step). GPX is usually invoked with a machine preset that determines the steps per mm. It would indeed be better if the G-code file would simply contain the ideal E coordinates for perfect filament, plus a separate extrusion multiplier that depends on the actual filament diameter and squishiness. This would allow to convert the same gcode file into an X3G with a different multiplier, without having to re-slice it.
Slic3r does allow to output gcode with so-called ‘volumetric E’ coordinates, which specify only the volume of filament needed per print move (not even the length, so it is independent of filament diameter). An extra G-code command at the start of the file sets the conversion factor between those E coordinates and the actual extruded lengths. Some firmwares support this, like the most recent Marlin versions if I have to believe the documentation.

With a good extruder, slip is never a cause of filament being extruded slower than ideally, unless the filament jams (which usually ruins the print anyway). The main cause is the filament being pushed into the extruder gear, causing it to bite deeper into the material, and the effective radius of the extruder gear to decrease. This is why extrusion multiplier is not merely a fixed extruder property that should be tuned only once, it is a combination of extruder+material. I need a multiplier of about 1.2 for NinjaFlex, while for PLA and ABS it is very close to 1.0.