Ver código fonte

Minimum temp options for Probing and G12 Nozzle Clean (#20383)

Co-authored-by: Jason Smith <jason.inet@gmail.com>
Co-authored-by: Scott Lahteine <github@thinkyhead.com>
InsanityAutomation 4 anos atrás
pai
commit
7a168205eb
Nenhuma conta vinculada ao e-mail do autor do commit

+ 12
- 1
Marlin/Configuration.h Ver arquivo

1067
 //#define PROBING_STEPPERS_OFF      // Turn steppers off (unless needed to hold position) when probing
1067
 //#define PROBING_STEPPERS_OFF      // Turn steppers off (unless needed to hold position) when probing
1068
 //#define DELAY_BEFORE_PROBING 200  // (ms) To prevent vibrations from triggering piezo sensors
1068
 //#define DELAY_BEFORE_PROBING 200  // (ms) To prevent vibrations from triggering piezo sensors
1069
 
1069
 
1070
+// Require minimum nozzle and/or bed temperature for probing.
1071
+//#define PREHEAT_BEFORE_PROBING
1072
+#if ENABLED(PREHEAT_BEFORE_PROBING)
1073
+  #define PROBING_NOZZLE_TEMP 120   // (°C) Only applies to E0 at this time
1074
+  #define PROBING_BED_TEMP     50
1075
+#endif
1076
+
1070
 // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
1077
 // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
1071
 // :{ 0:'Low', 1:'High' }
1078
 // :{ 0:'Low', 1:'High' }
1072
 #define X_ENABLE_ON 0
1079
 #define X_ENABLE_ON 0
1296
  */
1303
  */
1297
 //#define PREHEAT_BEFORE_LEVELING
1304
 //#define PREHEAT_BEFORE_LEVELING
1298
 #if ENABLED(PREHEAT_BEFORE_LEVELING)
1305
 #if ENABLED(PREHEAT_BEFORE_LEVELING)
1299
-  #define LEVELING_NOZZLE_TEMP 120
1306
+  #define LEVELING_NOZZLE_TEMP 120   // (°C) Only applies to E0 at this time
1300
   #define LEVELING_BED_TEMP     50
1307
   #define LEVELING_BED_TEMP     50
1301
 #endif
1308
 #endif
1302
 
1309
 
1666
   // For a purge/clean station mounted on the X axis
1673
   // For a purge/clean station mounted on the X axis
1667
   //#define NOZZLE_CLEAN_NO_Y
1674
   //#define NOZZLE_CLEAN_NO_Y
1668
 
1675
 
1676
+  // Require a minimum hotend temperature for cleaning
1677
+  #define NOZZLE_CLEAN_MIN_TEMP 170
1678
+  //#define NOZZLE_CLEAN_HEATUP       // Heat up the nozzle instead of skipping wipe
1679
+
1669
   // Explicit wipe G-code script applies to a G12 with no arguments.
1680
   // Explicit wipe G-code script applies to a G12 with no arguments.
1670
   //#define WIPE_SEQUENCE_COMMANDS "G1 X-17 Y25 Z10 F4000\nG1 Z1\nM114\nG1 X-17 Y25\nG1 X-17 Y95\nG1 X-17 Y25\nG1 X-17 Y95\nG1 X-17 Y25\nG1 X-17 Y95\nG1 X-17 Y25\nG1 X-17 Y95\nG1 X-17 Y25\nG1 X-17 Y95\nG1 X-17 Y25\nG1 X-17 Y95\nG1 Z15\nM400\nG0 X-10.0 Y-9.0"
1681
   //#define WIPE_SEQUENCE_COMMANDS "G1 X-17 Y25 Z10 F4000\nG1 Z1\nM114\nG1 X-17 Y25\nG1 X-17 Y95\nG1 X-17 Y25\nG1 X-17 Y95\nG1 X-17 Y25\nG1 X-17 Y95\nG1 X-17 Y25\nG1 X-17 Y95\nG1 X-17 Y25\nG1 X-17 Y95\nG1 X-17 Y25\nG1 X-17 Y95\nG1 Z15\nM400\nG0 X-10.0 Y-9.0"
1671
 
1682
 

+ 6
- 21
Marlin/src/gcode/bedlevel/abl/G29.cpp Ver arquivo

36
 #include "../../../module/probe.h"
36
 #include "../../../module/probe.h"
37
 #include "../../queue.h"
37
 #include "../../queue.h"
38
 
38
 
39
-#if EITHER(PROBE_TEMP_COMPENSATION, PREHEAT_BEFORE_LEVELING)
40
-  #include "../../../module/temperature.h"
41
-#endif
42
-
43
 #if ENABLED(PROBE_TEMP_COMPENSATION)
39
 #if ENABLED(PROBE_TEMP_COMPENSATION)
44
   #include "../../../feature/probe_temp_comp.h"
40
   #include "../../../feature/probe_temp_comp.h"
41
+  #include "../../../module/temperature.h"
45
 #endif
42
 #endif
46
 
43
 
47
 #if HAS_DISPLAY
44
 #if HAS_DISPLAY
404
       ExtUI::onMeshLevelingStart();
401
       ExtUI::onMeshLevelingStart();
405
     #endif
402
     #endif
406
 
403
 
407
-    if (!faux) remember_feedrate_scaling_off();
404
+    if (!faux) {
405
+      remember_feedrate_scaling_off();
408
 
406
 
409
-    #if ENABLED(PREHEAT_BEFORE_LEVELING)
410
-      #ifndef LEVELING_NOZZLE_TEMP
411
-        #define LEVELING_NOZZLE_TEMP 0
407
+      #if ENABLED(PREHEAT_BEFORE_LEVELING)
408
+        if (!dryrun) probe.preheat_for_probing(LEVELING_NOZZLE_TEMP, LEVELING_BED_TEMP);
412
       #endif
409
       #endif
413
-      #ifndef LEVELING_BED_TEMP
414
-        #define LEVELING_BED_TEMP 0
415
-      #endif
416
-      if (!dryrun && !faux) {
417
-        constexpr uint16_t hotendPreheat = LEVELING_NOZZLE_TEMP, bedPreheat = LEVELING_BED_TEMP;
418
-        if (DEBUGGING(LEVELING))
419
-          DEBUG_ECHOLNPAIR("Preheating hotend (", hotendPreheat, ") and bed (", bedPreheat, ")");
420
-        if (hotendPreheat) thermalManager.setTargetHotend(hotendPreheat, 0);
421
-        if (bedPreheat)    thermalManager.setTargetBed(bedPreheat);
422
-        if (hotendPreheat) thermalManager.wait_for_hotend(0);
423
-        if (bedPreheat)    thermalManager.wait_for_bed_heating();
424
-      }
425
-    #endif
410
+    }
426
 
411
 
427
     // Disable auto bed leveling during G29.
412
     // Disable auto bed leveling during G29.
428
     // Be formal so G29 can be done successively without G28.
413
     // Be formal so G29 can be done successively without G28.

+ 16
- 0
Marlin/src/inc/Conditionals_LCD.h Ver arquivo

819
       #define TOTAL_PROBING MULTIPLE_PROBING
819
       #define TOTAL_PROBING MULTIPLE_PROBING
820
     #endif
820
     #endif
821
   #endif
821
   #endif
822
+  #if ENABLED(PREHEAT_BEFORE_PROBING)
823
+    #ifndef PROBING_NOZZLE_TEMP
824
+      #define PROBING_NOZZLE_TEMP 0
825
+    #endif
826
+    #ifndef PROBING_BED_TEMP
827
+      #define PROBING_BED_TEMP 0
828
+    #endif
829
+  #endif
830
+  #if ENABLED(PREHEAT_BEFORE_LEVELING)
831
+    #ifndef LEVELING_NOZZLE_TEMP
832
+      #define LEVELING_NOZZLE_TEMP 0
833
+    #endif
834
+    #ifndef LEVELING_BED_TEMP
835
+      #define LEVELING_BED_TEMP 0
836
+    #endif
837
+  #endif
822
 #else
838
 #else
823
   // Clear probe pin settings when no probe is selected
839
   // Clear probe pin settings when no probe is selected
824
   #undef Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
840
   #undef Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

+ 4
- 0
Marlin/src/inc/SanityCheck.h Ver arquivo

1514
   #endif
1514
   #endif
1515
 #endif
1515
 #endif
1516
 
1516
 
1517
+#if BOTH(PREHEAT_BEFORE_PROBING, PREHEAT_BEFORE_LEVELING)
1518
+  #error "Disable PREHEAT_BEFORE_LEVELING when using PREHEAT_BEFORE_PROBING."
1519
+#endif
1520
+
1517
 /**
1521
 /**
1518
  * Homing
1522
  * Homing
1519
  */
1523
  */

+ 17
- 0
Marlin/src/libs/nozzle.cpp Ver arquivo

31
 #include "../MarlinCore.h"
31
 #include "../MarlinCore.h"
32
 #include "../module/motion.h"
32
 #include "../module/motion.h"
33
 
33
 
34
+#if NOZZLE_CLEAN_MIN_TEMP > 20
35
+  #include "../module/temperature.h"
36
+#endif
37
+
34
 #if ENABLED(NOZZLE_CLEAN_FEATURE)
38
 #if ENABLED(NOZZLE_CLEAN_FEATURE)
35
 
39
 
36
   /**
40
   /**
153
 
157
 
154
     const uint8_t arrPos = ANY(SINGLENOZZLE, MIXING_EXTRUDER) ? 0 : active_extruder;
158
     const uint8_t arrPos = ANY(SINGLENOZZLE, MIXING_EXTRUDER) ? 0 : active_extruder;
155
 
159
 
160
+    #if NOZZLE_CLEAN_MIN_TEMP > 20
161
+      if (thermalManager.degTargetHotend(arrPos) < NOZZLE_CLEAN_MIN_TEMP) {
162
+        #if ENABLED(NOZZLE_CLEAN_HEATUP)
163
+          SERIAL_ECHOLNPGM("Nozzle too Cold - Heating");
164
+          thermalManager.setTargetHotend(NOZZLE_CLEAN_MIN_TEMP, arrPos);
165
+          thermalManager.wait_for_hotend(arrPos);
166
+        #else
167
+          SERIAL_ECHOLNPGM("Nozzle too cold - Skipping wipe");
168
+          return;
169
+        #endif
170
+      }
171
+    #endif
172
+
156
     #if HAS_SOFTWARE_ENDSTOPS
173
     #if HAS_SOFTWARE_ENDSTOPS
157
 
174
 
158
       #define LIMIT_AXIS(A) do{ \
175
       #define LIMIT_AXIS(A) do{ \

+ 33
- 0
Marlin/src/module/probe.cpp Ver arquivo

325
   #endif
325
   #endif
326
 }
326
 }
327
 
327
 
328
+#if EITHER(PREHEAT_BEFORE_PROBING, PREHEAT_BEFORE_LEVELING)
329
+
330
+  /**
331
+   * Do preheating as required before leveling or probing
332
+   */
333
+  void Probe::preheat_for_probing(const uint16_t hotend_temp, const uint16_t bed_temp) {
334
+    #if PROBING_NOZZLE_TEMP || LEVELING_NOZZLE_TEMP
335
+      #define WAIT_FOR_NOZZLE_HEAT
336
+    #endif
337
+    #if PROBING_BED_TEMP || LEVELING_BED_TEMP
338
+      #define WAIT_FOR_BED_HEAT
339
+    #endif
340
+    const uint16_t hotendPreheat = TERN0(WAIT_FOR_NOZZLE_HEAT, thermalManager.degHotend(0) < hotend_temp) ? hotend_temp : 0,
341
+                      bedPreheat = TERN0(WAIT_FOR_BED_HEAT,    thermalManager.degBed()     < bed_temp)    ? bed_temp    : 0;
342
+    DEBUG_ECHOPGM("Preheating ");
343
+    if (hotendPreheat) {
344
+      DEBUG_ECHOPAIR("hotend (", hotendPreheat, ") ");
345
+      if (bedPreheat) DEBUG_ECHOPGM("and ");
346
+    }
347
+    if (bedPreheat) DEBUG_ECHOPAIR("bed (", bedPreheat, ") ");
348
+    DEBUG_EOL();
349
+
350
+    TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotendPreheat) thermalManager.setTargetHotend(hotendPreheat, 0));
351
+    TERN_(WAIT_FOR_BED_HEAT,    if (bedPreheat)    thermalManager.setTargetBed(bedPreheat));
352
+    TERN_(WAIT_FOR_NOZZLE_HEAT, if (hotendPreheat) thermalManager.wait_for_hotend(0));
353
+    TERN_(WAIT_FOR_BED_HEAT,    if (bedPreheat)    thermalManager.wait_for_bed_heating());
354
+  }
355
+
356
+#endif
357
+
328
 /**
358
 /**
329
  * Attempt to deploy or stow the probe
359
  * Attempt to deploy or stow the probe
330
  *
360
  *
392
 
422
 
393
   #endif
423
   #endif
394
 
424
 
425
+  // If preheating is required before any probing...
426
+  TERN_(PREHEAT_BEFORE_PROBING, if (deploy) preheat_for_probing(PROBING_NOZZLE_TEMP, PROBING_BED_TEMP));
427
+
395
   do_blocking_move_to(old_xy);
428
   do_blocking_move_to(old_xy);
396
   endstops.enable_z_probe(deploy);
429
   endstops.enable_z_probe(deploy);
397
   return false;
430
   return false;

+ 4
- 0
Marlin/src/module/probe.h Ver arquivo

51
 
51
 
52
     static xyz_pos_t offset;
52
     static xyz_pos_t offset;
53
 
53
 
54
+    #if EITHER(PREHEAT_BEFORE_PROBING, PREHEAT_BEFORE_LEVELING)
55
+      static void preheat_for_probing(const uint16_t hotend_temp, const uint16_t bed_temp);
56
+    #endif
57
+
54
     static bool set_deployed(const bool deploy);
58
     static bool set_deployed(const bool deploy);
55
 
59
 
56
     #if IS_KINEMATIC
60
     #if IS_KINEMATIC

+ 2
- 1
buildroot/tests/LPC1768-tests Ver arquivo

39
 opt_set TEMP_SENSOR_BED 5
39
 opt_set TEMP_SENSOR_BED 5
40
 opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT ADAPTIVE_FAN_SLOWING NO_FAN_SLOWING_IN_PID_TUNING \
40
 opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT ADAPTIVE_FAN_SLOWING NO_FAN_SLOWING_IN_PID_TUNING \
41
            FILAMENT_WIDTH_SENSOR FILAMENT_LCD_DISPLAY PID_EXTRUSION_SCALING SOUND_MENU_ITEM \
41
            FILAMENT_WIDTH_SENSOR FILAMENT_LCD_DISPLAY PID_EXTRUSION_SCALING SOUND_MENU_ITEM \
42
-           NOZZLE_AS_PROBE AUTO_BED_LEVELING_BILINEAR G29_RETRY_AND_RECOVER Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
42
+           NOZZLE_AS_PROBE AUTO_BED_LEVELING_BILINEAR PREHEAT_BEFORE_LEVELING G29_RETRY_AND_RECOVER Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE \
43
            BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET BABYSTEP_ZPROBE_GFX_OVERLAY \
43
            BABYSTEPPING BABYSTEP_XY BABYSTEP_ZPROBE_OFFSET BABYSTEP_ZPROBE_GFX_OVERLAY \
44
            PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE SLOW_PWM_HEATERS PIDTEMPBED EEPROM_SETTINGS INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT \
44
            PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE SLOW_PWM_HEATERS PIDTEMPBED EEPROM_SETTINGS INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT \
45
            Z_SAFE_HOMING ADVANCED_PAUSE_FEATURE PARK_HEAD_ON_PAUSE \
45
            Z_SAFE_HOMING ADVANCED_PAUSE_FEATURE PARK_HEAD_ON_PAUSE \
47
            LCD_INFO_MENU ARC_SUPPORT BEZIER_CURVE_SUPPORT EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES SDCARD_SORT_ALPHA EMERGENCY_PARSER
47
            LCD_INFO_MENU ARC_SUPPORT BEZIER_CURVE_SUPPORT EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES SDCARD_SORT_ALPHA EMERGENCY_PARSER
48
 opt_set GRID_MAX_POINTS_X 16
48
 opt_set GRID_MAX_POINTS_X 16
49
 opt_set NOZZLE_TO_PROBE_OFFSET "{ 0, 0, 0 }"
49
 opt_set NOZZLE_TO_PROBE_OFFSET "{ 0, 0, 0 }"
50
+opt_set NOZZLE_CLEAN_MIN_TEMP 170
50
 exec_test $1 $2 "Re-ARM with NOZZLE_AS_PROBE and many features." "$3"
51
 exec_test $1 $2 "Re-ARM with NOZZLE_AS_PROBE and many features." "$3"
51
 
52
 
52
 # clean up
53
 # clean up

+ 1
- 1
buildroot/tests/rambo-tests Ver arquivo

25
 opt_disable USE_WATCHDOG
25
 opt_disable USE_WATCHDOG
26
 opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST \
26
 opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER LCD_PROGRESS_BAR LCD_PROGRESS_BAR_TEST \
27
            FIX_MOUNTED_PROBE Z_SAFE_HOMING CODEPENDENT_XY_HOMING PIDTEMPBED PROBE_TEMP_COMPENSATION \
27
            FIX_MOUNTED_PROBE Z_SAFE_HOMING CODEPENDENT_XY_HOMING PIDTEMPBED PROBE_TEMP_COMPENSATION \
28
-           PROBING_HEATERS_OFF PROBING_FANS_OFF PROBING_STEPPERS_OFF WAIT_FOR_BED_HEATER \
28
+           PREHEAT_BEFORE_PROBING PROBING_HEATERS_OFF PROBING_FANS_OFF PROBING_STEPPERS_OFF WAIT_FOR_BED_HEATER \
29
            EEPROM_SETTINGS SDSUPPORT SD_REPRINT_LAST_SELECTED_FILE BINARY_FILE_TRANSFER \
29
            EEPROM_SETTINGS SDSUPPORT SD_REPRINT_LAST_SELECTED_FILE BINARY_FILE_TRANSFER \
30
            BLINKM PCA9533 PCA9632 RGB_LED RGB_LED_R_PIN RGB_LED_G_PIN RGB_LED_B_PIN LED_CONTROL_MENU \
30
            BLINKM PCA9533 PCA9632 RGB_LED RGB_LED_R_PIN RGB_LED_G_PIN RGB_LED_B_PIN LED_CONTROL_MENU \
31
            NEOPIXEL_LED CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL CASE_LIGHT_MENU \
31
            NEOPIXEL_LED CASE_LIGHT_ENABLE CASE_LIGHT_USE_NEOPIXEL CASE_LIGHT_MENU \

Carregando…
Cancelar
Salvar