Parcourir la source

Fix non-PWM spindle/laser compile (#18311)

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
Co-authored-by: Luu Lac <45380455+shitcreek@users.noreply.github.com>
InsanityAutomation il y a 4 ans
Parent
révision
23806aeb3c
Aucun compte lié à l'adresse e-mail de l'auteur

+ 2
- 0
Marlin/src/HAL/AVR/inc/SanityCheck.h Voir le fichier

@@ -41,6 +41,8 @@
41 41
   #elif NUM_SERVOS > 0 && (WITHIN(SPINDLE_LASER_PWM_PIN, 2, 3) || SPINDLE_LASER_PWM_PIN == 5)
42 42
     #error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by the servo system."
43 43
   #endif
44
+#elif defined(SPINDLE_LASER_FREQUENCY)
45
+  #error "SPINDLE_LASER_FREQUENCY requires SPINDLE_LASER_PWM."
44 46
 #endif
45 47
 
46 48
 /**

+ 8
- 6
Marlin/src/feature/spindle_laser.h Voir le fichier

@@ -109,8 +109,6 @@ public:
109 109
   FORCE_INLINE static void refresh() { apply_power(power); }
110 110
   FORCE_INLINE static void set_power(const uint8_t upwr) { power = upwr; refresh(); }
111 111
 
112
-  static inline void set_enabled(const bool enable) { set_power(enable ? (power ?: (unitPower ? upower_to_ocr(cpwr_to_upwr(SPEED_POWER_STARTUP)) : 0)) : 0); }
113
-
114 112
   #if ENABLED(SPINDLE_LASER_PWM)
115 113
 
116 114
     static void set_ocr(const uint8_t ocr);
@@ -148,21 +146,21 @@ public:
148 146
       cutter_power_t upwr;
149 147
       switch (pwrUnit) {
150 148
         case 0:                                                 // PWM
151
-          upwr = (
149
+          upwr = cutter_power_t(
152 150
               (pwr < pct_to_ocr(min_pct)) ? pct_to_ocr(min_pct) // Use minimum if set below
153 151
             : (pwr > pct_to_ocr(max_pct)) ? pct_to_ocr(max_pct) // Use maximum if set above
154 152
             :  pwr
155 153
           );
156 154
           break;
157 155
         case 1:                                                 // PERCENT
158
-          upwr = (
156
+          upwr = cutter_power_t(
159 157
               (pwr < min_pct) ? min_pct                         // Use minimum if set below
160 158
             : (pwr > max_pct) ? max_pct                         // Use maximum if set above
161 159
             :  pwr                                              // PCT
162 160
           );
163 161
           break;
164 162
         case 2:                                                 // RPM
165
-          upwr = (
163
+          upwr = cutter_power_t(
166 164
               (pwr < SPEED_POWER_MIN) ? SPEED_POWER_MIN         // Use minimum if set below
167 165
             : (pwr > SPEED_POWER_MAX) ? SPEED_POWER_MAX         // Use maximum if set above
168 166
             : pwr                                               // Calculate OCR value
@@ -175,6 +173,10 @@ public:
175 173
 
176 174
   #endif // SPINDLE_LASER_PWM
177 175
 
176
+  static inline void set_enabled(const bool enable) {
177
+    set_power(enable ? TERN(SPINDLE_LASER_PWM, (power ?: (unitPower ? upower_to_ocr(cpwr_to_upwr(SPEED_POWER_STARTUP)) : 0)), 255) : 0);
178
+  }
179
+
178 180
   // Wait for spindle to spin up or spin down
179 181
   static inline void power_delay(const bool on) {
180 182
     #if DISABLED(LASER_POWER_INLINE)
@@ -194,7 +196,7 @@ public:
194 196
 
195 197
     static inline void enable_with_dir(const bool reverse) {
196 198
       isReady = true;
197
-      const uint8_t ocr = upower_to_ocr(menuPower);
199
+      const uint8_t ocr = TERN(SPINDLE_LASER_PWM, upower_to_ocr(menuPower), 255);
198 200
       if (menuPower)
199 201
         power = ocr;
200 202
       else

+ 7
- 3
Marlin/src/gcode/control/M3-M5.cpp Voir le fichier

@@ -67,8 +67,12 @@
67 67
  */
68 68
 void GcodeSuite::M3_M4(const bool is_M4) {
69 69
   auto get_s_power = [] {
70
-    if (parser.seen('S'))
71
-      cutter.unitPower = cutter.power_to_range(cutter_power_t(round(parser.value_float())));
70
+    if (parser.seenval('S')) {
71
+      const float spwr = parser.value_float();
72
+      cutter.unitPower = TERN(SPINDLE_LASER_PWM,
73
+                              cutter.power_to_range(cutter_power_t(round(spwr))),
74
+                              spwr > 0 ? 255 : 0);
75
+    }
72 76
     else
73 77
       cutter.unitPower = cutter.cpwr_to_upwr(SPEED_POWER_STARTUP);
74 78
     return cutter.unitPower;
@@ -86,7 +90,7 @@ void GcodeSuite::M3_M4(const bool is_M4) {
86 90
         else
87 91
           cutter.inline_power(cutter.upower_to_ocr(get_s_power()));
88 92
       #else
89
-        cutter.inline_enabled(true);
93
+        cutter.set_inline_enabled(true);
90 94
       #endif
91 95
       return;
92 96
     }

+ 4
- 2
Marlin/src/gcode/gcode.cpp Voir le fichier

@@ -179,8 +179,10 @@ void GcodeSuite::get_destination_from_command() {
179 179
 
180 180
   #if ENABLED(LASER_MOVE_POWER)
181 181
     // Set the laser power in the planner to configure this move
182
-    if (parser.seen('S'))
183
-      cutter.inline_power(cutter.power_to_range(cutter_power_t(round(parser.value_float()))));
182
+    if (parser.seen('S')) {
183
+      const float spwr = parser.value_float();
184
+      cutter.inline_power(TERN(SPINDLE_LASER_PWM, cutter.power_to_range(cutter_power_t(round(spwr))), spwr > 0 ? 255 : 0));
185
+    }
184 186
     else if (ENABLED(LASER_MOVE_G0_OFF) && parser.codenum == 0) // G0
185 187
       cutter.set_inline_enabled(false);
186 188
   #endif

Chargement…
Annuler
Enregistrer