Procházet zdrojové kódy

Laser Cutter Air Assist (#21753)

Mike La Spina před 3 roky
rodič
revize
741e3c1280
No account linked to committer's email address

+ 10
- 4
Marlin/Configuration_adv.h Zobrazit soubor

@@ -3166,13 +3166,19 @@
3166 3166
   //#define AIR_EVACUATION                     // Cutter Vacuum / Laser Blower motor control with G-codes M10-M11
3167 3167
   #if ENABLED(AIR_EVACUATION)
3168 3168
     #define AIR_EVACUATION_ACTIVE       LOW    // Set to "HIGH" if the on/off function is active HIGH
3169
-    #define AIR_EVACUATION_PIN          42     // Override the default Cutter Vacuum or Laser Blower pin
3169
+    //#define AIR_EVACUATION_PIN        42     // Override the default Cutter Vacuum or Laser Blower pin
3170 3170
   #endif
3171 3171
 
3172
-  //#define SPINDLE_SERVO         // A servo converting an angle to spindle power
3172
+  //#define AIR_ASSIST                         // Air Assist control with G-codes M8-M9
3173
+  #if ENABLED(AIR_ASSIST)
3174
+    #define AIR_ASSIST_ACTIVE           LOW    // Active state on air assist pin
3175
+    //#define AIR_ASSIST_PIN            44     // Override the default Air Assist pin
3176
+  #endif
3177
+
3178
+  //#define SPINDLE_SERVO                      // A servo converting an angle to spindle power
3173 3179
   #ifdef SPINDLE_SERVO
3174
-    #define SPINDLE_SERVO_NR   0  // Index of servo used for spindle control
3175
-    #define SPINDLE_SERVO_MIN 10  // Minimum angle for servo spindle
3180
+    #define SPINDLE_SERVO_NR   0               // Index of servo used for spindle control
3181
+    #define SPINDLE_SERVO_MIN 10               // Minimum angle for servo spindle
3176 3182
   #endif
3177 3183
 
3178 3184
   /**

+ 15
- 1
Marlin/src/feature/spindle_laser.cpp Zobrazit soubor

@@ -71,6 +71,9 @@ void SpindleLaser::init() {
71 71
   #if ENABLED(AIR_EVACUATION)
72 72
     OUT_WRITE(AIR_EVACUATION_PIN, !AIR_EVACUATION_ACTIVE);            // Init Vacuum/Blower OFF
73 73
   #endif
74
+  #if ENABLED(AIR_ASSIST)
75
+    OUT_WRITE(AIR_ASSIST_PIN, !AIR_ASSIST_ACTIVE);                    // Init Air Assist OFF
76
+  #endif
74 77
 }
75 78
 
76 79
 #if ENABLED(SPINDLE_LASER_PWM)
@@ -147,6 +150,17 @@ void SpindleLaser::apply_power(const uint8_t opwr) {
147 150
 
148 151
   void SpindleLaser::air_evac_toggle()  { TOGGLE(AIR_EVACUATION_PIN); } // Toggle state
149 152
 
150
-#endif
153
+#endif // AIR_EVACUATION
154
+
155
+#if ENABLED(AIR_ASSIST)
156
+
157
+  // Enable / disable air assist
158
+  void SpindleLaser::air_assist_enable()  { WRITE(AIR_ASSIST_PIN,  AIR_ASSIST_PIN); } // Turn ON
159
+
160
+  void SpindleLaser::air_assist_disable() { WRITE(AIR_ASSIST_PIN, !AIR_ASSIST_PIN); } // Turn OFF
161
+
162
+  void SpindleLaser::air_assist_toggle()  { TOGGLE(AIR_ASSIST_PIN); } // Toggle state
163
+
164
+#endif // AIR_ASSIST
151 165
 
152 166
 #endif // HAS_CUTTER

+ 9
- 0
Marlin/src/feature/spindle_laser.h Zobrazit soubor

@@ -221,6 +221,15 @@ public:
221 221
     }
222 222
   #endif
223 223
 
224
+  #if ENABLED(AIR_ASSIST)
225
+    static void air_assist_enable();         // Turn on air assist
226
+    static void air_assist_disable();        // Turn off air assist
227
+    static void air_assist_toggle();         // Toggle air assist
228
+    static inline bool air_assist_state() {  // Get current state
229
+      return (READ(AIR_ASSIST_PIN) == AIR_ASSIST_ACTIVE);
230
+    }
231
+  #endif
232
+
224 233
   static inline void disable() { isReady = false; set_enabled(false); }
225 234
 
226 235
   #if HAS_LCD_MENU

+ 0
- 3
Marlin/src/gcode/control/M10-M11.cpp Zobrazit soubor

@@ -25,14 +25,12 @@
25 25
 #if ENABLED(AIR_EVACUATION)
26 26
 
27 27
 #include "../gcode.h"
28
-#include "../../module/planner.h"
29 28
 #include "../../feature/spindle_laser.h"
30 29
 
31 30
 /**
32 31
  * M10: Vacuum or Blower On
33 32
  */
34 33
 void GcodeSuite::M10() {
35
-  planner.synchronize();      // Wait for move to arrive (TODO: asynchronous)
36 34
   cutter.air_evac_enable();   // Turn on Vacuum or Blower motor
37 35
 }
38 36
 
@@ -40,7 +38,6 @@ void GcodeSuite::M10() {
40 38
  * M11: Vacuum or Blower OFF
41 39
  */
42 40
 void GcodeSuite::M11() {
43
-  planner.synchronize();      // Wait for move to arrive (TODO: asynchronous)
44 41
   cutter.air_evac_disable();  // Turn off Vacuum or Blower motor
45 42
 }
46 43
 

+ 24
- 0
Marlin/src/gcode/control/M7-M9.cpp Zobrazit soubor

@@ -61,3 +61,27 @@ void GcodeSuite::M9() {
61 61
 }
62 62
 
63 63
 #endif // COOLANT_CONTROL
64
+
65
+#if ENABLED(AIR_ASSIST)
66
+
67
+#include "../gcode.h"
68
+#include "../../module/planner.h"
69
+#include "../../feature/spindle_laser.h"
70
+
71
+/**
72
+ * M8: Air Assist On
73
+ */
74
+void GcodeSuite::M8() {
75
+  planner.synchronize(); 
76
+  cutter.air_assist_enable();   // Turn on Air Assist pin
77
+}
78
+
79
+/**
80
+ * M9: Air Assist Off
81
+ */
82
+void GcodeSuite::M9() {
83
+  planner.synchronize(); 
84
+  cutter.air_assist_disable();  // Turn off Air Assist pin
85
+}
86
+
87
+#endif // AIR_ASSIST

+ 1
- 0
Marlin/src/lcd/language/language_en.h Zobrazit soubor

@@ -118,6 +118,7 @@ namespace Language_en {
118 118
   PROGMEM Language_Str MSG_SPINDLE_POWER                   = _UxGT("Spindle Pwr");
119 119
   PROGMEM Language_Str MSG_LASER_TOGGLE                    = _UxGT("Toggle Laser");
120 120
   PROGMEM Language_Str MSG_LASER_EVAC_TOGGLE               = _UxGT("Toggle Blower");
121
+  PROGMEM Language_Str MSG_LASER_ASSIST_TOGGLE             = _UxGT("Air Assist");
121 122
   PROGMEM Language_Str MSG_LASER_PULSE_MS                  = _UxGT("Test Pulse ms");
122 123
   PROGMEM Language_Str MSG_LASER_FIRE_PULSE                = _UxGT("Fire Pulse");
123 124
   PROGMEM Language_Str MSG_FLOWMETER_FAULT                 = _UxGT("Coolant Flow Fault");

+ 5
- 0
Marlin/src/lcd/menu/menu_spindle_laser.cpp Zobrazit soubor

@@ -56,6 +56,11 @@
56 56
       EDIT_ITEM(bool, MSG_CUTTER(EVAC_TOGGLE), &evac_state, cutter.air_evac_toggle);
57 57
     #endif
58 58
 
59
+    #if ENABLED(AIR_ASSIST)
60
+      bool air_assist_state = cutter.air_assist_state();
61
+      EDIT_ITEM(bool, MSG_CUTTER(ASSIST_TOGGLE), &air_assist_state, cutter.air_assist_toggle);
62
+    #endif
63
+
59 64
     #if ENABLED(SPINDLE_CHANGE_DIR)
60 65
       if (!is_enabled) {
61 66
         editable.state = is_rev;

+ 4
- 4
buildroot/tests/mega2560 Zobrazit soubor

@@ -173,9 +173,9 @@ exec_test $1 $2 "Azteeg X3 | Mixing Extruder (x5) | Gradient Mix | Greek" "$3"
173 173
 restore_configs
174 174
 opt_set MOTHERBOARD BOARD_RAMPS_14_EFB LCD_LANGUAGE en TEMP_SENSOR_COOLER 1 EXTRUDERS 0 TEMP_SENSOR_1 0 SERIAL_PORT_2 2
175 175
 opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS EEPROM_BOOT_SILENT EEPROM_AUTO_INIT \
176
-           LASER_FEATURE LASER_COOLANT_FLOW_METER MEATPACK_ON_SERIAL_PORT_1
176
+           LASER_FEATURE AIR_EVACUATION AIR_ASSIST LASER_COOLANT_FLOW_METER MEATPACK_ON_SERIAL_PORT_1
177 177
 
178
-exec_test $1 $2 "REPRAP MEGA2560 RAMPS | Laser Feature | Cooler | Flowmeter | 12864 LCD | meatpack | SERIAL_PORT_2 " "$3"
178
+exec_test $1 $2 "REPRAP MEGA2560 RAMPS | Laser Feature | Air Evacuation | Air Assist | Cooler | Flowmeter | 12864 LCD | meatpack | SERIAL_PORT_2 " "$3"
179 179
 
180 180
 #
181 181
 # Test Laser features with 44780 LCD
@@ -183,9 +183,9 @@ exec_test $1 $2 "REPRAP MEGA2560 RAMPS | Laser Feature | Cooler | Flowmeter | 12
183 183
 restore_configs
184 184
 opt_set MOTHERBOARD BOARD_RAMPS_14_EFB LCD_LANGUAGE en TEMP_SENSOR_COOLER 1 EXTRUDERS 0 TEMP_SENSOR_1 0
185 185
 opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS EEPROM_BOOT_SILENT EEPROM_AUTO_INIT \
186
-           LASER_FEATURE LASER_COOLANT_FLOW_METER
186
+           LASER_FEATURE AIR_EVACUATION AIR_ASSIST LASER_COOLANT_FLOW_METER
187 187
 
188
-exec_test $1 $2 "REPRAP MEGA2560 RAMPS | Laser Feature | Cooler | Flowmeter | 44780 LCD " "$3"
188
+exec_test $1 $2 "REPRAP MEGA2560 RAMPS | Laser Feature | Air Evacuation | Air Assist | Cooler | Flowmeter | 44780 LCD " "$3"
189 189
 
190 190
 #
191 191
 # Language files test with REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

Loading…
Zrušit
Uložit