Skip to content

Commit

Permalink
Settings for adjusting out-of-square endtops
Browse files Browse the repository at this point in the history
  • Loading branch information
johnboiles committed Jul 28, 2019
1 parent 927ebd1 commit e073de5
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 3 deletions.
7 changes: 7 additions & 0 deletions grbl/config.h
Expand Up @@ -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.
Expand Down
12 changes: 10 additions & 2 deletions grbl/limits.c
Expand Up @@ -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];
Expand Down
1 change: 1 addition & 0 deletions grbl/report.c
Expand Up @@ -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;
Expand Down
9 changes: 9 additions & 0 deletions grbl/settings.c
Expand Up @@ -110,26 +110,32 @@ 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;
settings.max_rate[AXIS_5] = DEFAULT_AXIS5_MAX_RATE;
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;
settings.max_rate[AXIS_6] = DEFAULT_AXIS6_MAX_RATE;
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();
Expand Down Expand Up @@ -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 {
Expand Down
3 changes: 2 additions & 1 deletion grbl/settings.h
Expand Up @@ -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

Expand All @@ -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;
Expand Down

0 comments on commit e073de5

Please sign in to comment.