2.2.20. Setting the extrusion multiplier in PrusaSlicer
Calibrating your extrusion multplier can help reduce fine stringing, over or under extrusion, and other common 3D printing problems. These notes describe how to adjust this setting in |PS|.
Note
These notes are based on my experiences with the Prusa i3 Mk3 and Artillery/Evnovo Sidewinder X1 printers. If you are using a different printer, please verify the hardware details are similar.
tl;dr - PrusaSlicer does not produce walls that are exactly the sum of all of your perimeter widths thick.
2.2.20.1. Factors affecting filament flow rate
Todo
Move this section to slicer and printer independent techniques page.
There are several values that can be used to fine tune filament flow during a print:
The DEFAULT_AXIS_STEPS_PER_UNIT Marlin firmware setting in Marlin sets the number of stepper motor steps per mm for each axis’ stepper motor, including the extruder.
The
M92 Exxx
gcode command adjusts the number of stepper motor steps per mm for the extruder (E parameter). This is usually set in your printer’s firmware settings but can be adjusted with this command. This and otherM92
values can be used to compensate for dimensional inaccuracies affecting all prints.The
M221 Sxx
Marlin gcode command adjusts the filament flow percentage used by the printer firmware during printing. Specifically, it adjusts all “E moves” (extruder motor moves) during move planning.The PrusaSlicer extrusion multiplier settings adjust adjusts the calulated filament flow percentage used by the slicer at slice time. This value is applied to(multiplied against) all filament calculations.
These settings are each intended to address specific extrusion issues, but can interact and counteract each other in confusing ways if you’re not aware of how they are set and what effects they have.
The DEFAULT_AXIS_STEPS_PER_UNIT is only set when compiling printer firmware. For most users, there is no need to adjust this value as Prusa has carefully calculated the best settings to use with their hardware.
The
M92
gcode command overrides the firmware e-step setting. This setting is used to make adjustments to all prints. Many “extruder e-step calibration” procedures were written before 3D printers achieved a high degree of consistency and accuracy from the factory. Here again, this setting does not need to be changed on the vast majority of Prusa printers.The
M221
gcode command modifies filament extrusion rate calculations made by the printer during printing. This command is the same as adjusting “flow rate” under the printer Tune command during a print. Once set, this value remains effective until changed or the printer is reset. See PrusaSlicer flow rate adjustment for important notes on how this value is adjusted in PrusaSlicer. Change this value if you find all prints under or over extruding (which is not common).The extrusion multiplier setting in PrusaSlicer is used to make minor adjustments to filament flow rate on a per filament basis. Change this value if you find all prints with a specific filament are under or over extruding or yielding poor print quality.
I use the following rules to keep out of trouble:
Firmware settings set a baseline that will impact all prints with a specific printer. Only change these – permanently when compiling Marlin firmware or temporarily with the
M92
gcode command – to correct printer hardware problems (e.g., a new extruder over extruding). Tune with gcode commands, then adjust in firmware settings to make permanent.Limit
M221
to making small adjustments during a print using the front panel menu. I avoid adjusting this setting in gcode and remove any such commands from my start gcode.Use extrusion multiplier to make small adjustments for each filament to reduce print quality problems.
Reset
M221
and any other hardware settings to 100% in startup gcode to avoid a setting from an aborted print causing problems with later prints.
2.2.20.2. Wall thickness in PrusaSlicer
PrusaSlicer inherited (forked) the code base from the original Slic3r. As such, it still (to the best of my knowledge) uses algorithms that were ported from the original PERL code to C++. Some of the logic in those algorithms was developed in the early days of 3D printing and are not obvious and a bit mysterious. None more so that the math used to calculate flow rates.
When you print with a 0.2mm layer height using 0.45mm layer heights, you’d expect the resulting wall to be 0.90mm (2 0.45mm wide perimeters) thick. This is not the case. The reason is rooted in Slic3r’s original flow math algorithm.
If you print with a single perimeter, the wall width will be a single extrusion thick.
If you use more than one perimeter (as most prints do), the math changes. If you print with 2 perimeters, the generated gcode will produce a wall 0.85mm thick. This is done to fill voids between extrusions for wall strength.
To make things even more mysterious, the exact width also depends on your layer height. If your 2 0.45mm wide extrusions are sliced using 0.15mm high walls, the expected thickness is 0.868mm.
None of this really matters if you’re printing thicker parts. You just see the nice – and hopefully strong – exterior walls. We get into trouble when we assume wall thickness is calculated by simply adding together the width of all the perimeters. The tooltip for the extrusion multiplier setting in PrusaSlicer provides a hint, but I and others stumbled around a bit before realizing the importance of the Slic3r flow math.
If you are after high precision, calculate your extrusion multiplier using the widths calculated using the Slic3r flow math. I’ve created a spreadsheet that (I think) takes all the factors into account.
If you want to keep life simple, the “add perimeters” math will get you close and a 2nd print and measurement is usually plenty accurate enough to get a good extrusion multiplier value.
If you want to stay sane, generate your test prints with another slicer. (I think.)
Set the extrusion multiplier under Filament Settings->Filament->Filament:
2.2.20.3. Flow rate adjustments in PrusaSlicer start gcode
If you are using PrusaSlicer, be aware that Prusa includes some extrusion multiplier adjustments in the printer start gcode. This can cause confusion if you’re not aware of it up front. The PrusaSlicer printer presets provided by Prusa include an M221 Sxx
gcode command. This line will look something like:
M221 S{if layer_height<0.075}100{else}95{endif}
This confusing sequence will do the following:
If you are printing with a layer height of less than 0.075mm, a flow rate of 100% will be inserted.
If you are printing with any other layer height, a flow rate of 95% will be inserted.
This “helper” feature was inserted to correct for Slic3r/PrusaSlicer’s tendency to over-extrude slightly on higher layer heights. Unfortunately, this isn’t really documented clearly, and often causes confusion when users are trying to convert settings from another slicer, create their own profiles, or simply calibrate their filament settings. I personally remove this line completely and count on myself to figure out what settings I need.
You can read my notes on the PrusaSlicer system presets for the Mk3-series for more information on the extrusion multiplier adjustment.
Contact and feedback
You can find me on the Prusa support forums or Reddit where I lurk in many of the 3D printing-related subreddits. I occasionally drop into the Official Prusa 3D discord server where I can be reached as bobstro (bobstro#9830). You can email me directly at projects@ttlexceeded.com.
Last modified June 06, 2021. Last build on Oct 22, 2021.