Tag Archives: 3in1 Switching Hotend

Misc: XCR3D 3in1-S1 aka Bigtree ZSYong 3in1 (Switching/Non-Mixing) Hotend


  • 2022/09/10: designing part cooler for its
  • 2022/08/29: starting


The XCR3D 3in1 S1 aka Bigtree ZSYong 3in1 is a neat 3 in 1 out switching hotend (non-mixing):

XCR3D 3in1-S1 – 3in / 1out (switching, non-mixing)


  • cost effective with EUR 20-24 (2022/09) complete with heat cartridge, thermistor, 3xPTFE tubes, 30mm fan


  • nozzle / heatblock asymmetry: the heatblock extends right-side ~2mm
  • clumsy fan fastening between heatsink ribs
  • slightly overengineered otherwise, too much mass for the basic functionality

XCR3D 3in1-S1

BigTreeTech ZSYong 3in1

NF THC-01 3in1

Very similar, but with symmertric E3D V6 heatsink:

Clones of Clones

It seems to me, the this 3-in-1 hotend with hexagon heatsink, was cloned from NF THC-01 3in1, and likely engineered by a small company, and now brands like BigTreeTech, XCR3D and others purchase in bulk the hotend black/red anodized and their white brand stamp on the hotend.

What makes things truly confusing is that the hotends from China have terrible naming, e.g. “3in1” and “2in1” are used for switching and mixing hotends, which are quite different functionalities, and otherwise the name does not distinct designs.

Part Cooler

I adapted the Parametric Part Cooler using 50×10 blower fan for the XCR3D 3in1 S1 as well:

Download Part Cooler

As you can see on the illustration and photos, put the part cooler on the heatsink, and then 30mm heatsink fan on top. The part cooler itself requires 50x15mm blower fan.

It is a bit fiddly as there are no clear threads for the screws on the heatsink, so the first mounting is crucial to thread properly.

Marlin 2.0.x Configuration

In Configuration.h one has to update the thermistor type:

#define TEMP_SENSOR_0 5    // changed from 1 to 5


#define PID_FUNCTIONAL_RANGE 25   // changed from 10 to 25

recompile, upload/update firmware and then run via G-code console the autotune PID procedure:


and after 3-5 mins or so, when the autotune is done, save settings in EEPROM:


and one is done.


I really struggled to get decent quality prints first, as somehow the temperature reports were off by 40C°, and various Google searches gave the same wrong answers, the seller did not give proper detailed information about the thermistor either. Eventually at Amazon one customer gave the relevant information ATC Semitec 104GT-2/104NT-4-R025H42G and defining TEMP_SENSOR_0 5 in Marlin gave sane results.

Retraction settings are in my case 3mm at 70mm/s with apprx. 500mm long Bowden tube on my Ashtar C (CoreXY 400x400x380) and also Ashtar K #3 (300x300x360).

Ashtar K #3 with XCR3D 3in1-S1 hotend with 3 rolls of filament

I really like the switching filament solution close to the hotend, compared to other multi-material solutions where materials are switched far away from the hotend; e.g. switching material is faster, but one has to still purge one material/color by 30-50mm filament – so I tend to use the multi-material/color feature for fast switching colors for single material/color prints.

Following procedure I use when switching material:

  • heat up nozzle
  • purge 30-40mm regardless
  • retract 55mm at 70mm/s
  • switch to new material/color (e.g. “T1“)
  • push 55mm at 70mm/s forward
  • extrude/purge 30-40mm filament
  • start actual print
  • [ … ]
  • end print
  • retract 55mm at 70mm/s
  • switch to “T0
  • push 55mm at 70mm/s forward [note: not purging material/color transition]

so by default “T0” is ready to be printed. In order the print with the other materials, I have two macros with Print3r e3-t1 and e3-t2.

print3r --printer=ashtar-c-1 print cube.stl @e3-t1
print3r --printer=ashtar-c-1 print cube.stl @e3-t2


prepend_gcode="G91\nT0\nG1 E20 F100\nG1 E-55 F3000\nT1\nG1 E55 F3000\nG1 E30 F100\nG90\nG92 E0\n"
end_gcode="G1 Y{$machine_depth-10} F6000\nG92 E0\nG91\nG1 E-2 F2000\nM140 S0\nM104 S0\nG1 E-55 F3000\nT0\nG1 E55 F3000\nM84\nG90\n"

and ~/.config/print3r/macro/e3-t2:

prepend_gcode="G91\nT0\nG1 E20 F100\nG1 E-55 F3000\nT2\nG1 E55 F3000\nG1 E30 F100\nG90\nG92 E0\n"
end_gcode="G1 Y{$machine_depth-10} F6000\nG92 E0\nG91\nG1 E-2 F2000\nM140 S0\nM104 S0\nG1 E-55 F3000\nT0\nG1 E55 F3000\nM84\nG90\n"

The way it is composed: start_gcode + prepend_gcode + slicing G-code + end_gcode.

Sourcing / Purchase


As it happened to me several times, the hotend clogs up and the reason is often the filament is not hot enough, and when pulling back/retracting it forms a long pointy drag, and might break and the next cold filament jams in further down, but not enough to melt – it clogs up eventually.

First solution is to heat hotend at 240C° at least, not more than 250C° because of the PTFE – and try to push with filament on top, eventually some of the clogging might melt and free the nozzle.

Second solution is removing the lower part with heatbreak, heatblock, by opening the worm screws at the heatsink, and review the PTFE intake: