Browse Source

Fix incorrect precedence for retraction phase

The logic was inverted, causing the fastest isr to always retract
instead of counter-balance the acceleration properly.
Yuri D'Elia 3 years ago
parent
commit
fb5f09da6d
1 changed files with 2 additions and 2 deletions
  1. 2 2
      Firmware/stepper.cpp

+ 2 - 2
Firmware/stepper.cpp

@@ -883,13 +883,13 @@ FORCE_INLINE void isr() {
         advance_spread(main_Rate);
         if (LA_phase >= 0) {
             if (step_loops == e_step_loops)
-                LA_phase = (current_block->advance_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
                 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);
+                LA_phase = (adv_rate_n < main_rate_n);
             }
         }
     }