I have only gotten so far in this myself, then I had an issue crop up with my nozzle that took my dual extruder out of commission for a couple weeks. I intend to do more experimenting on it this weekend.
Personally, I had better luck not using the wipe tower when using Prusa slicer. It is an unfortunate issue with PS that you cannot use ooze control AND the wipe tower at the same time. Of the two, I found I had better luck in my early experiments with using ooze control instead of the wipe tower.
The problem that the wipe tower has is that it is very stringy, and, like you said, it switches at the wrong time. Works great for the MMU… but not so great in a dual nozzle situation. Ooze control uses a draft shield instead of a wipe tower, which isn’t much time to wipe, so you have to dial in your temperatures perfectly, and try to situate your parts (if they are small) to give you a larger draft shield.
These are just my findings, and like I said, I didn’t get that far into it before tragedy struck. I’ll keep digging into it. It may be that Prusa Slicer is just not the best fort this. It is my favorite slicer, hands-down, but Prusa never had a truly dual nozzle printer, so it isn’t surprising that the support is a little soft. I think the development will be more aggressive for that now that the XL is available. I’ll also be experimenting a bit with Cura and Simplify3D… though the latter looked worse than Prusa Slicer for this, not better.
Prusaslicer does not currently provide detailed temperature control for dual nozzles, but if you dry the filament well, you can prevent stringing without setting the standby nozzle temperature low.
Thank you for your answer @moonglum
I have also tried Cura for this. It is much easier than Prusa, but it also switches the nozzle above the part and not on the wipe tower, always leaving unwanted material on the part.
My nozzle end g-code:
Left:
G0 X{prime_tower_posistion_x} Y{prime_tower_position_y}
;end left extruder
Right:
G0 X{prime_tower_posistion_x} Y{prime_tower_position_y}
;end right extruder
This plus the option “wipe inactive nozzle on prime tower”
This combination should get you the results you want. But make sure your base of the prime tower is large enough for the side load pressure of wiping the nozzle off.
I have updated the PrusaSlicer post-processor to handle the multi extruder case correctly. However, it seems that the second nozzle temperature is not displayed on the SM2 control panel.
Btw., I liked the idea of initializing only the used nozzles in the startup Gcode. Which means that I need to create a filament with no temperature to turn one nozzle off. But there is no check which prevents me to disable both nozzles. How did you solve this @takeota? I put a M600 in for such a case. But I would prefer to get a error on export rather than run.
I guess the “Null Filament + Macro Technique” is for defining the nozzles to be used throughout the print.
This is the first post in the thread by Slynold,
If I use extruder 1, only prepare extruder 1.
If I use extruder 2, only prepare extruder 2.
If I use them together, prepare them together.
So, If I use both nozzles I turn on both nozzles throughout the print.
Slicer only use tool change (T0 or T1), I do not use the M600.
What I meant was that there is no check that prevents me to use no extruder (both set to null filament).
I would like the slicer to fail before running the output if such an invalid setup was given.
Currently, I force output of M600 in such case to “notify” me that something went wrong.
But I hoped for a better solution which prevents me to create such an output.
I’m sorry for the misunderstanding.
If NULL FILAMENT is mistakenly selected for both extruders, no M104 or M109 will be created in the start G-code.
I don’t have the knowledge of an application developer, but I wonder if your great tool “sm2pspp” can identify the M104 and M109?
I guess that would enable your tool to alert us. How about it?
@takeota@Slynold, would you mind sharing all your settings and g-codes you have set in prusaslicer for the dual extrusion? I am having issues to say the least. Just want to be able to print 2 color completely. New to the dual head and would appreciate some guidance. You two seem to have a handle on this.
Hey guys,
I really appreciate how it is going here.
At the moment I do not have enough time to experiment further, and I just keep printing single color with my dual extruder. I only use the right extruder for support interfaces.
I changed my start and end gcode inspired by @JonnieCache ,
but I do not have any profiles good enough for public release - I just change it every print to match my current requirements.
Here is the actual gcode. A NULL filament is not necessary anymore.
Start
M140 S[first_layer_bed_temperature] ;Set bed temperature at first
G28 ;Go home
G90 ;Absolute positioning
M92 E677 ; Extruder calibration value
G1 X-10 Y-10 Z0 F3000 ; Go to start X Y
G1 Z0 F1800 ; Go to start Z
M190 S{first_layer_bed_temperature[0]} ; Wait for bed temperature before nozzle
{if is_extruder_used[0]}M104 S[first_layer_temperature_0] T0 ; Preheat left extruder if used{endif}
{if is_extruder_used[1]}M104 S[first_layer_temperature_1] T1 ; Preheat right extruder if used{endif}
{if is_extruder_used[0]}M109 S[first_layer_temperature_0] T0 ; Wait for left extruder if used{endif}
{if is_extruder_used[1]}M109 S[first_layer_temperature_1] T1 ; Wait for right extruder if used{endif}
{if is_extruder_used[0]} ;This priming will only get "executed" if left extruder is used
T0
G92 E0 ; Zero set extruder position
G1 E20 F200 ;Feed filament to clear nozzle
G92 E0 ; Zero set extruder position
{endif}
{if is_extruder_used[1]} ; This priming will only get "executed" if right extruder is used
T1
G92 E0 ; Zero set extruder position
G1 E20 F200 T1 ; Feed filament to clear nozzle
G92 E0 ; Zero set extruder position
{endif}
T[initial_extruder] ; Set initial extruder
M400 ; wait untill all actions are finished
End:
; End GCode begin
{if is_extruder_used[0]}M104 S0 T0 ; Left extruder heating off{endif}
{if is_extruder_used[1]}M104 S0 T1 ; Right extruder heating off{endif}
M140 S0 ; heated bed heater off
G90 ; absolute positioning
G92 E0 ; reset extruder position
G1 E-2 F300 ; retract the filament a bit before lifting the nozzle, to release some of the pressure
G28 X0 Y0 Z+10; home
M84 ; steppers off
M107 ; fan off
M82 ; absolute extrusion mode
; MAXZ:[max_layer_z]
; End GCode end
Hi, here is a sample zipped 3MF file. Please open with Prusaslicer 2.6 beta2.
This does not include dstarke’s sm2app setting and latest g-code changes by Slynold.
Please adjust the settings, amount of wipe towers, etc. as you needed.
I have not observed extrusion failure due to heat creep, but I consider it should be noted when the ambient temperature is high.
i appreciate the file but i was more asking for screenshots of your settings in prusaslicer, specifically in the multiple extruder settings under the print settings tab and setting for each extruder under the printer settings tab just for printing 2 colors of pla. I appreciate your help.
I changed the start and end gcode again. I found a better extruder calibration value for my setup, and also discovered that setting hotend temperature with m104 and afterward wait with m109 is not necessary.
Also I got a problem with one extruder not cooling down after a print, so I removed the if statement for the end gcode.
; Start GCode begin
M140 S[first_layer_bed_temperature] ;Set bed temperature at first
G28 ;Go home
G90 ;Absolute positioning
M92 E686.65 ; Extruder calibration value
G1 X-10 Y-10 Z0 F3000 ; Go to start X Y
G1 Z0 F1800 ; Go to start Z
M190 S{first_layer_bed_temperature[0]} ; Wait for bed temperature before nozzle
{if is_extruder_used[0]}M109 S[first_layer_temperature_0] T0 ; Heat and wait for left extruder if used{endif}
{if is_extruder_used[1]}M109 S[first_layer_temperature_1] T1 ; Heat and wait for right extruder if used{endif}
{if is_extruder_used[0]} ;This priming will only get "executed" if left extruder is used
T0
G92 E0 ; Zero set extruder position
G1 E20 F200 ;Feed filament to clear nozzle
G92 E0 ; Zero set extruder position
{endif}
{if is_extruder_used[1]} ; This priming will only get "executed" if right extruder is used
T1
G92 E0 ; Zero set extruder position
G1 E20 F200 T1 ; Feed filament to clear nozzle
G92 E0 ; Zero set extruder position
{endif}
T[initial_extruder] ; Set initial extruder
M400 ; wait untill all actions are finished
; Start Gcode end
; End GCode begin
M104 S0 T0 ; Left extruder heating off
M104 S0 T1 ; Right extruder heating off
M140 S0 ; heated bed heater off
G90 ; absolute positioning
G92 E0 ; reset extruder position
G1 E-2 F300 ; retract the filament a bit before lifting the nozzle, to release some of the pressure
G28 X0 Y0 Z+10; home
M84 ; steppers off
M107 ; fan off
M82 ; absolute extrusion mode
; MAXZ:[max_layer_z]
; End GCode end
Thank you so much. I had no idea there was a way to do that!
However, as a result, I can not use @dstarke 's sm2pspp because it can no longer recognize the tool well. The sm2pspp is also very useful and I would love to see an update. Thank you.
Hi, @oh-snap .Has your problem been solved?
As @nweolu tells us, the 3mf file contains all the settings. Please give it a try.
The is_extruder_used placeholder was introduced with PrusaSlicer 2.6.0 which is still beta.
I will have a look at it when the final version has been released.