mirror of
https://github.com/grblHAL/core.git
synced 2026-08-20 22:11:38 +08:00
Added setting $539 for spindle spin down delay. Ref. issue #651.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
## grblHAL ##
|
||||
|
||||
Latest build date is 20250103, see the [changelog](changelog.md) for details.
|
||||
Latest build date is 20250107, 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.
|
||||
@@ -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.
|
||||
|
||||
---
|
||||
20250103
|
||||
20250107
|
||||
|
||||
@@ -1,5 +1,27 @@
|
||||
## grblHAL changelog
|
||||
|
||||
<a name="20250107">20250107
|
||||
|
||||
Core:
|
||||
|
||||
* Added setting `$539` for spindle spin down delay. Ref. issue [#651](https://github.com/grblHAL/core/issues/651).
|
||||
|
||||
Drivers:
|
||||
|
||||
* RP2040, STM32F4xx and STM32F7xx: increased reset delay for WizNet ethernet modules.
|
||||
|
||||
* iMXRT1062, STM32F4xx and STM32F7xx: fixed regression affecting step injection, used when stepper spindle or plasma THC is enabled.
|
||||
|
||||
* STM32F7xx: removed code left over from copy/paste update. Ref. issue [#20](https://github.com/grblHAL/STM32F7xx/issues/20).
|
||||
|
||||
Plugins:
|
||||
|
||||
* Spindle, stepper: improved settings changes handling. Added a bit of documentation. Ref. issue [#30](https://github.com/grblHAL/Plugins_spindle/issues/30).
|
||||
|
||||
* SD card: added inbuilt macro `G65P4` for getting the [current machine state](https://github.com/grblHAL/core/wiki/Expressions-and-flow-control#inbuilt-g65-macros).
|
||||
|
||||
---
|
||||
|
||||
<a name="20250104">20250104
|
||||
|
||||
Core:
|
||||
|
||||
@@ -1154,6 +1154,14 @@ Default value is 0, meaning spindle sync is disabled
|
||||
#endif
|
||||
///@}
|
||||
|
||||
/*! @name $539 - Setting_SpindleOffDelay
|
||||
*/
|
||||
///@{
|
||||
#if !defined DEFAULT_SPINDLE_OFF_DELAY || defined __DOXYGEN__
|
||||
#define DEFAULT_SPINDLE_OFF_DELAY 0 // milliseconds: 0 or 500 - 20000
|
||||
#endif
|
||||
///@}
|
||||
|
||||
// Closed loop spindle settings (Group_Spindle_ClosedLoop)
|
||||
|
||||
// $9 - Setting_SpindlePWMOptions
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
#else
|
||||
#define GRBL_VERSION "1.1f"
|
||||
#endif
|
||||
#define GRBL_BUILD 20250104
|
||||
#define GRBL_BUILD 20250107
|
||||
|
||||
#define GRBL_URL "https://github.com/grblHAL"
|
||||
|
||||
|
||||
+3
-7
@@ -3,7 +3,7 @@
|
||||
|
||||
Part of grblHAL
|
||||
|
||||
Copyright (c) 2017-2024 Terje Io
|
||||
Copyright (c) 2017-2025 Terje Io
|
||||
Copyright (c) 2012-2016 Sungeun K. Jeon for Gnea Research LLC
|
||||
Copyright (c) 2009-2011 Simen Svale Skogsrud
|
||||
|
||||
@@ -656,12 +656,8 @@ static float get_homing_rate (axes_signals_t cycle, homing_mode_t mode)
|
||||
{
|
||||
uint_fast8_t idx = 0;
|
||||
|
||||
while(cycle.mask) {
|
||||
if(cycle.mask & 1)
|
||||
break;
|
||||
idx++;
|
||||
cycle.mask >>= 1;
|
||||
}
|
||||
if(settings.homing.flags.per_axis_feedrates)
|
||||
idx = ffs(cycle.mask) - 1;
|
||||
|
||||
return mode == HomingMode_Locate ? settings.axis[idx].homing_feed_rate : settings.axis[idx].homing_seek_rate;
|
||||
}
|
||||
|
||||
+15
-1
@@ -161,6 +161,7 @@ PROGMEM const settings_t defaults = {
|
||||
|
||||
.spindle.ref_id = DEFAULT_SPINDLE,
|
||||
.spindle.on_delay = DEFAULT_SPINDLE_ON_DELAY,
|
||||
.spindle.off_delay = DEFAULT_SPINDLE_OFF_DELAY,
|
||||
.spindle.at_speed_tolerance = DEFAULT_SPINDLE_AT_SPEED_TOLERANCE,
|
||||
.spindle.encoder_spindle = DEFAULT_SPINDLE,
|
||||
.spindle.ppr = DEFAULT_SPINDLE_PPR,
|
||||
@@ -1147,6 +1148,10 @@ static status_code_t set_float (setting_id_t setting, float value)
|
||||
settings.spindle.on_delay = (uint16_t)(value * 1000.0f);
|
||||
break;
|
||||
|
||||
case Setting_SpindleOffDelay:
|
||||
settings.spindle.off_delay = (uint16_t)(value * 1000.0f);
|
||||
break;
|
||||
|
||||
case Setting_CoolantOnDelay:
|
||||
settings.coolant.on_delay = (uint16_t)(value * 1000.0f);
|
||||
break;
|
||||
@@ -1332,6 +1337,10 @@ static float get_float (setting_id_t setting)
|
||||
value = (float)settings.spindle.on_delay / 1000.0f;
|
||||
break;
|
||||
|
||||
case Setting_SpindleOffDelay:
|
||||
value = (float)settings.spindle.off_delay / 1000.0f;
|
||||
break;
|
||||
|
||||
case Setting_CoolantOnDelay:
|
||||
value = (float)settings.coolant.on_delay / 1000.0f;
|
||||
break;
|
||||
@@ -1807,6 +1816,7 @@ static bool is_setting_available (const setting_detail_t *setting)
|
||||
break;
|
||||
|
||||
case Setting_SpindleOnDelay:
|
||||
case Setting_SpindleOffDelay:
|
||||
available = spindle_get_count();
|
||||
break;
|
||||
|
||||
@@ -2063,6 +2073,7 @@ PROGMEM static const setting_detail_t setting_detail[] = {
|
||||
#if N_AXIS > 3
|
||||
{ Setting_RotaryWrap, Group_Stepper, "Fast rotary go to G28", NULL, Format_Bitfield, rotary_axes, NULL, NULL, Setting_IsExtendedFn, set_rotary_wrap_axes, get_int, NULL },
|
||||
#endif
|
||||
{ Setting_SpindleOffDelay, Group_Spindle, "Spindle off delay", "s", Format_Decimal, "#0.0", "0.5", "20", Setting_IsExtendedFn, set_float, get_float, is_setting_available, { .allow_null = On } },
|
||||
{ Setting_FSOptions, Group_General, "File systems options", NULL, Format_Bitfield, fs_options, NULL, NULL, Setting_IsExtended, &settings.fs_options.mask, NULL, is_setting_available },
|
||||
{ Setting_HomePinsInvertMask, Group_Limits, "Invert home inputs", NULL, Format_AxisMask, NULL, NULL, NULL, Setting_IsExtended, &settings.home_invert.mask, NULL, is_setting_available },
|
||||
{ Setting_CoolantOnDelay, Group_Coolant, "Coolant on delay", "s", Format_Decimal, "#0.0", "0.5", "20", Setting_IsExtendedFn, set_float, get_float, is_setting_available, { .allow_null = On } }
|
||||
@@ -2237,7 +2248,7 @@ PROGMEM static const setting_descr_t setting_descr[] = {
|
||||
{ Setting_DoorCoolantOnDelay, "Delay to allow coolant to restart after safety door is opened." },
|
||||
#endif
|
||||
{ Setting_SpindleOnDelay, "Delay to allow spindle to spin up. 0 or 0.5 - 20s\\n"
|
||||
"If spindle supports ""at speed"" functionality it is the time to wait before alarm 14 is raised."
|
||||
"If spindle supports \"at speed\" functionality it is the time to wait before alarm 14 is raised."
|
||||
},
|
||||
{ Setting_SpindleType, "Spindle selected on startup." },
|
||||
{ Setting_PlannerBlocks, "Number of blocks in the planner buffer." },
|
||||
@@ -2250,6 +2261,9 @@ PROGMEM static const setting_descr_t setting_descr[] = {
|
||||
#if NGC_EXPRESSIONS_ENABLE
|
||||
{ Setting_NGCDebugOut, "Example: (debug, metric mode: #<_metric>, coord system: #5220)" },
|
||||
#endif
|
||||
{ Setting_SpindleOffDelay, "Delay to allow spindle to spin down. 0 or 0.5 - 20s\\n"
|
||||
"If spindle supports \"at speed\" functionality it is the time to wait before alarm 14 is raised."
|
||||
},
|
||||
{ Setting_EncoderSpindle, "Specifies which spindle has the encoder attached." },
|
||||
#if N_AXIS > 3
|
||||
{ Setting_RotaryWrap, "Perform fast move to angle stored in G28 position.\\n"
|
||||
|
||||
+2
-1
@@ -265,7 +265,7 @@ typedef enum {
|
||||
Setting_LaserCoolantOkPort = 391,
|
||||
Setting_DoorSpindleOnDelay = 392,
|
||||
Setting_DoorCoolantOnDelay = 393,
|
||||
Setting_SpindleOnDelay = 394, // made available if safety door input not provided
|
||||
Setting_SpindleOnDelay = 394,
|
||||
Setting_SpindleType = 395,
|
||||
Setting_WebUiTimeout = 396,
|
||||
Setting_WebUiAutoReportInterval = 397,
|
||||
@@ -373,6 +373,7 @@ typedef enum {
|
||||
Setting_RGB_StripLengt0 = 536,
|
||||
Setting_RGB_StripLengt1 = 537,
|
||||
Setting_RotaryWrap = 538,
|
||||
Setting_SpindleOffDelay = 539,
|
||||
|
||||
Setting_Panel_SpindleSpeed = 540, // NOTE: Reserving settings values 540 to 579 for panel settings.
|
||||
Setting_Panel_ModbusAddress = 541,
|
||||
|
||||
+1
-1
@@ -637,7 +637,7 @@ for it to reach the speed and raise an alarm if the speed is not reached within
|
||||
bool spindle_set_state_synced (spindle_ptrs_t *spindle, spindle_state_t state, float rpm)
|
||||
{
|
||||
// Empty planner buffer to ensure spindle is set when programmed.
|
||||
return protocol_buffer_synchronize() && spindle_set_state_wait(spindle, state, rpm, settings.spindle.on_delay, DelayMode_Dwell);
|
||||
return protocol_buffer_synchronize() && spindle_set_state_wait(spindle, state, rpm, state.on ? settings.spindle.on_delay : settings.spindle.off_delay, DelayMode_Dwell);
|
||||
}
|
||||
|
||||
/*! \brief Restore spindle running state with direction, enable, spindle RPM and appropriate delay.
|
||||
|
||||
@@ -225,6 +225,7 @@ typedef struct {
|
||||
uint8_t encoder_spindle;
|
||||
uint16_t ppr; //!< Spindle encoder pulses per revolution (PPR).
|
||||
uint16_t on_delay;
|
||||
uint16_t off_delay;
|
||||
float at_speed_tolerance; //!< Tolerance in percent of programmed speed.
|
||||
} spindle_settings_t;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user