G38 optional double touch
Made the double touch portion a conditional compile based on the PROBE_DOUBLE_TOUCH flag. ============================================== Bugfix The current G38 only stopped a move if it involved the Z axis. Moved all the G38 code to it's own section and put it where it would always be executed no matter what axis was moving or if the endstop was enabled. Also added a comment to configuration_adv to alert the user the double tap had to be turned on. ============================================== Change G38 back to using Z_MIN_PROBE There's no Z_MIN endstop if Z_DUAL_ENDSTOPS is enabled and you have them set to the top of the gantry. G38 started out as using the Z_MIN_PROBE pin. I don't remember why we changed it to the Z_MIN endstop.
This commit is contained in:
parent
100c9bc52d
commit
0934563b97
@ -649,6 +649,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -61,7 +61,7 @@
|
||||
* G30 - Single Z probe, probes bed at X Y location (defaults to current XY location)
|
||||
* G31 - Dock sled (Z_PROBE_SLED only)
|
||||
* G32 - Undock sled (Z_PROBE_SLED only)
|
||||
* G38 - Probe target - similar to G28 except it uses the Z_MIN endstop for all three axes
|
||||
* G38 - Probe target - similar to G28 except it uses the Z_MIN_PROBE for all three axes
|
||||
* G90 - Use Absolute Coordinates
|
||||
* G91 - Use Relative Coordinates
|
||||
* G92 - Set current position to coordinates given
|
||||
@ -4488,11 +4488,11 @@ inline void gcode_G28() {
|
||||
set_current_from_steppers_for_axis(ALL_AXES);
|
||||
SYNC_PLAN_POSITION_KINEMATIC();
|
||||
|
||||
// Only do remaining moves if target was hit
|
||||
if (G38_endstop_hit) {
|
||||
|
||||
G38_pass_fail = true;
|
||||
|
||||
#if ENABLED(PROBE_DOUBLE_TOUCH)
|
||||
// Move away by the retract distance
|
||||
set_destination_to_current();
|
||||
LOOP_XYZ(i) destination[i] += retract_mm[i];
|
||||
@ -4513,6 +4513,7 @@ inline void gcode_G28() {
|
||||
|
||||
set_current_from_steppers_for_axis(ALL_AXES);
|
||||
SYNC_PLAN_POSITION_KINEMATIC();
|
||||
#endif
|
||||
}
|
||||
|
||||
endstops.hit_on_purpose();
|
||||
@ -4524,7 +4525,7 @@ inline void gcode_G28() {
|
||||
* G38.2 - probe toward workpiece, stop on contact, signal error if failure
|
||||
* G38.3 - probe toward workpiece, stop on contact
|
||||
*
|
||||
* Like G28 except uses Z min endstop for all axes
|
||||
* Like G28 except uses Z min probe for all axes
|
||||
*/
|
||||
inline void gcode_G38(bool is_38_2) {
|
||||
// Get X Y Z E F
|
||||
|
@ -259,26 +259,25 @@ void Endstops::update() {
|
||||
// COPY_BIT: copy the value of SRC_BIT to DST_BIT in DST
|
||||
#define COPY_BIT(DST, SRC_BIT, DST_BIT) SET_BIT(DST, DST_BIT, TEST(DST, SRC_BIT))
|
||||
|
||||
#define _UPDATE_ENDSTOP(AXIS,MINMAX,CODE) do { \
|
||||
#define UPDATE_ENDSTOP(AXIS,MINMAX) do { \
|
||||
UPDATE_ENDSTOP_BIT(AXIS, MINMAX); \
|
||||
if (TEST_ENDSTOP(_ENDSTOP(AXIS, MINMAX)) && stepper.current_block->steps[_AXIS(AXIS)] > 0) { \
|
||||
_ENDSTOP_HIT(AXIS); \
|
||||
stepper.endstop_triggered(_AXIS(AXIS)); \
|
||||
CODE; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#if ENABLED(G38_PROBE_TARGET) && PIN_EXISTS(Z_MIN) // If G38 command then check Z_MIN for every axis and every direction
|
||||
|
||||
#define UPDATE_ENDSTOP(AXIS,MINMAX) do { \
|
||||
_UPDATE_ENDSTOP(AXIS,MINMAX,NOOP); \
|
||||
if (G38_move) _UPDATE_ENDSTOP(Z, MIN, G38_endstop_hit = true); \
|
||||
} while(0)
|
||||
|
||||
#else
|
||||
|
||||
#define UPDATE_ENDSTOP(AXIS,MINMAX) _UPDATE_ENDSTOP(AXIS,MINMAX,NOOP)
|
||||
|
||||
#if ENABLED(G38_PROBE_TARGET) && PIN_EXISTS(Z_MIN_PROBE) && !(CORE_IS_XY || CORE_IS_XZ)
|
||||
// If G38 command then check Z_MIN_PROBE for every axis and every direction
|
||||
if (G38_move) {
|
||||
UPDATE_ENDSTOP_BIT(Z, MIN_PROBE);
|
||||
if (TEST_ENDSTOP(_ENDSTOP(Z, MIN_PROBE))) {
|
||||
if (stepper.current_block->steps[_AXIS(X)] > 0) {_ENDSTOP_HIT(X); stepper.endstop_triggered(_AXIS(X));}
|
||||
else if (stepper.current_block->steps[_AXIS(Y)] > 0) {_ENDSTOP_HIT(Y); stepper.endstop_triggered(_AXIS(Y));}
|
||||
else if (stepper.current_block->steps[_AXIS(Z)] > 0) {_ENDSTOP_HIT(Z); stepper.endstop_triggered(_AXIS(Z));}
|
||||
G38_endstop_hit = true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CORE_IS_XY || CORE_IS_XZ
|
||||
|
@ -639,6 +639,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -639,6 +639,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -639,6 +639,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -622,6 +622,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -652,6 +652,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -639,6 +639,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -639,6 +639,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -639,6 +639,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -647,6 +647,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -639,6 +639,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -641,6 +641,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -641,6 +641,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -646,6 +646,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -641,6 +641,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -639,6 +639,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
@ -639,6 +639,7 @@
|
||||
//#define BEZIER_CURVE_SUPPORT
|
||||
|
||||
// G38.2 and G38.3 Probe Target
|
||||
// ENABLE PROBE_DOUBLE_TOUCH if you want G38 to double touch
|
||||
//#define G38_PROBE_TARGET
|
||||
#if ENABLED(G38_PROBE_TARGET)
|
||||
#define G38_MINIMUM_MOVE 0.0275 // minimum distance in mm that will produce a move (determined using the print statement in check_move)
|
||||
|
Loading…
Reference in New Issue
Block a user