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
 #if ENABLED(MARLIN_DEV_MODE)
43
 #if ENABLED(MARLIN_DEV_MODE)
44
   cutter_frequency_t SpindleLaser::frequency;                         // PWM frequency setting; range: 2K - 50K
44
   cutter_frequency_t SpindleLaser::frequency;                         // PWM frequency setting; range: 2K - 50K
45
 #endif
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
 // Init the cutter to a safe OFF state
49
 // Init the cutter to a safe OFF state
71
   /**
71
   /**
72
    * Set the cutter PWM directly to the given ocr value
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
     #if NEEDS_HARDWARE_PWM && SPINDLE_LASER_FREQUENCY
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
       set_pwm_duty(pin_t(SPINDLE_LASER_PWM_PIN), ocr ^ SPINDLE_LASER_PWM_OFF);
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
     #endif
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
   void SpindleLaser::ocr_off() {
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
 #endif
92
 #endif
86
 
93
 
97
       ocr_off();
104
       ocr_off();
98
       isReady = false;
105
       isReady = false;
99
     }
106
     }
100
-    else if (enabled() || ENABLED(CUTTER_POWER_RELATIVE)) {
107
+    else if (ENABLED(CUTTER_POWER_RELATIVE) || enabled()) {
101
       set_ocr(power);
108
       set_ocr(power);
102
       isReady = true;
109
       isReady = true;
103
     }
110
     }

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

117
 
117
 
118
   #if ENABLED(SPINDLE_LASER_PWM)
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
     static void set_ocr(const uint8_t ocr);
126
     static void set_ocr(const uint8_t ocr);
121
     static inline void set_ocr_power(const uint8_t ocr) { power = ocr; set_ocr(ocr); }
127
     static inline void set_ocr_power(const uint8_t ocr) { power = ocr; set_ocr(ocr); }
122
     static void ocr_off();
128
     static void ocr_off();
143
         #elif CUTTER_UNIT_IS(RPM)
149
         #elif CUTTER_UNIT_IS(RPM)
144
           2
150
           2
145
         #else
151
         #else
146
-          #error "???"
152
+          #error "CUTTER_UNIT_IS(???)"
147
         #endif
153
         #endif
148
       ));
154
       ));
149
     }
155
     }

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

59
     #endif
59
     #endif
60
 
60
 
61
     #if BOTH(MARLIN_DEV_MODE, HAL_CAN_SET_PWM_FREQ) && defined(SPINDLE_LASER_FREQUENCY)
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
     #endif
63
     #endif
64
 
64
 
65
     END_MENU();
65
     END_MENU();

Loading…
Cancel
Save