[2.0.x] Make MIN_PROBE_EDGE a general option (for electronic probes) (#10069)
Some probes don't work near the edges of the bed. This change promotes MIN_PROBE_EDGE to a general setting that applies to all probing functions.
This commit is contained in:
@ -1007,9 +1007,6 @@
|
||||
* Delta radius/rod trimmers/angle trimmers
|
||||
*/
|
||||
#if ENABLED(DELTA)
|
||||
#ifndef DELTA_PROBEABLE_RADIUS
|
||||
#define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
|
||||
#endif
|
||||
#ifndef DELTA_CALIBRATION_RADIUS
|
||||
#define DELTA_CALIBRATION_RADIUS DELTA_PRINTABLE_RADIUS - 10
|
||||
#endif
|
||||
@ -1053,29 +1050,34 @@
|
||||
* Bed Probing rectangular bounds
|
||||
* These can be further constrained in code for Delta and SCARA
|
||||
*/
|
||||
|
||||
#ifndef MIN_PROBE_EDGE
|
||||
#define MIN_PROBE_EDGE 0
|
||||
#endif
|
||||
|
||||
#if ENABLED(DELTA)
|
||||
// Probing points may be verified at compile time within the radius
|
||||
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
|
||||
// so that may be added to SanityCheck.h in the future.
|
||||
#define _MIN_PROBE_X (X_CENTER - DELTA_PRINTABLE_RADIUS)
|
||||
#define _MIN_PROBE_Y (Y_CENTER - DELTA_PRINTABLE_RADIUS)
|
||||
#define _MAX_PROBE_X (X_CENTER + DELTA_PRINTABLE_RADIUS)
|
||||
#define _MAX_PROBE_Y (Y_CENTER + DELTA_PRINTABLE_RADIUS)
|
||||
#define _MIN_PROBE_X (X_CENTER - (DELTA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE)
|
||||
#define _MIN_PROBE_Y (Y_CENTER - (DELTA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE)
|
||||
#define _MAX_PROBE_X (X_CENTER + DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE))
|
||||
#define _MAX_PROBE_Y (Y_CENTER + DELTA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE))
|
||||
#elif IS_SCARA
|
||||
#define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
|
||||
#define _MIN_PROBE_X (X_CENTER - (SCARA_PRINTABLE_RADIUS))
|
||||
#define _MIN_PROBE_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS))
|
||||
#define _MAX_PROBE_X (X_CENTER + SCARA_PRINTABLE_RADIUS)
|
||||
#define _MAX_PROBE_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS)
|
||||
#define _MIN_PROBE_X (X_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE)
|
||||
#define _MIN_PROBE_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS) + MIN_PROBE_EDGE)
|
||||
#define _MAX_PROBE_X (X_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE))
|
||||
#define _MAX_PROBE_Y (Y_CENTER + SCARA_PRINTABLE_RADIUS - (MIN_PROBE_EDGE))
|
||||
#else
|
||||
// Boundaries for Cartesian probing based on bed limits
|
||||
#define _MIN_PROBE_X (max(X_MIN_BED, X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
|
||||
#define _MIN_PROBE_Y (max(Y_MIN_BED, Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
|
||||
#define _MAX_PROBE_X (min(X_MAX_BED, X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
|
||||
#define _MAX_PROBE_Y (min(Y_MAX_BED, Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
|
||||
#define _MIN_PROBE_X (max(X_MIN_BED + MIN_PROBE_EDGE, X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
|
||||
#define _MIN_PROBE_Y (max(Y_MIN_BED + MIN_PROBE_EDGE, Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
|
||||
#define _MAX_PROBE_X (min(X_MAX_BED - (MIN_PROBE_EDGE), X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
|
||||
#define _MAX_PROBE_Y (min(Y_MAX_BED - (MIN_PROBE_EDGE), Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
|
||||
#endif
|
||||
|
||||
// Allow configuration to override these for special purposes
|
||||
// These may be overridden in Configuration.h if a smaller area is desired
|
||||
#ifndef MIN_PROBE_X
|
||||
#define MIN_PROBE_X _MIN_PROBE_X
|
||||
#endif
|
||||
@ -1097,10 +1099,10 @@
|
||||
// Probing points may be verified at compile time within the radius
|
||||
// using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
|
||||
// so that may be added to SanityCheck.h in the future.
|
||||
#define _MESH_MIN_X (MIN_PROBE_X + MESH_INSET)
|
||||
#define _MESH_MIN_Y (MIN_PROBE_Y + MESH_INSET)
|
||||
#define _MESH_MAX_X (MAX_PROBE_X - (MESH_INSET))
|
||||
#define _MESH_MAX_Y (MAX_PROBE_Y - (MESH_INSET))
|
||||
#define _MESH_MIN_X (X_MIN_BED + MESH_INSET)
|
||||
#define _MESH_MIN_Y (Y_MIN_BED + MESH_INSET)
|
||||
#define _MESH_MAX_X (X_MAX_BED - (MESH_INSET))
|
||||
#define _MESH_MAX_Y (Y_MAX_BED - (MESH_INSET))
|
||||
#else
|
||||
// Boundaries for Cartesian probing based on set limits
|
||||
#if ENABLED(AUTO_BED_LEVELING_UBL)
|
||||
@ -1114,24 +1116,24 @@
|
||||
#define _MESH_MAX_X (min(X_MAX_BED - (MESH_INSET), X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER))
|
||||
#define _MESH_MAX_Y (min(Y_MAX_BED - (MESH_INSET), Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER))
|
||||
#endif
|
||||
|
||||
#endif
|
||||
/**
|
||||
* These may be overridden in Configuration if a smaller area is wanted
|
||||
*/
|
||||
#if ENABLED(MESH_BED_LEVELING) || ENABLED(AUTO_BED_LEVELING_UBL)
|
||||
#ifndef MESH_MIN_X
|
||||
#define MESH_MIN_X _MESH_MIN_X
|
||||
#endif
|
||||
#ifndef MESH_MIN_Y
|
||||
#define MESH_MIN_Y _MESH_MIN_Y
|
||||
#endif
|
||||
#ifndef MESH_MAX_X
|
||||
#define MESH_MAX_X _MESH_MAX_X
|
||||
#endif
|
||||
#ifndef MESH_MAX_Y
|
||||
#define MESH_MAX_Y _MESH_MAX_Y
|
||||
#endif
|
||||
|
||||
|
||||
// These may be overridden in Configuration.h if a smaller area is desired
|
||||
#ifndef MESH_MIN_X
|
||||
#define MESH_MIN_X _MESH_MIN_X
|
||||
#endif
|
||||
#ifndef MESH_MIN_Y
|
||||
#define MESH_MIN_Y _MESH_MIN_Y
|
||||
#endif
|
||||
#ifndef MESH_MAX_X
|
||||
#define MESH_MAX_X _MESH_MAX_X
|
||||
#endif
|
||||
#ifndef MESH_MAX_Y
|
||||
#define MESH_MAX_Y _MESH_MAX_Y
|
||||
#endif
|
||||
|
||||
#endif // MESH_BED_LEVELING || AUTO_BED_LEVELING_UBL
|
||||
|
||||
/**
|
||||
|
@ -42,11 +42,11 @@
|
||||
* the bleeding-edge source code, but sometimes this is not enough. This check
|
||||
* forces a minimum config file revision. Otherwise Marlin will not build.
|
||||
*/
|
||||
#if ! defined(CONFIGURATION_H_VERSION) || CONFIGURATION_H_VERSION < REQUIRED_CONFIGURATION_H_VERSION
|
||||
#if !defined(CONFIGURATION_H_VERSION) || CONFIGURATION_H_VERSION < REQUIRED_CONFIGURATION_H_VERSION
|
||||
#error "You are using an old Configuration.h file, update it before building Marlin."
|
||||
#endif
|
||||
|
||||
#if ! defined(CONFIGURATION_ADV_H_VERSION) || CONFIGURATION_ADV_H_VERSION < REQUIRED_CONFIGURATION_ADV_H_VERSION
|
||||
#if !defined(CONFIGURATION_ADV_H_VERSION) || CONFIGURATION_ADV_H_VERSION < REQUIRED_CONFIGURATION_ADV_H_VERSION
|
||||
#error "You are using an old Configuration_adv.h file, update it before building Marlin."
|
||||
#endif
|
||||
|
||||
@ -275,7 +275,7 @@
|
||||
/**
|
||||
* Serial
|
||||
*/
|
||||
#if !defined(__AVR__) || !defined(USBCON)
|
||||
#if !(defined(__AVR__) && defined(USBCON))
|
||||
#if ENABLED(SERIAL_XON_XOFF) && RX_BUFFER_SIZE < 1024
|
||||
#error "SERIAL_XON_XOFF requires RX_BUFFER_SIZE >= 1024 for reliable transfers without drops."
|
||||
#elif RX_BUFFER_SIZE && (RX_BUFFER_SIZE < 2 || !IS_POWER_OF_2(RX_BUFFER_SIZE))
|
||||
@ -856,12 +856,12 @@ static_assert(1 >= 0
|
||||
#elif DISABLED(RESTORE_LEVELING_AFTER_G28)
|
||||
#error "AUTO_BED_LEVELING_UBL (<=1.1.8) always has RESTORE_LEVELING_AFTER_G28 enabled. To keep this behavior, #define RESTORE_LEVELING_AFTER_G28. To keep it disabled comment out this line in SanityCheck.h."
|
||||
#else
|
||||
static_assert(WITHIN(UBL_PROBE_PT_1_X, MIN_PROBE_X, MAX_PROBE_X), "UBL_PROBE_PT_1_X can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(UBL_PROBE_PT_2_X, MIN_PROBE_X, MAX_PROBE_X), "UBL_PROBE_PT_2_X can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(UBL_PROBE_PT_3_X, MIN_PROBE_X, MAX_PROBE_X), "UBL_PROBE_PT_3_X can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(UBL_PROBE_PT_1_Y, MIN_PROBE_Y, MAX_PROBE_Y), "UBL_PROBE_PT_1_Y can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(UBL_PROBE_PT_2_Y, MIN_PROBE_Y, MAX_PROBE_Y), "UBL_PROBE_PT_2_Y can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(UBL_PROBE_PT_3_Y, MIN_PROBE_Y, MAX_PROBE_Y), "UBL_PROBE_PT_3_Y can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(UBL_PROBE_PT_1_X, MIN_PROBE_X, MAX_PROBE_X), "UBL_PROBE_PT_1_X is outside the probe region.");
|
||||
static_assert(WITHIN(UBL_PROBE_PT_2_X, MIN_PROBE_X, MAX_PROBE_X), "UBL_PROBE_PT_2_X is outside the probe region.");
|
||||
static_assert(WITHIN(UBL_PROBE_PT_3_X, MIN_PROBE_X, MAX_PROBE_X), "UBL_PROBE_PT_3_X is outside the probe region.");
|
||||
static_assert(WITHIN(UBL_PROBE_PT_1_Y, MIN_PROBE_Y, MAX_PROBE_Y), "UBL_PROBE_PT_1_Y is outside the probe region.");
|
||||
static_assert(WITHIN(UBL_PROBE_PT_2_Y, MIN_PROBE_Y, MAX_PROBE_Y), "UBL_PROBE_PT_2_Y is outside the probe region.");
|
||||
static_assert(WITHIN(UBL_PROBE_PT_3_Y, MIN_PROBE_Y, MAX_PROBE_Y), "UBL_PROBE_PT_3_Y is outside the probe region.");
|
||||
#endif
|
||||
|
||||
#elif OLDSCHOOL_ABL
|
||||
@ -870,10 +870,6 @@ static_assert(1 >= 0
|
||||
* Auto Bed Leveling
|
||||
*/
|
||||
|
||||
#if ENABLED(USE_RAW_KINEMATICS)
|
||||
#error "USE_RAW_KINEMATICS is not compatible with AUTO_BED_LEVELING"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Delta and SCARA have limited bed leveling options
|
||||
*/
|
||||
@ -886,28 +882,21 @@ static_assert(1 >= 0
|
||||
*/
|
||||
#if ABL_GRID
|
||||
|
||||
#ifdef DELTA_PROBEABLE_RADIUS
|
||||
static_assert(LEFT_PROBE_BED_POSITION >= -DELTA_PROBEABLE_RADIUS, "LEFT_PROBE_BED_POSITION must be within DELTA_PROBEABLE_RADIUS.");
|
||||
static_assert(RIGHT_PROBE_BED_POSITION <= DELTA_PROBEABLE_RADIUS, "RIGHT_PROBE_BED_POSITION must be within DELTA_PROBEABLE_RADIUS.");
|
||||
static_assert(FRONT_PROBE_BED_POSITION >= -DELTA_PROBEABLE_RADIUS, "FRONT_PROBE_BED_POSITION must be within DELTA_PROBEABLE_RADIUS.");
|
||||
static_assert(BACK_PROBE_BED_POSITION <= DELTA_PROBEABLE_RADIUS, "BACK_PROBE_BED_POSITION must be within DELTA_PROBEABLE_RADIUS.");
|
||||
#else
|
||||
static_assert(LEFT_PROBE_BED_POSITION < RIGHT_PROBE_BED_POSITION, "LEFT_PROBE_BED_POSITION must be less than RIGHT_PROBE_BED_POSITION.");
|
||||
static_assert(FRONT_PROBE_BED_POSITION < BACK_PROBE_BED_POSITION, "FRONT_PROBE_BED_POSITION must be less than BACK_PROBE_BED_POSITION.");
|
||||
static_assert(LEFT_PROBE_BED_POSITION >= MIN_PROBE_X, "LEFT_PROBE_BED_POSITION can't be reached by the Z probe.");
|
||||
static_assert(RIGHT_PROBE_BED_POSITION <= MAX_PROBE_X, "RIGHT_PROBE_BED_POSITION can't be reached by the Z probe.");
|
||||
static_assert(FRONT_PROBE_BED_POSITION >= MIN_PROBE_Y, "FRONT_PROBE_BED_POSITION can't be reached by the Z probe.");
|
||||
static_assert(BACK_PROBE_BED_POSITION <= MAX_PROBE_Y, "BACK_PROBE_BED_POSITION can't be reached by the Z probe.");
|
||||
#endif
|
||||
static_assert(LEFT_PROBE_BED_POSITION < RIGHT_PROBE_BED_POSITION, "LEFT_PROBE_BED_POSITION must be less than RIGHT_PROBE_BED_POSITION.");
|
||||
static_assert(FRONT_PROBE_BED_POSITION < BACK_PROBE_BED_POSITION, "FRONT_PROBE_BED_POSITION must be less than BACK_PROBE_BED_POSITION.");
|
||||
static_assert(LEFT_PROBE_BED_POSITION >= MIN_PROBE_X, "LEFT_PROBE_BED_POSITION is outside the probe region.");
|
||||
static_assert(RIGHT_PROBE_BED_POSITION <= MAX_PROBE_X, "RIGHT_PROBE_BED_POSITION is outside the probe region.");
|
||||
static_assert(FRONT_PROBE_BED_POSITION >= MIN_PROBE_Y, "FRONT_PROBE_BED_POSITION is outside the probe region.");
|
||||
static_assert(BACK_PROBE_BED_POSITION <= MAX_PROBE_Y, "BACK_PROBE_BED_POSITION is outside the probe region.");
|
||||
|
||||
#else // AUTO_BED_LEVELING_3POINT
|
||||
|
||||
static_assert(WITHIN(ABL_PROBE_PT_1_X, MIN_PROBE_X, MAX_PROBE_X), "ABL_PROBE_PT_1_X can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(ABL_PROBE_PT_2_X, MIN_PROBE_X, MAX_PROBE_X), "ABL_PROBE_PT_2_X can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(ABL_PROBE_PT_3_X, MIN_PROBE_X, MAX_PROBE_X), "ABL_PROBE_PT_3_X can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(ABL_PROBE_PT_1_Y, MIN_PROBE_Y, MAX_PROBE_Y), "ABL_PROBE_PT_1_Y can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(ABL_PROBE_PT_2_Y, MIN_PROBE_Y, MAX_PROBE_Y), "ABL_PROBE_PT_2_Y can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(ABL_PROBE_PT_3_Y, MIN_PROBE_Y, MAX_PROBE_Y), "ABL_PROBE_PT_3_Y can't be reached by the Z probe.");
|
||||
static_assert(WITHIN(ABL_PROBE_PT_1_X, MIN_PROBE_X, MAX_PROBE_X), "ABL_PROBE_PT_1_X is outside the probe region.");
|
||||
static_assert(WITHIN(ABL_PROBE_PT_2_X, MIN_PROBE_X, MAX_PROBE_X), "ABL_PROBE_PT_2_X is outside the probe region.");
|
||||
static_assert(WITHIN(ABL_PROBE_PT_3_X, MIN_PROBE_X, MAX_PROBE_X), "ABL_PROBE_PT_3_X is outside the probe region.");
|
||||
static_assert(WITHIN(ABL_PROBE_PT_1_Y, MIN_PROBE_Y, MAX_PROBE_Y), "ABL_PROBE_PT_1_Y is outside the probe region.");
|
||||
static_assert(WITHIN(ABL_PROBE_PT_2_Y, MIN_PROBE_Y, MAX_PROBE_Y), "ABL_PROBE_PT_2_Y is outside the probe region.");
|
||||
static_assert(WITHIN(ABL_PROBE_PT_3_Y, MIN_PROBE_Y, MAX_PROBE_Y), "ABL_PROBE_PT_3_Y is outside the probe region.");
|
||||
|
||||
#endif // AUTO_BED_LEVELING_3POINT
|
||||
|
||||
@ -968,9 +957,9 @@ static_assert(1 >= 0
|
||||
#if ENABLED(Z_SAFE_HOMING)
|
||||
#if HAS_BED_PROBE
|
||||
#if !WITHIN(Z_SAFE_HOMING_X_POINT, MIN_PROBE_X, MAX_PROBE_X)
|
||||
#error "Z_SAFE_HOMING_X_POINT can't be reached by the Z probe."
|
||||
#error "Z_SAFE_HOMING_X_POINT is outside the probe region."
|
||||
#elif !WITHIN(Z_SAFE_HOMING_Y_POINT, MIN_PROBE_Y, MAX_PROBE_Y)
|
||||
#error "Z_SAFE_HOMING_Y_POINT can't be reached by the Z probe."
|
||||
#error "Z_SAFE_HOMING_Y_POINT is outside the probe region."
|
||||
#endif
|
||||
#elif !WITHIN(Z_SAFE_HOMING_X_POINT, X_MIN_POS, X_MAX_POS)
|
||||
#error "Z_SAFE_HOMING_X_POINT can't be reached by the nozzle."
|
||||
|
Reference in New Issue
Block a user