Pressure advance aims to compensate for the elasticity of the filament and the extruder system. There are at least three sources of elasticity:
- The filament in the Bowden tube behaves as if it is compressible, because its diameter is typically 0.25mm smaller than the inside diameter of the tube. When it is under tension, it will take the most direct path that the tube allows. When it is under compression, it will snake from side to side, so the length of filament in the tube will be greater.
- The filament itself is slightly compressible.
- In order to produce torque, the angle of the rotor of a stepper motor must lag the angle commanded by the current in the coils. The more the filament resists being fed, the greater the lag angle. So the motor itself is slightly "springy".
These factors cause under-extrusion whenever the extrusion rate is increasing, for example at the start of a straight line when the nozzle has to accelerate from zero or near-zero speed. This is because some of the filament fed at the start of the move is used to counter the elasticity and build up the pressure. Similarly, you get over-extrusion when the rate of extrusion decreases, for example when the nozzle slows down at the end of a straight line. This is because the pressure in the Bowden tube continues to push filament through the nozzle even after the extruder drive slows down or stops.
Pressure advance compensates for elasticity by feeding additional filament through the extruder drive when the extrusion speed is increasing, and feeding less filament through the extruder when the extrusion speed is decreasing, This may result in filament actually being retracted during the last part of the deceleration phase of a move.
Mathematically, it works like this:
actual_extrusion_speed = requested_extrusion_speed + (K * current_extruder_acceleration)
The constant K is the amount of pressure advance you configure.
Pressure advance is configured on a per-extruder-drive basis. Different extruder drives can have different amounts of pressure advance. To enable pressure advance on an extruder drive, use the following form of command:
M572 D0 S0.1
The D parameter is the extruder drive number, and the S parameter is the amount of pressure advance you want for that extruder drive. A value of 0.1 is a good starting point for typical printers with a Bowden tube of modest length (e.g. 400mm). Non-Bowden extruders will normally require less (try 0.05), and extruders with long Bowden tubes are likely to need more (try 0.2). You may also need more pressure advance if you are printing with flexible filament.
If you use a large amount of pressure advance then the extruder may retract filament at the end of a move. If that move is followed by a travel move with retraction of the filament, then the total amount of retraction may be too great for your hot end. Therefore you should consider reducing retraction when you enable pressure advance.
When the extruder acceleration changes, the extruder velocity has to change instantaneously. If the configured extruder jerk is too low to permit this, the extruder acceleration will be restricted so as to honour the maximum configured extruder jerk, and this may in turn limit the printing acceleration. So if enabling pressure advance slows down printing, this may be a sign that the allowed extruder jerk configured in the M566 command is too low.