Various Laser / Spindle improvements (#15335)
This commit is contained in:
@ -116,7 +116,23 @@
|
||||
#define Z_STEPPER_ALIGN_AMP 1.0
|
||||
#endif
|
||||
|
||||
#define HAS_CUTTER EITHER(SPINDLE_FEATURE, LASER_FEATURE)
|
||||
//
|
||||
// Spindle/Laser power display types
|
||||
// Defined here so sanity checks can use them
|
||||
//
|
||||
#if EITHER(SPINDLE_FEATURE, LASER_FEATURE)
|
||||
#define HAS_CUTTER 1
|
||||
#define _CUTTER_DISP_PWM 1
|
||||
#define _CUTTER_DISP_PERCENT 2
|
||||
#define _CUTTER_DISP_RPM 3
|
||||
#define _CUTTER_DISP(V) _CAT(_CUTTER_DISP_, V)
|
||||
#define CUTTER_DISPLAY_IS(V) (_CUTTER_DISP(CUTTER_POWER_DISPLAY) == _CUTTER_DISP(V))
|
||||
#endif
|
||||
|
||||
// Add features that need hardware PWM here
|
||||
#if ANY(FAST_PWM_FAN, SPINDLE_LASER_PWM)
|
||||
#define NEEDS_HARDWARE_PWM 1
|
||||
#endif
|
||||
|
||||
#if !defined(__AVR__) || !defined(USBCON)
|
||||
// Define constants and variables for buffering serial data.
|
||||
@ -290,3 +306,17 @@
|
||||
#define MAXIMUM_STEPPER_RATE 250000
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//
|
||||
// SD Card connection methods
|
||||
// Defined here so pins and sanity checks can use them
|
||||
//
|
||||
#if ENABLED(SDSUPPORT)
|
||||
#define _SDCARD_LCD 1
|
||||
#define _SDCARD_ONBOARD 2
|
||||
#define _SDCARD_CUSTOM_CABLE 3
|
||||
#define _SDCARD_ID(V) _CAT(_SDCARD_, V)
|
||||
#define SD_CONNECTION_IS(V) (_SDCARD_ID(SDCARD_CONNECTION) == _SDCARD_ID(V))
|
||||
#else
|
||||
#define SD_CONNECTION_IS(...) 0
|
||||
#endif
|
||||
|
@ -324,17 +324,36 @@
|
||||
|
||||
/**
|
||||
* Override the SD_DETECT_STATE set in Configuration_adv.h
|
||||
* and enable sharing of onboard SD host drives (all platforms but AGCM4)
|
||||
*/
|
||||
#if ENABLED(SDSUPPORT)
|
||||
#if HAS_LCD_MENU && (SD_CONNECTION_IS(LCD) || !defined(SDCARD_CONNECTION))
|
||||
#undef SD_DETECT_STATE
|
||||
#if ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
|
||||
#define SD_DETECT_STATE HIGH
|
||||
|
||||
#if SD_CONNECTION_IS(ONBOARD) && DISABLED(NO_SD_HOST_DRIVE) && !defined(ARDUINO_GRAND_CENTRAL_M4)
|
||||
//
|
||||
// The external SD card is not used. Hardware SPI is used to access the card.
|
||||
// When sharing the SD card with a PC we want the menu options to
|
||||
// mount/unmount the card and refresh it. So we disable card detect.
|
||||
//
|
||||
#undef SD_DETECT_PIN
|
||||
#define SHARED_SD_CARD
|
||||
#endif
|
||||
|
||||
#if DISABLED(SHARED_SD_CARD)
|
||||
#define INIT_SDCARD_ON_BOOT 1
|
||||
#endif
|
||||
|
||||
#if PIN_EXISTS(SD_DETECT)
|
||||
#if HAS_LCD_MENU && (SD_CONNECTION_IS(LCD) || !defined(SDCARD_CONNECTION))
|
||||
#undef SD_DETECT_STATE
|
||||
#if ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
|
||||
#define SD_DETECT_STATE HIGH
|
||||
#endif
|
||||
#endif
|
||||
#ifndef SD_DETECT_STATE
|
||||
#define SD_DETECT_STATE LOW
|
||||
#endif
|
||||
#endif
|
||||
#ifndef SD_DETECT_STATE
|
||||
#define SD_DETECT_STATE LOW
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
@ -2153,21 +2172,6 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
#if SD_CONNECTION_IS(ONBOARD) && DISABLED(NO_SD_HOST_DRIVE) && !defined(ARDUINO_GRAND_CENTRAL_M4)
|
||||
//
|
||||
// The external SD card is not used. Hardware SPI is used to access the card.
|
||||
// When sharing the SD card with a PC we want the menu options to
|
||||
// mount/unmount the card and refresh it. So we disable card detect.
|
||||
//
|
||||
#undef SD_DETECT_PIN
|
||||
#define SHARED_SD_CARD
|
||||
#endif
|
||||
#if DISABLED(SHARED_SD_CARD)
|
||||
#define INIT_SDCARD_ON_BOOT 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !NUM_SERIAL
|
||||
#undef BAUD_RATE_GCODE
|
||||
#endif
|
||||
|
@ -1451,7 +1451,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
* Deploying the Allen Key probe uses big moves in z direction. Too dangerous for an unhomed z-axis.
|
||||
*/
|
||||
#if ENABLED(Z_PROBE_ALLEN_KEY) && (Z_HOME_DIR < 0) && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
|
||||
#error "You can't home to a z min endstop with a Z_PROBE_ALLEN_KEY"
|
||||
#error "You can't home to a z min endstop with a Z_PROBE_ALLEN_KEY."
|
||||
#endif
|
||||
|
||||
/**
|
||||
@ -2654,9 +2654,9 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
|
||||
#if ENABLED(BACKLASH_COMPENSATION)
|
||||
#ifndef BACKLASH_DISTANCE_MM
|
||||
#error "BACKLASH_COMPENSATION requires BACKLASH_DISTANCE_MM"
|
||||
#error "BACKLASH_COMPENSATION requires BACKLASH_DISTANCE_MM."
|
||||
#elif !defined(BACKLASH_CORRECTION)
|
||||
#error "BACKLASH_COMPENSATION requires BACKLASH_CORRECTION"
|
||||
#error "BACKLASH_COMPENSATION requires BACKLASH_CORRECTION."
|
||||
#elif IS_CORE
|
||||
constexpr float backlash_arr[] = BACKLASH_DISTANCE_MM;
|
||||
static_assert(!backlash_arr[CORE_AXIS_1] && !backlash_arr[CORE_AXIS_2],
|
||||
@ -2736,6 +2736,45 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
#endif
|
||||
|
||||
#if HAS_CUTTER
|
||||
#ifndef CUTTER_POWER_DISPLAY
|
||||
#error "CUTTER_POWER_DISPLAY is required with a spindle or laser. Please update your Configuration_adv.h."
|
||||
#elif !CUTTER_DISPLAY_IS(PWM) && !CUTTER_DISPLAY_IS(PERCENT) && !CUTTER_DISPLAY_IS(RPM)
|
||||
#error "CUTTER_POWER_DISPLAY must be PWM, PERCENT, or RPM. Please update your Configuration_adv.h."
|
||||
#endif
|
||||
|
||||
#if ENABLED(LASER_POWER_INLINE)
|
||||
#if ENABLED(SPINDLE_CHANGE_DIR)
|
||||
#error "SPINDLE_CHANGE_DIR and LASER_POWER_INLINE are incompatible."
|
||||
#elif ENABLED(LASER_MOVE_G0_OFF) && DISABLED(LASER_MOVE_POWER)
|
||||
#error "LASER_MOVE_G0_OFF requires LASER_MOVE_POWER. Please update your Configuration_adv.h."
|
||||
#endif
|
||||
#if ENABLED(LASER_POWER_INLINE_TRAPEZOID)
|
||||
#if DISABLED(SPINDLE_LASER_PWM)
|
||||
#error "LASER_POWER_INLINE_TRAPEZOID requires SPINDLE_LASER_PWM to function."
|
||||
#elif ENABLED(S_CURVE_ACCELERATION)
|
||||
//#ifndef LASER_POWER_INLINE_S_CURVE_ACCELERATION_WARN
|
||||
// #define LASER_POWER_INLINE_S_CURVE_ACCELERATION_WARN
|
||||
// #warning "Combining LASER_POWER_INLINE_TRAPEZOID with S_CURVE_ACCELERATION may result in unintended behavior."
|
||||
//#endif
|
||||
#endif
|
||||
#endif
|
||||
#if ENABLED(LASER_POWER_INLINE_INVERT)
|
||||
//#ifndef LASER_POWER_INLINE_INVERT_WARN
|
||||
// #define LASER_POWER_INLINE_INVERT_WARN
|
||||
// #warning "Enabling LASER_POWER_INLINE_INVERT means that `M5` won't kill the laser immediately; use `M5 I` instead."
|
||||
//#endif
|
||||
#endif
|
||||
#else
|
||||
#if SPINDLE_LASER_POWERUP_DELAY < 1
|
||||
#error "SPINDLE_LASER_POWERUP_DELAY must be greater than 0."
|
||||
#elif SPINDLE_LASER_POWERDOWN_DELAY < 1
|
||||
#error "SPINDLE_LASER_POWERDOWN_DELAY must be greater than 0."
|
||||
#elif ENABLED(LASER_MOVE_POWER)
|
||||
#error "LASER_MOVE_POWER requires LASER_POWER_INLINE."
|
||||
#elif ANY(LASER_POWER_INLINE_TRAPEZOID, LASER_POWER_INLINE_INVERT, LASER_MOVE_G0_OFF, LASER_MOVE_POWER)
|
||||
#error "Enabled an inline laser feature without inline laser power being enabled."
|
||||
#endif
|
||||
#endif
|
||||
#define _PIN_CONFLICT(P) (PIN_EXISTS(P) && P##_PIN == SPINDLE_LASER_PWM_PIN)
|
||||
#if BOTH(SPINDLE_FEATURE, LASER_FEATURE)
|
||||
#error "Enable only one of SPINDLE_FEATURE or LASER_FEATURE."
|
||||
@ -2748,13 +2787,9 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
#error "SPINDLE_LASER_PWM_PIN is required for SPINDLE_LASER_PWM."
|
||||
#elif !PWM_PIN(SPINDLE_LASER_PWM_PIN)
|
||||
#error "SPINDLE_LASER_PWM_PIN not assigned to a PWM pin."
|
||||
#elif SPINDLE_LASER_POWERUP_DELAY < 1
|
||||
#error "SPINDLE_LASER_POWERUP_DELAY must be greater than 0."
|
||||
#elif SPINDLE_LASER_POWERDOWN_DELAY < 1
|
||||
#error "SPINDLE_LASER_POWERDOWN_DELAY must be greater than 0."
|
||||
#elif !defined(SPINDLE_LASER_PWM_INVERT)
|
||||
#error "SPINDLE_LASER_PWM_INVERT is required for (SPINDLE|LASER)_FEATURE."
|
||||
#elif !defined(SPEED_POWER_SLOPE) || !defined(SPEED_POWER_INTERCEPT) || !defined(SPEED_POWER_MIN) || !defined(SPEED_POWER_MAX)
|
||||
#elif !defined(SPEED_POWER_SLOPE) || !defined(SPEED_POWER_INTERCEPT) || !defined(SPEED_POWER_MIN) || !defined(SPEED_POWER_MAX) || !defined(SPEED_POWER_STARTUP)
|
||||
#error "SPINDLE_LASER_PWM equation constant(s) missing."
|
||||
#elif _PIN_CONFLICT(X_MIN)
|
||||
#error "SPINDLE_LASER_PWM pin conflicts with X_MIN_PIN."
|
||||
|
Reference in New Issue
Block a user