From aeec9ef76be19640dc0ca70c26fffadc445eba11 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 20 May 2019 21:34:08 -0500 Subject: [PATCH] Update backlash code --- Marlin/src/feature/backlash.cpp | 10 +++++---- Marlin/src/feature/backlash.h | 6 +----- Marlin/src/gcode/calibrate/G425.cpp | 7 ++++-- Marlin/src/module/configuration_store.cpp | 26 ++++++++++++++--------- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/Marlin/src/feature/backlash.cpp b/Marlin/src/feature/backlash.cpp index 3254fb3f3..67a4afb32 100644 --- a/Marlin/src/feature/backlash.cpp +++ b/Marlin/src/feature/backlash.cpp @@ -20,11 +20,13 @@ * */ -#include "../Marlin.h" +#include "../inc/MarlinConfigPre.h" #if ENABLED(BACKLASH_COMPENSATION) #include "backlash.h" + +#include "../module/motion.h" #include "../module/planner.h" #if ENABLED(BACKLASH_GCODE) @@ -75,10 +77,10 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const // to segments where there is no direction change. static int32_t residual_error[XYZ] = { 0 }; #else - // No leftover residual error from segment to segment - int32_t residual_error[XYZ] = { 0 }; // No direction change, no correction. if (!changed_dir) return; + // No leftover residual error from segment to segment + int32_t residual_error[XYZ] = { 0 }; #endif const float f_corr = float(correction) / 255.0f; @@ -100,7 +102,7 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const if (reversing == (error_correction < 0)) { if (segment_proportion == 0) segment_proportion = MIN(1.0f, block->millimeters / smoothing_mm); - error_correction = ceil(segment_proportion * error_correction); + error_correction = CEIL(segment_proportion * error_correction); } else error_correction = 0; // Don't take up any backlash in this segment, as it would subtract steps diff --git a/Marlin/src/feature/backlash.h b/Marlin/src/feature/backlash.h index c35675f1b..d1e1e6320 100644 --- a/Marlin/src/feature/backlash.h +++ b/Marlin/src/feature/backlash.h @@ -36,7 +36,7 @@ public: #endif static inline void set_correction(const float &v) { correction = MAX(0, MIN(1.0, v)) * all_on; } static inline float get_correction() { return float(ui8_to_percent(correction)) / 100.0f; } - #elif ENABLED(BACKLASH_COMPENSATION) + #else static constexpr uint8_t correction = (BACKLASH_CORRECTION) * 0xFF; #ifdef BACKLASH_DISTANCE_MM static constexpr float distance_mm[XYZ] = BACKLASH_DISTANCE_MM; @@ -46,10 +46,6 @@ public: #endif static inline void set_correction(float) { } static inline float get_correction() { return float(ui8_to_percent(correction)) / 100.0f; } - #else - static constexpr uint8_t correction = 0; - static inline void set_correction(float) { } - static inline float get_correction() { return 0; } #endif #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING) diff --git a/Marlin/src/gcode/calibrate/G425.cpp b/Marlin/src/gcode/calibrate/G425.cpp index fd854bf77..7d729437a 100644 --- a/Marlin/src/gcode/calibrate/G425.cpp +++ b/Marlin/src/gcode/calibrate/G425.cpp @@ -25,14 +25,17 @@ #if ENABLED(CALIBRATION_GCODE) #include "../gcode.h" + +#if ENABLED(BACKLASH_GCODE) + #include "../../feature/backlash.h" +#endif + #include "../../lcd/ultralcd.h" #include "../../module/motion.h" #include "../../module/planner.h" #include "../../module/tool_change.h" #include "../../module/endstops.h" #include "../../feature/bedlevel/bedlevel.h" -#include "../../feature/backlash.h" - /** * G425 backs away from the calibration object by various distances diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp index 50d5214ff..1da47e668 100644 --- a/Marlin/src/module/configuration_store.cpp +++ b/Marlin/src/module/configuration_store.cpp @@ -1177,17 +1177,20 @@ void MarlinSettings::postprocess() { // Backlash Compensation // { + #ifdef BACKLASH_DISTANCE_MM + const float (&backlash_distance_mm)[XYZ] = backlash.distance_mm; + #else + const float backlash_distance_mm[XYZ] = { 0 }; + #endif #if ENABLED(BACKLASH_COMPENSATION) - const float (&backlash_distance_mm)[XYZ] = backlash.distance_mm; - const uint8_t &backlash_correction = backlash.correction; + const uint8_t &backlash_correction = backlash.correction; #else - const float backlash_distance_mm[XYZ] = { 0 }; - const uint8_t backlash_correction = 0; + const uint8_t backlash_correction = 0; #endif #ifdef BACKLASH_SMOOTHING_MM - const float &backlash_smoothing_mm = backlash.smoothing_mm; + const float &backlash_smoothing_mm = backlash.smoothing_mm; #else - const float backlash_smoothing_mm = 3; + const float backlash_smoothing_mm = 3; #endif _FIELD_TEST(backlash_distance_mm); EEPROM_WRITE(backlash_distance_mm[X_AXIS]); @@ -1962,17 +1965,20 @@ void MarlinSettings::postprocess() { // Backlash Compensation // { + #ifdef BACKLASH_DISTANCE_MM + float (&backlash_distance_mm)[XYZ] = backlash.distance_mm; + #else + float backlash_distance_mm[XYZ]; + #endif #if ENABLED(BACKLASH_COMPENSATION) - float (&backlash_distance_mm)[XYZ] = backlash.distance_mm; - uint8_t &backlash_correction = backlash.correction; + uint8_t &backlash_correction = backlash.correction; #else - float backlash_distance_mm[XYZ]; uint8_t backlash_correction; #endif #ifdef BACKLASH_SMOOTHING_MM float &backlash_smoothing_mm = backlash.smoothing_mm; #else - float backlash_smoothing_mm; + float backlash_smoothing_mm; #endif _FIELD_TEST(backlash_distance_mm); EEPROM_READ(backlash_distance_mm[X_AXIS]);