Option for extra endstop check (#18424)
This commit is contained in:
		| @@ -719,6 +719,9 @@ | ||||
|  */ | ||||
| //#define ENDSTOP_NOISE_THRESHOLD 2 | ||||
|  | ||||
| // Check for stuck or disconnected endstops during homing moves. | ||||
| //#define DETECT_BROKEN_ENDSTOP | ||||
|  | ||||
| //============================================================================= | ||||
| //============================== Movement Settings ============================ | ||||
| //============================================================================= | ||||
|   | ||||
| @@ -861,10 +861,6 @@ void Endstops::update() { | ||||
|  | ||||
| #if ENABLED(SPI_ENDSTOPS) | ||||
|  | ||||
|   #define X_STOP (X_HOME_DIR < 0 ? X_MIN : X_MAX) | ||||
|   #define Y_STOP (Y_HOME_DIR < 0 ? Y_MIN : Y_MAX) | ||||
|   #define Z_STOP (Z_HOME_DIR < 0 ? Z_MIN : Z_MAX) | ||||
|  | ||||
|   bool Endstops::tmc_spi_homing_check() { | ||||
|     bool hit = false; | ||||
|     #if X_SPI_SENSORLESS | ||||
| @@ -875,7 +871,7 @@ void Endstops::update() { | ||||
|           || stepperZ.test_stall_status() | ||||
|         #endif | ||||
|       )) { | ||||
|         SBI(live_state, X_STOP); | ||||
|         SBI(live_state, X_ENDSTOP); | ||||
|         hit = true; | ||||
|       } | ||||
|     #endif | ||||
| @@ -887,7 +883,7 @@ void Endstops::update() { | ||||
|           || stepperZ.test_stall_status() | ||||
|         #endif | ||||
|       )) { | ||||
|         SBI(live_state, Y_STOP); | ||||
|         SBI(live_state, Y_ENDSTOP); | ||||
|         hit = true; | ||||
|       } | ||||
|     #endif | ||||
| @@ -899,7 +895,7 @@ void Endstops::update() { | ||||
|           || stepperY.test_stall_status() | ||||
|         #endif | ||||
|       )) { | ||||
|         SBI(live_state, Z_STOP); | ||||
|         SBI(live_state, Z_ENDSTOP); | ||||
|         hit = true; | ||||
|       } | ||||
|     #endif | ||||
| @@ -907,9 +903,9 @@ void Endstops::update() { | ||||
|   } | ||||
|  | ||||
|   void Endstops::clear_endstop_state() { | ||||
|     TERN_(X_SPI_SENSORLESS, CBI(live_state, X_STOP)); | ||||
|     TERN_(Y_SPI_SENSORLESS, CBI(live_state, Y_STOP)); | ||||
|     TERN_(Z_SPI_SENSORLESS, CBI(live_state, Z_STOP)); | ||||
|     TERN_(X_SPI_SENSORLESS, CBI(live_state, X_ENDSTOP)); | ||||
|     TERN_(Y_SPI_SENSORLESS, CBI(live_state, Y_ENDSTOP)); | ||||
|     TERN_(Z_SPI_SENSORLESS, CBI(live_state, Z_ENDSTOP)); | ||||
|   } | ||||
|  | ||||
| #endif // SPI_ENDSTOPS | ||||
|   | ||||
| @@ -38,6 +38,10 @@ enum EndstopEnum : char { | ||||
|   Z4_MIN, Z4_MAX | ||||
| }; | ||||
|  | ||||
| #define X_ENDSTOP (X_HOME_DIR < 0 ? X_MIN : X_MAX) | ||||
| #define Y_ENDSTOP (Y_HOME_DIR < 0 ? Y_MIN : Y_MAX) | ||||
| #define Z_ENDSTOP (Z_HOME_DIR < 0 ? TERN(HOMING_Z_WITH_PROBE, Z_MIN, Z_MIN_PROBE) : Z_MAX) | ||||
|  | ||||
| class Endstops { | ||||
|   public: | ||||
|     #if HAS_EXTRA_ENDSTOPS | ||||
|   | ||||
| @@ -1606,6 +1606,21 @@ void homeaxis(const AxisEnum axis) { | ||||
|       #endif | ||||
|     ); | ||||
|  | ||||
|     #if ENABLED(DETECT_BROKEN_ENDSTOP) | ||||
|       // Check for a broken endstop | ||||
|       EndstopEnum es; | ||||
|       switch (axis) { | ||||
|         default: | ||||
|         case X_AXIS: es = X_ENDSTOP; break; | ||||
|         case Y_AXIS: es = Y_ENDSTOP; break; | ||||
|         case Z_AXIS: es = Z_ENDSTOP; break; | ||||
|       } | ||||
|       if (TEST(endstops.state(), es)) { | ||||
|         SERIAL_ECHO_MSG("Bad ", axis_codes[axis], " Endstop?"); | ||||
|         kill(GET_TEXT(MSG_KILL_HOMING_FAILED)); | ||||
|       } | ||||
|     #endif | ||||
|  | ||||
|     // Slow move towards endstop until triggered | ||||
|     if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Home 2 Slow:"); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user