Browse Source

M10-M11 Air Evacuation for Spindle/Laser (#21668)

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
Mike La Spina 3 years ago
parent
commit
f075dd0db3
No account linked to committer's email address

+ 6
- 0
Marlin/Configuration_adv.h View File

@@ -3160,6 +3160,12 @@
3160 3160
 
3161 3161
   #define SPINDLE_LASER_FREQUENCY       2500   // (Hz) Spindle/laser frequency (only on supported HALs: AVR and LPC)
3162 3162
 
3163
+  //#define AIR_EVACUATION                     // Cutter Vacuum / Laser Blower motor control with G-codes M10-M11
3164
+  #if ENABLED(AIR_EVACUATION)
3165
+    #define AIR_EVACUATION_ACTIVE       LOW    // Set to "HIGH" if the on/off function is active HIGH
3166
+    #define AIR_EVACUATION_PIN          42     // Override the default Cutter Vacuum or Laser Blower pin
3167
+  #endif
3168
+
3163 3169
   //#define SPINDLE_SERVO         // A servo converting an angle to spindle power
3164 3170
   #ifdef SPINDLE_SERVO
3165 3171
     #define SPINDLE_SERVO_NR   0  // Index of servo used for spindle control

+ 14
- 0
Marlin/src/feature/spindle_laser.cpp View File

@@ -68,6 +68,9 @@ void SpindleLaser::init() {
68 68
     set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY);
69 69
     TERN_(MARLIN_DEV_MODE, frequency = SPINDLE_LASER_FREQUENCY);
70 70
   #endif
71
+  #if ENABLED(AIR_EVACUATION)
72
+    OUT_WRITE(AIR_EVACUATION_PIN, !AIR_EVACUATION_ACTIVE);            // Init Vacuum/Blower OFF
73
+  #endif
71 74
 }
72 75
 
73 76
 #if ENABLED(SPINDLE_LASER_PWM)
@@ -135,4 +138,15 @@ void SpindleLaser::apply_power(const uint8_t opwr) {
135 138
   }
136 139
 #endif
137 140
 
141
+#if ENABLED(AIR_EVACUATION)
142
+
143
+  // Enable / disable Cutter Vacuum or Laser Blower motor
144
+  void SpindleLaser::air_evac_enable()  { WRITE(AIR_EVACUATION_PIN,  AIR_EVACUATION_ACTIVE); } // Turn ON
145
+
146
+  void SpindleLaser::air_evac_disable() { WRITE(AIR_EVACUATION_PIN, !AIR_EVACUATION_ACTIVE); } // Turn OFF
147
+
148
+  void SpindleLaser::air_evac_toggle()  { TOGGLE(AIR_EVACUATION_PIN); } // Toggle state
149
+
150
+#endif
151
+
138 152
 #endif // HAS_CUTTER

+ 9
- 0
Marlin/src/feature/spindle_laser.h View File

@@ -212,6 +212,15 @@ public:
212 212
     static bool is_reverse() { return false; }
213 213
   #endif
214 214
 
215
+  #if ENABLED(AIR_EVACUATION)
216
+    static void air_evac_enable();         // Turn On Cutter Vacuum or Laser Blower motor
217
+    static void air_evac_disable();        // Turn Off Cutter Vacuum or Laser Blower motor
218
+    static void air_evac_toggle();         // Toggle Cutter Vacuum or Laser Blower motor
219
+    static inline bool air_evac_state() {  // Get current state
220
+      return (READ(AIR_EVACUATION_PIN) == AIR_EVACUATION_ACTIVE);
221
+    }
222
+  #endif
223
+
215 224
   static inline void disable() { isReady = false; set_enabled(false); }
216 225
 
217 226
   #if HAS_LCD_MENU

+ 47
- 0
Marlin/src/gcode/control/M10-M11.cpp View File

@@ -0,0 +1,47 @@
1
+/**
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * Based on Sprinter and grbl.
6
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU General Public License
19
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+#include "../../inc/MarlinConfig.h"
24
+
25
+#if ENABLED(AIR_EVACUATION)
26
+
27
+#include "../gcode.h"
28
+#include "../../module/planner.h"
29
+#include "../../feature/spindle_laser.h"
30
+
31
+/**
32
+ * M10: Vacuum or Blower On
33
+ */
34
+void GcodeSuite::M10() {
35
+  planner.synchronize();      // Wait for move to arrive (TODO: asynchronous)
36
+  cutter.air_evac_enable();   // Turn on Vacuum or Blower motor
37
+}
38
+
39
+/**
40
+ * M11: Vacuum or Blower OFF
41
+ */
42
+void GcodeSuite::M11() {
43
+  planner.synchronize();      // Wait for move to arrive (TODO: asynchronous)
44
+  cutter.air_evac_disable();  // Turn off Vacuum or Blower motor
45
+}
46
+
47
+#endif // AIR_EVACUATION

+ 4
- 0
Marlin/src/gcode/gcode.cpp View File

@@ -432,6 +432,10 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
432 432
         case 3: M3_M4(false); break;                              // M3: Turn ON Laser | Spindle (clockwise), set Power | Speed
433 433
         case 4: M3_M4(true ); break;                              // M4: Turn ON Laser | Spindle (counter-clockwise), set Power | Speed
434 434
         case 5: M5(); break;                                      // M5: Turn OFF Laser | Spindle
435
+        #if ENABLED(AIR_EVACUATION)
436
+          case 10: M10(); break;                                  // M10: Vacuum or Blower motor ON
437
+          case 11: M11(); break;                                  // M11: Vacuum or Blower motor OFF
438
+        #endif
435 439
       #endif
436 440
 
437 441
       #if ENABLED(COOLANT_CONTROL)

+ 6
- 0
Marlin/src/gcode/gcode.h View File

@@ -86,6 +86,8 @@
86 86
  * M7   - Turn mist coolant ON. (Requires COOLANT_CONTROL)
87 87
  * M8   - Turn flood coolant ON. (Requires COOLANT_CONTROL)
88 88
  * M9   - Turn coolant OFF. (Requires COOLANT_CONTROL)
89
+ * M10  - Turn Vacuum or Blower motor ON (Requires AIR_EVACUATION)
90
+ * M11  - Turn Vacuum or Blower motor OFF (Requires AIR_EVACUATION)
89 91
  * M12  - Set up closed loop control system. (Requires EXTERNAL_CLOSED_LOOP_CONTROLLER)
90 92
  * M16  - Expected printer check. (Requires EXPECTED_PRINTER_CHECK)
91 93
  * M17  - Enable/Power all stepper motors
@@ -548,6 +550,10 @@ private:
548 550
   #if HAS_CUTTER
549 551
     static void M3_M4(const bool is_M4);
550 552
     static void M5();
553
+    #if ENABLED(AIR_EVACUATION)
554
+      static void M10();
555
+      static void M11();
556
+    #endif
551 557
   #endif
552 558
 
553 559
   #if ENABLED(COOLANT_CONTROL)

+ 2
- 0
Marlin/src/lcd/language/language_en.h View File

@@ -114,10 +114,12 @@ namespace Language_en {
114 114
   PROGMEM Language_Str MSG_LASER_POWER                     = _UxGT("Laser Power");
115 115
   PROGMEM Language_Str MSG_SPINDLE_POWER                   = _UxGT("Spindle Pwr");
116 116
   PROGMEM Language_Str MSG_LASER_TOGGLE                    = _UxGT("Toggle Laser");
117
+  PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE               = _UxGT("Toggle Blower");
117 118
   PROGMEM Language_Str MSG_LASER_PULSE_MS                  = _UxGT("Test Pulse ms");
118 119
   PROGMEM Language_Str MSG_LASER_FIRE_PULSE                = _UxGT("Fire Pulse");
119 120
   PROGMEM Language_Str MSG_FLOWMETER_FAULT                 = _UxGT("Coolant Flow Fault");
120 121
   PROGMEM Language_Str MSG_SPINDLE_TOGGLE                  = _UxGT("Toggle Spindle");
122
+  PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE             = _UxGT("Toggle Vacuum");
121 123
   PROGMEM Language_Str MSG_SPINDLE_FORWARD                 = _UxGT("Spindle Forward");
122 124
   PROGMEM Language_Str MSG_SPINDLE_REVERSE                 = _UxGT("Spindle Reverse");
123 125
   PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Switch Power On");

+ 5
- 0
Marlin/src/lcd/menu/menu_spindle_laser.cpp View File

@@ -51,6 +51,11 @@
51 51
     editable.state = is_enabled;
52 52
     EDIT_ITEM(bool, MSG_CUTTER(TOGGLE), &is_enabled, []{ if (editable.state) cutter.disable(); else cutter.enable_same_dir(); });
53 53
 
54
+    #if ENABLED(AIR_EVACUATION)
55
+      bool evac_state = cutter.air_evac_state();
56
+      EDIT_ITEM(bool, MSG_CUTTER(EVAC_TOGGLE), &evac_state, cutter.air_evac_toggle);
57
+    #endif
58
+
54 59
     #if ENABLED(SPINDLE_CHANGE_DIR)
55 60
       if (!is_enabled) {
56 61
         editable.state = is_rev;

+ 1
- 0
ini/features.ini View File

@@ -164,6 +164,7 @@ SD_ABORT_ON_ENDSTOP_HIT = src_filter=+<src/gcode/config/M540.cpp>
164 164
 BAUD_RATE_GCODE         = src_filter=+<src/gcode/config/M575.cpp>
165 165
 HAS_SMART_EFF_MOD       = src_filter=+<src/gcode/config/M672.cpp>
166 166
 COOLANT_CONTROL         = src_filter=+<src/gcode/control/M7-M9.cpp>
167
+AIR_EVACUATION          = src_filter=+<src/gcode/control/M10-M11.cpp>
167 168
 HAS_SOFTWARE_ENDSTOPS   = src_filter=+<src/gcode/control/M211.cpp>
168 169
 HAS_DUPLICATION_MODE    = src_filter=+<src/gcode/control/M605.cpp>
169 170
 LIN_ADVANCE             = src_filter=+<src/gcode/feature/advance>

+ 1
- 0
platformio.ini View File

@@ -155,6 +155,7 @@ default_src_filter = +<src/*> -<src/config> -<src/HAL> +<src/HAL/shared>
155 155
   -<src/gcode/calibrate/M425.cpp>
156 156
   -<src/gcode/calibrate/M666.cpp>
157 157
   -<src/gcode/calibrate/M852.cpp>
158
+  -<src/gcode/control/M10-M11.cpp>
158 159
   -<src/gcode/control/M42.cpp> -<src/gcode/control/M226.cpp>
159 160
   -<src/gcode/config/M43.cpp>
160 161
   -<src/gcode/config/M217.cpp>

Loading…
Cancel
Save