Procházet zdrojové kódy

Run the advance_isr faster instead of doing multiple e-steps per interrupt

Scott Lahteine před 9 roky
rodič
revize
506d78b2f8
1 změnil soubory, kde provedl 22 přidání a 12 odebrání
  1. 22
    12
      Marlin/stepper.cpp

+ 22
- 12
Marlin/stepper.cpp Zobrazit soubor

506
 
506
 
507
   void Stepper::advance_isr() {
507
   void Stepper::advance_isr() {
508
 
508
 
509
-    old_OCR0A += 52; // ~10kHz interrupt (250000 / 26 = 9615kHz)
509
+    byte maxesteps = 0;
510
+    for (uint8_t i = 0; i < EXTRUDERS; i++)
511
+      if (abs(e_steps[i]) > maxesteps) maxesteps = abs(e_steps[i]);
512
+
513
+    if (maxesteps > 3)
514
+      old_OCR0A += 13;  // ~19kHz (250000/13 = 19230 Hz)
515
+    else if (maxesteps > 2)
516
+      old_OCR0A += 17;  // ~15kHz (250000/17 = 14705 Hz)
517
+    else if (maxesteps > 1)
518
+      old_OCR0A += 26;  // ~10kHz (250000/26 =  9615 Hz)
519
+    else
520
+      old_OCR0A += 52;  //  ~5kHz (250000/26 =  4807 Hz)
521
+
510
     OCR0A = old_OCR0A;
522
     OCR0A = old_OCR0A;
511
 
523
 
512
     #define STEP_E_ONCE(INDEX) \
524
     #define STEP_E_ONCE(INDEX) \
523
         E## INDEX ##_STEP_WRITE(!INVERT_E_STEP_PIN); \
535
         E## INDEX ##_STEP_WRITE(!INVERT_E_STEP_PIN); \
524
       }
536
       }
525
 
537
 
526
-    // Step all E steppers that have steps, up to 4 steps per interrupt
527
-    for (unsigned char i = 0; i < 4; i++) {
528
-      STEP_E_ONCE(0);
529
-      #if EXTRUDERS > 1
530
-        STEP_E_ONCE(1);
531
-        #if EXTRUDERS > 2
532
-          STEP_E_ONCE(2);
533
-          #if EXTRUDERS > 3
534
-            STEP_E_ONCE(3);
535
-          #endif
538
+    // Step all E steppers that have steps
539
+    STEP_E_ONCE(0);
540
+    #if EXTRUDERS > 1
541
+      STEP_E_ONCE(1);
542
+      #if EXTRUDERS > 2
543
+        STEP_E_ONCE(2);
544
+        #if EXTRUDERS > 3
545
+          STEP_E_ONCE(3);
536
         #endif
546
         #endif
537
       #endif
547
       #endif
538
-    }
548
+    #endif
539
 
549
 
540
   }
550
   }
541
 
551
 

Loading…
Zrušit
Uložit