Calculating flow rate for your 3D slicer
‘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.
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.
|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.
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.
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:
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
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.
The process of this experiment is:
Wholemethod, 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’).
Topmethod, where I only measure the top few layers as /u/ntoff suggested.
.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.
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|
(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.
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.
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.
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|
Top surface and wall surface finish was also best in the samples that were printed with the 2-wall flow rates.
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.