4

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

Greenonline
  • 6,748
  • 8
  • 40
  • 68

0 Answers0