SOLVED Printer with Two Independent Z-Axes - How to synchronize?

  • I'm building a tool-changing printer with two independent z-axes (one for each tool).

    The Duet thinks there is only 1 z-axis at any given time, so I use M584 to switch stepper outputs during tool changes.

    (dc42 suggested this method here:

    Is there a way to get each Z axis to move in sync during a print?

    For example:

    Printer homes and both axes home to their endstops. T0 & T1 Z-height are both at 0

    T0 starts the print and completes Layer 1 & 2

    Tool-change to T1

    T1 Never moved from its homed position (Z=0) so it will crash into the print.

    Does anyone have insight to ensure that both T0 & T1 move upward as the print progresses?

    Ideally, each tool would move to some intermediate position defined in Tfree, and the return to the correct z-height for printing when it becomes active again.


    In the photo, T0 is on the left, T1 is on the right.


  • @jpomo10

    One working solution is to home each linear actuator every time there is a tool-change.

    Doing it this way provides a reference point each time the tools switch.

    This works because the actuators home at the high-end of their travel instead of homing to the bed. They both use individual endstop switches wired in series and ultimately connected to the Z-endstop on the board.

    If the tools have very different 'Z' lengths, I think the G10 offset command can be used to compensate, but i'll have to test this.

  • administrators

    You will be able to do it using variables:

    • When Z-homing a tool or switching away from a tool in tfree, record its Z position in a variable
    • When selecting a tool in tpre, recall its Z position and set that using G92; then move to the user Z position plus a bit

    Until we have variables, I suggest you use the tool offset of a hidden axes to store the Z position. You will need to temporarily un-hide the axis when setting the offset (using G10) or retrieving it.

  • @dc42

    Thanks for the advice, I will give the offset method a try.

Log in to reply