Преглед изворни кода

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

Scott Lahteine пре 8 година
родитељ
комит
506d78b2f8
1 измењених фајлова са 22 додато и 12 уклоњено
  1. 22
    12
      Marlin/stepper.cpp

+ 22
- 12
Marlin/stepper.cpp Прегледај датотеку

@@ -506,7 +506,19 @@ void Stepper::isr() {
506 506
 
507 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 522
     OCR0A = old_OCR0A;
511 523
 
512 524
     #define STEP_E_ONCE(INDEX) \
@@ -523,19 +535,17 @@ void Stepper::isr() {
523 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 546
         #endif
537 547
       #endif
538
-    }
548
+    #endif
539 549
 
540 550
   }
541 551
 

Loading…
Откажи
Сачувај