diff --git a/doc/log/commit_log_v1.1.txt b/doc/log/commit_log_v1.1.txt index b4d13b4..0717f62 100644 --- a/doc/log/commit_log_v1.1.txt +++ b/doc/log/commit_log_v1.1.txt @@ -1,3 +1,11 @@ +---------------- +Date: 2017-07-31 +Author: Sonny Jeon +Subject: Hot fix for rare lowering feed override bug. + +[fix] Squashed a very rare bug when lowering the feedrate (or rapid) override. When in the very strict set of circumstances with acceleration settings, override step size, and current speed, an internal calculation would cause Grbl to crash. The fix was an overlooked equality statement that should have been a less than or equal, not a less than. + + ---------------- Date: 2017-07-17 Author: Sonny Jeon diff --git a/grbl/grbl.h b/grbl/grbl.h index f4eb0dd..33b5145 100644 --- a/grbl/grbl.h +++ b/grbl/grbl.h @@ -23,7 +23,7 @@ // Grbl versioning system #define GRBL_VERSION "1.1f" -#define GRBL_VERSION_BUILD "20170731" +#define GRBL_VERSION_BUILD "20170801" // Define standard libraries used by Grbl. #include diff --git a/grbl/stepper.c b/grbl/stepper.c index 2f6b18b..3bfccd4 100644 --- a/grbl/stepper.c +++ b/grbl/stepper.c @@ -734,7 +734,7 @@ void st_prep_buffer() } else { // Decelerate to cruise or cruise-decelerate types. Guaranteed to intersect updated plan. - prep.decelerate_after = inv_2_accel*(nominal_speed_sqr-exit_speed_sqr); + prep.decelerate_after = inv_2_accel*(nominal_speed_sqr-exit_speed_sqr); // Should always be >= 0.0 due to planner reinit. prep.maximum_speed = nominal_speed; prep.ramp_type = RAMP_DECEL_OVERRIDE; } @@ -806,15 +806,14 @@ void st_prep_buffer() switch (prep.ramp_type) { case RAMP_DECEL_OVERRIDE: speed_var = pl_block->acceleration*time_var; - mm_var = time_var*(prep.current_speed - 0.5*speed_var); - mm_remaining -= mm_var; - if ((mm_remaining <= prep.accelerate_until) || (mm_var <= 0.0)) { + if (prep.current_speed-prep.maximum_speed <= speed_var) { // Cruise or cruise-deceleration types only for deceleration override. - mm_remaining = prep.accelerate_until; // NOTE: 0.0 at EOB + mm_remaining = prep.accelerate_until; time_var = 2.0*(pl_block->millimeters-mm_remaining)/(prep.current_speed+prep.maximum_speed); prep.ramp_type = RAMP_CRUISE; prep.current_speed = prep.maximum_speed; } else { // Mid-deceleration override ramp. + mm_remaining -= time_var*(prep.current_speed - 0.5*speed_var); prep.current_speed -= speed_var; } break;