Browse Source

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

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

+ 6
- 0
Marlin/Configuration_adv.h View File

3160
 
3160
 
3161
   #define SPINDLE_LASER_FREQUENCY       2500   // (Hz) Spindle/laser frequency (only on supported HALs: AVR and LPC)
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
   //#define SPINDLE_SERVO         // A servo converting an angle to spindle power
3169
   //#define SPINDLE_SERVO         // A servo converting an angle to spindle power
3164
   #ifdef SPINDLE_SERVO
3170
   #ifdef SPINDLE_SERVO
3165
     #define SPINDLE_SERVO_NR   0  // Index of servo used for spindle control
3171
     #define SPINDLE_SERVO_NR   0  // Index of servo used for spindle control

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

68
     set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY);
68
     set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_FREQUENCY);
69
     TERN_(MARLIN_DEV_MODE, frequency = SPINDLE_LASER_FREQUENCY);
69
     TERN_(MARLIN_DEV_MODE, frequency = SPINDLE_LASER_FREQUENCY);
70
   #endif
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
 #if ENABLED(SPINDLE_LASER_PWM)
76
 #if ENABLED(SPINDLE_LASER_PWM)
135
   }
138
   }
136
 #endif
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
 #endif // HAS_CUTTER
152
 #endif // HAS_CUTTER

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

212
     static bool is_reverse() { return false; }
212
     static bool is_reverse() { return false; }
213
   #endif
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
   static inline void disable() { isReady = false; set_enabled(false); }
224
   static inline void disable() { isReady = false; set_enabled(false); }
216
 
225
 
217
   #if HAS_LCD_MENU
226
   #if HAS_LCD_MENU

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

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
         case 3: M3_M4(false); break;                              // M3: Turn ON Laser | Spindle (clockwise), set Power | Speed
432
         case 3: M3_M4(false); break;                              // M3: Turn ON Laser | Spindle (clockwise), set Power | Speed
433
         case 4: M3_M4(true ); break;                              // M4: Turn ON Laser | Spindle (counter-clockwise), set Power | Speed
433
         case 4: M3_M4(true ); break;                              // M4: Turn ON Laser | Spindle (counter-clockwise), set Power | Speed
434
         case 5: M5(); break;                                      // M5: Turn OFF Laser | Spindle
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
       #endif
439
       #endif
436
 
440
 
437
       #if ENABLED(COOLANT_CONTROL)
441
       #if ENABLED(COOLANT_CONTROL)

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

86
  * M7   - Turn mist coolant ON. (Requires COOLANT_CONTROL)
86
  * M7   - Turn mist coolant ON. (Requires COOLANT_CONTROL)
87
  * M8   - Turn flood coolant ON. (Requires COOLANT_CONTROL)
87
  * M8   - Turn flood coolant ON. (Requires COOLANT_CONTROL)
88
  * M9   - Turn coolant OFF. (Requires COOLANT_CONTROL)
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
  * M12  - Set up closed loop control system. (Requires EXTERNAL_CLOSED_LOOP_CONTROLLER)
91
  * M12  - Set up closed loop control system. (Requires EXTERNAL_CLOSED_LOOP_CONTROLLER)
90
  * M16  - Expected printer check. (Requires EXPECTED_PRINTER_CHECK)
92
  * M16  - Expected printer check. (Requires EXPECTED_PRINTER_CHECK)
91
  * M17  - Enable/Power all stepper motors
93
  * M17  - Enable/Power all stepper motors
548
   #if HAS_CUTTER
550
   #if HAS_CUTTER
549
     static void M3_M4(const bool is_M4);
551
     static void M3_M4(const bool is_M4);
550
     static void M5();
552
     static void M5();
553
+    #if ENABLED(AIR_EVACUATION)
554
+      static void M10();
555
+      static void M11();
556
+    #endif
551
   #endif
557
   #endif
552
 
558
 
553
   #if ENABLED(COOLANT_CONTROL)
559
   #if ENABLED(COOLANT_CONTROL)

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

114
   PROGMEM Language_Str MSG_LASER_POWER                     = _UxGT("Laser Power");
114
   PROGMEM Language_Str MSG_LASER_POWER                     = _UxGT("Laser Power");
115
   PROGMEM Language_Str MSG_SPINDLE_POWER                   = _UxGT("Spindle Pwr");
115
   PROGMEM Language_Str MSG_SPINDLE_POWER                   = _UxGT("Spindle Pwr");
116
   PROGMEM Language_Str MSG_LASER_TOGGLE                    = _UxGT("Toggle Laser");
116
   PROGMEM Language_Str MSG_LASER_TOGGLE                    = _UxGT("Toggle Laser");
117
+  PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE               = _UxGT("Toggle Blower");
117
   PROGMEM Language_Str MSG_LASER_PULSE_MS                  = _UxGT("Test Pulse ms");
118
   PROGMEM Language_Str MSG_LASER_PULSE_MS                  = _UxGT("Test Pulse ms");
118
   PROGMEM Language_Str MSG_LASER_FIRE_PULSE                = _UxGT("Fire Pulse");
119
   PROGMEM Language_Str MSG_LASER_FIRE_PULSE                = _UxGT("Fire Pulse");
119
   PROGMEM Language_Str MSG_FLOWMETER_FAULT                 = _UxGT("Coolant Flow Fault");
120
   PROGMEM Language_Str MSG_FLOWMETER_FAULT                 = _UxGT("Coolant Flow Fault");
120
   PROGMEM Language_Str MSG_SPINDLE_TOGGLE                  = _UxGT("Toggle Spindle");
121
   PROGMEM Language_Str MSG_SPINDLE_TOGGLE                  = _UxGT("Toggle Spindle");
122
+  PROGMEM Language_Str MSG_SPINDLE_EVAC_TOGGLE             = _UxGT("Toggle Vacuum");
121
   PROGMEM Language_Str MSG_SPINDLE_FORWARD                 = _UxGT("Spindle Forward");
123
   PROGMEM Language_Str MSG_SPINDLE_FORWARD                 = _UxGT("Spindle Forward");
122
   PROGMEM Language_Str MSG_SPINDLE_REVERSE                 = _UxGT("Spindle Reverse");
124
   PROGMEM Language_Str MSG_SPINDLE_REVERSE                 = _UxGT("Spindle Reverse");
123
   PROGMEM Language_Str MSG_SWITCH_PS_ON                    = _UxGT("Switch Power On");
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
     editable.state = is_enabled;
51
     editable.state = is_enabled;
52
     EDIT_ITEM(bool, MSG_CUTTER(TOGGLE), &is_enabled, []{ if (editable.state) cutter.disable(); else cutter.enable_same_dir(); });
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
     #if ENABLED(SPINDLE_CHANGE_DIR)
59
     #if ENABLED(SPINDLE_CHANGE_DIR)
55
       if (!is_enabled) {
60
       if (!is_enabled) {
56
         editable.state = is_rev;
61
         editable.state = is_rev;

+ 1
- 0
ini/features.ini View File

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

+ 1
- 0
platformio.ini View File

155
   -<src/gcode/calibrate/M425.cpp>
155
   -<src/gcode/calibrate/M425.cpp>
156
   -<src/gcode/calibrate/M666.cpp>
156
   -<src/gcode/calibrate/M666.cpp>
157
   -<src/gcode/calibrate/M852.cpp>
157
   -<src/gcode/calibrate/M852.cpp>
158
+  -<src/gcode/control/M10-M11.cpp>
158
   -<src/gcode/control/M42.cpp> -<src/gcode/control/M226.cpp>
159
   -<src/gcode/control/M42.cpp> -<src/gcode/control/M226.cpp>
159
   -<src/gcode/config/M43.cpp>
160
   -<src/gcode/config/M43.cpp>
160
   -<src/gcode/config/M217.cpp>
161
   -<src/gcode/config/M217.cpp>

Loading…
Cancel
Save