From b50e04625df1f71cf835e7a21274126f0887c2b2 Mon Sep 17 00:00:00 2001 From: John Robertson Date: Sun, 17 Mar 2024 15:58:07 +0000 Subject: [PATCH 1/4] Update M3-M5.cpp added O power setting --- Marlin/src/gcode/control/M3-M5.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Marlin/src/gcode/control/M3-M5.cpp b/Marlin/src/gcode/control/M3-M5.cpp index ec24cf8a6585..15c0fcc5a1fc 100644 --- a/Marlin/src/gcode/control/M3-M5.cpp +++ b/Marlin/src/gcode/control/M3-M5.cpp @@ -47,6 +47,7 @@ * * Parameters: * S - Set power. S0 will turn the spindle/laser off. + * O - Set power in PWM units 0-255 * * If no PWM pin is defined then M3/M4 just turns it on or off. * @@ -91,7 +92,11 @@ void GcodeSuite::M3_M4(const bool is_M4) { auto get_s_power = [] { if (parser.seenval('S')) { const float v = parser.value_float(); - cutter.menuPower = cutter.unitPower = TERN(LASER_POWER_TRAP, v, cutter.power_to_range(v)); + cutter.menuPower = cutter.unitPower = TERN(LASER_POWER_TRAP, constrain( v, 0, CUTTER_POWER_MAX), cutter.power_to_range(v)); + } + else if (parser.seenval('O')) { // pwr in PWM units + const float v = parser.value_float(); + cutter.menuPower = cutter.unitPower = CUTTER_PWM_TO_SPWR(constrain(v, 0, 255)); } else if (cutter.cutter_mode == CUTTER_MODE_STANDARD) cutter.menuPower = cutter.unitPower = cutter.cpwr_to_upwr(SPEED_POWER_STARTUP); From a1978be1b28b02338c4abc54807d211bd6101db4 Mon Sep 17 00:00:00 2001 From: John Robertson Date: Sun, 17 Mar 2024 16:09:26 +0000 Subject: [PATCH 2/4] Update spindle_laser.h Added %/RPM/PWM conversions --- Marlin/src/feature/spindle_laser.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Marlin/src/feature/spindle_laser.h b/Marlin/src/feature/spindle_laser.h index 681df2f081e7..87ce3bc8ef09 100644 --- a/Marlin/src/feature/spindle_laser.h +++ b/Marlin/src/feature/spindle_laser.h @@ -35,8 +35,12 @@ // Inline laser power #include "../module/planner.h" +#define RPM_TO_PWM(X) ((X) * 255 / CUTTER_POWER_MAX) +#define PWM_TO_RPM(X) ((X) * CUTTER_POWER_MAX / 255) #define PCT_TO_PWM(X) ((X) * 255 / 100) +#define PWM_TO_PCT(X) ((X) * 100 / 255) #define PCT_TO_SERVO(X) ((X) * 180 / 100) +#define CUTTER_PWM_TO_SPWR(X) (CUTTER_UNIT_IS(PERCENT) ? PWM_TO_PCT(X) : (CUTTER_UNIT_IS(RPM) ? PWM_TO_RPM(X) : X)) // Laser/Cutter operation mode enum CutterMode : int8_t { From 5215ec820b4aea6ca8117aba88d3627fc1dd05d7 Mon Sep 17 00:00:00 2001 From: John Robertson Date: Sun, 17 Mar 2024 19:50:28 +0000 Subject: [PATCH 3/4] Update spindle_laser.h --- Marlin/src/feature/spindle_laser.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/feature/spindle_laser.h b/Marlin/src/feature/spindle_laser.h index 87ce3bc8ef09..d46c47d5b56a 100644 --- a/Marlin/src/feature/spindle_laser.h +++ b/Marlin/src/feature/spindle_laser.h @@ -35,8 +35,8 @@ // Inline laser power #include "../module/planner.h" -#define RPM_TO_PWM(X) ((X) * 255 / CUTTER_POWER_MAX) -#define PWM_TO_RPM(X) ((X) * CUTTER_POWER_MAX / 255) +#define RPM_TO_PWM(X) ((X) * 255 / SPEED_POWER_MAX) +#define PWM_TO_RPM(X) ((X) * SPEED_POWER_MAX / 255) #define PCT_TO_PWM(X) ((X) * 255 / 100) #define PWM_TO_PCT(X) ((X) * 100 / 255) #define PCT_TO_SERVO(X) ((X) * 180 / 100) From ea7143f9fd05e5714364ac203478ed595e5428d6 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Thu, 8 Aug 2024 14:28:09 -0500 Subject: [PATCH 4/4] tweak --- Marlin/src/feature/spindle_laser.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Marlin/src/feature/spindle_laser.h b/Marlin/src/feature/spindle_laser.h index d46c47d5b56a..ec4d1f68754a 100644 --- a/Marlin/src/feature/spindle_laser.h +++ b/Marlin/src/feature/spindle_laser.h @@ -35,8 +35,8 @@ // Inline laser power #include "../module/planner.h" -#define RPM_TO_PWM(X) ((X) * 255 / SPEED_POWER_MAX) -#define PWM_TO_RPM(X) ((X) * SPEED_POWER_MAX / 255) +#define RPM_TO_PWM(X) ((X) * 255 / (SPEED_POWER_MAX)) +#define PWM_TO_RPM(X) ((X) * (SPEED_POWER_MAX) / 255) #define PCT_TO_PWM(X) ((X) * 255 / 100) #define PWM_TO_PCT(X) ((X) * 100 / 255) #define PCT_TO_SERVO(X) ((X) * 180 / 100)