As I've experimented with different print styles and slicers, and especially as I've  been helping new users who are wrestling with printers that seem utterly unwilling to cooperate, I've become more and more convinced that one of the key variables that we should pay attention to is the rate of extrusion, expressed in terms of mm³ of plastic per second. Essentially, my hunch was that there is a maximum rate at which one can push plastic through the nozzle - and once you try to go too fast, bad things can happen. So I set out to find out definitively where that limit is.

#### Defining extrusion rate

The extrusion rate is the volume of plastic being extruded  from the nozzle each second.  The gcode defines the rate that the printer is trying to attain. If you imagine the printer laying down a long thin line of plastic for one second, it's easy to see that volume being extruded in that one second - the extrusion rate - is the product of the width of the bead being printed, the layer height, and the distance that the head moves in one second - the print speed. Effectively we are printing a long thin rectangular block of plastic (simplifying, by ignoring the fact that in practice the plastic will tend to form rounded corners as it lays down) and by multiplying together the width, height and length of that block we get the volume of the block, and hence the rate per second.

#### The slicer's view

In the ordinary course of slicing and printing, we tend not to focus on the rate itself, but instead define all the components - the layer height, nozzle width, and the print speed. Based on the height, width, and length of line segment we are printing, the slicer calculates the amount of plastic needed for each part of the print. From there, and knowing the diameter of your filament,  it calculates the amount of raw filament to feed into to the printer to provide the necessary volume of plastic. This sets the E (extruder) coordinate that is included in each line of gcode, along with the X & Y (and possibly Z) components of the move.  Since we're defining how much plastic to feed in, and the speed determines how long the x & Y part of the move takes, the slicer is implicitly defining the extrusion rate. If the head is moving 100mm in 1 second, while laying down a bead 0.4mm wide and 0.2mm deep, then the extrusion rate being requested for the segment is 0.2 x 0.4 x 100 = 8mm³/s.

#### Where it can go wrong: a simplified view

However, as we print at ever faster rates, we may eventually find that the printer can't keep up, and that despite requesting one rate of extrusion we get something rather less than that, because the relatively thick, sticky plastic just can't squirt out of the tiny nozzle opening fast enough. And that then presents a problem - because the gcode is defining how much plastic gets fed into the Bowden tube - and if that's more plastic than can exit through the nozzle, then something has to give. To a small extent the plastic can compress, or stretch the Bowden tube to make a bit more room for itself. But mostly what happens is that the filament just stalls in place; despite being pushed faster, it can't go anywhere... but the extruder motor keeps turning, and the knurled bolt grinds way at the filament, chewing it up. The filament quickly gets abraded away, so that the teeth of the knurled bolt don't even dig into solid plastic any more.  Furthermore, the constant excessive push of plastic into the hot end raises the pressure in the molten plastic, making it more likely that the molten plastic, unable to escape the way it is supposed to go, will instead find its way back up past the advancing filament, and get into the cooler parts of the head, where it can solidify and form a jam that will make things even worse. In view of this, it's important to know what the maximum sustainable extrusion rates are, so that we can be sure not to try and exceed them. (Kisslicer has a very nice feature where it allows you to specify a maximum extrusion rate, and if you set parameters that would exceed that rate, it slows the print speed down to avoid problems). Although there has been some anecdotal discussion of this on the Ultimaker forums, I didn't find a definitive test, so I decided to conduct my own.

#### Measuring maximum extrusion rates

In order to find the extrusion rate limits for my Ultimaker, I set up a number of tests. In each case, I sent gcode to the printer that made it extrude for 30 seconds at a known rate. And then I took the little pile of extruded plastic, and weighed it. And since I knew the density of the plastic, I compared the extrusion I had ended up with to the amount I was expecting. In order to decrease errors, I ran ten seconds of slow extrusion before each test, to prime the head while maintaining a low standard pressure. Then I ended with a standard retraction (4.5mm at 30mm/s - just like my normal print retractions). The gcode paused,  giving me a chance to clean off the nozzle, and then the test extrusion began. At the end, another retraction was performed, to reduce the impact of oozing beyond the allotted time period, and I quickly used tweezers to pull off the plastic that was extruded during the test. In each case I used the same plastic - a 2.85mm diameter white PLA. I weighed the extruded plastic multiple times using digital scales with 0.01g precision. And each test was repeated at least 3 times, at each of  up to 14 different extrusion rates, for half a dozen or so different temperatures. And because I knew that I might be chewing up the filament, and didn't want that to impact the outcomes, each set of test began with a fresh piece of filament loaded in the Bowden tube. After about ten hours of extruding and weighing, I had quite a collection of little pyramids of plastic, and discarded lengths of more-or-less mangled filament:

#### Some words of caution

Please bear in mind is that these tests  used a non-standard nozzle. I have a 0.65mm diameter hole in my nozzle, not the standard 0.4mm nozzle. This means that the rates that I obtained are about 2.5 times higher than what is possible with a standard nozzle (because the area of the hole in a 0.65mm nozzle is roughly 2.5 times larger than a 0.4mm diameter hole). I plan on repeating the test using a standard nozzle later. Secondly, this is just testing a single type of plastic – a bright white PLA. Different brands, types and colors of plastic will behave differently in terms of temperature specifics due to their differing formulations, although the general patterns should be broadly similar. Over time, I intend to repeat the testing with different plastics, in order to allow comparison between types, and make it easier to select the best temperatures and speeds for each type with less trial-and-error, and fewer wasted prints.

#### Extrusion rates: Requested versus actual rates

The graph below shows the results that I got. Each line represents a different temperature. As the line goes from left to right, the gcode is requesting faster and faster extrusion rates. The height of the line indicates the actual rate that was achieved on average over the 30 seconds of the test. The grey line shows the nominal outcome we were hoping for - where actual extrusion is equal to requested extrusion. Once the lines became horizontal, so that I'd identified the maximum extrusion rate, I stopped testing at that temperature to avoid excessive damage to the filament and/or extruder. A few things are immediately apparent: 1) The extrusion rates achieved gradually tend towards a limit, beyond which it is not possible to extrude any faster. 2) The size of that limit depends on the temperature of the plastic. The hotter the plastic (and hence the better it flows) the higher the maximum rate of extrusion. At 210 degrees, the limit is a little over 18mm³/s – by 230 degrees, that has increased to over 24mm³/s. 3) At low temperatures (200 degrees and below) the maximum extrusion rate is really quite limited. From 210 degrees and above, a broader range of extrusion speeds is attainable. However, the increase in throughput shows diminishing returns: Higher temperatures offer smaller and smaller increases in extrusion rate.  (And higher temperatures introduce their own print problems due to excessively low viscosity -  I tried testing at 240 degrees and was unable to get reliable results because the head oozed so much that I couldn't define the start and end points of each test sufficiently well). 4) None of the tests extrude the desired volume even when asking for rates well below the maximum. In all cases, there is some under-extrusion, even at quite low requested rates.

#### Under-extrusion is all around us

I was very surprised to see that I was getting under-extrusion of 10% to 20% even at lower rates. The percentage of under extrusion gradually rises as the extrusion rate increases, until we finally hit the absolute maximum extrusion rate, where the curves become horizontal (or even start to decline due to filament grinding making it hard to keep up even that level). I tried changing the tension in my V2 spring-tensioned extruder... and while it did seem to reduce the amount of under extrusion by a few percentage points for any given rate and temperature, it didn't make that much difference.  I think that my extruder is well constructed, and works well in general, so I don't think its something specific to my setup. But at the same time I was puzzled - because I wasn't getting obvious filament damage or grinding. And I also verified that the extruder gear is still turning exactly the right amount - it's not skipping any steps. Rather, what seems to happen is that as the requested extrusion rate is pushed higher, and the back-pressure on the filament increases, the filament starts to slip backwards as the teeth on the knurled bolt rotate. It appears that with the bolt at certain angles in its rotation, the teeth don't bite on the plastic sufficiently, and the filament has a brief opportunity to slip backwards. The net result is that with minimal damage to the filament, the drive bolt teeth marks simply get closer together...

The photo above shows a single piece of filament at the beginning and end of a 100mm fast extrusion – one that exhibited under-extrusion, but was below the absolute maximum rate for the temperature. On the top left is the start of the extrusion, before pressure has built up in the head. On the top right is the end of the extrusion, by which time pressure has built up. The lighting slightly exaggerates the deformation of the plastic in the right hand piece. Seen with the naked eye, they both are pretty clean without obvious signs of chewing; the leading edge of the later teeth marks (the side towards the bottom in this picture) is a little more raised, but to a casual inspection there doesn't seem to be any major difference – except that the teeth marks get closer together.  A filament move distance that took 4 teeth bites at the start of the extrusion, requires about 5.5 teeth bites by the end. This effectively changes the necessary steps-per-e ratio by about 35%... and means that by the end of the test, I was extruding at less than 75% of the rate at which I started - for an overall average extrusion rate of about 85% across the entire test.

#### Respecting the limits

Armed with this data, it becomes easier to tune print settings to avoid trying to print too fast. Speed, temperature and layer height can be coordinated to fall within the sustainable limits. Kisslicer's maximum extrusion rate settings can be refined to ensure that extrusion rates remain safe even in unusual configurations, like printing multi-layer fast infill, with wider-than-usual nozzle settings. I believe that there may even be good reason to build some configurable limits into the firmware to help prevent excessive extrusion, even if the slicer hasn't been smart enough to avoid it; as noted above, I've seen several cases where new users' repeated print failures were solved when they were encouraged to try adjusting settings to bring the extrusion rate down below the estimated limits for 0.4mm nozzles - around 8-10 mm³/s. This isn't helped by the fact the fast 'QuickPrint' setting in Cura tries to print at 11.2mm³ per second - almost certainly enough to cause problems for a 0.4mm nozzle.

#### Next steps

I plan to continue these tests with standard 0.4mm nozzles, in order  to provide more concrete information for the majority of Ultimaker users. Even if the under-extrusion issues can be mitigated, the absolute limits on extrusion are still a challenge that all users need to either be aware of, or be protected from via active safeguards and sensible defaults. I think that we need to also consider if a better extruder drive design would reduce or eliminate this tendency to under-extrude as head pressure rises, or if not, to at least consider the practicalities of improving the firmware and/or slicers to compensate for what amounts to a dynamic steps-per-e parameter as print speed increases.
Tagged with →

### 31 Responses to Exploring Extrusion: Variability and Limits

1. MrJohnK says:

Great post and much appreciated. I too believe it would be good to have either the slicer or firmware more aware of what volume is requested at each move, or perhaps averaged over several instructions in a sort of look-behind feature to take into account acceleration too.

2. Ben says:

Hi, I agree with you, but is there a simple way that we can increase the extrude rate? Will setting a lower filament diameter lead to faster extrude? or its going to create too much back force to the extruder?

• illuminarti says:

There’s any number of ways to increase the flow rate – reduce the configured filament diameter, increase the ‘extrusion multiplier’ parameter in the slicer, or jsut increase the flow in the ulticontroller. The problem is that this sort of under-extrusion is dynamic – varying with the print speed. Even with a ‘fixed speed’ slicer like Cura, the actual print speed varies quite a bit due to acceleration considerations; small segments print a lot slower than longer ones, on average. With slicers like Kisslicer that an print different parts of the object at different speeds, the problem becomes even more complicated. So it really needs a more intelligent, dynamic solution that can take into account what is being printed. A more simplistic solution might just be to overstate the steps-per-e setting by 5-10%, or calibrate steps-per-e by actually driving plastic through the hot nozzle at typical temperatures and print rates.

• My Makibox says:

Marlin has Autotemp, which looks ahead at the extrusion rate and raises the hot-end temperature accordingly.
https://github.com/ErikZalm/Marlin#autotemp

Presumably, the same code could be used to deal with effects you note. Faster extrusion could bump up the esteps from the constant in DEFAULT_AXIS_STEPS_PER_UNIT, while keeping the maximum feedrate in steps constant by lowering the maximum feedrate in mm. Calibration could be tricky though.

• Maxy says:

Another solution would be to control the extruder force such that it remains constant (except for retraction). The XY movement could be slowed down or sped up based on the actual E feedrate required to hold the force. To get approximately the desired XY speed, temperature could be controlled. The remaining problem is the XY acceleration limit, which would have to be accounted for by an acceleration-aware slicer. (End of dreaming. But if anyone is interested, I got a CuraEngine branch called “speedrefactor” which at least smooths out abrupt E-speed changes when doing cooling slow-down.)

3. Maxy says:

Let’s try an optical sensor (mouse?) to measure the filament length that has actually moved into the bowden, and close the feedback loop via firmware. I wonder, has this been tried already?

4. jpg says:

Hello,

Thanks for this awesome work!

Bold guess: when you’ll try with a 0.4mm nozzle, you may find that the maximum extrusion rate is not 2.5 times smaller (or more accurately 2.64 times smaller if we do the exact nozzle hole area ratio) but rather only 1.62 times smaller.
Indeed, unless i’m totally wrong (which actually occurs quite often….) the backforce at a given temperature is varies with the nozzle hole diameter, and not the nozzle hole area.

JP

• illuminarti says:

I’m not sure… you may well be right that its a function of diameter, rather than area… I hope to complete the testing soon, to settle the question 🙂

• Kyrre says:

I know this is old, but it is a very nice post with very usefull info.
I just wanted to mention that relating to diameter vs area is not really different as there is just a different slope to it. The area is naturally squared vs the diameter/2 other than that there is the linear factor PI. Based on that I think area is more correct at the end of the curves where it slopes off, while the linear relationship is a better match up to this point.

5. jpg says:

Can’t wait for the answer 🙂

6. Ultifan says:

Hi,
Great info !!
I’ve found this formula : P = F / A , where P= pressure, F= force and A= area

https://en.wikipedia.org/wiki/Pressure

7. Bertho Boman says:

Great post and info.
I really appreciate that you took the time to test and to publish.
Bertho

• illuminarti says:

I’m glad you thought it worthwhile, Bertho! Thank you, for giving me something to test 🙂

8. Erik van der Zalm says:

Hello,

This is very useful information.
I am currently adding an additional sensor to the extruder. I want to measure the real extruded distance.
The goal is to compensate for the slip and possible automatically limit the speed or increase the temperature.

First goal is to repeat the measurements with a standard Ultimaker nozzle.

Erik

• illuminarti says:

Thanks, Erik! That definitely seems like the way to go – to be able to measure the filament being moved. (I have also been thinking about this, for a more prosaic purpose; being able to measure the amount of filament being fed into the extruder would also be useful for providing an external trigger signal to a powered spool holder, to be able to ensure that filament is actively unwound from the spool; I find that many of the print quality issues I run into are due to filament tangling on the spool momentarily when being pulled off).

9. Erik van der Zalm says:

I did a test today.
With the encoder I measured the filament length going into the extruder.
I get the same results as you have. There is a max extrusion speed for a given temperature.
Above 215C I see no improvement in the extrusion speed.
The force needed to unwind the filament from the spool also gives some extrusion length variation.

I will try some tests to compensate for the slip. And if the slip is to big increase the temperature or lower the speed.

• illuminarti says:

I’m looking forward to hearing how you get on with compensating for the slipping. It’s interesting that you could measure a difference based on the force needed to unspool the filament; I’ve definitely found that to have an effect on print quality – I’ve stopped relying on the extruder to pull filament off the roll; instead I put the spool on a turntable on the floor, below the printer, and have several meters of filament hanging in space between the printer and the spool, for the extruder to feed on. Every few hours I unspool a few more meters of filament, so that the extruder never has to do much work to pull the plastic in.

• I tried this approach too but found that if I try to unspool too much filament, it tends to flip over and form a nasty knot. I didn’t find the right balance between ease of use and performance for the unspooling process. Still looking for a better replacement. I will try this thing next (featuring 8 ball bearings):
http://www.thingiverse.com/thing:21435

10. Coofer Cat says:

This is some really great research. I did think I’d observed the effect just when extruding some filament to prime the nozzle. I didn’t connect that with anything else about printing though, so it’s been very interesting to see you doing it.

To throw some complication into all this – do you think there’s a chance extrusion improves when the filament is being ‘pulled’ out of the nozzle like it is when it is printing? Maybe this ‘makes up for’ the apparent under-extrusion once the pressure has increased?

I like the idea of a wheel encoder that measures the amount of filament going into the extruder though. It would allow for self-calibrating machines, pausing on extruder failure, filament kinks or end of the spool etc. It still doesn’t tell you what is coming out of the nozzle though, but it closes a big gap in the machine control.

• illuminarti says:

That’s a good thought… I honestly don’t know. If anything, I’d expected extrusion to be harder when actually printing, because there’s a smaller space to squeeze the plastic into, it starts to flow more turbulently etc. When extruding into free space, you do have the weight of a good chunk of the previous extrusion helping to ‘pull’ the plastic out – but I wouldn’t rule out the possibility that there might be some countervailing forces due to the cohesion of the plastic when the head is actually printing, and constantly providing a new surface for the plastic to stick to.

11. Ken Cummings says:

Good technical report. I see a need for a standardized testing procedure ( yours is a good starting point) where qualified people like yourself, Whosawhatsis of Deexmaker , and the guy at Taulman filaments test different filaments, machines and programs. Results would be posted. Further on uses would tell their smart software what filament was being used, the system would look it up on line and adjust the printer from there. One dreams.

• illuminarti says:

Yes, it would be good to have some standard way to assess the behavior and printability of different materials. At least so that we can be sure and stay within the performance envelope of the material, and of make adjustments such as the temperature and cooling profiles. But the reality is that the actual object being printed also affects that way the material behaves, so only quite crude adjustments can be made based on knowledge of the material alone.

12. fluxline says:

I’d read this before when calibrating my own extruder with a different gear ratio and trying to track down some extrusion issues and esteps. just read it again and i think it also explains another observation. the first layer speed is always slower than the rest of the print and therefore will be a bit over extruded when compared to the rest of the print.

I look forward to more tests, let me know if you need some help. it could be interesting to get some results from other printers with other extruder configurations

13. Andy says:

Very interesting article, supported by facts.

Started looking for info on max extrusion speeds because I think my max reliable extrustion speed is way too low. I notice extruder skipping (kickback on direct-drive stepper) as soon as I increase the extrusion speed above 100 mm/min (PLA 195degC, 0.4mm nozzle on JHead), while extruding in air with manual control in repetier.
If I calculate correctly this is even less than 1mm³/s (100/60 * 0.4*0.4*3.14).
Is my calculation correct (I’m questionning everything wright now…)?
Or could this really be the limit of my filament/extruder? (I noticed similar problem with ABS)

14. Andy says:

Guess I was sleeping…
the speed I mentionned was on the cold side (extruder speed), and I should use radius instead of diameter… then I come out on 11.8mm³/s which is reasonably too high based on your experiments…
How should I (reverse) calculate extrusion rate for slicers?
can I just ( 0.4 * layerheight * XY-speed?)

• illuminarti says:

Yes, the output volume per second is approximately extrusion-width x layer height x linear speed. The extrusion width will depend on your slicer; Cura (mostly) defaults to creating an extrusion width equal to the nozzle opening. Others are more likely to go for larger sizes; Slic3r in particular can try to create some very wide beads which can dramatically increase the throughput of the nozzle.

15. wolfmanjm says:

This is becoming very relevant again, with the discussions over the newer hotends like the e3d volcano which is supposed to have a large meltzone and large nozzle diameters so can melt quicker and have a higher flow rate. I measured the maximum flow rate I could get out of the volcano with 3mm filament (not optimum I am told) and it was around 30mm³/sec with a 1.0mm nozzle and PLA at 220°C. This is only a little higher than what a Jhead seems to be able to do with a smaller nozzle. I’d like to see more on this subject 🙂

16. dc42 says:

I was surprised to find that this issue has been known about for so long! I have just implemented nonlinear extrusion as an experimental feature in RepRapFirmware 1.20.1 to try to address it. It is controlled by M592, see http://reprap.org/wiki/G-code#M592:_Configure_nonlinear_extrusion. If it proves to be useful, we’ll make improvements, such as allowing different coefficients at different extrusion temperatures.

I wonder whether other extruder drive types such as the V-struder (https://reprapworld.com/newletters/newsletter_12.pdf) would provide more consistent extrusion?