diff --git a/grbl/config.h b/grbl/config.h index 4403993..2173101 100644 --- a/grbl/config.h +++ b/grbl/config.h @@ -699,7 +699,12 @@ // +-------------->X +-------------->X +-------------->Y // XY_SKEW_FACTOR XZ_SKEW_FACTOR YZ_SKEW_FACTOR // + +//uncomment to enable skew compensation #define ENABLE_SKEW_COMPENSATION +//if enabled skew compensations is done only for XY axis (saves CPU cycles) +//uncomment to extend skew compensation for XZ axis and YZ axis as well +//#define ALLAXIS_SKEW_COMPENSATION /* --------------------------------------------------------------------------------------- OEM Single File Configuration Option diff --git a/grbl/motion_control.c b/grbl/motion_control.c index e9ca594..ece2918 100644 --- a/grbl/motion_control.c +++ b/grbl/motion_control.c @@ -66,8 +66,11 @@ void mc_line(float *target, plan_line_data_t *pl_data) #ifdef ENABLE_SKEW_COMPENSATION //apply correction skew factors that compensate for machine axis alignemnt - target[X_AXIS] -= target[Y_AXIS] * settings.xy_skew_factor + target[Z_AXIS] * (settings.xy_skew_factor - settings.xz_skew_factor * settings.yz_skew_factor); - target[Y_AXIS] -= target[Z_AXIS] * settings.yz_skew_factor; + target[X_AXIS] -= target[Y_AXIS] * settings.xy_skew_factor; + #ifdef ALLAXIS_SKEW_COMPENSATION + target[X_AXIS] -= target[Z_AXIS] * (settings.xy_skew_factor - settings.xz_skew_factor * settings.yz_skew_factor); + target[Y_AXIS] -= target[Z_AXIS] * settings.yz_skew_factor; + #endif #endif // Plan and queue motion into planner buffer diff --git a/grbl/report.c b/grbl/report.c index 4bcf3eb..1c3762f 100644 --- a/grbl/report.c +++ b/grbl/report.c @@ -212,8 +212,10 @@ void report_grbl_settings() { #ifdef ENABLE_SKEW_COMPENSATION report_util_float_setting(37,settings.xy_skew_factor,N_DECIMAL_SETTINGVALUE); - report_util_float_setting(38,settings.xz_skew_factor,N_DECIMAL_SETTINGVALUE); - report_util_float_setting(39,settings.yz_skew_factor,N_DECIMAL_SETTINGVALUE); + #ifdef ALLAXIS_SKEW_COMPENSATION + report_util_float_setting(38,settings.xz_skew_factor,N_DECIMAL_SETTINGVALUE); + report_util_float_setting(39,settings.yz_skew_factor,N_DECIMAL_SETTINGVALUE); + #endif #endif // Print axis settings diff --git a/grbl/settings.c b/grbl/settings.c index 270a604..4cc970d 100644 --- a/grbl/settings.c +++ b/grbl/settings.c @@ -38,9 +38,13 @@ const __flash settings_t defaults = {\ .homing_seek_rate = DEFAULT_HOMING_SEEK_RATE, .homing_debounce_delay = DEFAULT_HOMING_DEBOUNCE_DELAY, .homing_pulloff = DEFAULT_HOMING_PULLOFF, - .xy_skew_factor = XY_SKEW_FACTOR, - .xz_skew_factor = XZ_SKEW_FACTOR, - .yz_skew_factor = YZ_SKEW_FACTOR, + #ifdef ENABLE_SKEW_COMPENSATION + .xy_skew_factor = XY_SKEW_FACTOR, + #ifdef ALLAXIS_SKEW_COMPENSATION + .xz_skew_factor = XZ_SKEW_FACTOR, + .yz_skew_factor = YZ_SKEW_FACTOR, + #endif + #endif .flags = (DEFAULT_REPORT_INCHES << BIT_REPORT_INCHES) | \ (DEFAULT_LASER_MODE << BIT_LASER_MODE) | \ (DEFAULT_INVERT_ST_ENABLE << BIT_INVERT_ST_ENABLE) | \ @@ -299,8 +303,10 @@ uint8_t settings_store_global_setting(uint8_t parameter, float value) { break; #ifdef ENABLE_SKEW_COMPENSATION case 37: settings.xy_skew_factor = value; break; - case 38: settings.xz_skew_factor = value; break; - case 39: settings.yz_skew_factor = value; break; + #ifdef ALLAXIS_SKEW_COMPENSATION + case 38: settings.xz_skew_factor = value; break; + case 39: settings.yz_skew_factor = value; break; + #endif #endif default: return(STATUS_INVALID_STATEMENT); diff --git a/grbl/settings.h b/grbl/settings.h index 01b2837..3ca5ea6 100644 --- a/grbl/settings.h +++ b/grbl/settings.h @@ -110,9 +110,13 @@ typedef struct { float homing_seek_rate; uint16_t homing_debounce_delay; float homing_pulloff; - float xy_skew_factor; - float xz_skew_factor; - float yz_skew_factor; + #ifdef ENABLE_SKEW_COMPENSATION + float xy_skew_factor; + #ifdef ALLAXIS_SKEW_COMPENSATION + float xz_skew_factor; + float yz_skew_factor; + #endif + #endif } settings_t; extern settings_t settings;