From e073de5f44eb4965bb107f33da03742d6a6e5eed Mon Sep 17 00:00:00 2001 From: John Boiles Date: Sun, 28 Jul 2019 14:06:46 -0700 Subject: [PATCH] Settings for adjusting out-of-square endtops --- grbl/config.h | 7 +++++++ grbl/limits.c | 12 ++++++++++-- grbl/report.c | 1 + grbl/settings.c | 9 +++++++++ grbl/settings.h | 3 ++- 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/grbl/config.h b/grbl/config.h index 72244b395..1a79895cb 100644 --- a/grbl/config.h +++ b/grbl/config.h @@ -700,6 +700,13 @@ #define DEFAULT_AXIS_4_CURRENT 135 #define DEFAULT_AXIS_5_CURRENT 135 +#define DEFAULT_AXIS_1_ENDSTOP_ADJ 0 +#define DEFAULT_AXIS_2_ENDSTOP_ADJ 0 +#define DEFAULT_AXIS_3_ENDSTOP_ADJ 0 +#define DEFAULT_AXIS_4_ENDSTOP_ADJ 0 +#define DEFAULT_AXIS_5_ENDSTOP_ADJ 0 +#define DEFAULT_AXIS_6_ENDSTOP_ADJ 0 + // Paste CPU_MAP definitions here. // Paste default settings definitions here. diff --git a/grbl/limits.c b/grbl/limits.c index 74ba34aeb..e0792935c 100644 --- a/grbl/limits.c +++ b/grbl/limits.c @@ -380,12 +380,20 @@ void limits_go_home(uint8_t cycle_mask) #endif // Set target direction based on cycle mask and homing cycle approach state. // NOTE: This happens to compile smaller than any other implementation tried. + // Allow a per-stepper-axis offset to be set in to adjust for the machine + // or endstops not being perfectly square/aligned. + float axis_offset = 0; + if (n_cycle == 0 && N_AXIS == 5) { + if (settings.endstop_adj[idx] > 0) { + axis_offset = settings.endstop_adj[idx]; + } + } if (bit_istrue(settings.homing_dir_mask,bit(idx))) { if (approach) { target[idx] = -max_travel; } - else { target[idx] = max_travel; } + else { target[idx] = max_travel + axis_offset; } } else { if (approach) { target[idx] = max_travel; } - else { target[idx] = -max_travel; } + else { target[idx] = -max_travel - axis_offset; } } // Apply axislock to the step port pins active in this cycle. axislock[idx] = step_pin[idx]; diff --git a/grbl/report.c b/grbl/report.c index 5e6a5903e..bd6371ff6 100644 --- a/grbl/report.c +++ b/grbl/report.c @@ -216,6 +216,7 @@ void report_grbl_settings() { case 2: report_util_float_setting(val+idx,settings.acceleration[idx]/(60*60),N_DECIMAL_SETTINGVALUE); break; case 3: report_util_float_setting(val+idx,-settings.max_travel[idx],N_DECIMAL_SETTINGVALUE); break; case 4: report_util_float_setting(val+idx,settings.current[idx],N_DECIMAL_SETTINGVALUE); break; + case 5: report_util_float_setting(val+idx,settings.endstop_adj[idx],N_DECIMAL_SETTINGVALUE); break; } } val += AXIS_SETTINGS_INCREMENT; diff --git a/grbl/settings.c b/grbl/settings.c index f74782ea1..0e070d0d2 100644 --- a/grbl/settings.c +++ b/grbl/settings.c @@ -110,12 +110,16 @@ void settings_restore(uint8_t restore_flag) { settings.current[AXIS_1] = DEFAULT_AXIS_1_CURRENT; settings.current[AXIS_2] = DEFAULT_AXIS_2_CURRENT; settings.current[AXIS_3] = DEFAULT_AXIS_3_CURRENT; + settings.endstop_adj[AXIS_1] = DEFAULT_AXIS_1_ENDSTOP_ADJ; + settings.endstop_adj[AXIS_2] = DEFAULT_AXIS_2_ENDSTOP_ADJ; + settings.endstop_adj[AXIS_3] = DEFAULT_AXIS_3_ENDSTOP_ADJ; #if N_AXIS > 3 settings.steps_per_mm[AXIS_4] = DEFAULT_AXIS4_STEPS_PER_UNIT; settings.max_rate[AXIS_4] = DEFAULT_AXIS4_MAX_RATE; settings.acceleration[AXIS_4] = DEFAULT_AXIS4_ACCELERATION; settings.max_travel[AXIS_4] = (-DEFAULT_AXIS4_MAX_TRAVEL); settings.current[AXIS_4] = DEFAULT_AXIS_4_CURRENT; + settings.endstop_adj[AXIS_4] = DEFAULT_AXIS_4_ENDSTOP_ADJ; #endif #if N_AXIS > 4 settings.steps_per_mm[AXIS_5] = DEFAULT_AXIS5_STEPS_PER_UNIT; @@ -123,6 +127,7 @@ void settings_restore(uint8_t restore_flag) { settings.acceleration[AXIS_5] = DEFAULT_AXIS5_ACCELERATION; settings.max_travel[AXIS_5] = (-DEFAULT_AXIS5_MAX_TRAVEL); settings.current[AXIS_5] = DEFAULT_AXIS_5_CURRENT; + settings.endstop_adj[AXIS_5] = DEFAULT_AXIS_5_ENDSTOP_ADJ; #endif #if N_AXIS > 5 settings.steps_per_mm[AXIS_6] = DEFAULT_AXIS6_STEPS_PER_UNIT; @@ -130,6 +135,7 @@ void settings_restore(uint8_t restore_flag) { settings.acceleration[AXIS_6] = DEFAULT_AXIS6_ACCELERATION; settings.max_travel[AXIS_6] = (-DEFAULT_AXIS6_MAX_TRAVEL); settings.current[AXIS_6] = DEFAULT_AXIS_6_CURRENT; + settings.endstop_adj[AXIS_6] = DEFAULT_AXIS_6_ENDSTOP_ADJ #endif write_global_settings(); @@ -247,6 +253,9 @@ uint8_t settings_store_global_setting(uint8_t parameter, float value) { settings.current[parameter] = value; set_current(parameter, settings.current[parameter]); break; + case 5: + settings.endstop_adj[parameter] = value; + break; } break; // Exit while-loop after setting has been configured and proceed to the EEPROM write call. } else { diff --git a/grbl/settings.h b/grbl/settings.h index 536fd7712..44ca7960c 100644 --- a/grbl/settings.h +++ b/grbl/settings.h @@ -71,7 +71,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 5 +#define AXIS_N_SETTINGS 6 #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 @@ -83,6 +83,7 @@ typedef struct { float acceleration[N_AXIS]; float max_travel[N_AXIS]; float current[N_AXIS]; + float endstop_adj[N_AXIS]; // Remaining Grbl settings uint8_t pulse_microseconds;