Basic Information:
Printer Model: Prototype
MCU / Printerboard: Manta M8P V2
Host / SBC CM4
klippy.log None
Describe your issue:
Hi! I’m developing a new machine with an IDEX system and I’d like to achieve the following:
I’ve installed piezo sensors on both toolheads, so I can probe any axis with either tool. At a minimum, I want to measure the Z-offset between the two nozzles: probe Z with T0, then probe Z with T1, compute the difference, and apply it via SET_GCODE_OFFSET Z_ADJUST=... for multi-material prints. Ideally, I’d like to extend this process to X/Y alignment as well.
However, since piezo readings depend on how well they’re mounted, I don’t fully trust them for absolute Z homing. Therefore, I’d like to home Z using a separate, more reliable sensor (inductive, BLTouch, etc.), and after homing, perform Z probing with the piezos to calculate the inter-tool offsets.
I’ve seen that the Lynxter machines have a system for automatic dual XYZ nozzle calibration (I don’t know which firmware they use), but my goal would be to create something similar in Klipper to automatically calibrate the XYZ offsets between both toolheads.
Questions:
- Is there a native or recommended way in Klipper to:
- Probe Z with
T0andT1to automatically determine and apply their Z-offset? - Optionally do something similar for X/Y offsets?
- If not, which part of the configuration or code (homing, probe, macros, etc.) would be best to modify to implement this? I can modify Klipper’s source code directly if needed; I’m not limited to macros-only approaches.
- Can Klipper home Z with one sensor and then perform piezo-based probing for calibration?
Intended workflow (Z only, for now):
- Home Z using a conventional sensor (inductive/BLTouch/etc.).
- Probe Z with
T0using the piezo to get its offset relative to Z=0. - Probe Z with
T1using the piezo to get its offset relative toT0. - Apply the result using
SET_GCODE_OFFSET Z_ADJUST=....
The final goal is to develop a dual-tool XYZ calibration system similar in concept to the one used by Lynxter printers, but implemented within Klipper.
Thanks
