mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-29 23:07:42 +00:00
🚸 Fix extra Z raises (#27395)
This commit is contained in:
parent
17a5a1f97d
commit
2c6f8a30f3
@ -371,7 +371,7 @@ void GcodeSuite::G28() {
|
|||||||
bool with_probe = ENABLED(HOMING_Z_WITH_PROBE);
|
bool with_probe = ENABLED(HOMING_Z_WITH_PROBE);
|
||||||
// Raise above the current Z (which should be synced in the planner)
|
// Raise above the current Z (which should be synced in the planner)
|
||||||
// The "height" for Z is a coordinate. But if Z is not trusted/homed make it relative.
|
// The "height" for Z is a coordinate. But if Z is not trusted/homed make it relative.
|
||||||
if (seenR || !TERN(HOME_AFTER_DEACTIVATE, axis_is_trusted, axis_was_homed)(Z_AXIS)) {
|
if (seenR || !(z_min_trusted || axis_should_home(Z_AXIS))) {
|
||||||
z_homing_height += current_position.z;
|
z_homing_height += current_position.z;
|
||||||
with_probe = false;
|
with_probe = false;
|
||||||
}
|
}
|
||||||
|
@ -652,6 +652,9 @@
|
|||||||
#if DISABLED(DELTA)
|
#if DISABLED(DELTA)
|
||||||
#undef DELTA_HOME_TO_SAFE_ZONE
|
#undef DELTA_HOME_TO_SAFE_ZONE
|
||||||
#endif
|
#endif
|
||||||
|
#if ANY(DELTA, AXEL_TPARA)
|
||||||
|
#define Z_CAN_FALL_DOWN
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This setting is also used by M109 when trying to calculate
|
* This setting is also used by M109 when trying to calculate
|
||||||
|
@ -80,6 +80,11 @@
|
|||||||
// Relative Mode. Enable with G91, disable with G90.
|
// Relative Mode. Enable with G91, disable with G90.
|
||||||
bool relative_mode; // = false
|
bool relative_mode; // = false
|
||||||
|
|
||||||
|
#if HAS_Z_AXIS
|
||||||
|
// If Z has been powered on trust that the real Z is >= current_position.z
|
||||||
|
bool z_min_trusted; // = false
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cartesian Current Position
|
* Cartesian Current Position
|
||||||
* Used to track the native machine position as moves are queued.
|
* Used to track the native machine position as moves are queued.
|
||||||
|
@ -433,6 +433,10 @@ void restore_feedrate_and_scaling();
|
|||||||
typedef bits_t(NUM_AXES) main_axes_bits_t;
|
typedef bits_t(NUM_AXES) main_axes_bits_t;
|
||||||
constexpr main_axes_bits_t main_axes_mask = _BV(NUM_AXES) - 1;
|
constexpr main_axes_bits_t main_axes_mask = _BV(NUM_AXES) - 1;
|
||||||
|
|
||||||
|
#if HAS_Z_AXIS
|
||||||
|
extern bool z_min_trusted; // If Z has been powered on trust that the real Z is >= current_position.z
|
||||||
|
#endif
|
||||||
|
|
||||||
void set_axis_is_at_home(const AxisEnum axis);
|
void set_axis_is_at_home(const AxisEnum axis);
|
||||||
|
|
||||||
#if HAS_ENDSTOPS
|
#if HAS_ENDSTOPS
|
||||||
|
@ -580,6 +580,7 @@ bool Stepper::disable_axis(const AxisEnum axis) {
|
|||||||
// and keep a count of how many times each ENA pin has been set.
|
// and keep a count of how many times each ENA pin has been set.
|
||||||
|
|
||||||
// If all the axes that share the enabled bit are disabled
|
// If all the axes that share the enabled bit are disabled
|
||||||
|
// toggle the ENA state that they all share.
|
||||||
const bool can_disable = can_axis_disable(axis);
|
const bool can_disable = can_axis_disable(axis);
|
||||||
if (can_disable) {
|
if (can_disable) {
|
||||||
#define _CASE_DISABLE(N) case N##_AXIS: DISABLE_AXIS_##N(); break;
|
#define _CASE_DISABLE(N) case N##_AXIS: DISABLE_AXIS_##N(); break;
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#include "../inc/MarlinConfig.h"
|
#include "../inc/MarlinConfig.h"
|
||||||
|
|
||||||
#include "planner.h"
|
#include "planner.h"
|
||||||
|
#include "motion.h"
|
||||||
#include "stepper/indirection.h"
|
#include "stepper/indirection.h"
|
||||||
#include "stepper/cycles.h"
|
#include "stepper/cycles.h"
|
||||||
#ifdef __AVR__
|
#ifdef __AVR__
|
||||||
@ -633,9 +634,18 @@ class Stepper {
|
|||||||
}
|
}
|
||||||
static void mark_axis_enabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
|
static void mark_axis_enabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
|
||||||
SBI(axis_enabled.bits, INDEX_OF_AXIS(axis, eindex));
|
SBI(axis_enabled.bits, INDEX_OF_AXIS(axis, eindex));
|
||||||
|
TERN_(HAS_Z_AXIS, if (axis == Z_AXIS) z_min_trusted = true);
|
||||||
|
// TODO: DELTA should have "Z" state affect all (ABC) motors and treat "XY" on/off as meaningless
|
||||||
}
|
}
|
||||||
static void mark_axis_disabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
|
static void mark_axis_disabled(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
|
||||||
CBI(axis_enabled.bits, INDEX_OF_AXIS(axis, eindex));
|
CBI(axis_enabled.bits, INDEX_OF_AXIS(axis, eindex));
|
||||||
|
#if HAS_Z_AXIS
|
||||||
|
if (TERN0(Z_CAN_FALL_DOWN, axis == Z_AXIS)) {
|
||||||
|
z_min_trusted = false;
|
||||||
|
current_position.z = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
// TODO: DELTA should have "Z" state affect all (ABC) motors and treat "XY" on/off as meaningless
|
||||||
}
|
}
|
||||||
static bool can_axis_disable(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
|
static bool can_axis_disable(const AxisEnum axis E_OPTARG(const uint8_t eindex=0)) {
|
||||||
return !any_enable_overlap() || !(axis_enabled.bits & enable_overlap[INDEX_OF_AXIS(axis, eindex)]);
|
return !any_enable_overlap() || !(axis_enabled.bits & enable_overlap[INDEX_OF_AXIS(axis, eindex)]);
|
||||||
|
Loading…
Reference in New Issue
Block a user