Browse Source

Fix SPINDLE_LASER_FREQUENCY (#20509)

Ashammaru 4 years ago
parent
commit
719404803b
No account linked to committer's email address

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

@@ -43,7 +43,7 @@ cutter_power_t SpindleLaser::menuPower,                               // Power s
43 43
 #if ENABLED(MARLIN_DEV_MODE)
44 44
   cutter_frequency_t SpindleLaser::frequency;                         // PWM frequency setting; range: 2K - 50K
45 45
 #endif
46
-#define SPINDLE_LASER_PWM_OFF ((SPINDLE_LASER_PWM_INVERT) ? 255 : 0)
46
+#define SPINDLE_LASER_PWM_OFF TERN(SPINDLE_LASER_PWM_INVERT, 255, 0)
47 47
 
48 48
 //
49 49
 // Init the cutter to a safe OFF state
@@ -71,16 +71,23 @@ void SpindleLaser::init() {
71 71
   /**
72 72
    * Set the cutter PWM directly to the given ocr value
73 73
    */
74
-  void SpindleLaser::set_ocr(const uint8_t ocr) {
75
-    WRITE(SPINDLE_LASER_ENA_PIN, SPINDLE_LASER_ACTIVE_STATE);         // Turn spindle on
76
-    analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF);
74
+  void SpindleLaser::_set_ocr(const uint8_t ocr) {
77 75
     #if NEEDS_HARDWARE_PWM && SPINDLE_LASER_FREQUENCY
76
+      set_pwm_frequency(pin_t(SPINDLE_LASER_PWM_PIN), TERN(MARLIN_DEV_MODE, frequency, SPINDLE_LASER_FREQUENCY));
78 77
       set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF);
78
+    #else
79
+      analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF);
79 80
     #endif
80 81
   }
82
+
83
+  void SpindleLaser::set_ocr(const uint8_t ocr) {
84
+    WRITE(SPINDLE_LASER_ENA_PIN,  SPINDLE_LASER_ACTIVE_STATE); // Cutter ON
85
+    _set_ocr(ocr);
86
+  }
87
+
81 88
   void SpindleLaser::ocr_off() {
82
-    WRITE(SPINDLE_LASER_ENA_PIN, !SPINDLE_LASER_ACTIVE_STATE);        // Turn spindle off
83
-    analogWrite(pin_t(SPINDLE_LASER_PWM_PIN), SPINDLE_LASER_PWM_OFF); // Only write low byte
89
+    WRITE(SPINDLE_LASER_ENA_PIN, !SPINDLE_LASER_ACTIVE_STATE); // Cutter OFF
90
+    _set_ocr(0);
84 91
   }
85 92
 #endif
86 93
 
@@ -97,7 +104,7 @@ void SpindleLaser::apply_power(const uint8_t opwr) {
97 104
       ocr_off();
98 105
       isReady = false;
99 106
     }
100
-    else if (enabled() || ENABLED(CUTTER_POWER_RELATIVE)) {
107
+    else if (ENABLED(CUTTER_POWER_RELATIVE) || enabled()) {
101 108
       set_ocr(power);
102 109
       isReady = true;
103 110
     }

+ 7
- 1
Marlin/src/feature/spindle_laser.h View File

@@ -117,6 +117,12 @@ public:
117 117
 
118 118
   #if ENABLED(SPINDLE_LASER_PWM)
119 119
 
120
+    private:
121
+
122
+    static void _set_ocr(const uint8_t ocr);
123
+
124
+    public:
125
+
120 126
     static void set_ocr(const uint8_t ocr);
121 127
     static inline void set_ocr_power(const uint8_t ocr) { power = ocr; set_ocr(ocr); }
122 128
     static void ocr_off();
@@ -143,7 +149,7 @@ public:
143 149
         #elif CUTTER_UNIT_IS(RPM)
144 150
           2
145 151
         #else
146
-          #error "???"
152
+          #error "CUTTER_UNIT_IS(???)"
147 153
         #endif
148 154
       ));
149 155
     }

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

@@ -59,7 +59,7 @@
59 59
     #endif
60 60
 
61 61
     #if BOTH(MARLIN_DEV_MODE, HAL_CAN_SET_PWM_FREQ) && defined(SPINDLE_LASER_FREQUENCY)
62
-      EDIT_ITEM_FAST(CUTTER_MENU_FREQUENCY_TYPE, MSG_CUTTER_FREQUENCY, &cutter.frequency, 2000, 50000, cutter.refresh_frequency);
62
+      EDIT_ITEM_FAST(CUTTER_MENU_FREQUENCY_TYPE, MSG_CUTTER_FREQUENCY, &cutter.frequency, 2000, 80000, cutter.refresh_frequency);
63 63
     #endif
64 64
 
65 65
     END_MENU();

Loading…
Cancel
Save