New build South Atlanta GA

AWESOME , I’ve been looking for this for so long . THANK YOU !

is there any chance you can take a picture of the wiring to the board , specially I want to know about the other y2 and z2 endstops . skr1.3 is straigh in this but not 1.4

BTW I did like above but I have this problem with the endstops in the code

I checked the pins if something was off but it seems everything is fine with the pin out chart of BTT


any Idea what this could be , did it happen before if yes how you solve it ?

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

2 Likes

But in case you still want to use XMAX , YMAX, ZMAX identifiers, then you need to modify the pinsèBTT_SKR_V1.4.h with new specific if rules as:

//

// 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

#elif ENABLED(X_DUAL_ENDSTOPS)

#ifndef X_MIN_PIN

#define X_MIN_PIN                      P1_29  // X-STOP

#endif

#ifndef X_MAX_PIN

#define X_MAX_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

#elif ENABLED(Y_DUAL_ENDSTOPS)

#ifndef Y_MIN_PIN

#define Y_MIN_PIN                      P1_28  // Y-STOP

#endif

#ifndef Y_MAX_PIN

#define Y_MAX_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

#elif ENABLED(Z_MULTI_ENDSTOPS)

#ifndef Z_MIN_PIN

#define Z_MIN_PIN                      P1_27  // Z-STOP

#endif

#ifndef Z_MAX_PIN

#define Z_MAX_PIN                      P1_00  // PWRDET

#endif

#else

#ifndef Z_STOP_PIN

#define Z_STOP_PIN                     P1_27  // Z-STOP

#endif

#endif

1 Like