UltraLCD enhancements (lower fan resolution, backlash menu) (#13519)
This commit is contained in:
		
				
					committed by
					
						
						Scott Lahteine
					
				
			
			
				
	
			
			
			
						parent
						
							de0f35f2d9
						
					
				
				
					commit
					5679fae11e
				
			@@ -30,6 +30,7 @@
 | 
			
		||||
 | 
			
		||||
#include "Marlin.h"
 | 
			
		||||
 | 
			
		||||
#include "core/utility.h"
 | 
			
		||||
#include "lcd/ultralcd.h"
 | 
			
		||||
#include "module/motion.h"
 | 
			
		||||
#include "module/planner.h"
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,16 @@ void safe_delay(millis_t ms) {
 | 
			
		||||
  #define RJDIGIT(n, f) ((n) >= (f) ? DIGIMOD(n, f) : ' ')
 | 
			
		||||
  #define MINUSOR(n, alt) (n >= 0 ? (alt) : (n = -n, '-'))
 | 
			
		||||
 | 
			
		||||
  // Convert a full-range unsigned 8bit int to a percentage
 | 
			
		||||
  char* ui8tostr_percent(const uint8_t i) {
 | 
			
		||||
    const uint16_t percent = 100 * i / 255;
 | 
			
		||||
    conv[3] = RJDIGIT(percent, 100);
 | 
			
		||||
    conv[4] = RJDIGIT(percent, 10);
 | 
			
		||||
    conv[5] = DIGIMOD(percent, 1);
 | 
			
		||||
    conv[6] = '%';
 | 
			
		||||
    return &conv[3];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Convert unsigned 8bit int to string 123 format
 | 
			
		||||
  char* ui8tostr3(const uint8_t i) {
 | 
			
		||||
    conv[4] = RJDIGIT(i, 100);
 | 
			
		||||
 
 | 
			
		||||
@@ -55,6 +55,9 @@ inline void serial_delay(const millis_t ms) {
 | 
			
		||||
 | 
			
		||||
#if ANY(ULTRA_LCD, DEBUG_LEVELING_FEATURE, EXTENSIBLE_UI)
 | 
			
		||||
 | 
			
		||||
  // Convert a full-range unsigned 8bit int to a percentage
 | 
			
		||||
  char* ui8tostr_percent(const uint8_t i);
 | 
			
		||||
 | 
			
		||||
  // Convert uint8_t to string with 123 format
 | 
			
		||||
  char* ui8tostr3(const uint8_t x);
 | 
			
		||||
 | 
			
		||||
@@ -135,3 +138,8 @@ public:
 | 
			
		||||
 | 
			
		||||
#define REMEMBER(N,X, ...) restorer<typeof(X)> restorer_##N(X, ##__VA_ARGS__)
 | 
			
		||||
#define RESTORE(N) restorer_##N.restore()
 | 
			
		||||
 | 
			
		||||
// Converts from an uint8_t in the range of 0-255 to an uint8_t
 | 
			
		||||
// in the range 0-100 while avoiding rounding artifacts
 | 
			
		||||
constexpr uint8_t ui8_to_percent(const uint8_t i) { return (int(i) * 100 + 127) / 255; }
 | 
			
		||||
constexpr uint8_t all_on = 0xFF, all_off = 0x00;
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,8 @@
 | 
			
		||||
#define HAS_Y_CENTER BOTH(CALIBRATION_MEASURE_FRONT, CALIBRATION_MEASURE_BACK)
 | 
			
		||||
 | 
			
		||||
#if ENABLED(BACKLASH_GCODE)
 | 
			
		||||
  extern float backlash_distance_mm[], backlash_correction, backlash_smoothing_mm;
 | 
			
		||||
  extern float backlash_distance_mm[], backlash_smoothing_mm;
 | 
			
		||||
  extern uint8_t backlash_correction;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
enum side_t : uint8_t { TOP, RIGHT, FRONT, LEFT, BACK, NUM_SIDES };
 | 
			
		||||
@@ -446,7 +447,7 @@ inline void calibrate_backlash(measurements_t &m, const float uncertainty) {
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    // New scope for TEMPORARY_BACKLASH_CORRECTION
 | 
			
		||||
    TEMPORARY_BACKLASH_CORRECTION(0.0f);
 | 
			
		||||
    TEMPORARY_BACKLASH_CORRECTION(all_off);
 | 
			
		||||
    TEMPORARY_BACKLASH_SMOOTHING(0.0f);
 | 
			
		||||
 | 
			
		||||
    probe_sides(m, uncertainty);
 | 
			
		||||
@@ -478,7 +479,7 @@ inline void calibrate_backlash(measurements_t &m, const float uncertainty) {
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
      // New scope for TEMPORARY_BACKLASH_CORRECTION
 | 
			
		||||
      TEMPORARY_BACKLASH_CORRECTION(1.0f);
 | 
			
		||||
      TEMPORARY_BACKLASH_CORRECTION(all_on);
 | 
			
		||||
      TEMPORARY_BACKLASH_SMOOTHING(0.0f);
 | 
			
		||||
      move_to(
 | 
			
		||||
        X_AXIS, current_position[X_AXIS] + 3,
 | 
			
		||||
@@ -513,7 +514,7 @@ inline void update_measurements(measurements_t &m, const AxisEnum axis) {
 | 
			
		||||
 *    - Call calibrate_backlash() beforehand for best accuracy
 | 
			
		||||
 */
 | 
			
		||||
inline void calibrate_toolhead(measurements_t &m, const float uncertainty, const uint8_t extruder) {
 | 
			
		||||
  TEMPORARY_BACKLASH_CORRECTION(1.0f);
 | 
			
		||||
  TEMPORARY_BACKLASH_CORRECTION(all_on);
 | 
			
		||||
  TEMPORARY_BACKLASH_SMOOTHING(0.0f);
 | 
			
		||||
 | 
			
		||||
  #if HOTENDS > 1
 | 
			
		||||
@@ -556,7 +557,7 @@ inline void calibrate_toolhead(measurements_t &m, const float uncertainty, const
 | 
			
		||||
 *   uncertainty    in     - How far away from the object to begin probing
 | 
			
		||||
 */
 | 
			
		||||
inline void calibrate_all_toolheads(measurements_t &m, const float uncertainty) {
 | 
			
		||||
  TEMPORARY_BACKLASH_CORRECTION(1.0f);
 | 
			
		||||
  TEMPORARY_BACKLASH_CORRECTION(all_on);
 | 
			
		||||
  TEMPORARY_BACKLASH_SMOOTHING(0.0f);
 | 
			
		||||
 | 
			
		||||
  HOTEND_LOOP() calibrate_toolhead(m, uncertainty, e);
 | 
			
		||||
@@ -588,7 +589,7 @@ inline void calibrate_all() {
 | 
			
		||||
    reset_hotend_offsets();
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  TEMPORARY_BACKLASH_CORRECTION(1.0f);
 | 
			
		||||
  TEMPORARY_BACKLASH_CORRECTION(all_on);
 | 
			
		||||
  TEMPORARY_BACKLASH_SMOOTHING(0.0f);
 | 
			
		||||
 | 
			
		||||
  // Do a fast and rough calibration of the toolheads
 | 
			
		||||
 
 | 
			
		||||
@@ -26,8 +26,8 @@
 | 
			
		||||
 | 
			
		||||
#include "../../module/planner.h"
 | 
			
		||||
 | 
			
		||||
float backlash_distance_mm[XYZ] = BACKLASH_DISTANCE_MM,
 | 
			
		||||
      backlash_correction = BACKLASH_CORRECTION;
 | 
			
		||||
float   backlash_distance_mm[XYZ] = BACKLASH_DISTANCE_MM;
 | 
			
		||||
uint8_t backlash_correction = BACKLASH_CORRECTION * all_on;
 | 
			
		||||
 | 
			
		||||
#ifdef BACKLASH_SMOOTHING_MM
 | 
			
		||||
  float backlash_smoothing_mm = BACKLASH_SMOOTHING_MM;
 | 
			
		||||
@@ -74,7 +74,7 @@ void GcodeSuite::M425() {
 | 
			
		||||
 | 
			
		||||
  if (parser.seen('F')) {
 | 
			
		||||
    planner.synchronize();
 | 
			
		||||
    backlash_correction = MAX(0, MIN(1.0, parser.value_linear_units()));
 | 
			
		||||
    backlash_correction = MAX(0, MIN(1.0, parser.value_float())) * all_on;
 | 
			
		||||
    noArgs = false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -90,8 +90,7 @@ void GcodeSuite::M425() {
 | 
			
		||||
    SERIAL_ECHOPGM("Backlash correction is ");
 | 
			
		||||
    if (!backlash_correction) SERIAL_ECHOPGM("in");
 | 
			
		||||
    SERIAL_ECHOLNPGM("active:");
 | 
			
		||||
    SERIAL_ECHOPAIR("  Correction Amount/Fade-out:     F", backlash_correction);
 | 
			
		||||
    SERIAL_ECHOLNPGM("     (F1.0 = full, F0.0 = none)");
 | 
			
		||||
    SERIAL_ECHOLNPAIR("  Correction Amount/Fade-out:     F", float(ui8_to_percent(backlash_correction)) / 100, "     (F1.0 = full, F0.0 = none)");
 | 
			
		||||
    SERIAL_ECHOPGM("  Backlash Distance (mm):        ");
 | 
			
		||||
    LOOP_XYZ(a) {
 | 
			
		||||
      SERIAL_CHAR(' ');
 | 
			
		||||
 
 | 
			
		||||
@@ -82,7 +82,8 @@
 | 
			
		||||
#include "ui_api.h"
 | 
			
		||||
 | 
			
		||||
#if ENABLED(BACKLASH_GCODE)
 | 
			
		||||
  extern float backlash_distance_mm[XYZ], backlash_correction;
 | 
			
		||||
  extern float backlash_distance_mm[XYZ];
 | 
			
		||||
  extern uint8_t backlash_correction;
 | 
			
		||||
  #ifdef BACKLASH_SMOOTHING_MM
 | 
			
		||||
    extern float backlash_smoothing_mm;
 | 
			
		||||
  #endif
 | 
			
		||||
@@ -686,8 +687,8 @@ namespace ExtUI {
 | 
			
		||||
    void setAxisBacklash_mm(const float value, const axis_t axis)
 | 
			
		||||
                                                      { backlash_distance_mm[axis] = clamp(value,0,5); }
 | 
			
		||||
 | 
			
		||||
    float getBacklashCorrection_percent()             { return backlash_correction * 100; }
 | 
			
		||||
    void setBacklashCorrection_percent(const float value) { backlash_correction = clamp(value, 0, 100) / 100.0f; }
 | 
			
		||||
    float getBacklashCorrection_percent()             { return ui8_to_percent(backlash_correction); }
 | 
			
		||||
    void setBacklashCorrection_percent(const float value) { backlash_correction = map(clamp(value, 0, 100), 0, 100, 0, 255); }
 | 
			
		||||
 | 
			
		||||
    #ifdef BACKLASH_SMOOTHING_MM
 | 
			
		||||
      float getBacklashSmoothing_mm()                 { return backlash_smoothing_mm; }
 | 
			
		||||
 
 | 
			
		||||
@@ -1386,3 +1386,13 @@
 | 
			
		||||
#ifndef MSG_SERVICE_IN
 | 
			
		||||
  #define MSG_SERVICE_IN                      _UxGT(" in:")
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef MSG_BACKLASH
 | 
			
		||||
  #define MSG_BACKLASH                        _UxGT("Backlash")
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef MSG_BACKLASH_CORRECTION
 | 
			
		||||
  #define MSG_BACKLASH_CORRECTION             _UxGT("Correction")
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef MSG_BACKLASH_SMOOTHING
 | 
			
		||||
  #define MSG_BACKLASH_SMOOTHING              _UxGT("Smoothing")
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -43,6 +43,7 @@ bool printer_busy();
 | 
			
		||||
    static inline char* strfunc(const float value) { return STRFUNC((TYPE) value); } \
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
DECLARE_MENU_EDIT_TYPE(uint8_t,  percent,     ui8tostr_percent,1     );   // 100%       right-justified
 | 
			
		||||
DECLARE_MENU_EDIT_TYPE(int16_t,  int3,        i16tostr3,       1     );   // 123, -12   right-justified
 | 
			
		||||
DECLARE_MENU_EDIT_TYPE(int16_t,  int4,        i16tostr4sign,   1     );   // 1234, -123 right-justified
 | 
			
		||||
DECLARE_MENU_EDIT_TYPE(int8_t,   int8,        i8tostr3,        1     );   // 123, -12   right-justified
 | 
			
		||||
@@ -102,6 +103,7 @@ FORCE_INLINE void draw_menu_item_edit_P(const bool sel, const uint8_t row, PGM_P
 | 
			
		||||
  typedef void NAME##_void
 | 
			
		||||
#define DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(NAME) _DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(MenuItemInfo_##NAME::type_t, NAME, MenuItemInfo_##NAME::strfunc)
 | 
			
		||||
 | 
			
		||||
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(percent);          // 100%       right-justified
 | 
			
		||||
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(int3);             // 123, -12   right-justified
 | 
			
		||||
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(int4);             // 1234, -123 right-justified
 | 
			
		||||
DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(int8);             // 123, -12   right-justified
 | 
			
		||||
@@ -174,6 +176,7 @@ class TMenuItem : MenuItemBase {
 | 
			
		||||
 | 
			
		||||
#define DECLARE_MENU_EDIT_ITEM(NAME) typedef TMenuItem<MenuItemInfo_##NAME> MenuItem_##NAME;
 | 
			
		||||
 | 
			
		||||
DECLARE_MENU_EDIT_ITEM(percent);
 | 
			
		||||
DECLARE_MENU_EDIT_ITEM(int3);
 | 
			
		||||
DECLARE_MENU_EDIT_ITEM(int4);
 | 
			
		||||
DECLARE_MENU_EDIT_ITEM(int8);
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,7 @@
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void menu_tmc();
 | 
			
		||||
void menu_backlash();
 | 
			
		||||
 | 
			
		||||
#if ENABLED(DAC_STEPPER_CURRENT)
 | 
			
		||||
 | 
			
		||||
@@ -647,6 +648,10 @@ void menu_advanced_settings() {
 | 
			
		||||
    }
 | 
			
		||||
  #endif // !SLIM_LCD_MENUS
 | 
			
		||||
 | 
			
		||||
  #if ENABLED(BACKLASH_GCODE)
 | 
			
		||||
    MENU_ITEM(submenu, MSG_BACKLASH, menu_backlash);
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  #if ENABLED(DAC_STEPPER_CURRENT)
 | 
			
		||||
    MENU_ITEM(submenu, MSG_DRIVE_STRENGTH, menu_dac);
 | 
			
		||||
  #endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										58
									
								
								Marlin/src/lcd/menu/menu_backlash.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Marlin/src/lcd/menu/menu_backlash.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Marlin 3D Printer Firmware
 | 
			
		||||
 * Copyright (C) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
 | 
			
		||||
 *
 | 
			
		||||
 * Based on Sprinter and grbl.
 | 
			
		||||
 * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Backlash Menu
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "../../inc/MarlinConfigPre.h"
 | 
			
		||||
 | 
			
		||||
#if HAS_LCD_MENU && ENABLED(BACKLASH_GCODE)
 | 
			
		||||
 | 
			
		||||
#include "menu.h"
 | 
			
		||||
 | 
			
		||||
extern float backlash_distance_mm[XYZ];
 | 
			
		||||
extern uint8_t backlash_correction;
 | 
			
		||||
 | 
			
		||||
#ifdef BACKLASH_SMOOTHING_MM
 | 
			
		||||
  extern float backlash_smoothing_mm;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void menu_backlash() {
 | 
			
		||||
  START_MENU();
 | 
			
		||||
  MENU_BACK(MSG_MAIN);
 | 
			
		||||
 | 
			
		||||
  MENU_MULTIPLIER_ITEM_EDIT(percent, MSG_BACKLASH_CORRECTION, &backlash_correction, all_off, all_on);
 | 
			
		||||
 | 
			
		||||
  #define EDIT_BACKLASH_DISTANCE(N) MENU_MULTIPLIER_ITEM_EDIT(float43, MSG_##N, &backlash_distance_mm[_AXIS(N)], 0.0f, 9.9f);
 | 
			
		||||
  EDIT_BACKLASH_DISTANCE(A);
 | 
			
		||||
  EDIT_BACKLASH_DISTANCE(B);
 | 
			
		||||
  EDIT_BACKLASH_DISTANCE(C);
 | 
			
		||||
 | 
			
		||||
  #ifdef BACKLASH_SMOOTHING_MM
 | 
			
		||||
    MENU_MULTIPLIER_ITEM_EDIT(float43, MSG_BACKLASH_SMOOTHING, &backlash_smoothing_mm, 0.0f, 9.9f);
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
  END_MENU();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // HAS_LCD_MENU && BACKLASH_COMPENSATION
 | 
			
		||||
@@ -395,21 +395,21 @@ void menu_temperature() {
 | 
			
		||||
  //
 | 
			
		||||
  #if FAN_COUNT > 0
 | 
			
		||||
    #if HAS_FAN0
 | 
			
		||||
      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(uint8, MSG_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.lcd_tmpfan_speed[0], 0, 255, thermalManager.lcd_setFanSpeed0);
 | 
			
		||||
      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(percent, MSG_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.lcd_tmpfan_speed[0], 0, 255, thermalManager.lcd_setFanSpeed0);
 | 
			
		||||
      #if ENABLED(EXTRA_FAN_SPEED)
 | 
			
		||||
        MENU_MULTIPLIER_ITEM_EDIT(uint8, MSG_EXTRA_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.new_fan_speed[0], 3, 255);
 | 
			
		||||
        MENU_MULTIPLIER_ITEM_EDIT(percent, MSG_EXTRA_FAN_SPEED FAN_SPEED_1_SUFFIX, &thermalManager.new_fan_speed[0], 3, 255);
 | 
			
		||||
      #endif
 | 
			
		||||
    #endif
 | 
			
		||||
    #if HAS_FAN1 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 1)
 | 
			
		||||
      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(uint8, MSG_FAN_SPEED " 2", &thermalManager.lcd_tmpfan_speed[1], 0, 255, thermalManager.lcd_setFanSpeed1);
 | 
			
		||||
      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(percent, MSG_FAN_SPEED " 2", &thermalManager.lcd_tmpfan_speed[1], 0, 255, thermalManager.lcd_setFanSpeed1);
 | 
			
		||||
      #if ENABLED(EXTRA_FAN_SPEED)
 | 
			
		||||
        MENU_MULTIPLIER_ITEM_EDIT(uint8, MSG_EXTRA_FAN_SPEED " 2", &thermalManager.new_fan_speed[1], 3, 255);
 | 
			
		||||
        MENU_MULTIPLIER_ITEM_EDIT(percent, MSG_EXTRA_FAN_SPEED " 2", &thermalManager.new_fan_speed[1], 3, 255);
 | 
			
		||||
      #endif
 | 
			
		||||
    #endif
 | 
			
		||||
    #if HAS_FAN2 || (ENABLED(SINGLENOZZLE) && EXTRUDERS > 2)
 | 
			
		||||
      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(uint8, MSG_FAN_SPEED " 3", &thermalManager.lcd_tmpfan_speed[2], 0, 255, thermalManager.lcd_setFanSpeed2);
 | 
			
		||||
      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(percent, MSG_FAN_SPEED " 3", &thermalManager.lcd_tmpfan_speed[2], 0, 255, thermalManager.lcd_setFanSpeed2);
 | 
			
		||||
      #if ENABLED(EXTRA_FAN_SPEED)
 | 
			
		||||
        MENU_MULTIPLIER_ITEM_EDIT(uint8, MSG_EXTRA_FAN_SPEED " 3", &thermalManager.new_fan_speed[2], 3, 255);
 | 
			
		||||
        MENU_MULTIPLIER_ITEM_EDIT(percent, MSG_EXTRA_FAN_SPEED " 3", &thermalManager.new_fan_speed[2], 3, 255);
 | 
			
		||||
      #endif
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif // FAN_COUNT > 0
 | 
			
		||||
 
 | 
			
		||||
@@ -1572,13 +1572,14 @@ void Planner::synchronize() {
 | 
			
		||||
 */
 | 
			
		||||
#if ENABLED(BACKLASH_COMPENSATION)
 | 
			
		||||
  #if ENABLED(BACKLASH_GCODE)
 | 
			
		||||
    extern float backlash_distance_mm[], backlash_correction;
 | 
			
		||||
    extern float backlash_distance_mm[];
 | 
			
		||||
    extern uint8_t backlash_correction;
 | 
			
		||||
    #ifdef BACKLASH_SMOOTHING_MM
 | 
			
		||||
      extern float backlash_smoothing_mm;
 | 
			
		||||
    #endif
 | 
			
		||||
  #else
 | 
			
		||||
    constexpr float backlash_distance_mm[XYZ] = BACKLASH_DISTANCE_MM,
 | 
			
		||||
                    backlash_correction = BACKLASH_CORRECTION;
 | 
			
		||||
    constexpr uint8_t backlash_correction = BACKLASH_CORRECTION * 255;
 | 
			
		||||
    #ifdef BACKLASH_SMOOTHING_MM
 | 
			
		||||
      constexpr float backlash_smoothing_mm = BACKLASH_SMOOTHING_MM;
 | 
			
		||||
    #endif
 | 
			
		||||
@@ -1612,13 +1613,15 @@ void Planner::synchronize() {
 | 
			
		||||
      if (!changed_dir) return;
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    const float f_corr = float(backlash_correction) / 255.0f;
 | 
			
		||||
 | 
			
		||||
    LOOP_XYZ(axis) {
 | 
			
		||||
      if (backlash_distance_mm[axis]) {
 | 
			
		||||
        const bool reversing = TEST(dm,axis);
 | 
			
		||||
 | 
			
		||||
        // When an axis changes direction, add axis backlash to the residual error
 | 
			
		||||
        if (TEST(changed_dir, axis))
 | 
			
		||||
          residual_error[axis] += backlash_correction * (reversing ? -1.0f : 1.0f) * backlash_distance_mm[axis] * planner.settings.axis_steps_per_mm[axis];
 | 
			
		||||
          residual_error[axis] += (reversing ? -f_corr : f_corr) * backlash_distance_mm[axis] * planner.settings.axis_steps_per_mm[axis];
 | 
			
		||||
 | 
			
		||||
        // Decide how much of the residual error to correct in this segment
 | 
			
		||||
        int32_t error_correction = residual_error[axis];
 | 
			
		||||
 
 | 
			
		||||
@@ -420,7 +420,7 @@ class Temperature {
 | 
			
		||||
        static uint8_t paused_fan_speed[FAN_COUNT];
 | 
			
		||||
      #endif
 | 
			
		||||
 | 
			
		||||
      static constexpr inline uint8_t fanPercent(const uint8_t speed) { return (int(speed) * 100 + 127) / 255; }
 | 
			
		||||
      static constexpr inline uint8_t fanPercent(const uint8_t speed) { return ui8_to_percent(speed); }
 | 
			
		||||
 | 
			
		||||
      #if ENABLED(ADAPTIVE_FAN_SLOWING)
 | 
			
		||||
        static uint8_t fan_speed_scaler[FAN_COUNT];
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user