Understanding Slic3r's retract and pressure advance



  • Hi Forum 🙂
    I recently finished setting up a new printer and the main thing I am struggling with is a really bad "ooze" seam in my prints. (The dimensions of the prints are correct. And I did calibrate the extruder for its steps per mm and the extrusion width (interesting: that one did not need any correction factor).)

    I am not even sure it is actually "ooze", because I already increased the retraction to 7 mm for my bowden tube setup but the size of the seam did not seem to change. The retraction works (it's not grinding the filament) but I am confused by this behavior: Before longer "non-print-moves" and before layer changes, the filament is retracted; then the nozzle moves to the new place and waits there until a little blob is extruded on the spot, before it actually starts to print-move again.

    After reading up on this, I thought that a negative "extra length on restart" might prevent this but it did not -- rather I then had ripples in the walls of the print for some distance from the layer start point (and still a bad seam).

    I now tried with the pressure advance feature of Slic3r (i.e. not with M572), using a value of 1 (in the tooltip it says 0-10) which made the behavior I described above much worse. It extrudes a really big blob after a longer non-printing-move and before moving+printing again.

    The gcode that Slic3r generated also does not make much sense to me -- it looks like an additional retract command (I am copying the whole beginning of the print file here, check from line 92 for the weird order of commands):

    M190 S70 ; set bed temperature and wait for it to be reached
    M104 S215 ; set temperature
    ; G28 ; home all axes
    ; G1 Z5 F300 ; lift nozzle
    
    ; Filament gcode
    
    M109 S215 ; set temperature and wait for it to be reached
    G21 ; set units to millimeters
    G90 ; use absolute coordinates
    M83 ; use relative distances for extrusion
    M106 S255
    G1 E-7.00000 F2400.00000
    G1 Z0.300 F10800.000
    G1 X71.425 Y110.193 F10800.000
    G1 E7.00000 F2400.00000
    G1 F1800
    G1 E4.01766 F2400.000 ; pressure advance
    G1 F1800.000 ; restore F
    G1 X73.655 Y109.158 E0.16426
    G1 X75.700 Y108.878 E0.13789
    G1 X194.300 Y108.878 E7.92312
    G1 X196.726 Y109.275 E0.16426
    G1 X198.899 Y110.426 E0.16426
    G1 X200.592 Y112.209 E0.16426
    G1 X201.627 Y114.440 E0.16426
    G1 X201.907 Y116.485 E0.13789
    G1 X201.907 Y153.515 E2.47384
    G1 X201.509 Y155.942 E0.16426
    G1 X200.359 Y158.115 E0.16426
    G1 X198.575 Y159.807 E0.16426
    G1 X196.345 Y160.842 E0.16426
    G1 X194.300 Y161.122 E0.13789
    G1 X75.700 Y161.122 E7.92312
    G1 X73.274 Y160.725 E0.16426
    G1 X71.101 Y159.574 E0.16426
    G1 X69.408 Y157.791 E0.16426
    G1 X68.373 Y155.560 E0.16426
    G1 X68.093 Y153.515 E0.13789
    G1 X68.093 Y116.485 E2.47384
    G1 X68.491 Y114.058 E0.16426
    G1 X69.641 Y111.885 E0.16426
    G1 X71.381 Y110.234 E0.16025
    G1 X71.941 Y110.496 F10800.000
    G1 F1800
    G1 X74.131 Y109.590 E0.15833
    G1 X75.700 Y109.414 E0.10550
    G1 X194.300 Y109.414 E7.92312
    G1 X196.637 Y109.811 E0.15833
    G1 X198.711 Y110.958 E0.15833
    G1 X200.289 Y112.725 E0.15833
    G1 X201.195 Y114.915 E0.15833
    G1 X201.371 Y116.485 E0.10550
    G1 X201.371 Y153.515 E2.47384
    G1 X200.974 Y155.852 E0.15833
    G1 X199.827 Y157.926 E0.15833
    G1 X198.059 Y159.504 E0.15833
    G1 X195.869 Y160.410 E0.15833
    G1 X194.300 Y160.586 E0.10550
    G1 X75.700 Y160.586 E7.92312
    G1 X73.363 Y160.189 E0.15833
    G1 X71.289 Y159.042 E0.15833
    G1 X69.711 Y157.275 E0.15833
    G1 X68.805 Y155.085 E0.15833
    G1 X68.629 Y153.515 E0.10550
    G1 X68.629 Y116.485 E2.47384
    G1 X69.026 Y114.148 E0.15833
    G1 X70.173 Y112.074 E0.15833
    G1 X71.896 Y110.536 E0.15432
    G1 X72.453 Y110.813 F10800.000
    G1 F1800
    G1 X75.700 Y109.949 E0.22443
    G1 X194.300 Y109.949 E7.92312
    G1 X196.543 Y110.346 E0.15217
    G1 X198.513 Y111.489 E0.15217
    G1 X199.972 Y113.238 E0.15217
    G1 X200.836 Y116.485 E0.22443
    G1 X200.836 Y153.515 E2.47384
    G1 X200.439 Y155.758 E0.15217
    G1 X199.296 Y157.729 E0.15217
    G1 X197.547 Y159.187 E0.15217
    G1 X194.300 Y160.051 E0.22443
    G1 X75.700 Y160.051 E7.92312
    G1 X73.457 Y159.654 E0.15217
    G1 X71.487 Y158.511 E0.15217
    G1 X70.028 Y156.762 E0.15217
    G1 X69.164 Y153.515 E0.22443
    G1 X69.164 Y116.485 E2.47384
    G1 X69.561 Y114.242 E0.15217
    G1 X70.704 Y112.271 E0.15217
    G1 X72.407 Y110.851 E0.14816
    G1 E-4.01766 F2400.000 ; pressure discharge
    G1 F2400.000 ; restore F
    G1 E-7.00000 F2400.00000
    G1 X193.000 Y138.100 F10800.000
    G1 E7.00000 F2400.00000
    G1 F1800
    G1 E4.01667 F2400.000 ; pressure advance
    G1 F1800.000 ; restore F
    G1 X77.000 Y138.100 E7.74943
    G1 X77.000 Y120.500 E1.17578
    G1 X193.000 Y120.500 E7.74943
    G1 X193.000 Y138.040 E1.17177
    G1 X193.182 Y138.456 F10800.000
    G1 E-4.01667 F2400.000 ; pressure discharge
    G1 F2400.000 ; restore F
    G1 E-7.00000 F2400.00000
    G1 X193.464 Y119.964 F10800.000
    G1 E7.00000 F2400.00000
    G1 F1800
    G1 E4.01671 F2400.000 ; pressure advance
    G1 F1800.000 ; restore F
    G1 X76.536 Y119.964 E7.81147
    G1 X76.536 Y117.636 E0.15557
    G1 X193.464 Y117.636 E7.81147
    G1 X193.464 Y119.904 E0.15157
    G1 E-4.01671 F2400.000 ; pressure discharge
    G1 F2400.000 ; restore F
    G1 E-7.00000 F2400.00000
    G1 X193.464 Y138.636 F10800.000
    G1 E7.00000 F2400.00000
    G1 F1800
    G1 E4.01671 F2400.000 ; pressure advance
    G1 F1800.000 ; restore F
    G1 X193.464 Y152.680 E0.93822
    G1 X76.536 Y152.680 E7.81147
    G1 X76.536 Y138.636 E0.93822
    G1 X193.404 Y138.636 E7.80747
    G1 E-4.01671 F2400.000 ; pressure discharge
    G1 F2400.000 ; restore F
    G1 E-7.00000 F2400.00000
    G1 X193.000 Y117.100 F10800.000
    G1 E7.00000 F2400.00000
    G1 F1800
    G1 E4.02289 F2400.000 ; pressure advance
    G1 F1800.000 ; restore F
    G1 X193.000 Y116.785 E0.02106
    G1 X194.000 Y116.785 E0.06681
    G1 X194.000 Y153.215 E2.43375
    G1 X76.000 Y153.215 E7.88304
    G1 X76.000 Y116.785 E2.43375
    G1 X77.000 Y116.785 E0.06681
    G1 X77.000 Y117.100 E0.02106
    G1 X192.940 Y117.100 E7.74542
    G1 X193.315 Y117.100 F10800.000
    G1 E-4.02289 F2400.000 ; pressure discharge
    G1 F2400.000 ; restore F
    G1 E-7.00000 F2400.00000
    G1 X192.929 Y119.723 F10800.000
    G1 E7.00000 F2400.00000
    G1 F1800
    G1 E4.03148 F2400.000 ; pressure advance
    G1 F1800.000 ; restore F
    G1 X192.929 Y117.877 E0.12355
    G1 X192.392 Y117.877 E0.03588
    G1 X192.392 Y119.723 E0.12355
    G1 X191.856 Y119.723 E0.03588
    G1 X191.856 Y117.877 E0.12355
    G1 X191.320 Y117.877 E0.03588
    G1 X191.320 Y119.723 E0.12355
    G1 X190.783 Y119.723 E0.03588
    G1 X190.783 Y117.877 E0.12355
    G1 X190.247 Y117.877 E0.03588
    G1 X190.247 Y119.723 E0.12355
    G1 X189.710 Y119.723 E0.03588
    G1 X189.710 Y117.877 E0.12355
    G1 X189.174 Y117.877 E0.03588
    G1 X189.174 Y119.723 E0.12355
    G1 X188.638 Y119.723 E0.03588
    G1 X188.638 Y117.877 E0.12355
    G1 X188.101 Y117.877 E0.03588
    G1 X188.101 Y119.723 E0.12355
    G1 X187.565 Y119.723 E0.03588
    G1 X187.565 Y117.877 E0.12355
    G1 X187.029 Y117.877 E0.03588
    G1 X187.029 Y119.723 E0.12355
    G1 X186.492 Y119.723 E0.03588
    G1 X186.492 Y117.877 E0.12355
    G1 X185.956 Y117.877 E0.03588
    G1 X185.956 Y119.723 E0.12355
    G1 X185.419 Y119.723 E0.03588
    G1 X185.419 Y117.877 E0.12355
    G1 X184.883 Y117.877 E0.03588
    G1 X184.883 Y119.723 E0.12355
    G1 X184.347 Y119.723 E0.03588
    G1 X184.347 Y117.877 E0.12355
    G1 X183.810 Y117.877 E0.03588
    G1 X183.810 Y119.723 E0.12355
    G1 X183.274 Y119.723 E0.03588
    G1 X183.274 Y117.877 E0.12355
    G1 X182.738 Y117.877 E0.03588
    G1 X182.738 Y119.723 E0.12355
    G1 X182.201 Y119.723 E0.03588
    

    I thought the idea of pressure advance was to 'stop pushing' filament before the end of the print move was reached? Here it looks like: print-move -- pressure discharge -- retract -- non-print-move -- undo retract -- pressure advance -- print move. And, as I said, it leads to a really big blob in the spots where it parks while doing all this.

    Is there something I am misunderstanding? (I would ask "How to fix the layer seam"? But I thought the measures I took above would be the usual answers ;))

    Thanks for any hints 🙂👍



  • @printHorst I agree with your analysis of what Slic3R is doing. It certainly looks like just another retraction after the move has completed, and an extra unretrcat before the next move starts. Which, as you rightly say, isn't the same thing as advancing the extruder at (rather than before) the start of a move and retarding the extruder at (rather than after) the end of a move. Or more specifically advancing the extruder during the acceleration phase and retarding it during the deceleration phase.

    Have you tried using firmware pressure advance? https://duet3d.dozuki.com/Wiki/Gcode#Section_M572_Set_or_report_extruder_pressure_advance

    The print head "waiting" in one spot usually means just that. It's waiting while something else happens. Typical examples might be waiting for the Z axis on layer change if the Z axis acceleration or speed is set really low. Or waiting for a retract/unretrcat move to complete if the extruder speed or acceleration is set very low (either as a limit in config.g or as specified by the retraction speed settings). Or waiting for the Z axis if "Z hop" is enabled.

    Have you considered using firmware retraction? If you set Slic3R to use that, then it will put G10 and G11 commands in the gcode file instead of extruder moves. These G10 and 11 commands are then used by the firmware to retract and unretrcat filament based on parameters that you set using M207 https://duet3d.dozuki.com/Wiki/Gcode#Section_M207_Set_retract_length. The advantage of using firmware retraction is that you can change the distances and speeds (both retract and unretrcat) "on the fly" while the print is in progress so you can immediately see what effect it has.



  • Hi,
    thanks @deckingman for your reply, and sorry for the delay, I only had time to get back to this today.

    I wanted to try the firmware retraction and pressure advance and started with the pressure advance calibration script posted here in the forum. (The script prints a single wall along x with 5 sections of 100 mm/s connected by 4 sections of 5 mm/s moves and changes the pressure advance along z.)

    With the bowden tube, the initial 0 to 0.2 range was not enough, so I did a second run with 0.2 to 0.4 and with that one I got an intact wall for >0.3 s.

    However, I still have quite some oozing problem -- the 5mm/s parts are way thicker than the 100 mm/s (almost 3x) and i get the 'oozing/layer seam' at the one end of the wall when it does the layer change. (I did not use any retraction setting for this/it is not part of the script -- anyway that would not help with the wall thickness.)

    I though this might be temperature related then ("the filament is just too fluid and just run out of the nozzle"?), but I see very similar results both with 220 and 200° for PLA and I don't dare to go much lower (I had some clogging issues at 190°, maybe that was just coincidence).

    This would also fit to my observation above, namely that the retract (+negative extra length for unretract) setting did not affect the ooze seam. There just seems to be molten filament in the nozzle which runs out, no matter what -- could that be?

    One more observation: When I just let it extrude a few mm of filament (with the nozzle away from the bed), there will be a delay before filament is extruded and then there's filament running for up to over a minute (e.g. with 10 mm at 1 mm/s, it was coming out for at least 90 s).

    If anybody has a suggestion how to tackle this systematically, I would really appreciate this -- I feel like there are too many parameters at the moment.

    Also, if anybody has some patience to "sanity-check" my config.g? 😬

    M669 K1                                            ; Select CoreXY mode for Firmware >2.03
    M555 P2                                            ; Set firmware compatibility to look like Marlin
    
    ; Motors Part 1 -- Define motors
    M584 X0 Y1 Z2:4 E3                                 ; must come before M350, M906, M92, M201, M203, and M566
    
    ; Axis Limits
    M208 X0:270 Y0:220 Z0:250                          ; "min":"max" 
    
    ; Endstops
    M574 X1 Y2 Z1 S1                                   ; Define Endstop positions (0: none, 1: low end, 2: high end), S1 = Set active low
    M558 P0                                            ; z-Probe (P0 = no z probe present)
    
    ; Network
    M550 P"V-Core 2.0"                                 ; Set machine name
    M552 S2                                            ; Set Wifi mode to 'access point'
    M586 P0 S1                                         ; Enable HTTP
    M586 P1 S0                                         ; Disable FTP
    M586 P2 S0                                         ; Disable Telnet
    
    ; Motors Part 2
    G90                                                ; Send absolute coordinates...
    M83                                                ; ...but relative extruder moves
    
    M569 P0 S1                                         ; Drive 0 (X) goes forwards
    M569 P1 S1                                         ; Drive 1 (Y) goes forwards
    M569 P2 S1                                         ; Drive 2 (two Z motors in series) goes forwards
    M569 P3 S1                                         ; Drive 3 (extr.) goes forwards
    M569 P4 S1                                         ; Drive 4 (third Z motor) goes forwards
    
    M350 X16 Y16 Z16 E16 I1                            ; Configure microstepping with interpolation
    M92 X80.00 Y80.00 Z400.00 E790                     ; Set steps per mm (must come below M350 to include interpolation)
    
    M201 X1000.00 Y1000.00 Z30.00 E200.00              ; Set accelerations (mm/s^2)
    M203 X9000.00 Y9000.00 Z200.00 E900.00             ; Set maximum speeds (mm/min)
    M566 X900.00 Y900.00 Z12.00 E120.00                ; Set maximum instantaneous speed changes (mm/min)
    M906 X2000.00 Y2000.00 Z2000.00 E1000.00 I30       ; Set motor currents (mA) and motor idle factor in per cent
    M84 S30                                            ; Set idle timeout
    
    ; Heaters
    M307 H0 A125.5 C186.2 D2.7 V24.2 B0                ; Heater0 (Bed) ADC parameters (used by feedback loop)
    M305 P0 T100000 B4138 R4700                        ; Heater0 thermistor parameters
    M143 H0 S120                                       ; Heater0 temperature limit (S120 = 120°C)
    M307 H1 A473.5 C253.3 D4.4 V24.1 B0                ; Heater1 (Hotend) ADC parameters (used by feedback loop)
    M305 P1 T100000 B4725 C7.06e-8 R4700               ; Heater1 thermistor parameters (for V6 hotend + Duet2Wifi: T100000 B4725 C7.06e-8 R4700)
    M143 H1 S280                                       ; Set Heater1 temperature limit (S280 = 280°C)
    
    ; Fans
    M106 P0 S0 I0 F500 H-1                             ; Set fan 0 value, PWM signal inversion and frequency. Thermostatic control is turned off
    M106 P1 S1 I0 F500 H T45                           ; Set fan 1 value, PWM signal inversion and frequency. Thermostatic control is turned on
    
    ; Tools
    M563 P0 D0 H1                                      ; Define tool 0 (P0) w/ Extr.Drive 0 (D0) + Heater 1 (H1 -- should be "E0 Heater")
    G10 P0 X0 Y0 Z0                                    ; Set tool 0 axis offsets
    G10 P0 R0 S0                                       ; Set initial tool 0 active and standby temperatures to 0C
    T0                                                 ; Select tool 0 (anyway the only available for now)
    
    ; Automatic power saving
    M911 S10 R11 P"M913 X0 Y0 G91 M83 G1 Z3 E-5 F1000" ; Set voltage thresholds and actions to run on power loss
    


  • @printHorst Here are a few random thoughts. Firstly pressure advance is designed to compensate for pressure in the hot end. Or more precisely, it will advance the extruder at the start of a move to compensate for the "lag" between the carriage accelerating and rate of acceleration for the molten filament existing the nozzle. Then at the end of a move, pressure advance will retard the extruder to compensate for the fact that pressure will build up in the hot end during a move, and this pressure will cause the filament to get extruded faster than rate at which the extruder decelerates. From what you describe, it seems that what you are seeing is "ooze" without any pressure in the hot end - just gravity acting on molten filament. Pressure advance isn't a universal cure for "ooze" in that situation. This is where retraction comes into play.

    As you have observed, if you just extrude a few mm of filament but don't use any retraction, it will continue to ooze for a minute or more. This is just the effect of gravity. This is why we use retraction. From your description, I would say that you just need to get the retraction setting optimised. Both distance and speed can have an effect but every hot end / extruder and filament combination can act differently, so there are no hard and fast rules - you just have to find what works best for you.

    Other things that can help. For sure thermoplastics in general become less viscous (more runny) as temperature increases. PLA has a particular problem in that it will hydrolyse over time. So it will become more and more runny, even at the same temperature. After an hour or so at print temperature, it will be almost as runny as water. So lower temperatures can help (I regularly print PLA at 185) but that depends on a number of other factors such as the melt chamber volume and the material that the nozzle is made from (generally you need use a higher temperature with hard nozzles which might be poor thermal conductors). Also, printing faster can often help. Faster still non-print moves can help stringing. Some filaments are more prone to "oozing" than others - even different brands of the same filament. Retracting filament as the final move of any print can help with oozing when you start the next print. Larger nozzles suffer more with oozing that smaller nozzles.

    Essentially, if it's just "ooze" (which is what it appears to be from your description) then pressure advance is unlikely to cure it. It's just a matter of tuning all the other parameters (speeds, temperature, retraction amount, retraction distance, etc).


Log in to reply