From 50a7507f6fe98fa22c062685f46e9d06d20e85f8 Mon Sep 17 00:00:00 2001 From: Terje Io Date: Tue, 17 Dec 2024 16:10:20 +0100 Subject: [PATCH] Added preprocessor support for moving coolant outputs to auxiliary pool. Some minor bug fixes and code cleanup. Those who have custom board maps must update pin assignments accordingly when updating to this or later versions. --- README.md | 4 +- changelog.md | 18 +++++++++ coolant_control.h | 3 +- crossbar.h | 10 ++++- driver_opts.h | 99 +++++++++++++++++++++++++++++++++++------------ driver_opts2.h | 22 +++++------ grbl.h | 2 +- machine_limits.c | 2 +- pin_bits_masks.h | 77 +++++++++++++++++++++++++++--------- plugins_init.h | 2 +- settings.c | 12 ++++-- spindle_control.c | 4 -- system.h | 3 +- 13 files changed, 187 insertions(+), 71 deletions(-) diff --git a/README.md b/README.md index 6a7faf9..b943d0c 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Latest build date is 20241208, see the [changelog](changelog.md) for details. > [!NOTE] -> A settings reset will be performed on an update of builds prior to 20241208. Backup and restore of settings is recommended. +> A settings reset will be performed on an update of builds prior to 20241217. Backup and restore of settings is recommended. > [!NOTE] > Build 20240222 has moved the probe input to the ioPorts pool of inputs and will be allocated from it when configured. @@ -93,4 +93,4 @@ G/M-codes not supported by [legacy Grbl](https://github.com/gnea/grbl/wiki) are Some [plugins](https://github.com/grblHAL/plugins) implements additional M-codes. --- -20241209 +20241217 diff --git a/changelog.md b/changelog.md index 26f6f2d..3c43501 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,23 @@ ## grblHAL changelog +Build 20241217 + +Core: + +* Added preprocessor support for moving coolant outputs to auxiliary pool. Some minor bug fixes and code cleanup. +Those who have custom board maps must update pin assignments accordingly when updating to this or later versions. + +Drivers: + +* Most: moved coolant outputs to auxiliary outputs pool for many boards. +Web Builder functionality for assigning those outputs as coolant or as auxiliary (controlled by M62-M65) will be forthcoming. + +* ESP32: added driver support for second PWM spindle, only configurable for the MKS DLC32 v2 board for now. + +Plugins: + +* Spindle: removed obsoleted code, fix for second PWM spindle w/o direction output. + Build 20241214 Core: diff --git a/coolant_control.h b/coolant_control.h index be93609..81f4aba 100644 --- a/coolant_control.h +++ b/coolant_control.h @@ -25,8 +25,9 @@ // if changed to > 8 bits planner_cond_t needs to be changed too typedef union { + uint8_t bits; //!< Bitmask bits + uint8_t mask; //!< Bitmask uint8_t value; //!< Bitmask value - uint8_t mask; //!< Synonym for bitmask value struct { uint8_t flood :1, //!< Flood coolant. mist :1, //!< Mist coolant, optional. diff --git a/crossbar.h b/crossbar.h index 0c13722..7fd5f88 100644 --- a/crossbar.h +++ b/crossbar.h @@ -165,7 +165,11 @@ typedef enum { Output_Aux9, Output_Aux10, Output_Aux11, - Output_AuxMax = Output_Aux11, + Output_Aux12, + Output_Aux13, + Output_Aux14, + Output_Aux15, + Output_AuxMax = Output_Aux15, Output_Analog_Aux0, Output_Analog_Aux1, Output_Analog_Aux2, @@ -376,6 +380,10 @@ PROGMEM static const pin_name_t pin_names[] = { { .function = Output_Aux9, .name = "Aux out 9" }, { .function = Output_Aux10, .name = "Aux out 10" }, { .function = Output_Aux11, .name = "Aux out 11" }, + { .function = Output_Aux12, .name = "Aux out 12" }, + { .function = Output_Aux13, .name = "Aux out 13" }, + { .function = Output_Aux14, .name = "Aux out 14" }, + { .function = Output_Aux15, .name = "Aux out 15" }, { .function = Output_Analog_Aux0, .name = "Aux analog out 0" }, { .function = Output_Analog_Aux1, .name = "Aux analog out 1" }, { .function = Output_Analog_Aux2, .name = "Aux analog out 2" }, diff --git a/driver_opts.h b/driver_opts.h index fce192b..a724b23 100644 --- a/driver_opts.h +++ b/driver_opts.h @@ -231,6 +231,51 @@ #endif #endif +#ifndef ESTOP_ENABLE + #if COMPATIBILITY_LEVEL <= 1 + #define ESTOP_ENABLE 1 + #else + #define ESTOP_ENABLE 0 + #endif +#elif ESTOP_ENABLE && COMPATIBILITY_LEVEL > 1 + #warning "Enabling ESTOP may not work with all senders!" +#endif + +#define AUX_CONTROL_SPINDLE 0b0001 +#define AUX_CONTROL_COOLANT 0b0010 +#define AUX_CONTROL_DEVICES 0b0100 +#define AUX_CONTROL_INPUTS 0b1000 + +// Control signals, keep in sync with control_signals_t +#define CONTROL_RESET 0b0000001 +#define CONTROL_FEEDHOLD 0b0000010 +#define CONTROL_CYCLESTART 0b0000100 +#define CONTROL_SAFETYDOOR 0b0001000 +#define CONTROL_BLOCKDELETE 0b0010000 +#define CONTROL_STOPDISABLE 0b0100000 +#define CONTROL_ESTOP 0b1000000 + +#ifndef CONTROL_ENABLE +#if ESTOP_ENABLE +#define CONTROL_ENABLE (CONTROL_FEEDHOLD|CONTROL_CYCLESTART|CONTROL_ESTOP) +#else +#define CONTROL_ENABLE (CONTROL_RESET|CONTROL_FEEDHOLD|CONTROL_CYCLESTART) +#endif +#endif + +// Coolant signals, keep in sync with coolant_state_t +#define COOLANT_FLOOD 0b01 +#define COOLANT_MIST 0b10 + +#ifndef COOLANT_ENABLE +#define COOLANT_ENABLE (COOLANT_FLOOD|COOLANT_MIST) +#endif + +// Spindle signals +#define SPINDLE_ENA 0b001 +#define SPINDLE_PWM 0b010 +#define SPINDLE_DIR 0b100 + #ifndef SPINDLE0_ENABLE #define SPINDLE0_ENABLE DEFAULT_SPINDLE #endif @@ -269,23 +314,29 @@ // Driver spindle 0 -#if SPINDLE_ENABLE & ((1< 1 -#define DRIVER_SPINDLE1_ENABLE 1 +#if SPINDLE_ENABLE & (1< 1 in grbl/config.h when enabling second driver spindle!" #endif @@ -303,17 +362,17 @@ #define DRIVER_SPINDLE1_ENABLE 0 #endif -#if DRIVER_SPINDLE1_ENABLE && (SPINDLE_ENABLE & ((1< 1 - #warning "Enabling ESTOP may not work with all senders!" -#endif - // #ifndef WIFI_ENABLE diff --git a/driver_opts2.h b/driver_opts2.h index 1e0238e..55254d2 100644 --- a/driver_opts2.h +++ b/driver_opts2.h @@ -25,28 +25,20 @@ // NOTE: do NOT change options here - edit the driver specific my_machine.h instead! // -#if DRIVER_SPINDLE_ENABLE && !defined(SPINDLE_ENABLE_PIN) +#if (DRIVER_SPINDLE_ENABLE & SPINDLE_ENA) && !defined(SPINDLE_ENABLE_PIN) #warning "Selected spindle is not supported!" -#undef DRIVER_SPINDLE_ENABLE -#define DRIVER_SPINDLE_ENABLE 0 #endif -#if DRIVER_SPINDLE_DIR_ENABLE && !defined(SPINDLE_DIRECTION_PIN) +#if (DRIVER_SPINDLE_ENABLE & SPINDLE_DIR) && !defined(SPINDLE_DIRECTION_PIN) #warning "Selected spindle is not fully supported - no direction output!" -#undef DRIVER_SPINDLE_DIR_ENABLE -#define DRIVER_SPINDLE_DIR_ENABLE 0 #endif -#if DRIVER_SPINDLE_PWM_ENABLE && (!DRIVER_SPINDLE_ENABLE || !defined(SPINDLE_PWM_PIN)) +#if (DRIVER_SPINDLE_ENABLE & SPINDLE_PWM) && !defined(SPINDLE_PWM_PIN) #warning "Selected spindle is not supported!" -#undef DRIVER_SPINDLE_PWM_ENABLE -#define DRIVER_SPINDLE_PWM_ENABLE 0 #endif -#if DRIVER_SPINDLE_PWM1_ENABLE && (!DRIVER_SPINDLE1_ENABLE || !defined(SPINDLE1_PWM_PIN)) +#if (DRIVER_SPINDLE1_ENABLE & SPINDLE_PWM) && !defined(SPINDLE_PWM_PIN) #warning "Selected spindle 1 is not supported!" -#undef DRIVER_SPINDLE_PWM1_ENABLE -#define DRIVER_SPINDLE_PWM1_ENABLE 0 #endif #if MPG_ENABLE == 1 && !defined(MPG_MODE_PIN) @@ -146,6 +138,12 @@ #endif #endif +#if defined(COPROC_RESET_PIN) && defined(COPROC_BOOT0_PIN) +#define COPROC_PASSTHRU 1 +#else +#define COPROC_PASSTHRU 0 +#endif + #ifndef COPROC_STREAM #if USB_SERIAL_CDC #define COPROC_STREAM 0 diff --git a/grbl.h b/grbl.h index 100168c..dfb2cf2 100644 --- a/grbl.h +++ b/grbl.h @@ -42,7 +42,7 @@ #else #define GRBL_VERSION "1.1f" #endif -#define GRBL_BUILD 20241214 +#define GRBL_BUILD 20241217 #define GRBL_URL "https://github.com/grblHAL" diff --git a/machine_limits.c b/machine_limits.c index f781bd7..82b31a3 100644 --- a/machine_limits.c +++ b/machine_limits.c @@ -558,7 +558,7 @@ status_code_t limits_go_home (axes_signals_t cycle) // If axes in cycle has different feed rates home them separately if(axis0 == 254) { - status_code_t status; + status_code_t status = Status_OK; idx = 0; while(cycle.mask) { diff --git a/pin_bits_masks.h b/pin_bits_masks.h index a3d198d..5c16c43 100644 --- a/pin_bits_masks.h +++ b/pin_bits_masks.h @@ -392,42 +392,83 @@ static inline control_signals_t aux_ctrl_scan_status (control_signals_t signals) #define AUX_CONTROLS_SCAN 0 #endif -#ifdef AUX_CONTROLS_OUT +#if defined(AUX_CONTROLS_OUT) && !defined(AUX_CONTROLS) +#define AUX_CONTROLS AUX_CONTROL_SPINDLE +#elif !defined(AUX_CONTROLS) +#define AUX_CONTROLS 0 +#endif + +#if AUX_CONTROLS // The following pins are bound explicitly to aux output pins static aux_ctrl_out_t aux_ctrl_out[] = { -#if DRIVER_SPINDLE_ENABLE +#if AUX_CONTROLS & AUX_CONTROL_SPINDLE +#ifdef SPINDLE_ENABLE_PIN + #ifndef SPINDLE_ENABLE_PORT + #define SPINDLE_ENABLE_PORT NULL + #endif { .function = Output_SpindleOn, .aux_port = 0xFF, .pin = SPINDLE_ENABLE_PIN, .port = SPINDLE_ENABLE_PORT }, -#if DRIVER_SPINDLE_PWM_ENABLE +#endif +#ifdef SPINDLE_PWM_PIN + #ifndef SPINDLE_PWM_PORT + #define SPINDLE_PWM_PORT NULL + #endif { .function = Output_SpindlePWM, .aux_port = 0xFF, .pin = SPINDLE_PWM_PIN, .port = SPINDLE_PWM_PORT }, #endif -#if DRIVER_SPINDLE_DIR_ENABLE +#ifdef SPINDLE_DIRECTION_PIN + #ifndef SPINDLE_DIRECTION_PORT + #define SPINDLE_DIRECTION_PORT NULL + #endif { .function = Output_SpindleDir, .aux_port = 0xFF, .pin = SPINDLE_DIRECTION_PIN, .port = SPINDLE_DIRECTION_PORT }, #endif -#endif // DRIVER_SPINDLE_ENABLE -#if DRIVER_SPINDLE1_ENABLE + +#ifdef SPINDLE1_ENABLE_PIN + #ifndef SPINDLE1_ENABLE_PORT + #define SPINDLE1_ENABLE_PORT NULL + #endif { .function = Output_Spindle1On, .aux_port = 0xFF, .pin = SPINDLE1_ENABLE_PIN, .port = SPINDLE1_ENABLE_PORT }, -#if DRIVER_SPINDLE1_PWM_ENABLE +#endif +#ifdef SPINDLE1_PWM_PIN + #ifndef SPINDLE1_PWM_PORT + #define SPINDLE1_PWM_PORT NULL + #endif { .function = Output_Spindle1PWM, .aux_port = 0xFF, .pin = SPINDLE1_PWM_PIN, .port = SPINDLE1_PWM_PORT }, #endif -#if DRIVER_SPINDLE1_DIR_ENABLE +#ifdef SPINDLE1_DIRECTION_PIN + #ifndef SPINDLE1_DIRECTION_PORT + #define SPINDLE1_DIRECTION_PORT NULL + #endif { .function = Output_Spindle1Dir, .aux_port = 0xFF, .pin = SPINDLE1_DIRECTION_PIN, .port = SPINDLE1_DIRECTION_PORT }, #endif -#endif // DRIVER_SPINDLE1_DIR_ENABLE +#endif // SPINDLES + +#if AUX_CONTROLS & AUX_CONTROL_COOLANT +#ifdef COOLANT_FLOOD_PIN + #ifndef COOLANT_FLOOD_PORT + #define COOLANT_FLOOD_PORT NULL + #endif + { .function = Output_CoolantFlood, .aux_port = 0xFF, .pin = COOLANT_FLOOD_PIN, .port = COOLANT_FLOOD_PORT }, +#endif +#ifdef COOLANT_MIST_PIN + #ifndef COOLANT_MIST_PORT + #define COOLANT_MIST_PORT NULL + #endif + { .function = Output_CoolantMist, .aux_port = 0xFF, .pin = COOLANT_MIST_PIN, .port = COOLANT_MIST_PORT }, +#endif +#endif // COOLANT + #ifdef COPROC_RESET_PIN + #ifndef COPROC_RESET_PORT + #define COPROC_RESET_PORT NULL + #endif { .function = Output_CoProc_Reset, .aux_port = 0xFF, .pin = COPROC_RESET_PIN, .port = COPROC_RESET_PORT }, #endif #ifdef COPROC_BOOT0_PIN + #ifndef COPROC_BOOT0_PORT + #define COPROC_BOOT0_PORT NULL + #endif { .function = Output_CoProc_Boot0, .aux_port = 0xFF, .pin = COPROC_BOOT0_PIN, .port = COPROC_BOOT0_PORT }, #endif -/* -#ifdef COOLANT_FLOOD_PIN - { .function = Output_CoolantFlood, .aux_port = 0xFF, .pin = COOLANT_FLOOD_PIN, .port = COOLANT_FLOOD_PORT }, -#endif -#ifdef COOLANT_MIST_PIN - { .function = Output_CoolantMist, .aux_port = 0xFF, .pin = COOLANT_MIST_PIN, .port = COOLANT_MIST_PORT }, -#endif -*/ }; static inline aux_ctrl_out_t *aux_out_remap_explicit (void *port, uint8_t pin, uint8_t aux_port, void *output) @@ -473,7 +514,7 @@ static inline void aux_ctrl_claim_out_ports (aux_claim_explicit_out_ptr aux_clai } } -#endif // AUX_CONTROLS_OUT +#endif // AUX_CONTROLS // diff --git a/plugins_init.h b/plugins_init.h index 4cd6129..ed0fb39 100644 --- a/plugins_init.h +++ b/plugins_init.h @@ -58,7 +58,7 @@ onoff_spindle_init(); #endif -#if SPINDLE_ENABLE & (1<compute_value = compute_dummy_pwm_value; } - pwm_data->flags.invert_pwm = pwm_data->flags.invert_pwm; - pwm_data->flags.always_on = pwm_data->flags.always_on; - pwm_data->flags.cloned = pwm_data->flags.cloned; - spindle->context.pwm = pwm_data; #if ENABLE_SPINDLE_LINEARIZATION diff --git a/system.h b/system.h index 3ba90bf..f04d98f 100644 --- a/system.h +++ b/system.h @@ -135,8 +135,9 @@ typedef union { // NOTE: the pin_function_t enum must be kept in sync with any changes! typedef union { - uint16_t value; + uint16_t bits; uint16_t mask; + uint16_t value; struct { uint16_t reset :1, feed_hold :1,