diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 65d1799a6..fe62f3627 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -5707,6 +5707,22 @@ void process_commands() break; #endif +/*! + ### M88 - Move Z axis to a full-step position + */ +#ifdef TMC2130 + case 88: + if (axis_known_position[Z_AXIS]) { + float target_z = current_position[Z_AXIS] + float(1024 - tmc2130_rd_MSCNT(Z_AXIS)) / (tmc2130_get_res(Z_AXIS) * cs.axis_steps_per_mm[Z_AXIS]) + 0.16f; + if (target_z <= max_pos[Z_AXIS]) { + current_position[Z_AXIS] = target_z; + plan_buffer_line_curposXYZE(homing_feedrate[Z_AXIS]/60); + st_synchronize(); + } + } + break; +#endif + /*! ### M92 - Set Axis steps-per-unit M92: Set axis_steps_per_unit Allows programming of steps per unit (usually mm) for motor drives. These values are reset to firmware defaults on power on, unless saved to EEPROM if available (M500 in Marlin) diff --git a/Firmware/messages.cpp b/Firmware/messages.cpp index d68aca79f..7b8e586de 100644 --- a/Firmware/messages.cpp +++ b/Firmware/messages.cpp @@ -414,6 +414,7 @@ const char MSG_HOST_ACTION_START[] PROGMEM_N1 = "//action:start"; //// const char MSG_HOST_ACTION_UVLO_RECOVERY_READY[] PROGMEM_N1 = "//action:uvlo_recovery_ready"; //// const char MSG_HOST_ACTION_UVLO_AUTO_RECOVERY_READY[] PROGMEM_N1 = "//action:uvlo_auto_recovery_ready"; //// const char MSG_HOST_ACTION_NOTIFICATION[] PROGMEM_N1 = "//action:notification %S\n"; //// +const char MSG_FULLSTEP_Z[] PROGMEM_N1 = "Fullstep Z axis"; //// #ifdef HOST_SHUTDOWN const char MSG_HOST_ACTION_SHUTDOWN[] PROGMEM_N1 = "//action:shutdown"; //// #endif //HOST_SHUTOWN diff --git a/Firmware/messages.h b/Firmware/messages.h index 52adb82c4..404681130 100644 --- a/Firmware/messages.h +++ b/Firmware/messages.h @@ -416,6 +416,7 @@ extern const char MSG_HOST_ACTION_START[]; extern const char MSG_HOST_ACTION_UVLO_RECOVERY_READY[]; extern const char MSG_HOST_ACTION_UVLO_AUTO_RECOVERY_READY[]; extern const char MSG_HOST_ACTION_NOTIFICATION[]; +extern const char MSG_FULLSTEP_Z[]; #ifdef HOST_SHUTDOWN extern const char MSG_HOST_ACTION_SHUTDOWN[]; #endif //HOST_SHUTOWN diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 2b3001dee..12f098c25 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -4555,6 +4555,9 @@ static void lcd_calibration_menu() MENU_ITEM_SUBMENU_P(_T(MSG_V2_CALIBRATION), lcd_first_layer_calibration_reset); } MENU_ITEM_GCODE_P(_T(MSG_AUTO_HOME), G28W); + if (axis_known_position[Z_AXIS]) { + MENU_ITEM_GCODE_P(_T(MSG_FULLSTEP_Z), PSTR("M88")); + } #ifdef TMC2130 MENU_ITEM_FUNCTION_P(_T(MSG_BELTTEST), lcd_belttest_v); #endif //TMC2130