Browse Source

Make max_e_jerk an array to reduce CPU usage (#11118)

Andy Shaw 7 years ago
parent
commit
3b3029c4bf

+ 1
- 1
Marlin/src/gcode/config/M200-M205.cpp View File

@@ -136,7 +136,7 @@ void GcodeSuite::M205() {
136 136
       const float junc_dev = parser.value_linear_units();
137 137
       if (WITHIN(junc_dev, 0.01, 0.3)) {
138 138
         planner.junction_deviation_mm = junc_dev;
139
-        planner.recalculate_max_e_jerk_factor();
139
+        planner.recalculate_max_e_jerk();
140 140
       }
141 141
       else {
142 142
         SERIAL_ERROR_START();

+ 1
- 1
Marlin/src/lcd/ultralcd.cpp View File

@@ -3752,7 +3752,7 @@ void lcd_quick_feedback(const bool clear_buttons) {
3752 3752
       MENU_BACK(MSG_MOTION);
3753 3753
 
3754 3754
       #if ENABLED(JUNCTION_DEVIATION)
3755
-        MENU_ITEM_EDIT_CALLBACK(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.01, 0.3, planner.recalculate_max_e_jerk_factor);
3755
+        MENU_ITEM_EDIT_CALLBACK(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.01, 0.3, planner.recalculate_max_e_jerk);
3756 3756
       #else
3757 3757
         MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VA_JERK, &planner.max_jerk[A_AXIS], 1, 990);
3758 3758
         MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VB_JERK, &planner.max_jerk[B_AXIS], 1, 990);

+ 1
- 1
Marlin/src/module/configuration_store.cpp View File

@@ -331,7 +331,7 @@ void MarlinSettings::postprocess() {
331 331
   #endif
332 332
 
333 333
   #if ENABLED(JUNCTION_DEVIATION) && ENABLED(LIN_ADVANCE)
334
-    planner.recalculate_max_e_jerk_factor();
334
+    planner.recalculate_max_e_jerk();
335 335
   #endif
336 336
 
337 337
   // Refresh steps_to_mm with the reciprocal of axis_steps_per_mm

+ 13
- 2
Marlin/src/module/planner.cpp View File

@@ -126,7 +126,11 @@ float Planner::max_feedrate_mm_s[XYZE_N],     // (mm/s) M203 XYZE - Max speeds
126 126
 #if ENABLED(JUNCTION_DEVIATION)
127 127
   float Planner::junction_deviation_mm;       // (mm) M205 J
128 128
   #if ENABLED(LIN_ADVANCE)
129
-    float Planner::max_e_jerk_factor;         // Calculated from junction_deviation_mm
129
+    #if ENABLED(DISTINCT_E_FACTORS)
130
+      float Planner::max_e_jerk[EXTRUDERS];   // Calculated from junction_deviation_mm
131
+    #else
132
+      float Planner::max_e_jerk;
133
+    #endif
130 134
   #endif
131 135
 #else
132 136
   float Planner::max_jerk[XYZE];              // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration.
@@ -2056,7 +2060,11 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
2056 2060
     #if ENABLED(LIN_ADVANCE)
2057 2061
 
2058 2062
       #if ENABLED(JUNCTION_DEVIATION)
2059
-        #define MAX_E_JERK (max_e_jerk_factor * max_acceleration_mm_per_s2[_EINDEX])
2063
+        #if ENABLED(DISTINCT_E_FACTORS)
2064
+          #define MAX_E_JERK max_e_jerk[extruder]
2065
+        #else
2066
+          #define MAX_E_JERK max_e_jerk
2067
+        #endif
2060 2068
       #else
2061 2069
         #define MAX_E_JERK max_jerk[E_AXIS]
2062 2070
       #endif
@@ -2569,6 +2577,9 @@ void Planner::reset_acceleration_rates() {
2569 2577
     if (AXIS_CONDITION) NOLESS(highest_rate, max_acceleration_steps_per_s2[i]);
2570 2578
   }
2571 2579
   cutoff_long = 4294967295UL / highest_rate; // 0xFFFFFFFFUL
2580
+  #if ENABLED(JUNCTION_DEVIATION) && ENABLED(LIN_ADVANCE)
2581
+    recalculate_max_e_jerk();
2582
+  #endif
2572 2583
 }
2573 2584
 
2574 2585
 // Recalculate position, steps_to_mm if axis_steps_per_mm changes!

+ 13
- 3
Marlin/src/module/planner.h View File

@@ -210,7 +210,11 @@ class Planner {
210 210
     #if ENABLED(JUNCTION_DEVIATION)
211 211
       static float junction_deviation_mm;       // (mm) M205 J
212 212
       #if ENABLED(LIN_ADVANCE)
213
-        static float max_e_jerk_factor;         // Calculated from junction_deviation_mm
213
+        #if ENABLED(DISTINCT_E_FACTORS)
214
+          static float max_e_jerk[EXTRUDERS];   // Calculated from junction_deviation_mm
215
+        #else
216
+          static float max_e_jerk;
217
+        #endif
214 218
       #endif
215 219
     #else
216 220
       static float max_jerk[XYZE];              // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration.
@@ -750,9 +754,15 @@ class Planner {
750 754
     #endif
751 755
 
752 756
     #if ENABLED(JUNCTION_DEVIATION)
753
-      FORCE_INLINE static void recalculate_max_e_jerk_factor() {
757
+      FORCE_INLINE static void recalculate_max_e_jerk() {
758
+        #define GET_MAX_E_JERK(N) SQRT(SQRT(0.5) * junction_deviation_mm * (N) * RECIPROCAL(1.0 - SQRT(0.5)))
754 759
         #if ENABLED(LIN_ADVANCE)
755
-          max_e_jerk_factor = SQRT(SQRT(0.5) * junction_deviation_mm * RECIPROCAL(1.0 - SQRT(0.5)));
760
+          #if ENABLED(DISTINCT_E_FACTORS)
761
+            for (uint8_t i = 0; i < EXTRUDERS; i++)
762
+              max_e_jerk[i] = GET_MAX_E_JERK(max_acceleration_mm_per_s2[E_AXIS + i]);
763
+          #else
764
+            max_e_jerk = GET_MAX_E_JERK(max_acceleration_mm_per_s2[E_AXIS]);
765
+          #endif
756 766
         #endif
757 767
       }
758 768
     #endif

Loading…
Cancel
Save