4
$\begingroup$

I've been trying for days to get my BTT SKR2 board to work with both dual Y & Z-axis and independent end stops (2 per axis). The Y-axis does independent homing just fine no matter which way the gantry is aligned. On the Z-axis, however, two scenarios are present:

  • if my left Z-stepper homes first and triggers the left Z-endstop, it stops the right Z2-stepper and the right Z2-endstop is never triggered. This leaves the machine in a pause state while it waits for the Z2-stepper to trip the Z2-endstop which, of course, will never happen as Z2-stepper has stopped moving having been triggered by the Z-endstop.
  • If the right Z2-endstop is triggered by the Z2-stepper first, the z2-stepper will continue to spin until the left Z-stop trips. The strangest thing is that when I look at the state of the machine as output by the M119 code, each endstop shows exactly as they are supposed to. It is as though the left Z-endstop controls both Z-steppers and Z2-steppers, and the right Z2-endstop only resolves the 'pause' state when the left Z-endstop has already been triggered.

Please provide any insights you may have ...

  • Board: SKR2 RevB
  • Stepper Drivers: TMC5160
  • Build: MPCNC Lowrider with dual Y and Z axis -- aspiring to independent homing abilities
  • Firmware: Marlin 2 Configuration version 02000903
  • Machine configuration:
    • Stepper motors X,Y,Z,Y2,Z2 using XM, YM, ZAM,ZBM, E0M ports respectively
    • End Stops X,Y,Z,Y2,Z2 using PC1, PC3, PC0, PA0,PC15 ports respectively

For reference, here are the salient settings in Marlin Version 02000903


Configuration.h

//============================== Endstop Settings ===========================
// @section homing
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
#define USE_YMAX_PLUG
#define USE_ZMAX_PLUG
 
#define X_MIN_ENDSTOP_INVERTING false // Set to false to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING false // Set to false to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING false // Set to false to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING false // Set to false to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING false // Set to false to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING false // Set to false to invert the logic of the endstop.
 
Stepper Drivers
#define X_DRIVER_TYPE TMC5160
#define Y_DRIVER_TYPE TMC5160
#define Z_DRIVER_TYPE TMC5160
// #define X2_DRIVER_TYPE TMC5160 // 20220414 : JHH : remove
#define Y2_DRIVER_TYPE TMC5160
#define Z2_DRIVER_TYPE TMC5160
 
// @section extruder
// For direct drive extruder v9 set to false, for geared extruder set to false.
#define INVERT_E0_DIR false
#define INVERT_E1_DIR false
#define INVERT_E2_DIR false
#define INVERT_E3_DIR false
#define INVERT_E4_DIR false
#define INVERT_E5_DIR false
#define INVERT_E6_DIR false
#define INVERT_E7_DIR false
 
// @section homing
#define X_HOME_DIR -1
#define Y_HOME_DIR 1
#define Z_HOME_DIR -1

Configuration_Adv.h

/ #define X_DUAL_STEPPER_DRIVERS
#if ENABLED(X_DUAL_STEPPER_DRIVERS)
// #define INVERT_X2_VS_X_DIR // Enable if X2 direction signal is opposite to X
// #define X_DUAL_ENDSTOPS
#if ENABLED(X_DUAL_ENDSTOPS)
#define X2_USE_ENDSTOP _XMAX_
#define X2_ENDSTOP_ADJUSTMENT 0
#endif
#endif

#define Y_DUAL_STEPPER_DRIVERS
#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
#define INVERT_Y2_VS_Y_DIR // Enable if Y2 direction signal is opposite to Y
#define Y_DUAL_ENDSTOPS
#if ENABLED(Y_DUAL_ENDSTOPS)
#define Y2_USE_ENDSTOP _YMIN_ 
#define Y2_ENDSTOP_ADJUSTMENT 0
#endif
#endif

//
// For Z set the number of stepper drivers
//
#define NUM_Z_STEPPER_DRIVERS 2 // (1-4) Z options change based on how many

#if NUM_Z_STEPPER_DRIVERS > 1
// Enable if Z motor direction signals are the opposite of Z1
//#define INVERT_Z2_VS_Z_DIR
//#define INVERT_Z3_VS_Z_DIR
//#define INVERT_Z4_VS_Z_DIR

#define Z_MULTI_ENDSTOPS
#if ENABLED(Z_MULTI_ENDSTOPS)
#define Z2_USE_ENDSTOP _ZMAX_ 
#define Z2_ENDSTOP_ADJUSTMENT 0
#if NUM_Z_STEPPER_DRIVERS >= 3
#define Z3_USE_ENDSTOP _YMAX_
#define Z3_ENDSTOP_ADJUSTMENT 0
#endif
#if NUM_Z_STEPPER_DRIVERS >= 4
#define Z4_USE_ENDSTOP _ZMAX_
#define Z4_ENDSTOP_ADJUSTMENT 0
#endif
#endif
#endif

pins_BTT_SKR_V2_0_Common.h

/
// Trinamic Stallguard pins
//
#define X_DIAG_PIN PC1 // X-STOP
#define Y_DIAG_PIN PC3 // Y-STOP
#define Z_DIAG_PIN PC0 // Z-STOP
// shifted EO diag to E1 etc..
#define E1_DIAG_PIN PA0 // Y2-STOP
#define E2_DIAG_PIN PC15 //Z2-Stop
 
//
// Limit Switches
//
#ifdef X_STALL_SENSITIVITY
#define X_STOP_PIN X_DIAG_PIN
#if X_HOME_TO_MIN
#define X_MAX_PIN PC2 // E0DET
#else
#define X_MIN_PIN PC1 // E0DET
#endif
#elif ENABLED(X_DUAL_ENDSTOPS)
#ifndef X_MIN_PIN
#define X_MIN_PIN PC1 // X-STOP
#endif
#ifndef X_MAX_PIN
#define X_MAX_PIN PC2 // E0DET
#endif
#else
#define X_STOP_PIN PC1 // X-STOP
#endif
 
#ifdef Y_STALL_SENSITIVITY
#define Y_STOP_PIN Y_DIAG_PIN
#if Y_HOME_TO_MIN
#define Y_MAX_PIN PA0 // E1DET
#else
#define Y_MIN_PIN PA0 // E1DET
#endif
#elif ENABLED(Y_DUAL_ENDSTOPS)
#ifndef Y_MIN_PIN
#define Y_MIN_PIN PC3 // Y-STOP
#endif
#ifndef Y_MAX_PIN
#define Y_MAX_PIN PA0 // E1DET
#endif
#else
#define Y_STOP_PIN PC3 // Y-STOP
#endif
 
#ifdef Z_STALL_SENSITIVITY
#define Z_STOP_PIN Z_DIAG_PIN
#if Z_HOME_TO_MIN
#define Z_MAX_PIN PC15 // PWRDET
#else
#define Z_MIN_PIN PC15 // PWRDET
#endif
#elif ENABLED(Z_MULTI_ENDSTOPS)
#ifndef Z_MIN_PIN
#define Z_MIN_PIN PC0 // Z-STOP
#endif
#ifndef Z_MAX_PIN
#define Z_MAX_PIN PC15 // PWRDET
#endif
#else
#ifndef Z_STOP_PIN
#define Z_STOP_PIN PC0 // Z-STOP
#endif
#endif
$\endgroup$

0

You must log in to answer this question.

Browse other questions tagged .