Dual Gantry printer (XZ) with 1 BLtouch for each Z axis

Basic Information:

Printer Model: Ender3 modified with secondary gantry
MCU / Printerboard: the boards from the 2 ender 3

Describe your issue:

Hi, I’m trying to build a custom dual gantry printer with a stock Ender3 V2 and a secondary gantry from another Ender3Pro.
This means that I have :

  • only one Y axis
  • a first gantry with a Z axis and the toolhead on an X axis
  • a secondary gantry with another toolhead with independent X and Z axes

The two independent Z axis make the setup incompatible with the actual IDEX - dual carriage features of klipper.
I have been developing a new kinematics class to handle this new setup (based on the work by zruncho3d here:GitHub - zruncho3d/DuelingZero: Dueling Zero - a Dual Gantry V0 mod. Enable dual-color, dual-material, and even multi-part printing... with the same speed and quality as single-extruder printing.) but I’m getting stuck on the homing procedure.

For both X axes and the Y axis I’m using endstops, and they work fine.
The difficult part si that I was planning on using one BLtouch per toolhead to home both Z axes.
As the bed is on springs and with time it will move, the dual probe system would allow to home each Z axis on the center of the bed and be able to compensate any bed movement.

However, the probe and BLtouch features in klipper do not seem to allow for a secondary probe to be used only as an endstop (I would rely on the main BLtouch for all bed mesh operations).

I was wondering if someone knows about something similar having been done somewhere or for some hints on how to develop quickly a “secondary_probe” module.
The probe.py and bltouch.py codes seem quite extensive and poorly documented so trying to reverse engineer them feels like a daunting task I would like to avoid.

Thanks for your help :slight_smile:

I don’t know if this will help, but as nobody else has come up with anything, it may be worth your while exploring a slightly different method:-

The basic idea is to use the same input to the mcu for both BLtouch probes with their outputs “Wired OR” connected to the input. I don’t know if this would work with BTtouch, or even if it would help on the firmware side.

I used this method for two probes each on two different printers. In each case, there is an under-bed probe purely for setting the Z datum and a touch probe for bed mesh mapping. The two can be seen on YouTube at https://www.youtube.com/watch?v=DQXM4nrcsr4 and https://www.youtube.com/watch?v=waXIr_ytukw

Mike

Thanks for your reply.

I hadn’t thought about this kind of solution, it’s a clever idea! I’ll have to investigate the inner workings of the BLtouch in klipper as it would require to switch the controlled BLtouch depending on the toolhead I’m probing. Not sure of when I’ll have the time to test that, but I’ll keep this topic updated.

Nice work on your printers, the changing toolhead on the Biceps printer is amazing!

I don’t believe that @leadinglights suggestion will not work.

While the Probe line from the (BL) Touch is an open drain the Servo pin provides serial communication and should not be connected to two devices.

Sorry.

this can be used as a secondary probe
vcore-idex/klippy/extras/zoffsetprobe.py at main · HelgeKeck/vcore-idex (github.com)

Can’t this can be accomplished by having a separate (serial) control line for each BLTouch?

I don’t believe Klipper supports that as when I look at the Klipper documentation for a Dual Carriage:

https://www.klipper3d.org/Config_Reference.html?h=pixel#dual_carriage

There seems to be only one Z axis sensor.

Maybe somebody with actual IDEX experience can help out here.

Agreed that there is only one sensor input, but by connecting two or more sensors in a wired-or configuration Klipper can see only one sensor. As long as which physical sensor is used is ring fenced then any data generated should be able to be kept seperate for each sensor.
This is working well on my Delta printer, with a similar scheme working on a two headed printer running Repetier firmware. (Next project is to Klipperise this one)
I don’t know if this will work on the O.P.'s printer as it uses two gantries and would need two bed maps to be swapped out every tool change.

The correct term for having multiple open collector/drain outputs on a single (pulled up line) is “Dotted AND”. The line is only high if all the drivers are high - therefore it’s an “AND”, not an “OR” function.

Now, I have never set up an IDEX printer (it’s on my bucket list) and the issue presented here is something I’ve wondered about as it should be reasonable to get your gantry XY axis exactly (within a few microns) parallel to the heated bed but I would imagine there will be some differences (at least on the order of 10s of microns) between the position of the nozzles on the two toolheads. Somebody here who has more experience can probably explain how this is handled in an IDEX printer.

Regardless, from what I can see, Klipper is not designed to handle multiple BL/CR Touch devices in a single printer.

I accept your rebuke about my terminology: I intended simply to say that the logic was wired and without active components, and would signal if sensor A or sensor B was triggered.
I also have to conceed that Klipper does not natively support multiple Z sensors, but that dosn’t mean it can’t be kludged to work until somebody writes code to do it.

1 Like

Sorry for being pedantic about the dotted And but I’ve seen people get into trouble when they hear/see the wrong terminology and apply it according to what how it is described.

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.