-
-
Notifications
You must be signed in to change notification settings - Fork 19.3k
Commit
Raise the servo probe before stow outside ABL context
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -372,7 +372,7 @@ static uint8_t target_extruder; | |
}; | ||
#endif | ||
|
||
#if HAS_SERVO_ENDSTOPS | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) | ||
const int servo_endstop_id[] = SERVO_ENDSTOP_IDS; | ||
const int servo_endstop_angle[][2] = SERVO_ENDSTOP_ANGLES; | ||
#endif | ||
|
@@ -724,7 +724,7 @@ void servo_init() { | |
servo[3].detach(); | ||
#endif | ||
|
||
#if HAS_SERVO_ENDSTOPS | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) | ||
|
||
endstops.enable_z_probe(false); | ||
|
||
|
@@ -1701,7 +1701,12 @@ static void setup_for_endstop_move() { | |
} | ||
|
||
inline void raise_z_after_probing() { | ||
do_blocking_move_to_z(current_position[Z_AXIS] + Z_RAISE_AFTER_PROBING); | ||
#if Z_RAISE_AFTER_PROBING > 0 | ||
#if ENABLED(DEBUG_LEVELING_FEATURE) | ||
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("raise_z_after_probing()"); | ||
#endif | ||
do_blocking_move_to_z(current_position[Z_AXIS] + Z_RAISE_AFTER_PROBING); | ||
#endif | ||
} | ||
|
||
static void clean_up_after_endstop_move() { | ||
|
@@ -1724,7 +1729,7 @@ static void setup_for_endstop_move() { | |
|
||
if (endstops.z_probe_enabled) return; | ||
|
||
#if HAS_SERVO_ENDSTOPS | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) | ||
|
||
// Engage Z Servo endstop if enabled | ||
if (servo_endstop_id[Z_AXIS] >= 0) servo[servo_endstop_id[Z_AXIS]].move(servo_endstop_angle[Z_AXIS][0]); | ||
|
@@ -1811,7 +1816,7 @@ static void setup_for_endstop_move() { | |
} | ||
|
||
static void stow_z_probe(bool doRaise = true) { | ||
#if !(HAS_SERVO_ENDSTOPS && (Z_RAISE_AFTER_PROBING > 0)) | ||
#if !(ENABLED(HAS_SERVO_ENDSTOPS) && (Z_RAISE_AFTER_PROBING > 0)) | ||
UNUSED(doRaise); | ||
#endif | ||
#if ENABLED(DEBUG_LEVELING_FEATURE) | ||
|
@@ -1820,21 +1825,13 @@ static void setup_for_endstop_move() { | |
|
||
if (!endstops.z_probe_enabled) return; | ||
|
||
#if HAS_SERVO_ENDSTOPS | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) | ||
|
||
// Retract Z Servo endstop if enabled | ||
if (servo_endstop_id[Z_AXIS] >= 0) { | ||
|
||
#if Z_RAISE_AFTER_PROBING > 0 | ||
if (doRaise) { | ||
#if ENABLED(DEBUG_LEVELING_FEATURE) | ||
if (DEBUGGING(LEVELING)) { | ||
SERIAL_ECHOPAIR("Raise Z (after) by ", Z_RAISE_AFTER_PROBING); | ||
SERIAL_EOL; | ||
SERIAL_ECHO("> SERVO_ENDSTOPS > raise_z_after_probing()"); | ||
SERIAL_EOL; | ||
} | ||
#endif | ||
raise_z_after_probing(); // this also updates current_position | ||
stepper.synchronize(); | ||
} | ||
|
@@ -2062,7 +2059,7 @@ static void setup_for_endstop_move() { | |
|
||
#endif // DELTA | ||
|
||
#if HAS_SERVO_ENDSTOPS && DISABLED(Z_PROBE_SLED) | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) && DISABLED(Z_PROBE_SLED) | ||
|
||
void raise_z_for_servo() { | ||
float zpos = current_position[Z_AXIS], z_dest = Z_RAISE_BEFORE_PROBING; | ||
|
@@ -2122,9 +2119,7 @@ static void setup_for_endstop_move() { | |
|
||
float oldXpos = current_position[X_AXIS]; // save x position | ||
if (dock) { | ||
#if Z_RAISE_AFTER_PROBING > 0 | ||
raise_z_after_probing(); // raise Z | ||
#endif | ||
raise_z_after_probing(); // raise Z | ||
// Dock sled a bit closer to ensure proper capturing | ||
do_blocking_move_to_x(X_MAX_POS + SLED_DOCKING_OFFSET + offset - 1); | ||
digitalWrite(SLED_PIN, LOW); // turn off magnet | ||
|
@@ -2173,33 +2168,36 @@ static void homeaxis(AxisEnum axis) { | |
sync_plan_position(); | ||
|
||
#if ENABLED(Z_PROBE_SLED) | ||
#define _Z_SERVO_TEST (axis != Z_AXIS) // deploy Z, servo.move XY | ||
#define _Z_PROBE_SUBTEST false // Z will never be invoked | ||
#define _Z_SERVO_TEST (axis != Z_AXIS) // already deployed Z | ||
#define _Z_SERVO_SUBTEST false // Z will never be invoked | ||
#define _Z_DEPLOY (dock_sled(false)) | ||
#define _Z_STOW (dock_sled(true)) | ||
#elif SERVO_LEVELING || ENABLED(FIX_MOUNTED_PROBE) | ||
#define _Z_SERVO_TEST (axis != Z_AXIS) // servo.move XY | ||
#define _Z_PROBE_SUBTEST false // Z will never be invoked | ||
#define _Z_SERVO_TEST (axis != Z_AXIS) // already deployed Z | ||
#define _Z_SERVO_SUBTEST false // Z will never be invoked | ||
#define _Z_DEPLOY (deploy_z_probe()) | ||
#define _Z_STOW (stow_z_probe()) | ||
#elif HAS_SERVO_ENDSTOPS | ||
#define _Z_SERVO_TEST true // servo.move X, Y, Z | ||
#define _Z_PROBE_SUBTEST (axis == Z_AXIS) // Z is a probe | ||
#elif ENABLED(HAS_SERVO_ENDSTOPS) | ||
#define _Z_SERVO_TEST true // Z not deployed yet | ||
#define _Z_SERVO_SUBTEST (axis == Z_AXIS) // Z is a probe | ||
#endif | ||
|
||
if (axis == Z_AXIS) { | ||
// If there's a Z probe that needs deployment... | ||
#if ENABLED(Z_PROBE_SLED) || SERVO_LEVELING || ENABLED(FIX_MOUNTED_PROBE) | ||
// ...and homing Z towards the bed? Deploy it. | ||
if (axis_home_dir < 0) _Z_DEPLOY; | ||
#endif | ||
} | ||
// If there's a Z probe that needs deployment... | ||
#if ENABLED(Z_PROBE_SLED) || SERVO_LEVELING || ENABLED(FIX_MOUNTED_PROBE) | ||
// ...and homing Z towards the bed? Deploy it. | ||
if (axis == Z_AXIS && axis_home_dir < 0) { | ||
#if ENABLED(DEBUG_LEVELING_FEATURE) | ||
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("> SERVO_LEVELING > " STRINGIFY(_Z_DEPLOY)); | ||
#endif | ||
_Z_DEPLOY; | ||
} | ||
#endif | ||
|
||
#if HAS_SERVO_ENDSTOPS | ||
// Engage an X or Y Servo endstop if enabled | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) | ||
// Engage an X, Y (or Z) Servo endstop if enabled | ||
if (_Z_SERVO_TEST && servo_endstop_id[axis] >= 0) { | ||
servo[servo_endstop_id[axis]].move(servo_endstop_angle[axis][0]); | ||
if (_Z_PROBE_SUBTEST) endstops.z_probe_enabled = true; | ||
if (_Z_SERVO_SUBTEST) endstops.z_probe_enabled = true; | ||
} | ||
#endif | ||
|
||
|
@@ -2316,7 +2314,7 @@ static void homeaxis(AxisEnum axis) { | |
axis_known_position[axis] = true; | ||
axis_homed[axis] = true; | ||
|
||
// Put away the Z probe | ||
// Put away the Z probe with a function | ||
#if ENABLED(Z_PROBE_SLED) || SERVO_LEVELING || ENABLED(FIX_MOUNTED_PROBE) | ||
if (axis == Z_AXIS && axis_home_dir < 0) { | ||
#if ENABLED(DEBUG_LEVELING_FEATURE) | ||
|
@@ -2326,16 +2324,32 @@ static void homeaxis(AxisEnum axis) { | |
} | ||
#endif | ||
|
||
// Retract Servo endstop if enabled | ||
#if HAS_SERVO_ENDSTOPS | ||
// Retract X, Y (or Z) Servo endstop if enabled | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) | ||
if (_Z_SERVO_TEST && servo_endstop_id[axis] >= 0) { | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
thinkyhead
Author
Member
|
||
// Raise the servo probe before stow outside ABL context. | ||
// This is a workaround to allow use of a Servo Probe without | ||
// ABL until more global probe handling is implemented. | ||
#if Z_RAISE_AFTER_PROBING > 0 | ||
if (axis == Z_AXIS) { | ||
#if ENABLED(DEBUG_LEVELING_FEATURE) | ||
if (DEBUGGING(LEVELING)) SERIAL_ECHOPAIR("Raise Z (after) by ", Z_RAISE_AFTER_PROBING); | ||
#endif | ||
current_position[Z_AXIS] = Z_RAISE_AFTER_PROBING; | ||
feedrate = homing_feedrate[Z_AXIS]; | ||
line_to_current_position(); | ||
stepper.synchronize(); | ||
} | ||
#endif | ||
|
||
#if ENABLED(DEBUG_LEVELING_FEATURE) | ||
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("> SERVO_ENDSTOPS > Stow with servo.move()"); | ||
#endif | ||
servo[servo_endstop_id[axis]].move(servo_endstop_angle[axis][1]); | ||
if (_Z_PROBE_SUBTEST) endstops.enable_z_probe(false); | ||
if (_Z_SERVO_SUBTEST) endstops.enable_z_probe(false); | ||
} | ||
#endif | ||
|
||
#endif // HAS_SERVO_ENDSTOPS | ||
|
||
} | ||
|
||
|
@@ -3564,7 +3578,7 @@ inline void gcode_G28() { | |
// Allen Key Probe for Delta | ||
#if ENABLED(Z_PROBE_ALLEN_KEY) || SERVO_LEVELING | ||
stow_z_probe(); | ||
#elif Z_RAISE_AFTER_PROBING > 0 | ||
#else | ||
raise_z_after_probing(); // for non Allen Key probes, such as simple mechanical probe | ||
#endif | ||
#else // !DELTA | ||
|
@@ -3624,7 +3638,7 @@ inline void gcode_G28() { | |
#endif | ||
|
||
current_position[Z_AXIS] = -zprobe_zoffset + (z_tmp - real_z) | ||
#if HAS_SERVO_ENDSTOPS || ENABLED(Z_PROBE_ALLEN_KEY) || ENABLED(Z_PROBE_SLED) | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) || ENABLED(Z_PROBE_ALLEN_KEY) || ENABLED(Z_PROBE_SLED) | ||
+ Z_RAISE_AFTER_PROBING | ||
#endif | ||
; | ||
|
@@ -3639,9 +3653,9 @@ inline void gcode_G28() { | |
// Sled assembly for Cartesian bots | ||
#if ENABLED(Z_PROBE_SLED) | ||
dock_sled(true); // dock the sled | ||
#elif Z_RAISE_AFTER_PROBING > 0 | ||
#else | ||
// Raise Z axis for non-delta and non servo based probes | ||
#if !defined(HAS_SERVO_ENDSTOPS) && DISABLED(Z_PROBE_ALLEN_KEY) && DISABLED(Z_PROBE_SLED) | ||
#if DISABLED(HAS_SERVO_ENDSTOPS) && DISABLED(Z_PROBE_ALLEN_KEY) && DISABLED(Z_PROBE_SLED) | ||
raise_z_after_probing(); | ||
#endif | ||
#endif | ||
|
@@ -3685,7 +3699,7 @@ inline void gcode_G28() { | |
* G30: Do a single Z probe at the current XY | ||
*/ | ||
inline void gcode_G30() { | ||
#if HAS_SERVO_ENDSTOPS | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) | ||
raise_z_for_servo(); | ||
#endif | ||
deploy_z_probe(); // Engage Z Servo endstop if available. Z_PROBE_SLED is missed here. | ||
|
@@ -3707,7 +3721,7 @@ inline void gcode_G28() { | |
|
||
clean_up_after_endstop_move(); // Too early. must be done after the stowing. | ||
|
||
#if HAS_SERVO_ENDSTOPS | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) | ||
raise_z_for_servo(); | ||
#endif | ||
stow_z_probe(false); // Retract Z Servo endstop if available. Z_PROBE_SLED is missed here. | ||
|
@@ -5816,13 +5830,13 @@ inline void gcode_M303() { | |
*/ | ||
inline void gcode_M400() { stepper.synchronize(); } | ||
|
||
#if ENABLED(AUTO_BED_LEVELING_FEATURE) && DISABLED(Z_PROBE_SLED) && (HAS_SERVO_ENDSTOPS || ENABLED(Z_PROBE_ALLEN_KEY)) | ||
#if ENABLED(AUTO_BED_LEVELING_FEATURE) && DISABLED(Z_PROBE_SLED) && (ENABLED(HAS_SERVO_ENDSTOPS) || ENABLED(Z_PROBE_ALLEN_KEY)) | ||
|
||
/** | ||
* M401: Engage Z Servo endstop if available | ||
*/ | ||
inline void gcode_M401() { | ||
#if HAS_SERVO_ENDSTOPS | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) | ||
raise_z_for_servo(); | ||
#endif | ||
deploy_z_probe(); | ||
|
@@ -5832,13 +5846,13 @@ inline void gcode_M400() { stepper.synchronize(); } | |
* M402: Retract Z Servo endstop if enabled | ||
*/ | ||
inline void gcode_M402() { | ||
#if HAS_SERVO_ENDSTOPS | ||
#if ENABLED(HAS_SERVO_ENDSTOPS) | ||
raise_z_for_servo(); | ||
#endif | ||
stow_z_probe(false); | ||
} | ||
|
||
#endif // AUTO_BED_LEVELING_FEATURE && (HAS_SERVO_ENDSTOPS || Z_PROBE_ALLEN_KEY) && !Z_PROBE_SLED | ||
#endif // AUTO_BED_LEVELING_FEATURE && (ENABLED(HAS_SERVO_ENDSTOPS) || Z_PROBE_ALLEN_KEY) && !Z_PROBE_SLED | ||
|
||
#if ENABLED(FILAMENT_WIDTH_SENSOR) | ||
|
||
|
@@ -7054,14 +7068,14 @@ void process_next_command() { | |
gcode_M400(); | ||
break; | ||
|
||
#if ENABLED(AUTO_BED_LEVELING_FEATURE) && (HAS_SERVO_ENDSTOPS || ENABLED(Z_PROBE_ALLEN_KEY)) && DISABLED(Z_PROBE_SLED) | ||
#if ENABLED(AUTO_BED_LEVELING_FEATURE) && (ENABLED(HAS_SERVO_ENDSTOPS) || ENABLED(Z_PROBE_ALLEN_KEY)) && DISABLED(Z_PROBE_SLED) | ||
case 401: | ||
gcode_M401(); | ||
break; | ||
case 402: | ||
gcode_M402(); | ||
break; | ||
#endif // AUTO_BED_LEVELING_FEATURE && (HAS_SERVO_ENDSTOPS || Z_PROBE_ALLEN_KEY) && !Z_PROBE_SLED | ||
#endif // AUTO_BED_LEVELING_FEATURE && (ENABLED(HAS_SERVO_ENDSTOPS) || Z_PROBE_ALLEN_KEY) && !Z_PROBE_SLED | ||
|
||
#if ENABLED(FILAMENT_WIDTH_SENSOR) | ||
case 404: //M404 Enter the nominal filament width (3mm, 1.75mm ) N<3.0> or display nominal filament width | ||
|
There is something not quite right.
If I have the servo and the active abl, Z_SERVO_TEST = (axis! = Z_AXIS), so here goes only if axis is not Z_AXIS and then do not the Z_RAISE_AFTER_PROBING...