Переглянути джерело

Define max_e_jerk as array always

Scott Lahteine 5 роки тому
джерело
коміт
90e1035e9b
2 змінених файлів з 10 додано та 22 видалено
  1. 6
    14
      Marlin/src/module/planner.cpp
  2. 4
    8
      Marlin/src/module/planner.h

+ 6
- 14
Marlin/src/module/planner.cpp Переглянути файл

130
 
130
 
131
 uint32_t Planner::max_acceleration_steps_per_s2[XYZE_N]; // (steps/s^2) Derived from mm_per_s2
131
 uint32_t Planner::max_acceleration_steps_per_s2[XYZE_N]; // (steps/s^2) Derived from mm_per_s2
132
 
132
 
133
-float Planner::steps_to_mm[XYZE_N];           // (mm) Millimeters per step
133
+float Planner::steps_to_mm[XYZE_N];             // (mm) Millimeters per step
134
 
134
 
135
 #if HAS_JUNCTION_DEVIATION
135
 #if HAS_JUNCTION_DEVIATION
136
-  float Planner::junction_deviation_mm;       // (mm) M205 J
136
+  float Planner::junction_deviation_mm;         // (mm) M205 J
137
   #if ENABLED(LIN_ADVANCE)
137
   #if ENABLED(LIN_ADVANCE)
138
-    float Planner::max_e_jerk               // Calculated from junction_deviation_mm
138
+    float Planner::max_e_jerk                   // Calculated from junction_deviation_mm
139
-      TERN_(DISTINCT_E_FACTORS, [EXTRUDERS]);
139
+      [TERN(DISTINCT_E_FACTORS, EXTRUDERS, 1)];
140
   #endif
140
   #endif
141
 #endif
141
 #endif
142
 
142
 
2139
 
2139
 
2140
     #if ENABLED(LIN_ADVANCE)
2140
     #if ENABLED(LIN_ADVANCE)
2141
 
2141
 
2142
-      #if HAS_JUNCTION_DEVIATION
2142
+      #define MAX_E_JERK(N) TERN(HAS_JUNCTION_DEVIATION, max_e_jerk[E_AXIS_N(N)], max_jerk.e)
2143
-        #if ENABLED(DISTINCT_E_FACTORS)
2144
-          #define MAX_E_JERK max_e_jerk[extruder]
2145
-        #else
2146
-          #define MAX_E_JERK max_e_jerk
2147
-        #endif
2148
-      #else
2149
-        #define MAX_E_JERK max_jerk.e
2150
-      #endif
2151
 
2143
 
2152
       /**
2144
       /**
2153
        *
2145
        *
2179
         if (block->e_D_ratio > 3.0f)
2171
         if (block->e_D_ratio > 3.0f)
2180
           block->use_advance_lead = false;
2172
           block->use_advance_lead = false;
2181
         else {
2173
         else {
2182
-          const uint32_t max_accel_steps_per_s2 = MAX_E_JERK / (extruder_advance_K[active_extruder] * block->e_D_ratio) * steps_per_mm;
2174
+          const uint32_t max_accel_steps_per_s2 = MAX_E_JERK(extruder) / (extruder_advance_K[active_extruder] * block->e_D_ratio) * steps_per_mm;
2183
           if (TERN0(LA_DEBUG, accel > max_accel_steps_per_s2))
2175
           if (TERN0(LA_DEBUG, accel > max_accel_steps_per_s2))
2184
             SERIAL_ECHOLNPGM("Acceleration limited.");
2176
             SERIAL_ECHOLNPGM("Acceleration limited.");
2185
           NOMORE(accel, max_accel_steps_per_s2);
2177
           NOMORE(accel, max_accel_steps_per_s2);

+ 4
- 8
Marlin/src/module/planner.h Переглянути файл

317
       static float junction_deviation_mm;       // (mm) M205 J
317
       static float junction_deviation_mm;       // (mm) M205 J
318
       #if ENABLED(LIN_ADVANCE)
318
       #if ENABLED(LIN_ADVANCE)
319
         static float max_e_jerk                 // Calculated from junction_deviation_mm
319
         static float max_e_jerk                 // Calculated from junction_deviation_mm
320
-          TERN_(DISTINCT_E_FACTORS, [EXTRUDERS]);
320
+          [TERN(DISTINCT_E_FACTORS, EXTRUDERS, 1)];
321
       #endif
321
       #endif
322
     #endif
322
     #endif
323
 
323
 
840
 
840
 
841
     #if HAS_LINEAR_E_JERK
841
     #if HAS_LINEAR_E_JERK
842
       FORCE_INLINE static void recalculate_max_e_jerk() {
842
       FORCE_INLINE static void recalculate_max_e_jerk() {
843
-        #define GET_MAX_E_JERK(N) SQRT(junction_deviation_mm * (N) * SQRT(0.5) / (1.0f - SQRT(0.5)))
843
+        const float prop = junction_deviation_mm * SQRT(0.5) / (1.0f - SQRT(0.5));
844
-        #if ENABLED(DISTINCT_E_FACTORS)
844
+        LOOP_L_N(i, EXTRUDERS)
845
-          LOOP_L_N(i, EXTRUDERS)
845
+          max_e_jerk[E_AXIS_N(i)] = SQRT(prop * settings.max_acceleration_mm_per_s2[E_AXIS_N(i)]);
846
-            max_e_jerk[i] = GET_MAX_E_JERK(settings.max_acceleration_mm_per_s2[E_AXIS_N(i)]);
847
-        #else
848
-          max_e_jerk = GET_MAX_E_JERK(settings.max_acceleration_mm_per_s2[E_AXIS]);
849
-        #endif
850
       }
846
       }
851
     #endif
847
     #endif
852
 
848
 

Завантаження…
Відмінити
Зберегти