Hello
on the SKR V1.4 there are only 3 endstop Xmin YMin Zmin. And the three others endstop Xmax=> E0DET, Ymax => E1DET, ZMAX => PWRDET.
So that means that you cannot use the XMAX, YMAX, ZMAX references.
In order to be able to use the E0DET D1DET and PWRDET as endstop you need to define correctly in configuration.adv.
BTT SKR 1.3 has min and max endstops
BTT SKR 1.4 only has endstops (one set of 3) and E0DET, E1DET and PWRDET
This is how they are written on the controller and the schematics.
So this is how they are implemented in marlin.
So on a skr 1.4 I should not use “#define Z2_USE_ENDSTOP XMAX”
I should use E0DIAG or E1DIAG
PWRDET is not protected by dual resistor as E0DET either E1DET so probably cannot be used
Lowrider objective:
Stepper X => XMIN
Stepper Y => YMIN
Stepper Z => ZMIN
Stepper Y2 => YMAX but not exist on SKRV1.4 so E1DET 1.25
Stepper Z2 => ZMAX but not exist on SKRV1.4 so E0DET 1.26
so :
#define Y_DUAL_STEPPER_DRIVERS
#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
#define INVERT_Y2_VS_Y_DIR true // Set ‘true’ if Y motors should rotate in opposite directions
#define Y_DUAL_ENDSTOPS
#if ENABLED(Y_DUAL_ENDSTOPS)
#define Y2_USE_ENDSTOP _E1DIAG_ // _YMAX_ : lowrider SKRV1.4 has no YMAX(Y+), use E1DET instead.
#define Y2_ENDSTOP_ADJUSTMENT 0
#endif
#endif
#define NUM_Z_STEPPER_DRIVERS 2 // (1-4) Z options change based on how many
#if NUM_Z_STEPPER_DRIVERS > 1
#define Z_MULTI_ENDSTOPS
#if ENABLED(Z_MULTI_ENDSTOPS)
#define Z2_USE_ENDSTOP _E0DIAG_ //_XMAX_
#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
as you can see in pins of SKRV1.4 :
// TMC StallGuard DIAG pins
//
#define X_DIAG_PIN P1_29 // X-STOP
#define Y_DIAG_PIN P1_28 // Y-STOP
#define Z_DIAG_PIN P1_27 // Z-STOP
#define E0_DIAG_PIN P1_26 // E0DET
#define E1_DIAG_PIN P1_25 // E1DET
//
// Limit Switches
//
#ifdef X_STALL_SENSITIVITY
#define X_STOP_PIN X_DIAG_PIN
#if X_HOME_DIR < 0
#define X_MAX_PIN P1_26 // E0DET
#else
#define X_MIN_PIN P1_26 // E0DET
#endif
#else
#define X_STOP_PIN P1_29 // X-STOP
#endif
#ifdef Y_STALL_SENSITIVITY
#define Y_STOP_PIN Y_DIAG_PIN
#if Y_HOME_DIR < 0
#define Y_MAX_PIN P1_25 // E1DET
#else
#define Y_MIN_PIN P1_25 // E1DET
#endif
#else
#define Y_STOP_PIN P1_28 // Y-STOP
#endif
#ifdef Z_STALL_SENSITIVITY
#define Z_STOP_PIN Z_DIAG_PIN
#if Z_HOME_DIR < 0
#define Z_MAX_PIN P1_00 // PWRDET
#else
#define Z_MIN_PIN P1_00 // PWRDET
#endif
#else
#ifndef Z_STOP_PIN
#define Z_STOP_PIN P1_27 // Z-STOP
#endif
#endif
so you can modify the pins_BTT_SKR_V1.4 as:
/* Lowrider2 configuration
(In LR base configuration the number of Extruders is still 1, but I want 0)
SKR V1.4 : XM YM ZMA E0M E1M
Marlin principle: X Y Z E0 E1 E2 …
Marlin EXTRUDERS 1 : X Y Z E0 X2 Y2 Z2 …
Marlin EXTRUDERS 0 : X Y Z X2 Y2 Z2 …
Lowrider my objective: X Y Z Y2 Z2
*/
/*
// as EXTRUDERS is 0 : E0 has been replaced by Y2, pins swaped to Z2
#define E0_STEP_PIN P2_13
#define E0_DIR_PIN P0_11
#define E0_ENABLE_PIN P2_12
#ifndef E0_CS_PIN
#define E0_CS_PIN P1_04
#endif
*/
// E0 is replaced by Y2:
// choice 1 : if EXTRUDERS is 0 or 1 : assign to dummy pin (unused)
// so assign the E0 Pins to bed (for safety) but as no bed on lowrider2 CNC, but normally if EXTRUDERS 0 ( E0 does not exist) so no need to reassign to BED , I supppose it could be unset (-1))
#define E0_STEP_PIN P2_05
#define E0_DIR_PIN P2_05
#define E0_ENABLE_PIN P2_05
#ifndef E0_CS_PIN
#define E0_CS_PIN P2_05
#endif
// choice 2: unassign the pins for E0
//if EXTRUDERS is 1 : Disable pin Assignement for E0 => not supported by marlin , ie compilation error as not defined. Sanitycheck:1819:4 ( improvement to ask ?)
// if EXTRUDERS is 0 : Disable pins assignement for E0 => no compilation error during sanityCheck.
// choice 2: if EXTRUDERS is 0 : Disable pin Assignement for E0 => compilation completed without any errors and warning
/*#define E0_STEP_PIN -1
#define E0_DIR_PIN -1
#define E0_ENABLE_PIN -1
#ifndef E0_CS_PIN
#define E0_CS_PIN -1
#endif
*/
/*
// as EXTRUDERS is 0 : E1 has been renamed for lowrider as Z2, pins swapped to Z2
#define E1_STEP_PIN P1_15
#define E1_DIR_PIN P1_14
#define E1_ENABLE_PIN P1_16
#ifndef E1_CS_PIN
#define E1_CS_PIN P1_01
#endif
*/
// Choice 1 : if EXTRUDERS is 0 or 1 so I can assign to dummy pins (unused)
// Assign the E1 Pins to bed(for safety) as no bed on lowrider2 CNC , but normally if EXTRUDERS 0 ( E1 does not exist) so no need to reassign to BED
/*#define E1_STEP_PIN P2_05
#define E1_DIR_PIN P2_05
#define E1_ENABLE_PIN P2_05
#ifndef E1_CS_PIN
#define E1_CS_PIN P2_05
#endif
*/
// choice 2: If EXTRUDERS is 1 or 0 , E1 is not existant : so I disable pin Assignement for E1 => compilation is completed without any errors or warning. Does this choice could be used safely ( sanity ok but in real usage which impact ?)
#define E1_STEP_PIN -1
#define E1_DIR_PIN -1
#define E1_ENABLE_PIN -1
#ifndef E1_CS_PIN
#define E1_CS_PIN -1
#endif
// E0 becomes Y2 :
// Lowrider if EXTRUDERS = 0 , so marlin will E0=>X1 et E1=>Y2 but Lowrider2 I want E0=Y2 et E1=Z2, then Pins.h : pins E0 assigned to Y2, pins of E1 assigned to Z2
#define Y2_STEP_PIN P2_13
#define Y2_DIR_PIN P0_11
#define Y2_ENABLE_PIN P2_12
#ifndef Y2_CS_PIN
#define Y2_CS_PIN P1_04
#endif
// E1 becomes Z2
// Lowrider if EXTRUDERS = 0 , so marlin will E0=>X1 et E1=>Y2 but Lowrider2 I want E0=Y2 et E1=Z2, then Pins.h : pins E0 assigned to Y2, pins of E1 assigned to Z2
#define Z2_STEP_PIN P1_15
#define Z2_DIR_PIN P1_14
#define Z2_ENABLE_PIN P1_16
#ifndef Z2_CS_PIN
#define Z2_CS_PIN P1_01
#endif