Implemented axis skew compensation on grbl

Implementated axis skew compensation configurable on config.h
XY compensation is activated by default when skew compensation is activated.
XZ and YZ skew compensation is optional.
pull/709/head
Paciente8159 2019-08-23 17:03:00 +01:00
rodzic 7d3fe80262
commit 97c5861f7d
5 zmienionych plików z 32 dodań i 12 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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);

Wyświetl plik

@ -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;