Browse Source

Use nominal rate for phase calculations

The local interval calculated by advance_spread() might oscillate too
much in narrow intervals.
Yuri D'Elia 3 years ago
parent
commit
c08f37da96
1 changed files with 4 additions and 2 deletions
  1. 4 2
      Firmware/stepper.cpp

+ 4 - 2
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);
             }
         }
     }