mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-24 12:35:51 +00:00
Update backlash code
This commit is contained in:
parent
7b4c3bd92a
commit
aeec9ef76b
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -1177,17 +1177,20 @@ void MarlinSettings::postprocess() {
|
||||
// Backlash Compensation
|
||||
//
|
||||
{
|
||||
#if ENABLED(BACKLASH_COMPENSATION)
|
||||
const float (&backlash_distance_mm)[XYZ] = backlash.distance_mm;
|
||||
const uint8_t &backlash_correction = backlash.correction;
|
||||
#ifdef BACKLASH_DISTANCE_MM
|
||||
const float (&backlash_distance_mm)[XYZ] = backlash.distance_mm;
|
||||
#else
|
||||
const float backlash_distance_mm[XYZ] = { 0 };
|
||||
const uint8_t backlash_correction = 0;
|
||||
const float backlash_distance_mm[XYZ] = { 0 };
|
||||
#endif
|
||||
#if ENABLED(BACKLASH_COMPENSATION)
|
||||
const uint8_t &backlash_correction = backlash.correction;
|
||||
#else
|
||||
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
|
||||
//
|
||||
{
|
||||
#if ENABLED(BACKLASH_COMPENSATION)
|
||||
float (&backlash_distance_mm)[XYZ] = backlash.distance_mm;
|
||||
uint8_t &backlash_correction = backlash.correction;
|
||||
#ifdef BACKLASH_DISTANCE_MM
|
||||
float (&backlash_distance_mm)[XYZ] = backlash.distance_mm;
|
||||
#else
|
||||
float backlash_distance_mm[XYZ];
|
||||
#endif
|
||||
#if ENABLED(BACKLASH_COMPENSATION)
|
||||
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]);
|
||||
|
Loading…
Reference in New Issue
Block a user