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
       const float junc_dev = parser.value_linear_units();
136
       const float junc_dev = parser.value_linear_units();
137
       if (WITHIN(junc_dev, 0.01, 0.3)) {
137
       if (WITHIN(junc_dev, 0.01, 0.3)) {
138
         planner.junction_deviation_mm = junc_dev;
138
         planner.junction_deviation_mm = junc_dev;
139
-        planner.recalculate_max_e_jerk_factor();
139
+        planner.recalculate_max_e_jerk();
140
       }
140
       }
141
       else {
141
       else {
142
         SERIAL_ERROR_START();
142
         SERIAL_ERROR_START();

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

3752
       MENU_BACK(MSG_MOTION);
3752
       MENU_BACK(MSG_MOTION);
3753
 
3753
 
3754
       #if ENABLED(JUNCTION_DEVIATION)
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
       #else
3756
       #else
3757
         MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VA_JERK, &planner.max_jerk[A_AXIS], 1, 990);
3757
         MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VA_JERK, &planner.max_jerk[A_AXIS], 1, 990);
3758
         MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VB_JERK, &planner.max_jerk[B_AXIS], 1, 990);
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
   #endif
331
   #endif
332
 
332
 
333
   #if ENABLED(JUNCTION_DEVIATION) && ENABLED(LIN_ADVANCE)
333
   #if ENABLED(JUNCTION_DEVIATION) && ENABLED(LIN_ADVANCE)
334
-    planner.recalculate_max_e_jerk_factor();
334
+    planner.recalculate_max_e_jerk();
335
   #endif
335
   #endif
336
 
336
 
337
   // Refresh steps_to_mm with the reciprocal of axis_steps_per_mm
337
   // Refresh steps_to_mm with the reciprocal of axis_steps_per_mm

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

126
 #if ENABLED(JUNCTION_DEVIATION)
126
 #if ENABLED(JUNCTION_DEVIATION)
127
   float Planner::junction_deviation_mm;       // (mm) M205 J
127
   float Planner::junction_deviation_mm;       // (mm) M205 J
128
   #if ENABLED(LIN_ADVANCE)
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
   #endif
134
   #endif
131
 #else
135
 #else
132
   float Planner::max_jerk[XYZE];              // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration.
136
   float Planner::max_jerk[XYZE];              // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration.
2056
     #if ENABLED(LIN_ADVANCE)
2060
     #if ENABLED(LIN_ADVANCE)
2057
 
2061
 
2058
       #if ENABLED(JUNCTION_DEVIATION)
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
       #else
2068
       #else
2061
         #define MAX_E_JERK max_jerk[E_AXIS]
2069
         #define MAX_E_JERK max_jerk[E_AXIS]
2062
       #endif
2070
       #endif
2569
     if (AXIS_CONDITION) NOLESS(highest_rate, max_acceleration_steps_per_s2[i]);
2577
     if (AXIS_CONDITION) NOLESS(highest_rate, max_acceleration_steps_per_s2[i]);
2570
   }
2578
   }
2571
   cutoff_long = 4294967295UL / highest_rate; // 0xFFFFFFFFUL
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
 // Recalculate position, steps_to_mm if axis_steps_per_mm changes!
2585
 // Recalculate position, steps_to_mm if axis_steps_per_mm changes!

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

210
     #if ENABLED(JUNCTION_DEVIATION)
210
     #if ENABLED(JUNCTION_DEVIATION)
211
       static float junction_deviation_mm;       // (mm) M205 J
211
       static float junction_deviation_mm;       // (mm) M205 J
212
       #if ENABLED(LIN_ADVANCE)
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
       #endif
218
       #endif
215
     #else
219
     #else
216
       static float max_jerk[XYZE];              // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration.
220
       static float max_jerk[XYZE];              // (mm/s^2) M205 XYZE - The largest speed change requiring no acceleration.
750
     #endif
754
     #endif
751
 
755
 
752
     #if ENABLED(JUNCTION_DEVIATION)
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
         #if ENABLED(LIN_ADVANCE)
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
         #endif
766
         #endif
757
       }
767
       }
758
     #endif
768
     #endif

Loading…
Cancel
Save