Hi,
I’ve put together a branch with more extended IDEX support, namely COPY and MIRROR modes are supported for the dual carriage. It is not based on the previously created code by @Tircown, although offers very similar functionality. If you have IDEX printer and are interested in this topic (e.g. have been using his branch previously), please give it a try and report any problems you may encounter. I have some (albeit, not very high) hopes that it can be merged into the mainline. Note that I do not have IDEX printer myself, so I can only do this much in testing it. It was tested by others already, and at least cartesian
kinematics seems to work, but hybrid_corexy
/z
were tested much less thoroughly.
The configuration of the dual carriage is pretty much the same as in the mainline, with a few highlights:
[dual_carriage]
axis: x
...............
safe_distance: 50 # set to the minimum distance to maintain between the carriages
[extruder]
..........
[extruder1]
...........
[input_shaper]
# Intentionally empty
[delayed_gcode init_shaper]
initial_duration: 0.1
gcode:
SET_DUAL_CARRIAGE CARRIAGE=1
SET_INPUT_SHAPER SHAPER_TYPE_X=<dual_carriage_shaper> SHAPER_FREQ_X=<dual_carriage_freq> SHAPER_TYPE_Y=<y_shaper> SHAPER_FREQ_Y=<y_freq>
SET_DUAL_CARRIAGE CARRIAGE=0
SET_INPUT_SHAPER SHAPER_TYPE_X=<primary_carriage_shaper> SHAPER_FREQ_X=<primary_carriage_freq> SHAPER_TYPE_Y=<y_shaper> SHAPER_FREQ_Y=<y_freq>
Then the regular switching between primary and dual carriage can be done as usual (see e.g. config/sample-idex.cfg
for more insights and some of the macros):
[gcode_macro T0]
gcode:
PARK_{printer.toolhead.extruder}
ACTIVATE_EXTRUDER EXTRUDER=extruder
SET_DUAL_CARRIAGE CARRIAGE=0
[gcode_macro T1]
gcode:
PARK_{printer.toolhead.extruder}
ACTIVATE_EXTRUDER EXTRUDER=extruder1
SET_DUAL_CARRIAGE CARRIAGE=1
The copy and mirror modes, on the other hand, can be configured as follows (most easily done in the slicer start code):
......................
G28
......................
; set bed temp
M190 S<...>
......................
; Configure the carriage 0
SET_DUAL_CARRIAGE CARRIAGE=0 MODE=PRIMARY
; Set the initial position of the primary carriage
G0 X<...> Y<...> Z<...> F<...>
; Set the printing parameters for the primary extruder
ACTIVATE_EXTRUDER EXTRUDER=extruder
SET_PRESSURE_ADVANCE EXTRUDER=extruder ADVANCE=<filament_0_pa>
M104 T0 S<filament_0_temp>
; Configure the carriage 1
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=PRIMARY
; Set the initial position of the dual carriage (Y and Z must stay the same)
G0 X<...> F<...>
SET_DUAL_CARRIAGE CARRIAGE=1 MODE=COPY
SYNC_EXTRUDER_MOTION EXTRUDER=extruder1 MOTION_QUEUE=extruder
SET_PRESSURE_ADVANCE EXTRUDER=extruder1 ADVANCE=<filament_1_pa>
M104 T1 S<filament_1_temp>
M109 T0 S<filament_0_temp>
M109 T1 S<filament_1_temp>
And similarly for mirror mode just with an appropriate position for the dual carraige (accounting for mirroring of the moves) and SET_DUAL_CARRIAGE CARRIAGE=1 MODE=MIRROR
command.
Also note that if you have [bed_mesh]
enabled, you should disable it prior to any actual printing in COPY or MIRROR mode (e.g. by calling BED_MESH_CLEAR
in the start script, and not calling BED_MESH_CALIBRATE
or BED_MESH_PROFILE LOAD=...
commands). This is important because it is not possible to make two carriages on the same (Y) axis follow different Z profiles (both carriages must have the same Z height from the buildplate). Activating bed mesh in this case will make both carriages follow the bed mesh for carriage_0, which may result in a crash of carriage_1 with the bed. Instead, bed must be rather flat and leveled such that neither of the carriages can crash into the bed. You may want to print the first layer thicker and with larger line width than you’d normally print to avoid potential problems with the first layer adhesion, or even activate the raft in the slicer if you still get problems with the bed flatness.