MMU - Single nozzle, multi material (filament)
-
Hi,
I have started with 3D Chameleon but after playing with it I made a different version of it, simpler, perhaps more reliable.
The concept where nothing additional has to be connected to Duet 2 WiFi seems good and simple to me just a standalone unit and one limit switch.Everything is working fine, filament changes, timings, printing sequences, etc, BUT!
Initially, I configured Orca slicer to use 4 filaments on a single nozzle and it is slicing fine, the problem started during filament changeover and T1, 2 or 3 was selected and then a warning popped up, trying to print with non-existing tool. The printer still moved but no extrusion.First I tried playing with gcode gnerated and change all tools to T0 but then it is messing up next tool change and not viable.
After hinking what to do, I managed to add 3 more tools in config file and then printer was waiting for every tool, except T0, to warm up altough same hotend was used.
I managed to change that in config file as well so all are ready at the start of the print and it is working fine.
Help needed
- Is anyone else using Orca or Prusa slicer with multi material on single extruder and having same issues?
- Is there a simpler way to do this in order not to have 4 tools showing on screen?
-
@aceranic Generally, the slicer has no concept of how multiple tools are actually implemented on the machine. All it can do is emit tool commands (ie T0, T1, T2 etc) at the correct time, and it's up to the machine configuration to handle tool changes.
The 3D Chameleon is somewhat different, as it uses a series of different length button presses to automate filament change, so it's not using the normal 'T' tool change mechanism. Filament changes are handled by a macro in the slicer. How has your version changed from this setup? It looks more like a Prusa MMU, but controlled by the 3D Chameleon electronics.
I think your slicer settings are doing both, though. It's emitting a Tool change command ('T#') but also sounds like there's a filament change macro running (3D Chameleon usually has a macro that cools down the hot end to pull out the filament on each filament change). I haven't used one of these setups, so I don't really know the best slicer or RRF configuration for this would be. I think you need to set it up for tool changing or filament changing, not both.
Ian
-
@droftarts Hi, thanks for the writeup.
I liked the idea using the arduino and it being separate from the printer electronics basically so I printed out Chameleon and during testing my version was not the most reliable.
Then I decided to go other route to use 2 steppers but same electronics (Arduino Uno with CNC Shield V3).
Additionally, I removed the tip shaping as I installed a mechanical cutter based on EVA3.0 toolhead.
So it tested and is working fine, every single time. A bit of tuning the times for the program choice but it can be done.
I thougth that perhaps I made a mistake with Orca or Prusa slicers so followed the Chameleon instructions closely, almost the same tool change in G code for both of them. I think now it is implemented in Chameleon code.Here is auto generated GCode when you input required data for switch poisition and distances for filament.
I think the secret for tool chnage and choice is in the below lines:
; load extruder #{next_extruder}
M117 Loading Tool T{next_extruder}
{if previous_extruder>-1}I have no issue to leave it as it is just wanted to see if nyone had similar issue with other MMUs which use similar slicer options.
; Auto generated 3D Chameleon Mk4 Tool Change GCode for PrusaSlicer
; - 3D Chameleon Mk4 Tool T{next_extruder} -
;begin switch from extruder {previous_extruder} to extruder #{next_extruder}
M117 Unloading Tool T[previous_extruder]
M83 ; turn relative distances for the extruder
; unload extruder {previous_extruder}
G92 E0
; go to holding position to unload the stock extruder
G0 Y378 F2000 ; <<----- EDIT THIS LINE TO SET THE INITIAL LOCATION OF THE BUTTON
; if this is the first load, then don't unload
G91 ; move to relative mode
M83
; load extruder #{next_extruder}
M117 Loading Tool T{next_extruder}
{if previous_extruder>-1}
; back out the filament for cutting
G0 E-20 F500 ; retract a bit, adjust this to tune waste
; <<<< insert mechanical cutter code here! >>>>
;<<< Start Of Tip Shaping- Not Needed If You Have A 3DClippy Filament Cutter! >>>
M109 R180; cool down to prevent swelling
M302 S0 ; enable cold extrusion
M106 S255
G0 E20 F1500 ;
G0 E-5 F500 ;
M109 R165; cool down to prevent swelling
G0 E5 F1500 ;
G0 E-1 F500 ;
M109 R155; cool down to prevent swelling
G0 E1 F1500 ;
G0 E-25 F500 ;
M109 R150; cool down to prevent swelling
G0 E24 F1500 ; last tip dip with cold tip
G0 E-24 ; last tip dip with cold tip
M109 R180; ok... go back up in temp so we can move the extruder
G0 E-80 F500 ; back out of the extruder
G92 E0
M104 S[temperature];
;<<< End Of Tip Shaping >>>
; we skipped to here if it was extruder -1
{endif}
{if previous_extruder>-1}
; retract it back out of the extruderG92 E0
G0 E-95 F2000
G92 E0G0 E-30 F2000 ; <<<---- if mechanical cutter, change to a positive value of at least 5mm
G92 E0
; ok - out of extruder - press button to remove it all the way
G91 ; move to relative mode
M82
; we skipped to here if it was extruder -1
{endif}
; press the button to select the new extruder
G0 Y3 F2000{if next_extruder==0}
G4 P500 ; dwell for .5 seconds - adjust this to match your machines single pulse time
{endif}
{if next_extruder==1}
G4 P1000 ; dwell for 1.0 seconds - adjust this to match your machines two pulse time
{endif}
{if next_extruder==2}
G4 P1500 ; dwell for 1.5 seconds - adjust this to match your machines three pulse time
{endif}
{if next_extruder==3}
G4 P2000 ; dwell for 2.0 seconds - adjust this to match your machines four pulse time
{endif}
G0 Y-3G4 P2000 ; wait for cutter to work
; ok command selected - back out filament if needed after cut
{if previous_extruder>-1}
G0 Y3 F2000 ;
G4 P5000 ;
G0 Y-3;
G4 P400{endif}
G0 Y3 F2000 ;
G4 P5000 ;
G0 E25 F1500; <<<--- adjust this E value to tune extruder loading
G0 Y-3;
G4 P400G92 E0
G90 ; move back to absolute mode
M83 ; but make sure the extruder stays in relative
; reload filament all the way into extruderG92 E0
G0 E70 F2000 ; <<<<<----------- EDIT THIS DISTANCE TO FINE TUNE THE FILAMENT LOADING TO STOP BLOBBING OR UNDEREXTRUSION
G92 E0M83 ; turn relative distances for the extruder
M302 S180 ; prevent cold extrusion
M117 3D Chameleon Tool T{next_extruder} -
@aceranic That macro does have temperature changes, so I'm not surprised it's pausing during filament changes. As far as I'm aware, you need to do this or you'll get stringing. But you can remove the temperature changes if you're using a filament cutter, and not retracting.
Check in Prusaslicer > Printers > General > Capabilities that you have 'Extruders' set to '4' and 'Single Extruder Multi Material' selected. I think this second one should stop the tool commands being emitted in the Gcode.
Then it 'should' only use T0. If that doesn't work, you can combine the tools in DWC; go to Settings > Machine specific and select 'Group identical tools', though tools 0 to 3 will still be required.
Another thought: rather than use the endstop to trigger the Arduino, you could connect the wire to a spare output on the Duet, define it as an output with M950, and control the signal with M42, and trigger it that way. You could also use the either the tool change mechanism built into RRF to do the filament change (see here for the tool change macros https://docs.duet3d.com/en/User_manual/Tuning/Tool_changing) or the built-in RRF/DWC filament management (see https://docs.duet3d.com/en/User_manual/Reference/DWC_filaments). That way the slicer only has to emit a tool change, or a filament change command, ie no macros in the slicer.
I like the simple look of your MMU, though. It looks like it has one stepper for the extrusion, and a cam on the second stepper to engage each extruder's filament drive gears. Have you shared it anywhere?
Ian
-
@droftarts Hi again, I appreciate your response.
I did exact things in Orca and Prusa, Single Extruder MM enable but same result.
Stringing is not an issue as change is fast and I retract 35mm then cut it before change so no stringing involved.
Regarding the option of grouping, didn't try yet, will do and let you know. Won't be home till Sunday though.
I am however tempted to do the changes from Duet as the ones done by moving Y axis are dependent of the speed, exact switch position, I did tune it but still it is fiddly.
Will give it a try, also will need assistance to code this.If you are interested I can post it on Thingiverse with files available, 2 steppers, yes as per your observation correct.
-
@aceranic I've had a play around with PrusaSlicer (2.8.0 so not the latest), and it still outputs tool commands (T0, T1, T2 etc) in Gcode, even if you select 'Single Extruder Multi Material'. Not sure, but this might be a PrusaSlicer bug. Probably the easiest thing to do is post-process the gcode, search and delete all the tool commands. Also adjust the macro so you don't get the cooling down part if you don't want it.
I found a good video showing how the 3D Chameleon works: https://youtu.be/NUYJseo78tI?si=nNas8kzkU32kfK1s&t=438
It seems a very neat and compact solution. Was it not reliable?I would think this, and your version, would be easily controllable by RRF directly, if you had spare drivers for the two stepper motors. For Duet 2, something like this offers simple driver expansion: https://github.com/bigtreetech/BTT-Expansion-module/blob/master/BTT EXP-MOT/BTT EXP-MOT V1.0User Guide.pdf
@aceranic said in MMU - Single nozzle, multi material (filament):
If you are interested I can post it on Thingiverse with files available, 2 steppers, yes as per your observation correct.
Yes please!
Ian
-
@droftarts yes, I tried both Orca and Prusa, same.
Is group identical tools hiding them or what is the catch there?I'll post on Thingie just have to change 2 holes for the spring bar which keeps the extruder idler open when not required, it makes filament path smoother.
Also it is designed for BMG clones, clear plastic ones, they are 2mm narrower than black ones. Didn't know this initially.Will check expansion you posted for Duet 2.
Chameleon is a bit tricky as it is tight, springs inside held between 2 halves, I like the concept but not the design of it. I think this is why it didn't get to the users enough. Shame really.
Arduino and shield are working fine though and the concept I like really.Must go deeper into what you mentioned to have it controlled by Duet.
-
@aceranic said in MMU - Single nozzle, multi material (filament):
Is group identical tools hiding them or what is the catch there?
It just collapses the list. There’s a triangle to open the list of tools again, if needed.
Ian
-
@droftarts said in MMU - Single nozzle, multi material (filament):
it still outputs tool commands (T0, T1, T2 etc) in Gcode, even if you select 'Single Extruder Multi Material'. Not sure, but this might be a PrusaSlicer bug.
I guess the toolchange commands are required for different filament temps, diameter etc...
One can leave the macros empty, if not needed. -
@droftarts said in MMU - Single nozzle, multi material (filament):
Another thought: rather than use the endstop to trigger the Arduino, you could connect the wire to a spare output on the Duet, define it as an output with M950, and control the signal with M42, and trigger it that way. You could also use the either the tool change mechanism built into RRF to do the filament change (see here for the tool change macros
How would one do the above. Arduino board requires 5V to the pin, currently triggered by the limit switch, GPIO can also output 5V?
Is there an example for similar connections?
Ok, I believe I found that 3.3V is sufficient to trigger the input on Arduino.Would this be good code?
; Define GPIO pin 1
M950 P1 C"exp.heater4" Q500 ; Allocate GPIO port 1 to heater4 on expansion connector, 500Hz; Control GPIO pin 1 for 0.15 seconds
M42 P1 S1 ; Set GPIO pin 1 to high
G4 P150 ; Pause for 0.15 seconds (150 milliseconds)
M42 P1 S0 ; Set GPIO pin 1 to low