From c08f37da9661feb946a6602dae49bab3a76071cb Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Wed, 24 Jun 2020 16:56:25 +0200 Subject: [PATCH] Use nominal rate for phase calculations The local interval calculated by advance_spread() might oscillate too much in narrow intervals. --- Firmware/stepper.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Firmware/stepper.cpp b/Firmware/stepper.cpp index 13724cc9..80c5be29 100644 --- a/Firmware/stepper.cpp +++ b/Firmware/stepper.cpp @@ -883,11 +883,13 @@ FORCE_INLINE void isr() { advance_spread(main_Rate); if (LA_phase >= 0) { if (step_loops == e_step_loops) - LA_phase = (eISR_Rate > main_Rate); + LA_phase = (current_block->advance_rate > main_Rate); else { // avoid overflow through division. warning: we need to _guarantee_ step_loops // and e_step_loops are <= 4 due to fastdiv's limit - LA_phase = (fastdiv(eISR_Rate, step_loops) > fastdiv(main_Rate, e_step_loops)); + auto adv_rate_n = fastdiv(current_block->advance_rate, step_loops); + auto main_rate_n = fastdiv(main_Rate, e_step_loops); + LA_phase = (adv_rate_n > main_rate_n); } } }