diff --git a/grbl/MotionControl.c b/grbl/MotionControl.c index f289c1d..06864da 100644 --- a/grbl/MotionControl.c +++ b/grbl/MotionControl.c @@ -37,7 +37,6 @@ static float target_prev[N_AXIS] = {0.0}; static uint8_t dir_negative[N_AXIS] = {0}; -static float backlash_comp[N_AXIS] = {DEFAULT_X_BACKLASH, DEFAULT_Y_BACKLASH, DEFAULT_Z_BACKLASH}; // Execute linear motion in absolute millimeter coordinates. Feed rate given in millimeters/second @@ -116,7 +115,7 @@ void MC_Line(float *target, Planner_LineData_t *pl_data) if(dir_negative[i] == 1) { dir_negative[i] = 0; - target_prev[i] += backlash_comp[i]; + target_prev[i] += settings.backlash[i]; // Backlash compensation pl_backlash.backlash_motion = 1; @@ -132,7 +131,7 @@ void MC_Line(float *target, Planner_LineData_t *pl_data) if(dir_negative[i] == 0) { dir_negative[i] = 1; - target_prev[i] -= backlash_comp[i]; + target_prev[i] -= settings.backlash[i]; // Backlash compensation pl_backlash.backlash_motion = 1; diff --git a/grbl/Report.c b/grbl/Report.c index ff1c1ef..c4377da 100644 --- a/grbl/Report.c +++ b/grbl/Report.c @@ -250,9 +250,12 @@ void Report_GrblSettings(void) { uint8_t idx, set_idx; uint8_t val = AXIS_SETTINGS_START_VAL; - for(set_idx = 0; set_idx < AXIS_N_SETTINGS; set_idx++) { - for(idx = 0; idx < N_AXIS; idx++) { - switch(set_idx) { + for(set_idx = 0; set_idx < AXIS_N_SETTINGS; set_idx++) + { + for(idx = 0; idx < N_AXIS; idx++) + { + switch(set_idx) + { case 0: report_util_float_setting(val+idx,settings.steps_per_mm[idx],N_DECIMAL_SETTINGVALUE); break; @@ -269,6 +272,10 @@ void Report_GrblSettings(void) { report_util_float_setting(val+idx,-settings.max_travel[idx],N_DECIMAL_SETTINGVALUE); break; + case 4: + report_util_float_setting(val+idx,settings.backlash[idx],N_DECIMAL_SETTINGVALUE); + break; + default: break; } diff --git a/grbl/Settings.c b/grbl/Settings.c index a988be8..8afa8a5 100644 --- a/grbl/Settings.c +++ b/grbl/Settings.c @@ -129,6 +129,10 @@ void Settings_Restore(uint8_t restore_flag) { settings.max_travel[Y_AXIS] = (-DEFAULT_Y_MAX_TRAVEL); settings.max_travel[Z_AXIS] = (-DEFAULT_Z_MAX_TRAVEL); + settings.backlash[X_AXIS] = DEFAULT_X_BACKLASH; + settings.backlash[Y_AXIS] = DEFAULT_Y_BACKLASH; + settings.backlash[Z_AXIS] = DEFAULT_Z_BACKLASH; + WriteGlobalSettings(); } @@ -261,6 +265,7 @@ uint8_t Settings_StoreGlobalSetting(uint8_t parameter, float value) { case 2: settings.acceleration[parameter] = value*60*60; break; // Convert to mm/min^2 for grbl internal use. case 3: settings.max_travel[parameter] = -value; break; // Store as negative for grbl internal use. + case 4: settings.backlash[parameter] = value; break; } break; // Exit while-loop after setting has been configured and proceed to the EEPROM write call. } diff --git a/grbl/Settings.h b/grbl/Settings.h index 179928a..54f66ae 100644 --- a/grbl/Settings.h +++ b/grbl/Settings.h @@ -28,7 +28,7 @@ // Version of the EEPROM data. Will be used to migrate existing data from older versions of Grbl // when firmware is upgraded. Always stored in byte 0 of eeprom -#define SETTINGS_VERSION 2 // NOTE: Check settings_reset() when moving to next version. +#define SETTINGS_VERSION 3 // NOTE: Check settings_reset() when moving to next version. // Define bit flag masks for the boolean settings in settings.system_flags @@ -78,7 +78,7 @@ // #define SETTING_INDEX_G92 N_COORDINATE_SYSTEM+2 // Coordinate offset (G92.2,G92.3 not supported) // Define Grbl axis settings numbering scheme. Starts at START_VAL, every INCREMENT, over N_SETTINGS. -#define AXIS_N_SETTINGS 4 +#define AXIS_N_SETTINGS 5 #define AXIS_SETTINGS_START_VAL 100 // NOTE: Reserving settings values >= 100 for axis settings. Up to 255. #define AXIS_SETTINGS_INCREMENT 10 // Must be greater than the number of axis settings @@ -95,6 +95,8 @@ typedef struct { float acceleration[N_AXIS]; float max_travel[N_AXIS]; + float backlash[N_AXIS]; + // Remaining Grbl settings // TODO: document system_flags uint8_t system_flags;