Replace MBL Z hacking
This commit is contained in:
@ -3450,7 +3450,7 @@ inline void gcode_G28() {
|
||||
stepper.synchronize();
|
||||
|
||||
// Disable the leveling matrix before homing
|
||||
#if PLANNER_LEVELING
|
||||
#if PLANNER_LEVELING || ENABLED(MESH_BED_LEVELING)
|
||||
set_bed_leveling_enabled(false);
|
||||
#endif
|
||||
|
||||
@ -3464,31 +3464,6 @@ inline void gcode_G28() {
|
||||
extruder_duplication_enabled = false;
|
||||
#endif
|
||||
|
||||
/**
|
||||
* For mesh bed leveling deactivate the mesh calculations, will be turned
|
||||
* on again when homing all axis
|
||||
*/
|
||||
#if ENABLED(MESH_BED_LEVELING)
|
||||
float pre_home_z = MESH_HOME_SEARCH_Z;
|
||||
if (mbl.active()) {
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("MBL was active");
|
||||
#endif
|
||||
// Use known Z position if already homed
|
||||
if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS]) {
|
||||
set_bed_leveling_enabled(false);
|
||||
pre_home_z = current_position[Z_AXIS];
|
||||
}
|
||||
else {
|
||||
mbl.set_active(false);
|
||||
current_position[Z_AXIS] = pre_home_z;
|
||||
}
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) DEBUG_POS("Set Z to pre_home_z", current_position);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
setup_for_endstop_or_probe_move();
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("> endstops.enable(true)");
|
||||
@ -3620,43 +3595,14 @@ inline void gcode_G28() {
|
||||
|
||||
// Enable mesh leveling again
|
||||
#if ENABLED(MESH_BED_LEVELING)
|
||||
if (mbl.has_mesh()) {
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("MBL has mesh");
|
||||
#endif
|
||||
if (mbl.reactivate()) {
|
||||
set_bed_leveling_enabled(true);
|
||||
if (home_all_axis || (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && homeZ)) {
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("MBL Z homing");
|
||||
#endif
|
||||
current_position[Z_AXIS] = MESH_HOME_SEARCH_Z
|
||||
#if Z_HOME_DIR > 0
|
||||
+ Z_MAX_POS
|
||||
#endif
|
||||
;
|
||||
SYNC_PLAN_POSITION_KINEMATIC();
|
||||
mbl.set_active(true);
|
||||
#if ENABLED(MESH_G28_REST_ORIGIN)
|
||||
current_position[Z_AXIS] = 0.0;
|
||||
current_position[Z_AXIS] = LOGICAL_Z_POSITION(Z_MIN_POS);
|
||||
set_destination_to_current();
|
||||
line_to_destination(homing_feedrate_mm_s[Z_AXIS]);
|
||||
stepper.synchronize();
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) DEBUG_POS("MBL Rest Origin", current_position);
|
||||
#endif
|
||||
#else
|
||||
planner.unapply_leveling(current_position);
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) DEBUG_POS("MBL adjusted MESH_HOME_SEARCH_Z", current_position);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
else if ((axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS]) && (homeX || homeY)) {
|
||||
current_position[Z_AXIS] = pre_home_z;
|
||||
SYNC_PLAN_POSITION_KINEMATIC();
|
||||
mbl.set_active(true);
|
||||
planner.unapply_leveling(current_position);
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) DEBUG_POS("MBL Home X or Y", current_position);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -3664,16 +3610,16 @@ inline void gcode_G28() {
|
||||
|
||||
clean_up_after_endstop_or_probe_move();
|
||||
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("<<< gcode_G28");
|
||||
#endif
|
||||
|
||||
// Restore the active tool after homing
|
||||
#if HOTENDS > 1
|
||||
tool_change(old_tool_index, 0, true);
|
||||
#endif
|
||||
|
||||
report_current_position();
|
||||
|
||||
#if ENABLED(DEBUG_LEVELING_FEATURE)
|
||||
if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("<<< gcode_G28");
|
||||
#endif
|
||||
}
|
||||
|
||||
#if HAS_PROBING_PROCEDURE
|
||||
@ -3690,25 +3636,21 @@ inline void gcode_G28() {
|
||||
|
||||
inline void _mbl_goto_xy(const float &x, const float &y) {
|
||||
const float old_feedrate_mm_s = feedrate_mm_s;
|
||||
feedrate_mm_s = homing_feedrate_mm_s[Z_AXIS];
|
||||
|
||||
current_position[Z_AXIS] = MESH_HOME_SEARCH_Z
|
||||
#if Z_CLEARANCE_BETWEEN_PROBES > Z_HOMING_HEIGHT
|
||||
+ Z_CLEARANCE_BETWEEN_PROBES
|
||||
#elif Z_HOMING_HEIGHT > 0
|
||||
+ Z_HOMING_HEIGHT
|
||||
#endif
|
||||
;
|
||||
line_to_current_position();
|
||||
#if MANUAL_PROBE_HEIGHT > 0
|
||||
feedrate_mm_s = homing_feedrate_mm_s[Z_AXIS];
|
||||
current_position[Z_AXIS] = LOGICAL_Z_POSITION(Z_MIN_POS) + MANUAL_PROBE_HEIGHT;
|
||||
line_to_current_position();
|
||||
#endif
|
||||
|
||||
feedrate_mm_s = MMM_TO_MMS(XY_PROBE_SPEED);
|
||||
current_position[X_AXIS] = LOGICAL_X_POSITION(x);
|
||||
current_position[Y_AXIS] = LOGICAL_Y_POSITION(y);
|
||||
line_to_current_position();
|
||||
|
||||
#if Z_CLEARANCE_BETWEEN_PROBES > 0 || Z_HOMING_HEIGHT > 0
|
||||
#if MANUAL_PROBE_HEIGHT > 0
|
||||
feedrate_mm_s = homing_feedrate_mm_s[Z_AXIS];
|
||||
current_position[Z_AXIS] = LOGICAL_Z_POSITION(MESH_HOME_SEARCH_Z);
|
||||
current_position[Z_AXIS] = LOGICAL_Z_POSITION(Z_MIN_POS) + 0.2; // just slightly over the bed
|
||||
line_to_current_position();
|
||||
#endif
|
||||
|
||||
@ -3721,7 +3663,6 @@ inline void gcode_G28() {
|
||||
|
||||
void mbl_mesh_report() {
|
||||
SERIAL_PROTOCOLLNPGM("Num X,Y: " STRINGIFY(MESH_NUM_X_POINTS) "," STRINGIFY(MESH_NUM_Y_POINTS));
|
||||
SERIAL_PROTOCOLLNPGM("Z search height: " STRINGIFY(MESH_HOME_SEARCH_Z));
|
||||
SERIAL_PROTOCOLPGM("Z offset: "); SERIAL_PROTOCOL_F(mbl.z_offset, 5);
|
||||
SERIAL_PROTOCOLLNPGM("\nMeasured points:");
|
||||
for (uint8_t py = 0; py < MESH_NUM_Y_POINTS; py++) {
|
||||
@ -3757,6 +3698,10 @@ inline void gcode_G28() {
|
||||
inline void gcode_G29() {
|
||||
|
||||
static int probe_index = -1;
|
||||
#if ENABLED(min_software_endstops) || ENABLED(max_software_endstops)
|
||||
static bool enable_soft_endstops;
|
||||
#endif
|
||||
|
||||
const MeshLevelingState state = code_seen('S') ? (MeshLevelingState)code_value_byte() : MeshReport;
|
||||
if (state < 0 || state > 5) {
|
||||
SERIAL_PROTOCOLLNPGM("S out of range (0-5).");
|
||||
@ -3788,33 +3733,34 @@ inline void gcode_G28() {
|
||||
}
|
||||
// For each G29 S2...
|
||||
if (probe_index == 0) {
|
||||
// For the initial G29 S2 make Z a positive value (e.g., 4.0)
|
||||
current_position[Z_AXIS] = MESH_HOME_SEARCH_Z
|
||||
#if Z_HOME_DIR > 0
|
||||
+ Z_MAX_POS
|
||||
#endif
|
||||
;
|
||||
SYNC_PLAN_POSITION_KINEMATIC();
|
||||
#if ENABLED(min_software_endstops) || ENABLED(max_software_endstops)
|
||||
// For the initial G29 S2 save software endstop state
|
||||
enable_soft_endstops = soft_endstops_enabled;
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
// For G29 S2 after adjusting Z.
|
||||
mbl.set_zigzag_z(probe_index - 1, current_position[Z_AXIS]);
|
||||
#if ENABLED(min_software_endstops) || ENABLED(max_software_endstops)
|
||||
soft_endstops_enabled = enable_soft_endstops;
|
||||
#endif
|
||||
}
|
||||
// If there's another point to sample, move there with optional lift.
|
||||
if (probe_index < (MESH_NUM_X_POINTS) * (MESH_NUM_Y_POINTS)) {
|
||||
mbl.zigzag(probe_index, px, py);
|
||||
_mbl_goto_xy(mbl.get_probe_x(px), mbl.get_probe_y(py));
|
||||
|
||||
#if ENABLED(min_software_endstops) || ENABLED(max_software_endstops)
|
||||
// Disable software endstops to allow manual adjustment
|
||||
// If G29 is not completed, they will not be re-enabled
|
||||
soft_endstops_enabled = false;
|
||||
#endif
|
||||
|
||||
probe_index++;
|
||||
}
|
||||
else {
|
||||
// One last "return to the bed" (as originally coded) at completion
|
||||
current_position[Z_AXIS] = MESH_HOME_SEARCH_Z
|
||||
#if Z_CLEARANCE_BETWEEN_PROBES > Z_HOMING_HEIGHT
|
||||
+ Z_CLEARANCE_BETWEEN_PROBES
|
||||
#elif Z_HOMING_HEIGHT > 0
|
||||
+ Z_HOMING_HEIGHT
|
||||
#endif
|
||||
;
|
||||
current_position[Z_AXIS] = LOGICAL_Z_POSITION(Z_MIN_POS) + MANUAL_PROBE_HEIGHT;
|
||||
line_to_current_position();
|
||||
stepper.synchronize();
|
||||
|
||||
@ -3822,7 +3768,12 @@ inline void gcode_G28() {
|
||||
SERIAL_PROTOCOLLNPGM("Mesh probing done.");
|
||||
probe_index = -1;
|
||||
mbl.set_has_mesh(true);
|
||||
mbl.set_reactivate(true);
|
||||
enqueue_and_echo_commands_P(PSTR("G28"));
|
||||
#if HAS_BUZZER
|
||||
lcd_buzz(200, 659);
|
||||
lcd_buzz(200, 698);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
@ -3871,14 +3822,8 @@ inline void gcode_G28() {
|
||||
break;
|
||||
|
||||
case MeshReset:
|
||||
if (mbl.active()) {
|
||||
current_position[Z_AXIS] -= MESH_HOME_SEARCH_Z;
|
||||
planner.apply_leveling(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS]);
|
||||
mbl.reset();
|
||||
SYNC_PLAN_POSITION_KINEMATIC();
|
||||
}
|
||||
else
|
||||
mbl.reset();
|
||||
reset_bed_level();
|
||||
break;
|
||||
|
||||
} // switch(state)
|
||||
|
||||
|
Reference in New Issue
Block a user