Browse Source

Add delta feedrate scaling (#11153)

Scott Lahteine 7 years ago
parent
commit
8eaac0dab3
No account linked to committer's email address

+ 3
- 0
Marlin/src/config/examples/delta/FLSUN/auto_calibrate/Configuration.h View File

522
   // and processor overload (too many expensive sqrt calls).
522
   // and processor overload (too many expensive sqrt calls).
523
   #define DELTA_SEGMENTS_PER_SECOND 160
523
   #define DELTA_SEGMENTS_PER_SECOND 160
524
 
524
 
525
+  // Convert feedrates to apply to the Effector instead of the Carriages
526
+  #define DELTA_FEEDRATE_SCALING
527
+
525
   // After homing move down to a height where XY movement is unconstrained
528
   // After homing move down to a height where XY movement is unconstrained
526
   //#define DELTA_HOME_TO_SAFE_ZONE
529
   //#define DELTA_HOME_TO_SAFE_ZONE
527
 
530
 

+ 3
- 0
Marlin/src/config/examples/delta/FLSUN/kossel/Configuration.h View File

522
   // and processor overload (too many expensive sqrt calls).
522
   // and processor overload (too many expensive sqrt calls).
523
   #define DELTA_SEGMENTS_PER_SECOND 160
523
   #define DELTA_SEGMENTS_PER_SECOND 160
524
 
524
 
525
+  // Convert feedrates to apply to the Effector instead of the Carriages
526
+  #define DELTA_FEEDRATE_SCALING
527
+
525
   // After homing move down to a height where XY movement is unconstrained
528
   // After homing move down to a height where XY movement is unconstrained
526
   //#define DELTA_HOME_TO_SAFE_ZONE
529
   //#define DELTA_HOME_TO_SAFE_ZONE
527
 
530
 

+ 3
- 0
Marlin/src/config/examples/delta/FLSUN/kossel_mini/Configuration.h View File

522
   // and processor overload (too many expensive sqrt calls).
522
   // and processor overload (too many expensive sqrt calls).
523
   #define DELTA_SEGMENTS_PER_SECOND 160
523
   #define DELTA_SEGMENTS_PER_SECOND 160
524
 
524
 
525
+  // Convert feedrates to apply to the Effector instead of the Carriages
526
+  #define DELTA_FEEDRATE_SCALING
527
+
525
   // After homing move down to a height where XY movement is unconstrained
528
   // After homing move down to a height where XY movement is unconstrained
526
   //#define DELTA_HOME_TO_SAFE_ZONE
529
   //#define DELTA_HOME_TO_SAFE_ZONE
527
 
530
 

+ 3
- 0
Marlin/src/config/examples/delta/Hatchbox_Alpha/Configuration.h View File

527
   // and processor overload (too many expensive sqrt calls).
527
   // and processor overload (too many expensive sqrt calls).
528
   #define DELTA_SEGMENTS_PER_SECOND 200
528
   #define DELTA_SEGMENTS_PER_SECOND 200
529
 
529
 
530
+  // Convert feedrates to apply to the Effector instead of the Carriages
531
+  #define DELTA_FEEDRATE_SCALING
532
+
530
   // After homing move down to a height where XY movement is unconstrained
533
   // After homing move down to a height where XY movement is unconstrained
531
   //#define DELTA_HOME_TO_SAFE_ZONE
534
   //#define DELTA_HOME_TO_SAFE_ZONE
532
 
535
 

+ 3
- 0
Marlin/src/config/examples/delta/generic/Configuration.h View File

512
   // and processor overload (too many expensive sqrt calls).
512
   // and processor overload (too many expensive sqrt calls).
513
   #define DELTA_SEGMENTS_PER_SECOND 200
513
   #define DELTA_SEGMENTS_PER_SECOND 200
514
 
514
 
515
+  // Convert feedrates to apply to the Effector instead of the Carriages
516
+  #define DELTA_FEEDRATE_SCALING
517
+
515
   // After homing move down to a height where XY movement is unconstrained
518
   // After homing move down to a height where XY movement is unconstrained
516
   //#define DELTA_HOME_TO_SAFE_ZONE
519
   //#define DELTA_HOME_TO_SAFE_ZONE
517
 
520
 

+ 3
- 0
Marlin/src/config/examples/delta/kossel_mini/Configuration.h View File

512
   // and processor overload (too many expensive sqrt calls).
512
   // and processor overload (too many expensive sqrt calls).
513
   #define DELTA_SEGMENTS_PER_SECOND 200
513
   #define DELTA_SEGMENTS_PER_SECOND 200
514
 
514
 
515
+  // Convert feedrates to apply to the Effector instead of the Carriages
516
+  #define DELTA_FEEDRATE_SCALING
517
+
515
   // After homing move down to a height where XY movement is unconstrained
518
   // After homing move down to a height where XY movement is unconstrained
516
   //#define DELTA_HOME_TO_SAFE_ZONE
519
   //#define DELTA_HOME_TO_SAFE_ZONE
517
 
520
 

+ 3
- 0
Marlin/src/config/examples/delta/kossel_pro/Configuration.h View File

498
   // and processor overload (too many expensive sqrt calls).
498
   // and processor overload (too many expensive sqrt calls).
499
   #define DELTA_SEGMENTS_PER_SECOND 160
499
   #define DELTA_SEGMENTS_PER_SECOND 160
500
 
500
 
501
+  // Convert feedrates to apply to the Effector instead of the Carriages
502
+  #define DELTA_FEEDRATE_SCALING
503
+
501
   // After homing move down to a height where XY movement is unconstrained
504
   // After homing move down to a height where XY movement is unconstrained
502
   //#define DELTA_HOME_TO_SAFE_ZONE
505
   //#define DELTA_HOME_TO_SAFE_ZONE
503
 
506
 

+ 3
- 0
Marlin/src/config/examples/delta/kossel_xl/Configuration.h View File

516
   // and processor overload (too many expensive sqrt calls).
516
   // and processor overload (too many expensive sqrt calls).
517
   #define DELTA_SEGMENTS_PER_SECOND 160
517
   #define DELTA_SEGMENTS_PER_SECOND 160
518
 
518
 
519
+  // Convert feedrates to apply to the Effector instead of the Carriages
520
+  #define DELTA_FEEDRATE_SCALING
521
+
519
   // After homing move down to a height where XY movement is unconstrained
522
   // After homing move down to a height where XY movement is unconstrained
520
   //#define DELTA_HOME_TO_SAFE_ZONE
523
   //#define DELTA_HOME_TO_SAFE_ZONE
521
 
524
 

+ 26
- 6
Marlin/src/gcode/motion/G2_G3.cpp View File

35
   #include "../../module/scara.h"
35
   #include "../../module/scara.h"
36
 #endif
36
 #endif
37
 
37
 
38
-#if ENABLED(SCARA_FEEDRATE_SCALING) && ENABLED(AUTO_BED_LEVELING_BILINEAR)
38
+#if HAS_FEEDRATE_SCALING && ENABLED(AUTO_BED_LEVELING_BILINEAR)
39
   #include "../../feature/bedlevel/abl/abl.h"
39
   #include "../../feature/bedlevel/abl/abl.h"
40
 #endif
40
 #endif
41
 
41
 
141
 
141
 
142
   millis_t next_idle_ms = millis() + 200UL;
142
   millis_t next_idle_ms = millis() + 200UL;
143
 
143
 
144
-  #if ENABLED(SCARA_FEEDRATE_SCALING)
144
+  #if HAS_FEEDRATE_SCALING
145
     // SCARA needs to scale the feed rate from mm/s to degrees/s
145
     // SCARA needs to scale the feed rate from mm/s to degrees/s
146
     const float inv_segment_length = 1.0 / (MM_PER_ARC_SEGMENT),
146
     const float inv_segment_length = 1.0 / (MM_PER_ARC_SEGMENT),
147
                 inverse_secs = inv_segment_length * fr_mm_s;
147
                 inverse_secs = inv_segment_length * fr_mm_s;
148
     float oldA = planner.position_float[A_AXIS],
148
     float oldA = planner.position_float[A_AXIS],
149
-          oldB = planner.position_float[B_AXIS];
149
+          oldB = planner.position_float[B_AXIS]
150
+          #if ENABLED(DELTA_FEEDRATE_SCALING)
151
+            , oldC = planner.position_float[C_AXIS]
152
+          #endif
153
+          ;
150
   #endif
154
   #endif
151
 
155
 
152
   #if N_ARC_CORRECTION > 1
156
   #if N_ARC_CORRECTION > 1
192
 
196
 
193
     clamp_to_software_endstops(raw);
197
     clamp_to_software_endstops(raw);
194
 
198
 
199
+    #if HAS_FEEDRATE_SCALING
200
+      inverse_kinematics(raw);
201
+      ADJUST_DELTA(raw);
202
+    #endif
203
+
195
     #if ENABLED(SCARA_FEEDRATE_SCALING)
204
     #if ENABLED(SCARA_FEEDRATE_SCALING)
196
       // For SCARA scale the feed rate from mm/s to degrees/s
205
       // For SCARA scale the feed rate from mm/s to degrees/s
197
       // i.e., Complete the angular vector in the given time.
206
       // i.e., Complete the angular vector in the given time.
198
-      inverse_kinematics(raw);
199
-      ADJUST_DELTA(raw);
200
       if (!planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], raw[Z_AXIS], raw[E_AXIS], HYPOT(delta[A_AXIS] - oldA, delta[B_AXIS] - oldB) * inverse_secs, active_extruder))
207
       if (!planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], raw[Z_AXIS], raw[E_AXIS], HYPOT(delta[A_AXIS] - oldA, delta[B_AXIS] - oldB) * inverse_secs, active_extruder))
201
         break;
208
         break;
202
       oldA = delta[A_AXIS]; oldB = delta[B_AXIS];
209
       oldA = delta[A_AXIS]; oldB = delta[B_AXIS];
210
+    #elif ENABLED(DELTA_FEEDRATE_SCALING)
211
+      // For DELTA scale the feed rate from Effector mm/s to Carriage mm/s
212
+      // i.e., Complete the linear vector in the given time.
213
+      if (!planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], raw[E_AXIS], SQRT(sq(delta[A_AXIS] - oldA) + sq(delta[B_AXIS] - oldB) + sq(delta[C_AXIS] - oldC)) * inverse_secs, active_extruder))
214
+        break;
215
+      oldA = delta[A_AXIS]; oldB = delta[B_AXIS]; oldC = delta[C_AXIS];
203
     #elif HAS_UBL_AND_CURVES
216
     #elif HAS_UBL_AND_CURVES
204
       float pos[XYZ] = { raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS] };
217
       float pos[XYZ] = { raw[X_AXIS], raw[Y_AXIS], raw[Z_AXIS] };
205
       planner.apply_leveling(pos);
218
       planner.apply_leveling(pos);
212
   }
225
   }
213
 
226
 
214
   // Ensure last segment arrives at target location.
227
   // Ensure last segment arrives at target location.
215
-  #if ENABLED(SCARA_FEEDRATE_SCALING)
228
+  #if HAS_FEEDRATE_SCALING
216
     inverse_kinematics(cart);
229
     inverse_kinematics(cart);
217
     ADJUST_DELTA(cart);
230
     ADJUST_DELTA(cart);
231
+  #endif
232
+
233
+  #if ENABLED(SCARA_FEEDRATE_SCALING)
218
     const float diff2 = HYPOT2(delta[A_AXIS] - oldA, delta[B_AXIS] - oldB);
234
     const float diff2 = HYPOT2(delta[A_AXIS] - oldA, delta[B_AXIS] - oldB);
219
     if (diff2)
235
     if (diff2)
220
       planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], cart[Z_AXIS], cart[E_AXIS], SQRT(diff2) * inverse_secs, active_extruder);
236
       planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], cart[Z_AXIS], cart[E_AXIS], SQRT(diff2) * inverse_secs, active_extruder);
237
+  #elif ENABLED(DELTA_FEEDRATE_SCALING)
238
+    const float diff2 = sq(delta[A_AXIS] - oldA) + sq(delta[B_AXIS] - oldB) + sq(delta[C_AXIS] - oldC);
239
+    if (diff2)
240
+      planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], cart[E_AXIS], SQRT(diff2) * inverse_secs, active_extruder);
221
   #elif HAS_UBL_AND_CURVES
241
   #elif HAS_UBL_AND_CURVES
222
     float pos[XYZ] = { cart[X_AXIS], cart[Y_AXIS], cart[Z_AXIS] };
242
     float pos[XYZ] = { cart[X_AXIS], cart[Y_AXIS], cart[Z_AXIS] };
223
     planner.apply_leveling(pos);
243
     planner.apply_leveling(pos);

+ 1
- 0
Marlin/src/inc/Conditionals_post.h View File

1053
 #define PLANNER_LEVELING      (OLDSCHOOL_ABL || ENABLED(MESH_BED_LEVELING) || UBL_SEGMENTED || ENABLED(SKEW_CORRECTION))
1053
 #define PLANNER_LEVELING      (OLDSCHOOL_ABL || ENABLED(MESH_BED_LEVELING) || UBL_SEGMENTED || ENABLED(SKEW_CORRECTION))
1054
 #define HAS_PROBING_PROCEDURE (HAS_ABL || ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST))
1054
 #define HAS_PROBING_PROCEDURE (HAS_ABL || ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST))
1055
 #define HAS_UBL_AND_CURVES (ENABLED(AUTO_BED_LEVELING_UBL) && !PLANNER_LEVELING && (ENABLED(ARC_SUPPORT) || ENABLED(BEZIER_CURVE_SUPPORT)))
1055
 #define HAS_UBL_AND_CURVES (ENABLED(AUTO_BED_LEVELING_UBL) && !PLANNER_LEVELING && (ENABLED(ARC_SUPPORT) || ENABLED(BEZIER_CURVE_SUPPORT)))
1056
+#define HAS_FEEDRATE_SCALING (ENABLED(SCARA_FEEDRATE_SCALING) || ENABLED(DELTA_FEEDRATE_SCALING))
1056
 
1057
 
1057
 #if ENABLED(AUTO_BED_LEVELING_UBL)
1058
 #if ENABLED(AUTO_BED_LEVELING_UBL)
1058
   #undef LCD_BED_LEVELING
1059
   #undef LCD_BED_LEVELING

+ 45
- 11
Marlin/src/module/motion.cpp View File

581
                   ediff * inv_segments
581
                   ediff * inv_segments
582
                 };
582
                 };
583
 
583
 
584
-    #if DISABLED(SCARA_FEEDRATE_SCALING)
584
+    #if !HAS_FEEDRATE_SCALING
585
       const float cartesian_segment_mm = cartesian_mm * inv_segments;
585
       const float cartesian_segment_mm = cartesian_mm * inv_segments;
586
     #endif
586
     #endif
587
 
587
 
589
     SERIAL_ECHOPAIR("mm=", cartesian_mm);
589
     SERIAL_ECHOPAIR("mm=", cartesian_mm);
590
     SERIAL_ECHOPAIR(" seconds=", seconds);
590
     SERIAL_ECHOPAIR(" seconds=", seconds);
591
     SERIAL_ECHOPAIR(" segments=", segments);
591
     SERIAL_ECHOPAIR(" segments=", segments);
592
-    #if DISABLED(SCARA_FEEDRATE_SCALING)
593
-      SERIAL_ECHOLNPAIR(" segment_mm=", cartesian_segment_mm);
594
-    #else
595
-      SERIAL_EOL();
592
+    #if !HAS_FEEDRATE_SCALING
593
+      SERIAL_ECHOPAIR(" segment_mm=", cartesian_segment_mm);
596
     #endif
594
     #endif
595
+    SERIAL_EOL();
597
     //*/
596
     //*/
598
 
597
 
599
-    #if ENABLED(SCARA_FEEDRATE_SCALING)
598
+    #if HAS_FEEDRATE_SCALING
600
       // SCARA needs to scale the feed rate from mm/s to degrees/s
599
       // SCARA needs to scale the feed rate from mm/s to degrees/s
601
       // i.e., Complete the angular vector in the given time.
600
       // i.e., Complete the angular vector in the given time.
602
       const float segment_length = cartesian_mm * inv_segments,
601
       const float segment_length = cartesian_mm * inv_segments,
604
                   inverse_secs = inv_segment_length * _feedrate_mm_s;
603
                   inverse_secs = inv_segment_length * _feedrate_mm_s;
605
 
604
 
606
       float oldA = planner.position_float[A_AXIS],
605
       float oldA = planner.position_float[A_AXIS],
607
-            oldB = planner.position_float[B_AXIS];
606
+            oldB = planner.position_float[B_AXIS]
607
+            #if ENABLED(DELTA_FEEDRATE_SCALING)
608
+              , oldC = planner.position_float[C_AXIS]
609
+            #endif
610
+            ;
608
 
611
 
609
       /*
612
       /*
610
       SERIAL_ECHOPGM("Scaled kinematic move: ");
613
       SERIAL_ECHOPGM("Scaled kinematic move: ");
613
       SERIAL_ECHOPAIR(") _feedrate_mm_s=", _feedrate_mm_s);
616
       SERIAL_ECHOPAIR(") _feedrate_mm_s=", _feedrate_mm_s);
614
       SERIAL_ECHOPAIR(" inverse_secs=", inverse_secs);
617
       SERIAL_ECHOPAIR(" inverse_secs=", inverse_secs);
615
       SERIAL_ECHOPAIR(" oldA=", oldA);
618
       SERIAL_ECHOPAIR(" oldA=", oldA);
616
-      SERIAL_ECHOLNPAIR(" oldB=", oldB);
619
+      SERIAL_ECHOPAIR(" oldB=", oldB);
620
+      #if ENABLED(DELTA_FEEDRATE_SCALING)
621
+        SERIAL_ECHOPAIR(" oldC=", oldC);
622
+      #endif
623
+      SERIAL_EOL();
617
       safe_delay(5);
624
       safe_delay(5);
618
       //*/
625
       //*/
619
     #endif
626
     #endif
654
         safe_delay(5);
661
         safe_delay(5);
655
         //*/
662
         //*/
656
         oldA = delta[A_AXIS]; oldB = delta[B_AXIS];
663
         oldA = delta[A_AXIS]; oldB = delta[B_AXIS];
664
+      #elif ENABLED(DELTA_FEEDRATE_SCALING)
665
+        // For DELTA scale the feed rate from Effector mm/s to Carriage mm/s
666
+        // i.e., Complete the linear vector in the given time.
667
+        if (!planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], raw[E_AXIS], SQRT(sq(delta[A_AXIS] - oldA) + sq(delta[B_AXIS] - oldB) + sq(delta[C_AXIS] - oldC)) * inverse_secs, active_extruder))
668
+          break;
669
+        /*
670
+        SERIAL_ECHO(segments);
671
+        SERIAL_ECHOPAIR(": X=", raw[X_AXIS]); SERIAL_ECHOPAIR(" Y=", raw[Y_AXIS]);
672
+        SERIAL_ECHOPAIR(" A=", delta[A_AXIS]); SERIAL_ECHOPAIR(" B=", delta[B_AXIS]); SERIAL_ECHOPAIR(" C=", delta[C_AXIS]);
673
+        SERIAL_ECHOLNPAIR(" F", SQRT(sq(delta[A_AXIS] - oldA) + sq(delta[B_AXIS] - oldB) + sq(delta[C_AXIS] - oldC)) * inverse_secs * 60);
674
+        safe_delay(5);
675
+        //*/
676
+        oldA = delta[A_AXIS]; oldB = delta[B_AXIS]; oldC = delta[C_AXIS];
657
       #else
677
       #else
658
         if (!planner.buffer_line(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], raw[E_AXIS], _feedrate_mm_s, active_extruder, cartesian_segment_mm))
678
         if (!planner.buffer_line(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], raw[E_AXIS], _feedrate_mm_s, active_extruder, cartesian_segment_mm))
659
           break;
679
           break;
661
     }
681
     }
662
 
682
 
663
     // Ensure last segment arrives at target location.
683
     // Ensure last segment arrives at target location.
664
-    #if ENABLED(SCARA_FEEDRATE_SCALING)
684
+    #if HAS_FEEDRATE_SCALING
665
       inverse_kinematics(rtarget);
685
       inverse_kinematics(rtarget);
666
       ADJUST_DELTA(rtarget);
686
       ADJUST_DELTA(rtarget);
687
+    #endif
688
+
689
+    #if ENABLED(SCARA_FEEDRATE_SCALING)
667
       const float diff2 = HYPOT2(delta[A_AXIS] - oldA, delta[B_AXIS] - oldB);
690
       const float diff2 = HYPOT2(delta[A_AXIS] - oldA, delta[B_AXIS] - oldB);
668
       if (diff2) {
691
       if (diff2) {
669
         planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], rtarget[Z_AXIS], rtarget[E_AXIS], SQRT(diff2) * inverse_secs, active_extruder);
692
         planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], rtarget[Z_AXIS], rtarget[E_AXIS], SQRT(diff2) * inverse_secs, active_extruder);
670
-
671
         /*
693
         /*
672
         SERIAL_ECHOPAIR("final: A=", delta[A_AXIS]); SERIAL_ECHOPAIR(" B=", delta[B_AXIS]);
694
         SERIAL_ECHOPAIR("final: A=", delta[A_AXIS]); SERIAL_ECHOPAIR(" B=", delta[B_AXIS]);
673
         SERIAL_ECHOPAIR(" adiff=", delta[A_AXIS] - oldA); SERIAL_ECHOPAIR(" bdiff=", delta[B_AXIS] - oldB);
695
         SERIAL_ECHOPAIR(" adiff=", delta[A_AXIS] - oldA); SERIAL_ECHOPAIR(" bdiff=", delta[B_AXIS] - oldB);
674
-        SERIAL_ECHOLNPAIR(" F", (SQRT(diff2) * inverse_secs) * 60);
696
+        SERIAL_ECHOLNPAIR(" F", SQRT(diff2) * inverse_secs * 60);
697
+        SERIAL_EOL();
698
+        safe_delay(5);
699
+        //*/
700
+      }
701
+    #elif ENABLED(DELTA_FEEDRATE_SCALING)
702
+      const float diff2 = sq(delta[A_AXIS] - oldA) + sq(delta[B_AXIS] - oldB) + sq(delta[C_AXIS] - oldC);
703
+      if (diff2) {
704
+        planner.buffer_segment(delta[A_AXIS], delta[B_AXIS], delta[C_AXIS], rtarget[E_AXIS], SQRT(diff2) * inverse_secs, active_extruder);
705
+        /*
706
+        SERIAL_ECHOPAIR("final: A=", delta[A_AXIS]); SERIAL_ECHOPAIR(" B=", delta[B_AXIS]); SERIAL_ECHOPAIR(" C=", delta[C_AXIS]);
707
+        SERIAL_ECHOPAIR(" adiff=", delta[A_AXIS] - oldA); SERIAL_ECHOPAIR(" bdiff=", delta[B_AXIS] - oldB); SERIAL_ECHOPAIR(" cdiff=", delta[C_AXIS] - oldC);
708
+        SERIAL_ECHOLNPAIR(" F", SQRT(diff2) * inverse_secs * 60);
675
         SERIAL_EOL();
709
         SERIAL_EOL();
676
         safe_delay(5);
710
         safe_delay(5);
677
         //*/
711
         //*/

+ 3
- 3
Marlin/src/module/planner.cpp View File

1567
 
1567
 
1568
   // Fill the block with the specified movement
1568
   // Fill the block with the specified movement
1569
   if (!_populate_block(block, false, target
1569
   if (!_populate_block(block, false, target
1570
-  #if HAS_POSITION_FLOAT
1571
-    , target_float
1572
-  #endif
1570
+    #if HAS_POSITION_FLOAT
1571
+      , target_float
1572
+    #endif
1573
     , fr_mm_s, extruder, millimeters
1573
     , fr_mm_s, extruder, millimeters
1574
   )) {
1574
   )) {
1575
     // Movement was not queued, probably because it was too short.
1575
     // Movement was not queued, probably because it was too short.

+ 1
- 1
Marlin/src/module/planner.h View File

149
 
149
 
150
 } block_t;
150
 } block_t;
151
 
151
 
152
-#define HAS_POSITION_FLOAT (ENABLED(LIN_ADVANCE) || ENABLED(SCARA_FEEDRATE_SCALING))
152
+#define HAS_POSITION_FLOAT (ENABLED(LIN_ADVANCE) || HAS_FEEDRATE_SCALING)
153
 
153
 
154
 #define BLOCK_MOD(n) ((n)&(BLOCK_BUFFER_SIZE-1))
154
 #define BLOCK_MOD(n) ((n)&(BLOCK_BUFFER_SIZE-1))
155
 
155
 

Loading…
Cancel
Save