mirror of
https://github.com/grblHAL/core.git
synced 2026-09-22 03:08:33 +08:00
Fix for issue #349 - active feed rate override caused jog motions to hang on some drivers
This commit is contained in:
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user