Fix for issue #349 - active feed rate override caused jog motions to hang on some drivers

This commit is contained in:
Terje Io
2023-08-21 09:18:37 +02:00
parent d361ef1c9d
commit 9b28c45ecb
5 changed files with 38 additions and 20 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ It has been written to complement grblHAL and has features such as proper keyboa
---
Latest build date is 20230808, see the [changelog](changelog.md) for details.
Latest build date is 20230821, see the [changelog](changelog.md) for details.
__NOTE:__ A settings reset will be performed on an update of builds earlier than 20230125. Backup and restore of settings is recommended.
__IMPORTANT!__ A new setting has been introduced for ganged axes motors in build 20211121.
I have only bench tested this for a couple of drivers, correct function should be verified after updating by those who have more than three motors configured.
+13 -1
View File
@@ -1,5 +1,17 @@
## grblHAL changelog
<a name="20230821"/>Build 20230821
Core:
* Fix for issue #349 - active feed rate override caused jog motions to hang on some drivers \(STM32F4xx and possibly others\).
Drivers:
* RP2040: fix for regression: ethernet was incorrectly left enabled in CMakeLists.txt.
---
<a name="20230820"/>Build 20230820
Core:
@@ -10,7 +22,7 @@ Core:
Drivers:
* RP2040: Fix for [issue #72](https://github.com/grblHAL/RP2040/discussions/72) \(typo\), improved SPI chip select handling.
* RP2040: fix for [issue #72](https://github.com/grblHAL/RP2040/discussions/72) \(typo\), improved SPI chip select handling.
---
+1 -1
View File
@@ -97,7 +97,7 @@ typedef void (*on_unknown_feedback_message_ptr)(stream_write_ptr stream_write);
typedef void (*on_stream_changed_ptr)(stream_type_t type);
typedef bool (*on_laser_ppi_enable_ptr)(uint_fast16_t ppi, uint_fast16_t pulse_length);
typedef void (*on_homing_rate_set_ptr)(axes_signals_t axes, float rate, homing_mode_t mode);
typedef void (*on_homing_completed_ptr)(bool succes);
typedef void (*on_homing_completed_ptr)(bool success);
typedef bool (*on_probe_fixture_ptr)(tool_data_t *tool, bool at_g59_3, bool on);
typedef bool (*on_probe_start_ptr)(axes_signals_t axes, float *target, plan_line_data_t *pl_data);
typedef void (*on_probe_completed_ptr)(void);
+1 -1
View File
@@ -42,7 +42,7 @@
#else
#define GRBL_VERSION "1.1f"
#endif
#define GRBL_BUILD 20230820
#define GRBL_BUILD 20230821
#define GRBL_URL "https://github.com/grblHAL"
+22 -16
View File
@@ -342,19 +342,6 @@ inline static float plan_compute_profile_parameters (plan_block_t *block, float
return nominal_speed;
}
// Re-calculates buffered motions profile parameters upon a motion-based override change.
void plan_update_velocity_profile_parameters (void)
{
plan_block_t *block = block_buffer_tail;
float prev_nominal_speed = SOME_LARGE_VALUE; // Set high for first block nominal speed calculation.
while (block != block_buffer_head) {
prev_nominal_speed = plan_compute_profile_parameters(block, plan_compute_profile_nominal_speed(block), prev_nominal_speed);
block = block->next;
}
pl.previous_nominal_speed = prev_nominal_speed; // Update prev nominal speed for next incoming block.
}
static inline float limit_acceleration_by_axis_maximum (float *unit_vec)
{
uint_fast8_t idx = N_AXIS;
@@ -656,6 +643,25 @@ void plan_cycle_reinitialize (void)
planner_recalculate();
}
// Re-calculates buffered motions profile parameters upon a motion-based override change.
static bool plan_update_velocity_profile_parameters (void)
{
if(block_buffer_tail != block_buffer_head) {
plan_block_t *block = block_buffer_tail;
float prev_nominal_speed = SOME_LARGE_VALUE; // Set high for first block nominal speed calculation.
while (block != block_buffer_head) {
prev_nominal_speed = plan_compute_profile_parameters(block, plan_compute_profile_nominal_speed(block), prev_nominal_speed);
block = block->next;
}
pl.previous_nominal_speed = prev_nominal_speed; // Update prev nominal speed for next incoming block.
}
return block_buffer_tail != block_buffer_head;
}
// Set feed overrides
void plan_feed_override (override_t feed_override, override_t rapid_override)
{
@@ -666,13 +672,13 @@ void plan_feed_override (override_t feed_override, override_t rapid_override)
feed_override = constrain(feed_override, MIN_FEED_RATE_OVERRIDE, MAX_FEED_RATE_OVERRIDE);
if ((feedrate_changed = feed_override != sys.override.feed_rate) ||
if((feedrate_changed = feed_override != sys.override.feed_rate) ||
(rapidrate_changed = rapid_override != sys.override.rapid_rate)) {
sys.override.feed_rate = feed_override;
sys.override.rapid_rate = rapid_override;
system_add_rt_report(Report_Overrides); // Set to report change immediately
plan_update_velocity_profile_parameters();
plan_cycle_reinitialize();
if(plan_update_velocity_profile_parameters())
plan_cycle_reinitialize();
if(grbl.on_override_changed) {
if(feedrate_changed)
grbl.on_override_changed(OverrideChanged_FeedRate);