From e74b5ccacd0f51e11640bc4bd297ec024a6d0d04 Mon Sep 17 00:00:00 2001 From: Patrick Felixberger Date: Sun, 20 Jan 2019 23:31:48 +0100 Subject: [PATCH] Small bugfixes and changes --- GRBL_Advanced.elay | 30 +++++++++++++++--------------- grbl/Config.h | 4 ++-- grbl/GCode.c | 10 +++++----- grbl/Limits.c | 6 +++++- grbl/MotionControl.c | 21 ++++++++++++++------- grbl/Report.c | 4 ++-- grbl/Stepper.c | 2 +- grbl/defaults.h | 18 +++++++++--------- 8 files changed, 53 insertions(+), 42 deletions(-) diff --git a/GRBL_Advanced.elay b/GRBL_Advanced.elay index eec10a5..d272f11 100644 --- a/GRBL_Advanced.elay +++ b/GRBL_Advanced.elay @@ -21,9 +21,9 @@ - + - + @@ -38,7 +38,7 @@ - + @@ -76,7 +76,7 @@ - + @@ -108,7 +108,7 @@ - + @@ -116,14 +116,14 @@ - + - + - + - + @@ -138,7 +138,7 @@ - + @@ -146,9 +146,9 @@ - + - + @@ -208,7 +208,7 @@ - + @@ -286,9 +286,9 @@ - + - + diff --git a/grbl/Config.h b/grbl/Config.h index a35c403..00729e1 100644 --- a/grbl/Config.h +++ b/grbl/Config.h @@ -28,7 +28,7 @@ #define CONFIG_H -#define GRBL_VERSION "0.1" +#define GRBL_VERSION "1.1" #define GRBL_VERSION_BUILD __DATE__ @@ -305,7 +305,7 @@ // step rate is strictly limited by the CPU speed and will change if something other than an AVR running // at 16MHz is used. // NOTE: For now disabled, will enable if flash space permits. -#define MAX_STEP_RATE_HZ 50000 // Hz +#define MAX_STEP_RATE_HZ 80000 // Hz // By default, Grbl sets all input pins to normal-high operation with their internal pull-up resistors diff --git a/grbl/GCode.c b/grbl/GCode.c index 20fea18..8737f73 100644 --- a/grbl/GCode.c +++ b/grbl/GCode.c @@ -128,10 +128,10 @@ uint8_t GC_ExecuteLine(char *line) perform initial error-checks for command word modal group violations, for any repeated words, and for negative values set for the value words F, N, P, T, and S. */ - uint8_t word_bit; // Bit-value for assigning tracking variables - uint8_t char_counter; - char letter; - float value; + uint8_t word_bit = 0; // Bit-value for assigning tracking variables + uint8_t char_counter = 0; + char letter = 0; + float value = 0.0; uint8_t int_value = 0; uint16_t mantissa = 0; float old_xyz[N_AXIS] = {0.0}; @@ -1497,7 +1497,7 @@ uint8_t GC_ExecuteLine(char *line) // [17. Set distance mode ]: gc_state.modal.distance = gc_block.modal.distance; - // [18. Set retract mode ]: NOT SUPPORTED + // [18. Set retract mode ]: gc_state.modal.retract = gc_block.modal.retract; // [19. Go to predefined position, Set G10, or Set axis offsets ]: diff --git a/grbl/Limits.c b/grbl/Limits.c index 6f21ac4..e85fac8 100644 --- a/grbl/Limits.c +++ b/grbl/Limits.c @@ -232,7 +232,7 @@ void Limits_GoHome(uint8_t cycle_mask) if(axislock & step_pin[idx]) { if(limit_state & (1 << idx)) { #ifdef COREXY - if(idx==Z_AXIS) { + if(idx == Z_AXIS) { axislock &= ~(step_pin[Z_AXIS]); } else { @@ -345,6 +345,10 @@ void Limits_GoHome(uint8_t cycle_mask) } } + + // Necessary for backlash compensation + MC_Init(); + sys.step_control = STEP_CONTROL_NORMAL_OP; // Return step control to normal operation. } diff --git a/grbl/MotionControl.c b/grbl/MotionControl.c index 7f1bdab..047beb9 100644 --- a/grbl/MotionControl.c +++ b/grbl/MotionControl.c @@ -35,20 +35,27 @@ #include "defaults.h" +#define DIR_POSITIV 0 +#define DIR_NEGATIV 1 + + static float target_prev[N_AXIS] = {0.0}; -static uint8_t dir_negative[N_AXIS] = {0}; +static uint8_t dir_negative[N_AXIS] = {DIR_NEGATIV}; void MC_Init(void) { - int32_t current_position[N_AXIS]; // Copy current state of the system position variable + int32_t current_position[N_AXIS] = {0}; for(uint8_t i = 0; i < N_AXIS; i++) { - dir_negative[i] = 0; + dir_negative[i] = DIR_NEGATIV ^ (settings.homing_dir_mask & (1< target_prev[i]) { // Last move negative? - if(dir_negative[i] == 1) + if(dir_negative[i] == DIR_NEGATIV) { - dir_negative[i] = 0; + dir_negative[i] = DIR_POSITIV; target_prev[i] += settings.backlash[i]; backlash_update = 1; @@ -142,9 +149,9 @@ void MC_Line(float *target, Planner_LineData_t *pl_data) else if(target[i] < target_prev[i]) { // Last move positive? - if(dir_negative[i] == 0) + if(dir_negative[i] == DIR_POSITIV) { - dir_negative[i] = 1; + dir_negative[i] = DIR_NEGATIV; target_prev[i] -= settings.backlash[i]; backlash_update = 1; diff --git a/grbl/Report.c b/grbl/Report.c index c4377da..c81a9da 100644 --- a/grbl/Report.c +++ b/grbl/Report.c @@ -481,9 +481,9 @@ void Report_BuildInfo(char *line) Printf("[OPT:"); // Generate compile-time build option list Putc('V'); -#ifdef USE_LINE_NUMBERS +//#ifdef USE_LINE_NUMBERS Putc('N'); -#endif +//#endif #ifdef ENABLE_M7 Putc('M'); #endif diff --git a/grbl/Stepper.c b/grbl/Stepper.c index 689d700..50ed204 100644 --- a/grbl/Stepper.c +++ b/grbl/Stepper.c @@ -69,7 +69,7 @@ #ifdef MAX_STEP_RATE_HZ #define STEP_TIMER_MIN (uint16_t)(F_TIMER_STEPPER / MAX_STEP_RATE_HZ) #else - #define STEP_TIMER_MIN (uint16_t)(50000) + #define STEP_TIMER_MIN (uint16_t)((F_TIMER_STEPPER / 60000)) #endif diff --git a/grbl/defaults.h b/grbl/defaults.h index e6aa1c0..6af258c 100644 --- a/grbl/defaults.h +++ b/grbl/defaults.h @@ -33,17 +33,17 @@ #define DEFAULT_X_STEPS_PER_MM 400.0 #define DEFAULT_Y_STEPS_PER_MM 400.0 #define DEFAULT_Z_STEPS_PER_MM 400.0 - #define DEFAULT_X_MAX_RATE 2000.0 // mm/min - #define DEFAULT_Y_MAX_RATE 2000.0 // mm/min - #define DEFAULT_Z_MAX_RATE 2000.0 // mm/min + #define DEFAULT_X_MAX_RATE 1000.0 // mm/min + #define DEFAULT_Y_MAX_RATE 1000.0 // mm/min + #define DEFAULT_Z_MAX_RATE 1000.0 // mm/min #define DEFAULT_X_ACCELERATION (30.0*60*60) // 30*60*60 mm/min^2 = 30 mm/sec^2 #define DEFAULT_Y_ACCELERATION (30.0*60*60) // 30*60*60 mm/min^2 = 30 mm/sec^2 #define DEFAULT_Z_ACCELERATION (30.0*60*60) // 30*60*60 mm/min^2 = 30 mm/sec^2 - #define DEFAULT_X_MAX_TRAVEL 600.0 // mm NOTE: Must be a positive value. - #define DEFAULT_Y_MAX_TRAVEL 400.0 // mm NOTE: Must be a positive value. - #define DEFAULT_Z_MAX_TRAVEL 600.0 // mm NOTE: Must be a positive value. - #define DEFAULT_SPINDLE_RPM_MAX 3000.0 // rpm - #define DEFAULT_SPINDLE_RPM_MIN 0.0 // rpm + #define DEFAULT_X_MAX_TRAVEL 400.0 // mm NOTE: Must be a positive value. + #define DEFAULT_Y_MAX_TRAVEL 300.0 // mm NOTE: Must be a positive value. + #define DEFAULT_Z_MAX_TRAVEL 500.0 // mm NOTE: Must be a positive value. + #define DEFAULT_SPINDLE_RPM_MAX 3000.0 // rpm + #define DEFAULT_SPINDLE_RPM_MIN 0.0 // rpm #define DEFAULT_X_BACKLASH 0.01 // mm #define DEFAULT_Y_BACKLASH 0.01 // mm @@ -51,7 +51,7 @@ #define DEFAULT_SYSTEM_INVERT_MASK 0 #define DEFAULT_STEPPING_INVERT_MASK 0 - #define DEFAULT_DIRECTION_INVERT_MASK 4 // Invert Z-Axis + #define DEFAULT_DIRECTION_INVERT_MASK 0 #define DEFAULT_STEPPER_IDLE_LOCK_TIME 50 // msec (0-254, 255 keeps steppers enabled) #define DEFAULT_STATUS_REPORT_MASK 1 // MPos enabled #define DEFAULT_JUNCTION_DEVIATION 0.01 // mm