Pressure advance changes the distribution of material, not the amount of material.
-
Lower values result in less material in the middle of lines, and more at the ends/corners.
-
Higher values result in more material in the middle of lines, and less at the ends/corners.
-
Here is an example:
-
Remember: There is rarely such thing as perfect pressure advance. Either accelerations or decelerations will almost always be slightly imperfect. You should always err on the side of lower PA values.
-
Pressure advance can change with different filaments. Typically I only find it necessary to tune per material type - ABS, PETG, PLA, TPU, etc. I will only tune specific brands or colors if they are noticeably different.
-
Pressure advance needs re-tuning when changing nozzle sizes.
There are two approaches - the 📌lines method (recommended), and the 📌tower method (easier for newbies, but a bit less accurate).
This method is quicker to run and more precise than the 📌tower method, but requires some additional setup, including some start g-code.
-
You can damage your printer if you don't set up the start g-code correctly, for example forgetting
QUAD_GANTRY_LEVEL
orPRINT_START
(if used).- (You probably won't, but there's my disclaimer 😁)
1) Visit the 📄pressure advance calibration site.
- Thanks to Deuce#8801 for setting this up! (It's a modified version of 📄Marlin's linear advance site.)
2) Fill out the parameters specific to your setup (printer name, bed size, retraction, etc.)
3) Modify the Start G-code section.
QUAD_GANTRY_LEVEL
or PRINT_START
(if used).
-
This is where you will set your temperatures (
M109
/M190
). -
Copy over your slicer's start g-code (from your printer profile) and paste it beneath the
M109
/M190
.-
You can usually replace the default contents beneath the
M109
/M190
. There are some default preperatory g-codes (G28
,G32
, etc) just in case.-
PRINT_START
macros usually contains all of this, but please double check.-
If you are 📄passing variables to
PRINT_START
, remember to append them toPRINT_START
. Example:PRINT_START HOTEND=240 BED=110
-
Your variable naming may be different, e.g.
EXTRUDER=X
instead ofHOTEND=X
. -
You can then comment out the separate heating g-codes.
-
-
For Vorons with the stock
PRINT_START
macro, this is all you need:
(change the temperatures appropriately, though):
-
-
-
If your start g-code has any slicer variables (for example
[first_layer_bed_temperature]
), make sure to replace them with appropriate values. -
Remove the
M112
. This is an emergency stop, and is there as a reading comprehension check to ensure that you have verified the start g-code.
-
4) Fill out the tuning parameters. Many can be left at defaults, but here are some specific settings that I recommend:
- Printer
- Layer Height: 0.25mm
- Speed
- Slow Printing Speed: Your
square_corner_velocity
From your printer.cfg. Default is 5. - Fast Printing Speed: 120mm/s*
- * You can set this to your fastest perimeter speed to try and better simulate real life prints. However if you typically print perimeters slowly, the results may be harder to read. Faster speeds exaggerate the effect.
- Acceleration: Your perimeter acceleration
- Slow Printing Speed: Your
- Pattern
- Starting Value for PA: 0
- Ending Value for PA:
- Direct Drive: 0.1
- Bowden: 1.5*
- PA Stepping:
- Direct Drive: 0.005
- Bowden: 0.05*
- Test Line Spacing:
- Voron 0 (120mm bed): 4
- Default: 5
- Print Anchor Frame: Checked
- Advanced
- Nozzle Line Ratio: 1.2
- Prime Nozzle: Unchecked
- Dwell Time: 0
* The bowden values I suggest here cover a wide range of PA values (0-1.5), because each bowden setup can vary widely. Once you narrow down a general range to work in, you may want to run the test again with a narrower range of PA values.
5) Generate and download the g-code file.
6) Print it, and inspect the results.
- Often times, the best acceleration and decelerations values will not be on the same line. In this case, you should pick a midpoint between both.
ALWAYS choose the lower value if you are not entirely sure.
7) In the [extruder]
section of your config, update pressure_advance
to the new value and issue a RESTART
.
- Alternatively:
-
In PS/SS, you can manage this per-filament by putting
SET_PRESSURE_ADVANCE ADVANCE=<value>
in your slicer's custom filament g-code.*- Replace
<value>
with your desired PA.
- Replace
-
In Cura, you can set it during slicing using this plugin.
-
8) Try printing something!
- See 📌Fine-Tuning and What to Look For to get an idea of what too high/low look like with actual prints.
- Tweaking in increments of 0.005 (with direct drive) is a good starting point.
I would highly recommend using the 📌lines method rather than this method, if you can take some time to wrap your head around a small amount of g-code. It is quicker and more precise. This "tower method" is here for beginners, and works, but is not my preferred method as it's a bit less precise.
This is based off of the 📄Klipper Pressure Advance guide, but with some modifications.
The Klipper guide recommends limiting acceleration to 500 and square corner velocity (SCV) to 1, among other things. The intent behind these changes is to exaggerate the effects of pressure advance as much as possible. I'm not a fan of this approach.
In my opinion, it is best to run the calibration in close to normal printing conditions. This can make it slightly harder to tell the difference, but I find it more accurate.
1) Download and slice the 📄Klipper3d pressure advance tower STL with your normal print settings (accelerations included).
The only modifications you should make are these:
- 120mm/s external perimeter speed
- 1 perimeter
- 0% infill
- 0 top layers
- 0 second "minimum layer time" / "layer time goal" / "slow down if layer print time is below"
- Under filament cooling settings in PS/SS.
- You can use ctrl+f to find settings by name.
- High fan speed
2) Initiate the print.
3) After the print has already started*, enter the following command:
- (Direct Drive)
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.0025
- (Bowden)
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.025
You should now see increasing pressure advance values reporting to the g-code terminal as the print progresses.
* Certain patterns in your start g-code can cancel the tuning tower.
* It does not matter how quickly you enter the command, as it is based on height.
* Alternatively, you can temporarily add the tuning tower command after your start g-code.
4) Allow the print to run until it starts showing obvious issues/gaps. Then you may cancel.
5) Measure the height of the perfect PA with calipers (see 📌images below)
- Ensure you are not measuring your Z seam corner.
- There should be no signs of underextrusion before or after the corner.
- It can help to shine a bright flashlight between the walls.
- It is normal for there to be a small amount of bulge on the trailing edge. When in doubt, choose the lower value.
- If the height differs between corners, take a rough average.
6) Calculate your new pressure advance value:
- Multiply measured height by your
FACTOR
. - Add the
START
value (usually just 0).
8) In the [extruder]
section of your config, update pressure_advance
to the new value and issue a RESTART
.
- Alternatively, you can manage this per-filament by putting
SET_PRESSURE_ADVANCE ADVANCE=<value>
in your slicer's custom filament g-code.*- Replace
<value>
with your desired PA. - * Unless you use Cura, which for some reason still doesn't support this basic functionality.
- Replace
9) Try printing something!
- See 📌Fine-Tuning and What to Look For to get an idea of what too high/low look like with actual prints.
- Tweaking in increments of 0.005 (with direct drive) is a good starting point.
You may need to zoom in here, the differences are subtle. There is always some ambiguity.
Excuse the gigantic photos - high resolution is needed here.
The above methods are usually good enough on their own. Choosing the right height/line, however, can take some experience. Here are some things to look out for.