Преглед на файлове

🐛 Fix Bed/Chamber PID Autotune with MPCTEMP (#23983)

Giuliano Zaro преди 2 години
родител
ревизия
1bc9a530bd
No account linked to committer's email address
променени са 2 файла, в които са добавени 26 реда и са изтрити 45 реда
  1. 3
    2
      Marlin/Configuration.h
  2. 23
    43
      Marlin/src/lcd/menu/menu_advanced.cpp

+ 3
- 2
Marlin/Configuration.h Целия файл

@@ -619,8 +619,6 @@
619 619
 #define PID_K1 0.95      // Smoothing factor within any PID loop
620 620
 
621 621
 #if ENABLED(PIDTEMP)
622
-  //#define PID_EDIT_MENU         // Add PID editing to the "Advanced Settings" menu. (~700 bytes of PROGMEM)
623
-  //#define PID_AUTOTUNE_MENU     // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM)
624 622
   //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
625 623
                                   // Set/get with gcode: M301 E[extruder number, 0-2]
626 624
 
@@ -767,6 +765,9 @@
767 765
   //#define SLOW_PWM_HEATERS      // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
768 766
   #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
769 767
                                   // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
768
+
769
+  //#define PID_EDIT_MENU         // Add PID editing to the "Advanced Settings" menu. (~700 bytes of PROGMEM)
770
+  //#define PID_AUTOTUNE_MENU     // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM)
770 771
 #endif
771 772
 
772 773
 // @section extruder

+ 23
- 43
Marlin/src/lcd/menu/menu_advanced.cpp Целия файл

@@ -210,7 +210,7 @@ void menu_backlash();
210 210
 
211 211
   // Helpers for editing PID Ki & Kd values
212 212
   // grab the PID value out of the temp variable; scale it; then update the PID driver
213
-  void copy_and_scalePID_i(int16_t e) {
213
+  void copy_and_scalePID_i(const uint8_t e) {
214 214
     switch (e) {
215 215
       #if ENABLED(PIDTEMPBED)
216 216
         case H_BED: thermalManager.temp_bed.pid.Ki = scalePID_i(raw_Ki); break;
@@ -226,7 +226,7 @@ void menu_backlash();
226 226
         break;
227 227
     }
228 228
   }
229
-  void copy_and_scalePID_d(int16_t e) {
229
+  void copy_and_scalePID_d(const uint8_t e) {
230 230
     switch (e) {
231 231
       #if ENABLED(PIDTEMPBED)
232 232
         case H_BED: thermalManager.temp_bed.pid.Kd = scalePID_d(raw_Kd); break;
@@ -242,30 +242,6 @@ void menu_backlash();
242 242
         break;
243 243
     }
244 244
   }
245
-
246
-  #define _DEFINE_PIDTEMP_BASE_FUNCS(N) \
247
-    void copy_and_scalePID_i_E##N() { copy_and_scalePID_i(N); } \
248
-    void copy_and_scalePID_d_E##N() { copy_and_scalePID_d(N); }
249
-
250
-#else
251
-
252
-  #define _DEFINE_PIDTEMP_BASE_FUNCS(N) //
253
-
254
-#endif
255
-
256
-#if ENABLED(PID_AUTOTUNE_MENU)
257
-  #define DEFINE_PIDTEMP_FUNCS(N) \
258
-    _DEFINE_PIDTEMP_BASE_FUNCS(N); \
259
-    void lcd_autotune_callback_E##N() { _lcd_autotune(heater_id_t(N)); }
260
-#else
261
-  #define DEFINE_PIDTEMP_FUNCS(N) _DEFINE_PIDTEMP_BASE_FUNCS(N);
262
-#endif
263
-
264
-#if HAS_HOTEND
265
-  DEFINE_PIDTEMP_FUNCS(0);
266
-  #if ENABLED(PID_PARAMS_PER_HOTEND)
267
-    REPEAT_S(1, HOTENDS, DEFINE_PIDTEMP_FUNCS)
268
-  #endif
269 245
 #endif
270 246
 
271 247
 #if BOTH(AUTOTEMP, HAS_TEMP_HOTEND) || EITHER(PID_AUTOTUNE_MENU, PID_EDIT_MENU)
@@ -299,14 +275,7 @@ void menu_backlash();
299 275
     // PID-P E5, PID-I E5, PID-D E5, PID-C E5, PID Autotune E5
300 276
     //
301 277
 
302
-    #if ENABLED(PID_EDIT_MENU)
303
-      #define _PID_EDIT_ITEMS_TMPL(N,T) \
304
-        raw_Ki = unscalePID_i(T.pid.Ki); \
305
-        raw_Kd = unscalePID_d(T.pid.Kd); \
306
-        EDIT_ITEM_FAST_N(float41sign, N, MSG_PID_P_E, &T.pid.Kp, 1, 9990); \
307
-        EDIT_ITEM_FAST_N(float52sign, N, MSG_PID_I_E, &raw_Ki, 0.01f, 9990, []{ copy_and_scalePID_i(N); }); \
308
-        EDIT_ITEM_FAST_N(float41sign, N, MSG_PID_D_E, &raw_Kd, 1, 9990, []{ copy_and_scalePID_d(N); })
309
-
278
+    #if BOTH(PIDTEMP, PID_EDIT_MENU)
310 279
       #define __PID_HOTEND_MENU_ITEMS(N) \
311 280
         raw_Ki = unscalePID_i(PID_PARAM(Ki, N)); \
312 281
         raw_Kd = unscalePID_d(PID_PARAM(Kd, N)); \
@@ -336,17 +305,28 @@ void menu_backlash();
336 305
 
337 306
     #endif
338 307
 
339
-    #if ENABLED(PID_AUTOTUNE_MENU)
340
-      #define HOTEND_PID_EDIT_MENU_ITEMS(N) \
341
-        _HOTEND_PID_EDIT_MENU_ITEMS(N); \
342
-        EDIT_ITEM_FAST_N(int3, N, MSG_PID_AUTOTUNE_E, &autotune_temp[N], 150, thermalManager.hotend_max_target(N), []{ _lcd_autotune(heater_id_t(MenuItemBase::itemIndex)); });
343
-    #else
344
-      #define HOTEND_PID_EDIT_MENU_ITEMS(N) _HOTEND_PID_EDIT_MENU_ITEMS(N);
308
+    #if ENABLED(PID_EDIT_MENU) && EITHER(PIDTEMPBED, PIDTEMPCHAMBER)
309
+      #define _PID_EDIT_ITEMS_TMPL(N,T) \
310
+        raw_Ki = unscalePID_i(T.pid.Ki); \
311
+        raw_Kd = unscalePID_d(T.pid.Kd); \
312
+        EDIT_ITEM_FAST_N(float41sign, N, MSG_PID_P_E, &T.pid.Kp, 1, 9990); \
313
+        EDIT_ITEM_FAST_N(float52sign, N, MSG_PID_I_E, &raw_Ki, 0.01f, 9990, []{ copy_and_scalePID_i(N); }); \
314
+        EDIT_ITEM_FAST_N(float41sign, N, MSG_PID_D_E, &raw_Kd, 1, 9990, []{ copy_and_scalePID_d(N); })
345 315
     #endif
346 316
 
347
-    HOTEND_PID_EDIT_MENU_ITEMS(0);
348
-    #if ENABLED(PID_PARAMS_PER_HOTEND)
349
-      REPEAT_S(1, HOTENDS, HOTEND_PID_EDIT_MENU_ITEMS)
317
+    #if ENABLED(PIDTEMP)
318
+      #if ENABLED(PID_AUTOTUNE_MENU)
319
+        #define HOTEND_PID_EDIT_MENU_ITEMS(N) \
320
+          _HOTEND_PID_EDIT_MENU_ITEMS(N); \
321
+          EDIT_ITEM_FAST_N(int3, N, MSG_PID_AUTOTUNE_E, &autotune_temp[N], 150, thermalManager.hotend_max_target(N), []{ _lcd_autotune(heater_id_t(MenuItemBase::itemIndex)); });
322
+      #else
323
+        #define HOTEND_PID_EDIT_MENU_ITEMS(N) _HOTEND_PID_EDIT_MENU_ITEMS(N);
324
+      #endif
325
+
326
+      HOTEND_PID_EDIT_MENU_ITEMS(0);
327
+      #if ENABLED(PID_PARAMS_PER_HOTEND)
328
+        REPEAT_S(1, HOTENDS, HOTEND_PID_EDIT_MENU_ITEMS)
329
+      #endif
350 330
     #endif
351 331
 
352 332
     #if ENABLED(PIDTEMPBED)

Loading…
Отказ
Запис