Calculating flow rate for your 3D slicer

Created on Tuesday, May 30, 2017. I last modified it on Tuesday, July 28, 2020.
 

‘Flow rate’ is a slicer setting that tells the 3D printer how much plastic to extrude. Correct flow rate is the first step towards pretty and dimensionally accurate 3D prints, so it’s important to know how to set it properly.

 

What is ‘flow rate’?

The simplest way to understand flow rate (AKA extrusion multiplier) is that it multiplies how much plastic the 3D printer is told to extrude. A flow rate of 1.5 makes the printer extrude 50 % more plastic, a flow rate of 0.5 makes it extrude 50 % less. In scenarios where you are under- or over-extruding, adjusting flow rate is probably a better use of your time than adjusting something like extruder steps per mm, which is often set correctly to begin with.

Here I demonstrate the easiest way to measure flow rate, and provide a calculator to make this process even easier. After the instructions, I explain the testing process that I used to arrive at this method. You should repeat this process for every new spool of plastic you use, writing the flow rate on each spool so that you can quickly swap between them.

Instructions

Step 1. Reset your slicer’s extrusion settings.

Setting Value
Nozzle diameter Nominal (e.g. 0.40 mm)
Flow rate/extrusion multiplier 1.00
Extrusion width Auto or Default
Filament diameter Nominal (e.g. 1.75 mm)

In Cura, the flow rate setting may be hidden. You can display it by going to Preferences → Configure Cura → Settings → Material and checking the box next to Flow.

The default extrusion width is calculated by taking the nozzle width and multiplying it by a number I’ll call the aspect ratio, which expresses how extruded plastic is flattened onto the new layer. Simplify3D calculates it as nozzle width × 1.20, which means that a nozzle will flatten the plastic so that the new bead is 20 % wider than the nozzle’s diameter (0.40 × 1.20 = 0.48). Your slicer might use a different number for the aspect ratio, for example Cura’s default profiles assume an extrusion thickness equal to your nozzle diameter. The calculator on this page has a box for entering your slicer’s value. Some interesting background on the aspect ratio can be read in Nophead’s article about flow rate.

You should also set your layer height, printing speeds, and temperatures to whatever you want to use during regular printing.

Step 2. Print a hollow double-walled box.

You will print a 2-walled test object so that you can measure the thickness of the walls that your printer is making. I use no infill, 2 perimeters, no top layers, and 1 bottom layer for adhesion only. I also shrink this box to 5 mm height in the slicer to save time, but I leave the width and length unchanged.

Do not tell the slicer to set start points randomly, or else the bulges at the start of a loop can interfere with your measurements in the next step.

Step 3. Measure the wall thicknesses.

Using calipers, measure the wall thickness at each side of the test object. Take several measurements along each wall and enter them in the calculator below. There are some things to be mindful of:

  1. Measure only the top 2–5 layers of the wall.
  2. Measure only the middle third of each wall. The areas close to the corners should be avoided.
  3. Use consistent pressure on the caliper jaws between measurements.

Step 4. Calculate your new flow rate.

Your new flow rate is [-[ getFlowRate(nozzle, currentflow, aspectratio, walls) | number:2 ]-]

Equations

The calculator above uses the equation:

New flow rate = (Expected wall thickness ÷ Observed wall thickness) × Current flow rate
    where
Expected wall thickness = (nozzle diameter (mm) × aspect ratio) * 2 walls
Observed wall thickness = average of wall thicknesses on the test object

What’s involved in calculating flow rate?

1 wall vs 2 walls

In the first version of this article, I described a method of calculating flow rate by using a single-walled test object and measuring most of the wall to capture all of the layer variation. I had been doing this for a long time and got dimensionally-accurate parts out of it, so I wanted to get it written down for others. When I posted it on reddit, /u/ntoff replied:

Two shells is far better, I had under extrusion for the longest time and weak parts because I went after that perfect extrusion width, later I learned 2 shells and proper layer adhesion is far more important than getting my stupid 10mm cube to be 10mm.

[…]

You want to measure only the top layer or two, measuring any more can (and will) introduce a shit tonne of error into your measurement if you have any Z wobble or layer inconsistency leading to artificially increased numbers, so you then lower your extrusion width multiplier (or e-steps if you’re going that way) and end up under extruding.

And also shared this instructional video for flow rate calculation based on two perimeters:

So of course I said I would compare the two methods and see what happened.

Testing method

The process of this experiment is:

  1. Print two hollow test boxes, one single-walled and one double-walled (1-wall and 2-wall respectively).
  2. Measure the wall thicknesses using 2 methods:
    • The Whole method, which involves measuring the top 10 mm of the 15 mm box (the bottom 5 mm is ignored because the printer is not yet ‘warmed up’).
    • The Top method, where I only measure the top few layers as /u/ntoff suggested.
  3. Calculate a new flow rate for each walls × measurement treatment.
  4. Print a double-walled hollow box using each new flow rate to test whether the wall thickness and wall adhesion is acceptable.
  5. Print a new test object with each flow rate to test interior/exterior dimensions, as well as print quality.

Test objects

Dimensional test


.STL format, 97 KB.

10 mm tall. 30 × 30 mm exterior, 15 × 15 mm interior, and wall thicknesses of 3, 5, 10, and 12 mm.

1. Measuring wall thicknesses and calculating flow rates

The table below shows wall thicknesses (in mm) and the calculated flow rates for each treatment. For the 1-walled test box, the thickness should be 0.40 mm nozzle × 1.20 = 0.48 mm. For the 2-walled test box, the thickness should be 0.48 mm × 2 = 0.96 mm.

  Avg thickness (mm) Std dev Flow rate
1-wall (Whole) 0.60 0.01 0.81
1-wall (Top) 0.53 0.01 0.91
2-wall (Whole) 1.03 0.01 0.93
2-wall (Top) 0.97 0.01 0.99

Notice that (Whole) (measuring the entire wall) biases the flow rate towards underextrusion, and (Top) (measuring only the top few layers) does the opposite. Wall adhesion in the 2-wall test box is very good. When I try to tap a knife blade into the seam between the walls, it slips and cuts its way out of the side. The two walls may as well be a single piece.

2. Wall thickness and adhesion with the new flow rates

I printed four new 2-walled hollow boxes using the new flow rates calculated above, again measuring them by the two different methods. If the flow rate was calculated correctly from the previous measurement method, then the wall thickness should be 0.48 mm × 2 = 0.96 mm and the walls should adhere strongly.

The change in average wall thickness of a 2-wall hollow box, based on flow rate. Error bars show standard deviation (mode 0.01 mm). The horizontal line marks the target thickness of 0.96 mm.

In the chart above, the test box printed at flow rate 0.81 (1-wall (Whole)) does not meet the target thickness, which invalidates the method that I had previously published. Wall thicknesses measured with the (Top) method were significantly undersized except for the flow rate that was calculated with the 2-wall (Top) method, which is not significantly different from the 2-wall (Whole) method. In other words, the flow rate calculated from the 2-wall (Top) method produced the most consistent wall thickness.

The treatments that meet the target wall thickness are all measured using the (Whole) method, but not the (Top) method. This tells me that I have some wobbling in the layers which is raising the average thickness when the entire wall is measured. The wobbling only introduces about 30 microns (0.03 mm).

Wall adhesion was non-existent at the lowest flow rate; the seams were large and a knife could be easily slid between the walls and all the way down the print. There was no obvious difference between flow rates 0.91 and 0.93; it was difficult to force a knife into the seams between the walls, but the knife could still be pushed down to the bottom of the print with difficulty. At flow rate 0.99, the walls adhered just as well as at flow rate 1.00.

3. Dimensional test of flow rate

I printed the dimensional test object, again using the four flow rates I calculated above. In the table below, I measured 7 distances on the dimensional test object (10 % infill, 2 walls, outside-in wall order) and then found how much they differed from the nominal dimensions on average. The flow rate calculated from 2-wall (Top) was the most accurate and precise.

  Default (1.00) 2-wall (Top) (0.99) 2-wall (Whole) (0.93) 1-wall (Top) (0.91) 1-wall (Whole) (0.81)
Avg distortion (mm) 0.11 0.08 0.12 0.12 0.15
Minimum distortion (mm) 0.01 0.01 0.03 0.02 0.07
Maximum distortion (mm) 0.25 0.16 0.30 0.26 0.25
Std dev 0.08 0.06 0.09 0.08 0.06

Top surface and wall surface finish was also best in the samples that were printed with the 2-wall flow rates.

4. Conclusions

  1. The flow rate that was calculated from measuring the top few layers of a 2-wall box produced the most dimensionally accurate parts, with the best wall adhesion and the best surface finishes.
  2. You should calibrate your flow rate using a 2-walled box, and not a 1-walled box.
  3. Measuring more of the wall does introduce a lot of variation that biases you towards underextrusion. You should only measure the wall thickness at the top few layers of the print.
  4. The difference in distortion between 100 % and 99 % flow rate is surprisingly large. My maximum distortion was reduced by 90 microns just by dropping that 1 %; that’s almost half my layer height.

Addendum

Some people opine that calculating from two perimeters is wrong because there is overlap between those perimeters which affects how the slicer is placing walls, i.e. when a slicer is placing walls with an overlap of 10%, one of those walls is shifted sideways by 10%. This is not the case for my slicer, but you don’t have to make assumptions about yours since you can look at your slicer’s Gcode for yourself. Here are the G1s (move and extrude commands) for a one-layer 10 x 4 mm rectangle, sliced by Cura 4.6.1 with nozzle width 0.4 mm, filament diameter 1.75 mm, flow rate 1.00, and 2 walls with a nominal total thickness of 0.8 mm (i.e. 2 nozzle widths).

G0 F3600 X5.2 Y10.8 Z0.18 ;adjusted by z offset
G92 Z0.2 ;consider this the original z before offset

;TYPE:WALL-INNER
G1 F3000 E0
G1 F623.8 X5.2 Y8 E0.09313
G1 X14 Y8 E0.38582
G1 X14 Y10.8 E0.47895
G1 X5.2 Y10.8 E0.77164

;TYPE:WALL-OUTER
G1 F623.8 X4.8 Y7.6 E0.89137
G1 X14.4 Y7.6 E1.21067
G1 X14.4 Y11.2 E1.33041
G1 X4.8 Y11.2 E1.6497

It prints the walls counter-clockwise starting from the top-left corner. The first inner wall (top-left to bottom-left) is at X5.2, and the corresponding outer wall is at X4.8, which means that the slicer is drawing the centreline of the walls exactly 5.2 - 4.8 = 0.4 mm apart. This is consistent with the desired total wall thickness of 0.8 mm, which you get by placing 2 0.4 mm walls next to each other. Someone else did the same for Simplify3D and based on an extrusion width of 0.72 mm (Cura simply uses the nozzle width without calculating extrusion width), found that these 0.72 mm lines were being placed right beside each other with their centrelines 0.72 mm apart. Different slicer, same result.

In other words, the slicer is following a path that is calculated by doing the simplest possible thing: putting lines next to each other. Final wall thickness is therefore decided by the amount of plastic that is extruded along that path, and you can influence both of those by changing your flow rate.

That's all there is, there isn't any more.
© Desi Quintans, 2002 – 2022.