Files
grblHAL/config.h
Terje Io 64c35930c7 Refactored offset handling, for improved readability and in preparation for rotation support.
Added experimental support for G66 (modal macro call) and G67 (end modal macro call).
Made axis letter to axis/motor assignment for axes ABCUVW freely changeable at compile time.
Fix for some G65 arguments being incorrectly validated for normal use (sign, range).
Added repeat support to G65 macro call via the optional L parameter word.
Changed default setting for ABC-axes to rotary.
Changed defaults for jerk settings to 10x acceleration settings.
Disabled jerk for jog, probe and spindle synchronized motion.
Added _active_probe system parameter, returns -1 if no probe inputs available.
Minor bug fix, G5.1 and G33.1 motion commands were not coverted to the correct string equivalent in $G output.
2026-01-25 07:51:44 +01:00

2562 lines
94 KiB
C

/*
config.h - compile time configuration and default setting values
Part of grblHAL
Copyright (c) 2020-2025 Terje Io
grblHAL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
grblHAL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with grblHAL. If not, see <http://www.gnu.org/licenses/>.
*/
/*! \file
\brief This file contains compile-time and run-time configurations for grblHAL's internal system.
For the most part, users will not need to directly modify these, but they are here for
specific needs, i.e. performance tuning or adjusting to non-typical machines.
<br>__IMPORTANT:__ Symbol/macro names starting with `DEFAULT_` contains default values for run-time
configurable settings that can be changed with `$=<setting id>` commands.
Any changes to these requires a full re-compiling of the source code to propagate them.
A reset of non-volatile storage with `$RST=*` after reflashing is also required.
*/
#ifndef _GRBL_CONFIG_H_
#define _GRBL_CONFIG_H_
// Compile time only default configuration
/*! \def N_AXIS
\brief Defines number of axes supported - minimum 3, maximum 8.
If more than 3 axes are configured a compliant driver and board map file is needed.
*/
#ifndef N_AXIS
#define N_AXIS 3 // Number of axes
#endif
/*! \def AXIS_REMAP_ABC2UVW
\brief Remap `ABC` axis letters to `UVW`
<br>__NOTE:__ Experimental, if more than 3 and less than 7 axes are configured the `ABC`
axis letters can be remapped to `UWV`.
*/
#if (!defined AXIS_REMAP_ABC2UVW && (N_AXIS > 3 && N_AXIS < 7)) || defined __DOXYGEN__
#define AXIS_REMAP_ABC2UVW Off
#endif
/*! \def N_SPINDLE
\brief Defines number of spindles supported - minimum 1, maximum 32.
*/
#if !defined N_SPINDLE || defined __DOXYGEN__
#define N_SPINDLE 1
#endif
/*! \def N_SYS_SPINDLE
\brief Defines number of simultaneously active spindles supported - minimum 1 (none), maximum 8.
*/
#if !defined N_SYS_SPINDLE || defined __DOXYGEN__
#define N_SYS_SPINDLE 1
#endif
/*! \def PLANNER_ADD_MOTION_MODE
\brief Enables passing the motion mode used to the planner.
*/
#if !defined PLANNER_ADD_MOTION_MODE || defined __DOXYGEN__
#define PLANNER_ADD_MOTION_MODE Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! \def BUILD_INFO
\brief Defines string to be output as part of the `$I` or `$I+` command response.
*/
#if !defined BUILD_INFO || defined __DOXYGEN__
#define BUILD_INFO ""
#endif
/*! \def COMPATIBILITY_LEVEL
\brief Define compatibility level with the legacy Grbl 1.1 protocol.
Additional G- and M-codes are not disabled except when level is set to >= 10.
This does not apply to G- and M-codes dependent on driver and/or configuration
settings disabled by setting level > 1.
<br>Set to `0` for reporting itself as "GrblHAL" with protocol extensions enabled.
<br>Set to `1` to disable some extensions, and for reporting itself as "Grbl".
<br>Set to `2` to disable new settings as well, use \#define symbols/macros for setting default values.
<br>These can be found in in this file and in defaults.h.
<br>Set to `10` to also disable new coordinate system offsets (G59.1 - G59.3) and some `$#` report extensions.
__NOTE:__ if switching to a level > 1 please reset non-volatile storage with `$RST=*` after reflashing!
*/
#if !defined COMPATIBILITY_LEVEL || defined __DOXYGEN__
#define COMPATIBILITY_LEVEL 0
#endif
/*! \def ENABLE_SPINDLE_LINEARIZATION
\brief This feature alters the spindle PWM/speed to a nonlinear output with a simple piecewise linear curve.
Useful for spindles that don't produce the right RPM from grblHAL's standard spindle PWM
linear model. Requires a solution by the 'fit_nonlinear_spindle.py' script in the /doc/script
folder of the repo. See file comments on how to gather spindle data and run the script to
generate a solution.
*/
#if !defined ENABLE_SPINDLE_LINEARIZATION || defined __DOXYGEN__
#define ENABLE_SPINDLE_LINEARIZATION 0 // Set to 1 to enable spindle RPM linearization. Requires compatible driver if enabled.
#endif
/*! \def SPINDLE_NPWM_PIECES
\brief Number of pieces used for spindle RPM linearization, enabled by setting \ref ENABLE_SPINDLE_LINEARIZATION to 1.
*/
#if !defined SPINDLE_NPWM_PIECES || defined __DOXYGEN__
#define SPINDLE_NPWM_PIECES 4 // Number of pieces for spindle RPM linearization, max 4.
#endif
#include "nuts_bolts.h"
//#define KINEMATICS_API // Uncomment to add HAL entry points for custom kinematics
/*! \def MASLOW_ROUTER
\brief Enable Maslow router kinematics.
Experimental - testing required and homing needs to be worked out.
*/
#if !defined MASLOW_ROUTER || defined __DOXYGEN__
// Enable Maslow router kinematics.
// Experimental - testing required and homing needs to be worked out.
#define MASLOW_ROUTER Off
#endif
/*! \def WALL_PLOTTER
\brief Enable wall plotter kinematics.
Experimental - testing required and homing needs to be worked out.
*/
#if !defined WALL_PLOTTER || defined __DOXYGEN__
#define WALL_PLOTTER Off
#endif
/*! \def DELTA_ROBOT
\brief Enable delta kinematics.
Experimental - testing required and homing needs to be worked out.
*/
#if !defined DELTA_ROBOT || defined __DOXYGEN__
#define DELTA_ROBOT Off
#endif
// Reduce minimum feedrate for delta robots
#if DELTA_ROBOT && !defined MINIMUM_FEED_RATE
#define MINIMUM_FEED_RATE 0.1f // (radians/min)
#endif
/*! \def POLAR_ROBOT
\brief Enable polar kinematics.
Experimental - testing required and homing needs to be worked out.
*/
#if !defined POLAR_ROBOT || defined __DOXYGEN__
#define POLAR_ROBOT Off
#endif
/*! \def COREXY
\brief Enable CoreXY kinematics. Use ONLY with CoreXY machines.
<br>__IMPORTANT:__ If homing is enabled, you must reconfigure the homing cycle \#defines above to
\#define \ref DEFAULT_HOMING_CYCLE_1 `X_AXIS_BIT` and \#define \ref DEFAULT_HOMING_CYCLE_2 `Y_AXIS_BIT`
<br>__NOTE:__ This configuration option alters the motion of the X and Y axes to principle of operation
defined at [corexy.com](http://corexy.com/theory.html). Motors are assumed to positioned and wired exactly as
described, if not, motions may move in strange directions. grblHAL requires the CoreXY A and B motors
have the same steps per mm internally.
*/
#if !defined COREXY || defined __DOXYGEN__
#define COREXY Off
#endif
/*! \def CHECK_MODE_DELAY
\brief
Add a short delay for each block processed in Check Mode to
avoid overwhelming the sender with fast reply messages.
This is likely to happen when streaming is done via a protocol where
the speed is not limited to 115200 baud. An example is native USB streaming.
*/
#if !defined CHECK_MODE_DELAY || defined __DOXYGEN__
#define CHECK_MODE_DELAY 0 // ms
#endif
/*! \def DEBOUNCE_DELAY
\brief
When > 0 adds a short delay when an input changes state to avoid switch bounce
or EMI triggering the related interrupt falsely or too many times.
*/
#if !defined DEBOUNCE_DELAY || defined __DOXYGEN__
#define DEBOUNCE_DELAY 40 // ms
#endif
#define MAX_TOOL_NUMBER 2147483647 // Limited by max signed 32-bit value - 1
// ---------------------------------------------------------------------------------------
// ADVANCED CONFIGURATION OPTIONS:
// EXPERIMENTAL OPTIONS
#define ENABLE_PATH_BLENDING Off // Do NOT enable unless working on adding this feature!
#if !defined ENABLE_ACCELERATION_PROFILES || defined __DOXYGEN__
#define ENABLE_ACCELERATION_PROFILES Off // Enable to allow G-Code changeable acceleration profiles.
#endif
#if !defined ENABLE_JERK_ACCELERATION || defined __DOXYGEN__
#define ENABLE_JERK_ACCELERATION Off // Enable to use 3rd order acceleration calculations. May need more processing power, a FPU will help.
#endif
// -
// Enables code for debugging purposes. Not for general use and always in constant flux.
//#define DEBUG // Uncomment to enable. Default disabled.
//#define DEBUGOUT 0 // Uncomment to claim serial port with given instance number and add HAL entry point for debug output.
/*! @name Status report frequency
Some status report data isn't necessary for realtime, only intermittently, because the values don't
change often. The following macros configures how many times a status report needs to be called before
the associated data is refreshed and included in the status report. However, if one of these value
changes, grblHAL will automatically include this data in the next status report, regardless of what the
count is at the time. This helps reduce the communication overhead involved with high frequency reporting
and aggressive streaming. There is also a busy and an idle refresh count, which sets up grblHAL to send
refreshes more often when its not doing anything important. With a good GUI, this data doesn't need
to be refreshed very often, on the order of a several seconds.
<br>__NOTE:__ `WCO` refresh must be 2 or greater. `OVERRIDE` refresh must be 1 or greater.
*/
///@{
#if !defined REPORT_OVERRIDE_REFRESH_BUSY_COUNT || defined __DOXYGEN__
#define REPORT_OVERRIDE_REFRESH_BUSY_COUNT 20 // (1-255)
#endif
#if !defined REPORT_OVERRIDE_REFRESH_IDLE_COUNT || defined __DOXYGEN__
#define REPORT_OVERRIDE_REFRESH_IDLE_COUNT 10 // (1-255) Must be less than or equal to the busy count
#endif
#if !defined REPORT_WCO_REFRESH_BUSY_COUNT || defined __DOXYGEN__
#define REPORT_WCO_REFRESH_BUSY_COUNT 30 // (2-255)
#endif
#if !defined REPORT_WCO_REFRESH_IDLE_COUNT || defined __DOXYGEN__
#define REPORT_WCO_REFRESH_IDLE_COUNT 10 // (2-255) Must be less than or equal to the busy count
#endif
///@}
/*! \def ACCELERATION_TICKS_PER_SECOND
\brief The temporal resolution of the acceleration management subsystem.
A higher number gives smoother
acceleration, particularly noticeable on machines that run at very high feedrates, but may negatively
impact performance. The correct value for this parameter is machine dependent, so it's advised to
set this only as high as needed. Approximate successful values can widely range from 50 to 200 or more.
<br>__NOTE:__ Changing this value also changes the execution time of a segment in the step segment buffer.
When increasing this value, this stores less overall time in the segment buffer and vice versa. Make
certain the step segment buffer is increased/decreased to account for these changes.
*/
#if !defined ACCELERATION_TICKS_PER_SECOND || defined __DOXYGEN__
#define ACCELERATION_TICKS_PER_SECOND 100
#endif
// Sets the maximum step rate allowed to be written as a grblHAL setting. This option enables an error
// check in the settings module to prevent settings values that will exceed this limitation. The maximum
// step rate is strictly limited by the CPU speed and will change if something other than an AVR running
// at 16MHz is used.
// NOTE: For now disabled, will enable if flash space permits.
//#define MAX_STEP_RATE_HZ 30000 // Hz
/*! \def REPORT_ECHO_LINE_RECEIVED
\brief
With this enabled, grblHAL sends back an echo of the line it has received, which has been pre-parsed (spaces
removed, capitalized letters, no comments) and is to be immediately executed by grblHAL. Echoes will not be
sent upon a line buffer overflow, but should for all normal lines sent to grblHAL. For example, if a user
sends the line 'g1 x1.032 y2.45 (test comment)', grblHAL will echo back in the form '[echo: G1X1.032Y2.45]'.
NOTE: Only use this for debugging purposes!! When echoing, this takes up valuable resources and can effect
performance. If absolutely needed for normal operation, the serial write buffer should be greatly increased
to help minimize transmission waiting within the serial write protocol.
*/
#if !defined REPORT_ECHO_LINE_RECEIVED || defined __DOXYGEN__
#define REPORT_ECHO_LINE_RECEIVED Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! \def TOOL_LENGTH_OFFSET_AXIS
\brief Sets which \ref axis the tool length offset is applied.
Assumes the spindle is always parallel with the selected axis with the tool oriented toward
the negative direction. In other words, a positive tool length offset value is subtracted
from the current location.
*/
#if !defined TOOL_LENGTH_OFFSET_AXIS || defined __DOXYGEN__
#define TOOL_LENGTH_OFFSET_AXIS -1 // Default is all axes.
#endif
/*! \def MINIMUM_JUNCTION_SPEED
\brief Minimum planner junction speed.
Sets the default minimum junction speed the planner plans to at every buffer block junction,
except for starting from rest and end of the buffer, which are always zero. This value controls
how fast the machine moves through junctions with no regard for acceleration limits or angle
between neighboring block line move directions. This is useful for machines that can't
tolerate the tool dwelling for a split second, i.e. 3d printers or laser cutters. If used, this value
should not be much greater than zero or to the minimum value necessary for the machine to work.
*/
#if !defined MINIMUM_JUNCTION_SPEED || defined __DOXYGEN__
#define MINIMUM_JUNCTION_SPEED 0.0f // (mm/min)
#endif
/*! \def MINIMUM_FEED_RATE
\brief
Sets the minimum feed rate the planner will allow. Any value below it will be set to this minimum
value. This also ensures that a planned motion always completes and accounts for any floating-point
round-off errors. Although not recommended, a lower value than 1.0 mm/min will likely work in smaller
machines, perhaps to 0.1mm/min, but your success may vary based on multiple factors.
*/
#if !defined MINIMUM_FEED_RATE || defined __DOXYGEN__
#define MINIMUM_FEED_RATE 1.0f // (mm/min)
#endif
/*! \def N_ARC_CORRECTION
\brief
Number of arc generation iterations by small angle approximation before exact arc trajectory
correction with expensive sin() and cos() calculations. This parameter maybe decreased if there
are issues with the accuracy of the arc generations, or increased if arc execution is getting
bogged down by too many trig calculations.
*/
#if !defined N_ARC_CORRECTION || defined __DOXYGEN__
#define N_ARC_CORRECTION 12 // Integer (1-255)
#endif
/*! \def ARC_ANGULAR_TRAVEL_EPSILON
\brief
The arc G2/3 g-code standard is problematic by definition. Radius-based arcs have horrible numerical
errors when arc at semi-circles(pi) or full-circles(2*pi). Offset-based arcs are much more accurate
but still have a problem when arcs are full-circles (2*pi). This define accounts for the floating
point issues when offset-based arcs are commanded as full circles, but get interpreted as extremely
small arcs with around machine epsilon (1.2e-7rad) due to numerical round-off and precision issues.
This define value sets the machine epsilon cutoff to determine if the arc is a full-circle or not.
<br>__NOTE:__ Be very careful when adjusting this value. It should always be greater than 1.2e-7 but not too
much greater than this. The default setting should capture most, if not all, full arc error situations.
*/
#if !defined ARC_ANGULAR_TRAVEL_EPSILON || defined __DOXYGEN__
#define ARC_ANGULAR_TRAVEL_EPSILON 5E-7f // Float (radians)
#endif
/*! @name Default constants for G5 Cubic splines
//
*/
///@{
#if !defined BEZIER_MIN_STEP || defined __DOXYGEN__
#define BEZIER_MIN_STEP 0.002f
#endif
#if !defined BEZIER_MAX_STEP || defined __DOXYGEN__
#define BEZIER_MAX_STEP 0.1f
#endif
#if !defined BEZIER_SIGMA || defined __DOXYGEN__
#define BEZIER_SIGMA 0.1f
#endif
///@}
/*! \def DWELL_TIME_STEP
\brief Time delay increments performed during a dwell.
The default value is set at 50ms, which provides a maximum time delay of roughly 55 minutes,
more than enough for most any application. Increasing this delay will increase the maximum
dwell time linearly, but also reduces the responsiveness of run-time command executions,
like status reports, since these are performed between each dwell time step.
*/
#if !defined DWELL_TIME_STEP || defined __DOXYGEN__
#define DWELL_TIME_STEP 50 // Integer (1-255) (milliseconds)
#endif
/*! \def SEGMENT_BUFFER_SIZE
\brief
Governs the size of the intermediary step segment buffer between the step execution algorithm
and the planner blocks. Each segment is set of steps executed at a constant velocity over a
fixed time defined by \ref ACCELERATION_TICKS_PER_SECOND. They are computed such that the planner
block velocity profile is traced exactly. The size of this buffer governs how much step
execution lead time there is for other grblHAL processes have to compute and do their thing
before having to come back and refill this buffer, currently at ~50msec of step moves.
*/
#if !defined SEGMENT_BUFFER_SIZE || defined __DOXYGEN__
#define SEGMENT_BUFFER_SIZE 10 // Uncomment to override default in stepper.h.
#endif
/*! \def SET_CHECK_MODE_PROBE_TO_START
\brief
Configures the position after a probing cycle during grblHAL's check mode. Disabled sets
the position to the probe target, when enabled sets the position to the start position.
*/
#if !defined SET_CHECK_MODE_PROBE_TO_START || defined __DOXYGEN__
#define SET_CHECK_MODE_PROBE_TO_START Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! \def HARD_LIMIT_FORCE_STATE_CHECK
\brief
Force grblHAL to check the state of the hard limit switches when the processor detects a pin
change inside the hard limit ISR routine. By default, grblHAL will trigger the hard limits
alarm upon any pin change, since bouncing switches can cause a state check like this to
misread the pin. When hard limits are triggered, they should be 100% reliable, which is the
reason that this option is disabled by default. Only if your system/electronics can guarantee
that the switches don't bounce, we recommend enabling this option. This will help prevent
triggering a hard limit when the machine disengages from the switch.
<br>__NOTE:__ This option has no effect if SOFTWARE_DEBOUNCE is enabled.
*/
#if !defined HARD_LIMIT_FORCE_STATE_CHECK || defined __DOXYGEN__
#define HARD_LIMIT_FORCE_STATE_CHECK Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! @name Homing cycle search and locate scalars
\brief
Adjusts homing cycle search and locate scalars. These are the multipliers used by grblHAL's
homing cycle to ensure the limit switches are engaged and cleared through each phase of
the cycle. The search phase uses the axes max-travel setting times the
`HOMING_AXIS_SEARCH_SCALAR` to determine distance to look for the limit switch. Once found,
the locate phase begins and uses the homing pull-off distance setting times the
`HOMING_AXIS_LOCATE_SCALAR` to pull-off and re-engage the limit switch.
<br>__NOTE:__ Both of these values must be greater than 1.0 to ensure proper function.
*/
///@{
#if !defined HOMING_AXIS_SEARCH_SCALAR || defined __DOXYGEN__
#define HOMING_AXIS_SEARCH_SCALAR 1.5f // Must be > 1 to ensure limit switch will be engaged.
#endif
#if !defined HOMING_AXIS_LOCATE_SCALAR || defined __DOXYGEN__
#define HOMING_AXIS_LOCATE_SCALAR 10.0f// Must be > 1 to ensure limit switch is cleared.
#endif
///@}
/*! @name Non-volatile storage restore commands
\brief
Enable the `$RST=*`, `$RST=$`, `$RST=#` and `$RST=&` non-volatile storage restore commands. There are
cases where these commands may be undesirable. Simply change desired macro to \ref Off or 0 to disable it.
<br>__NOTE:__ See _Non-volatile storage restore options_ below for customizing the `$RST=*` command.
*/
///@{
#if !defined ENABLE_RESTORE_NVS_WIPE_ALL || defined __DOXYGEN__
#define ENABLE_RESTORE_NVS_WIPE_ALL On //!< `$RST=*` Default enabled. Set to \ref Off or 0 to disable.
#endif
#if !defined ENABLE_RESTORE_NVS_DEFAULT_SETTINGS || defined __DOXYGEN__
#define ENABLE_RESTORE_NVS_DEFAULT_SETTINGS On //!< `$RST=$` Default enabled. Set to \ref Off or 0 to disable.
#endif
#if !defined ENABLE_RESTORE_NVS_CLEAR_PARAMETERS || defined __DOXYGEN__
#define ENABLE_RESTORE_NVS_CLEAR_PARAMETERS On //!< `$RST=#` Default enabled. Set to \ref Off or 0 to disable.
#endif
#if !defined ENABLE_RESTORE_NVS_DRIVER_PARAMETERS || defined __DOXYGEN__
#define ENABLE_RESTORE_NVS_DRIVER_PARAMETERS On //!< `$RST=&` Default enabled. Set to \ref Off or 0 to disable. For drivers that implements non-generic settings.
#endif
///@}
/*! @name Non-volatile storage restore options
\brief
// Defines the non-volatile data restored upon a settings version change and `$RST=*` command. Whenever the
// the settings or other non-volatile data structure changes between grblHAL versions, grblHAL will automatically
// wipe and restore the non-volatile data. These macros controls what data is wiped and restored. This is useful
// particularly for OEMs that need to retain certain data. For example, the \ref BUILD_INFO string can be
// written into non-volatile storage via a separate program to contain product data. Altering these
// macros to not restore the build info non-volatile storage will ensure this data is retained after firmware upgrades.
*/
///@{
#if !defined SETTINGS_RESTORE_DEFAULTS || defined __DOXYGEN__
#define SETTINGS_RESTORE_DEFAULTS On //!< Default enabled. Set to \ref Off or 0 to disable.
#endif
#if !defined SETTINGS_RESTORE_PARAMETERS || defined __DOXYGEN__
#define SETTINGS_RESTORE_PARAMETERS On //!< Default enabled. Set to \ref Off or 0 to disable.
#endif
#if !defined SETTINGS_RESTORE_STARTUP_LINES || defined __DOXYGEN__
#define SETTINGS_RESTORE_STARTUP_LINES On //!< Default enabled. Set to \ref Off or 0 to disable.
#endif
#if !defined SETTINGS_RESTORE_BUILD_INFO || defined __DOXYGEN__
#define SETTINGS_RESTORE_BUILD_INFO On //!< Default enabled. Set to \ref Off or 0 to disable.
#endif
#if !defined SETTINGS_RESTORE_DRIVER_PARAMETERS || defined __DOXYGEN__
#define SETTINGS_RESTORE_DRIVER_PARAMETERS On //!< Default enabled. Set to \ref Off or 0 to disable.
#endif
/*! \def DISABLE_BUILD_INFO_WRITE_COMMAND
\brief Disable the `$I=(string)` build info write command.
If disabled, any existing build info data must be placed into non-volatile storage via external
means with a valid checksum value. This macro option is useful to prevent this data from being
over-written by a user, when used to store OEM product data.
<br>__NOTE:__ If disabled and to ensure grblHAL can never alter the build info line, you'll also need
to set the \ref SETTINGS_RESTORE_BUILD_INFO symbol to \ref Off or 0.
*/
#if !defined DISABLE_BUILD_INFO_WRITE_COMMAND || defined __DOXYGEN__
#define DISABLE_BUILD_INFO_WRITE_COMMAND Off //!< `$I=` Default enabled. Uncomment to disable.
#endif
///@}
/*! \def SLEEP_DURATION
\brief Configures grblHAL's sleep mode feature.
If the spindle or coolant are powered and grblHAL is not actively moving or receiving any
commands, a sleep timer will start. If any data or commands are received, the sleep timer
will reset and restart until the above condition are not satisfied. If the sleep timer elaspes,
grblHAL will immediately execute the sleep mode by shutting down the spindle and coolant and
entering a safe sleep state. If parking is enabled, grblHAL will park the machine as well.
While in sleep mode, only a hard/soft reset will exit it and the job will be unrecoverable.
Sleep mode is enabled by setting \ref DEFAULT_SLEEP_ENABLE to \ref On or 1, overridable by the
`$62` setting.
<br>__NOTE:__ Sleep mode is a safety feature, primarily to address communication disconnect problems. To
keep grblHAL from sleeping, employ a stream of '?' status report commands as a connection "heartbeat".
*/
#if !defined SLEEP_DURATION || defined __DOXYGEN__
#define SLEEP_DURATION 5.0f // Number of minutes before sleep mode is entered.
#endif
/*! \def NVSDATA_BUFFER_ENABLE
\brief Disable non-volatile storage (NVS) emulation/buffering in RAM (allocated from heap memory).
The NVS buffer can be used for MCUs with no non-volatile storage or for delaying writing to
non-volatile storage until the controller is in IDLE state.
*/
#if !defined NVSDATA_BUFFER_ENABLE || defined __DOXYGEN__
#define NVSDATA_BUFFER_ENABLE On // Default on, set to \ref off or 0 to disable.
#endif
/*! \def TOOLSETTER_RADIUS
\brief
The grbl.on_probe_toolsetter event handler is called by the default tool change algorithm when probing at G59.3.
In addition it will be called on a "normal" probe sequence if the XY position is
within the radius of the G59.3 position defined below.
Change if the default value of 5mm is not suitable or set it to 0.0f to disable.
<br>__NOTE:__ A grbl.on_probe_toolsetter event handler is not installed by the core, it has to be provided
by a driver or a plugin.
*/
#if !defined TOOLSETTER_RADIUS || defined __DOXYGEN__
#define TOOLSETTER_RADIUS 5.0f
#endif
#if !defined ENABLE_BACKLASH_COMPENSATION || defined __DOXYGEN__
#define ENABLE_BACKLASH_COMPENSATION Off
#endif
#if COMPATIBILITY_LEVEL == 0 || defined __DOXYGEN__
/*! \def N_TOOLS
\brief
Number of tools in tool table, edit to enable (max. 32 allowed)
*/
#if !defined N_TOOLS || defined __DOXYGEN__
#define N_TOOLS 0
#endif
#endif
/*! \def SPINDLE_SYNC_ENABLE
\brief
Set to \ref On or 1 to enable experimental support for spindle synced motion, G33 and G76.
_NOTE:_ require driver and board support for spindle encoder input.
*/
#if !defined SPINDLE_SYNC_ENABLE || defined __DOXYGEN__
#define SPINDLE_SYNC_ENABLE Off
#endif
/*! \def NGC_EXPRESSIONS_ENABLE
\brief
Set to \ref On or 1 to enable experimental support for expressions.
Some LinuxCNC extensions are supported, conditionals and subroutines are not.
*/
#if !defined NGC_EXPRESSIONS_ENABLE || defined __DOXYGEN__
#define NGC_EXPRESSIONS_ENABLE On
#endif
/*! \def NGC_PARAMETERS_ENABLE
\brief
Set to \ref On or 1 to enable experimental support for parameters.
*/
#if !defined NGC_PARAMETERS_ENABLE || defined __DOXYGEN__
#define NGC_PARAMETERS_ENABLE On
#endif
/*! \def NGC_N_ASSIGN_PARAMETERS_PER_BLOCK
\brief
Maximum number of parameters allowed in a block.
*/
#if (NGC_EXPRESSIONS_ENABLE && !defined NGC_N_ASSIGN_PARAMETERS_PER_BLOCK) || defined __DOXYGEN__
#define NGC_N_ASSIGN_PARAMETERS_PER_BLOCK 10
#endif
/*! \def LATHE_UVW_OPTION
\brief
Allow use of UVW axis words for non-modal relative lathe motion.
*/
#if !defined LATHE_UVW_OPTION || defined __DOXYGEN__
#define LATHE_UVW_OPTION Off
#endif
// Max number of entries in log for PID data reporting, to be used for tuning
//#define PID_LOG 1000 // Default disabled. Uncomment to enable.
// End compile time only default configuration
// ---------------------------------------------------------------------------------------
// SETTINGS DEFAULT VALUE OVERRIDES:
// General settings (Group_General)
/*! @name $10 - Setting_StatusReportMask
The status report change for grblHAL v1.1 and after also removed the ability to disable/enable most data
fields from the report. This caused issues for GUI developers, who've had to manage several scenarios
and configurations. The increased efficiency of the new reporting style allows for all data fields to
be sent without potential performance issues.
<br>__NOTE:__ The options below are here only provide a way to disable certain data fields if a unique
situation demands it, but be aware GUIs may depend on this data. If disabled, it may not be compatible.
*/
///@{
/*! \def DEFAULT_REPORT_MACHINE_POSITION
\brief
If set to \ref Off or 0 position is reported with all offsets added.
\internal Bit 0 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_MACHINE_POSITION || defined __DOXYGEN__
#define DEFAULT_REPORT_MACHINE_POSITION On // Default on. Set to \ref Off or 0 to disable.
#endif
/*! \def DEFAULT_REPORT_BUFFER_STATE
\brief
If set to \ref Off or 0 the `|Bf:` buffer state element is not included in the real time report.
\internal Bit 1 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_BUFFER_STATE || defined __DOXYGEN__
#define DEFAULT_REPORT_BUFFER_STATE On // Default on. Set to \ref Off or 0 to disable.
#endif
/*! \def DEFAULT_REPORT_LINE_NUMBERS
\brief
If set to \ref Off or 0 the `|Ln:` line number element is not included
in the real time report.
<br>__NOTE:__ Line numbers are only reported if present in the gcode.
\internal Bit 2 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_LINE_NUMBERS || defined __DOXYGEN__
#define DEFAULT_REPORT_LINE_NUMBERS On // Default on. Set to \ref Off or 0 to disable.
#endif
/*! \def DEFAULT_REPORT_CURRENT_FEED_SPEED
\brief
If set to \ref Off or 0 the `|FS:` current feed & speed element is not included
in the real time report.
\internal Bit 3 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_CURRENT_FEED_SPEED || defined __DOXYGEN__
#define DEFAULT_REPORT_CURRENT_FEED_SPEED On // Default on. Set to \ref Off or 0 to disable.
#endif
/*! \def DEFAULT_REPORT_PIN_STATE
\brief
If set to \ref Off or 0 the `|Pn:` input pins state element is not included
in the real time report.
\internal Bit 4 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_PIN_STATE || defined __DOXYGEN__
#define DEFAULT_REPORT_PIN_STATE On // Default on. Set to \ref Off or 0 to disable.
#endif
/*! \def DEFAULT_REPORT_WORK_COORD_OFFSET
\brief
If set to \ref Off or 0 the `|WCO:` work coordinate offset element is not included
in the real time report.
\internal Bit 5 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_WORK_COORD_OFFSET || defined __DOXYGEN__
#define DEFAULT_REPORT_WORK_COORD_OFFSET On // Default on. Set to \ref Off or 0 to disable.
#endif
/*! \def DEFAULT_REPORT_OVERRIDES
\brief
If set to \ref Off or 0 the `|Pn:` input pins state element is not included
in the real time report.
\internal Bit 6 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_OVERRIDES || defined __DOXYGEN__
#define DEFAULT_REPORT_OVERRIDES On // Default on. Set to \ref Off or 0 to disable.
#endif
/*! \def DEFAULT_REPORT_PROBE_COORDINATES
\brief
Upon a successful probe cycle, this option provides immediately feedback of the probe coordinates
through an automatically generated message. If disabled, users can still access the last probe
coordinates through grblHAL `$#` print parameters command.
\internal Bit 7 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_PROBE_COORDINATES || defined __DOXYGEN__
#define DEFAULT_REPORT_PROBE_COORDINATES On // Default on. Set to \ref Off or 0 to disable.
#endif
/*! \def DEFAULT_REPORT_SYNC_ON_WCO_CHANGE
\brief
In Grbl v0.9 and prior, there is an old outstanding bug where the `WPos:` work position reported
may not correlate to what is executing, because `WPos:` is based on the g-code parser state, which
can be several motions behind. This option forces the planner buffer to empty, sync, and stop
motion whenever there is a command that alters the work coordinate offsets `G10,G43.1,G92,G54-59.3`.
This is the simplest way to ensure `WPos:` is always correct. Fortunately, it's exceedingly rare
that any of these commands are used need continuous motions through them.
\internal Bit 8 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_SYNC_ON_WCO_CHANGE || defined __DOXYGEN__
#define DEFAULT_REPORT_SYNC_ON_WCO_CHANGE On //!< ok
#endif
/*! \def DEFAULT_REPORT_PARSER_STATE
\brief
When enabled adds automatic report of the parser state following a status report request
if the state was changed since the last report. The output is the same as provided by
the `$G` command.
\internal Bit 9 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_PARSER_STATE || defined __DOXYGEN__
#define DEFAULT_REPORT_PARSER_STATE Off // Default off. Set to \ref On or 1 to enable.
#endif
/*! \def DEFAULT_REPORT_ALARM_SUBSTATE
\brief
Many controllers cannot be hard reset on startup due to using native USB or network
protocols for communication. If the grblHAL for some reason is in `ALARM` state there is
normally no way to determine the cause of the alarm. Enabling this setting adds the alarm
code (see \ref alarm_code_t) as a substate, separated by a colon, to the _Alarm_ state in
the real time report.
<br>__NOTE:__ Enabling this option may break senders.
\internal Bit 10 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_ALARM_SUBSTATE || defined __DOXYGEN__
#define DEFAULT_REPORT_ALARM_SUBSTATE Off // Default off. Set to \ref On or 1 to enable.
#endif
/*! \def DEFAULT_REPORT_RUN_SUBSTATE
\brief
Enabling this setting may add a code, separated by a colon, to the _Run_ state in the real time report.
The following codes are defined:
+ `1` - a feed hold is pending, waiting for spindle synchronized motion to complete.
+ `2` - the motion is a probe.
<br>__NOTE:__ Enabling this option may break senders.
\internal Bit 11 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_RUN_SUBSTATE || defined __DOXYGEN__
#define DEFAULT_REPORT_RUN_SUBSTATE Off // Default off. Set to \ref On or 1 to enable.
#endif
/*! \def DEFAULT_REPORT_WHEN_HOMING
\brief
Enabling this setting enables status reporting while homing.
<br>__NOTE:__ Enabling this option may break senders.
\internal Bit 12 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_WHEN_HOMING || defined __DOXYGEN__
#define DEFAULT_REPORT_WHEN_HOMING Off // Default off. Set to \ref On or 1 to enable.
#endif
/*! \def DEFAULT_REPORT_DISTANCE_TO_GO
\brief
If set to \ref Off or 0 the `|DTG:` distance-to-go element is not included in the real time report.
\internal Bit 13 in settings.status_report.
*/
#if !defined DEFAULT_REPORT_DISTANCE_TO_GO || defined __DOXYGEN__
#define DEFAULT_REPORT_DISTANCE_TO_GO Off // Default off. Set to \ref On or 1 to enable.
#endif
///@}
/*! @name $11 - Setting_JunctionDeviation
*
*/
///@{
#if !defined DEFAULT_JUNCTION_DEVIATION || defined __DOXYGEN__
#define DEFAULT_JUNCTION_DEVIATION 0.01f // mm
#endif
///@}
/*! @name $12 - Setting_ArcTolerance
*
*/
///@{
#if !defined DEFAULT_ARC_TOLERANCE || defined __DOXYGEN__
#define DEFAULT_ARC_TOLERANCE 0.002f // mm
#endif
///@}
/*! @name $13 - Setting_ReportInches
If set to \ref On or 1 reported positions, offsets etc will be converted to inches
with 4 digits of precision.
*/
///@{
#if !defined DEFAULT_REPORT_INCHES || defined __DOXYGEN__
#define DEFAULT_REPORT_INCHES Off
#endif
///@}
/*! @name $28 - Setting_G73Retract
The retract motion distance used for chip breaking by the `G73` canned cycle, executed
after each delta increment specified by the `Q` word.
*/
///@{
#if !defined DEFAULT_G73_RETRACT || defined __DOXYGEN__
#define DEFAULT_G73_RETRACT 0.1f // mm
#endif
///@}
/*! @name $32 - Setting_Mode
__NOTE:__ only one mode can be enabled.
*/
///@{
#if !defined DEFAULT_LASER_MODE || defined __DOXYGEN__
#define DEFAULT_LASER_MODE Off
#endif
#if !defined DEFAULT_LATHE_MODE || defined __DOXYGEN__
#define DEFAULT_LATHE_MODE Off
#endif
///@}
/*! @name $39 - Setting_EnableLegacyRTCommands
Using printable ASCII characters for realtime commands can cause issues with files
containing such characters in comments or settings. If the GCode sender support the
use of the top-bit set alternatives for these then they may be disabled.
<br>__NOTE:__ support for the top-bit set alternatives is always enabled.
<br>__NOTE:__ when disabled they are still active outside of comments and $ settings
allowing their use from manual input, eg. from a terminal or MDI.
*/
///@{
#if !defined DEFAULT_LEGACY_RTCOMMANDS || defined __DOXYGEN__
#define DEFAULT_LEGACY_RTCOMMANDS On
#endif
///@}
/*! @name $60 - Setting_RestoreOverrides
*/
///@{
#if !defined DEFAULT_RESET_OVERRIDES || defined __DOXYGEN__
#define DEFAULT_RESET_OVERRIDES Off
#endif
///@}
/*! @name $62 - Setting_SleepEnable
*/
///@{
#if !defined DEFAULT_SLEEP_ENABLE || defined __DOXYGEN__
#define DEFAULT_SLEEP_ENABLE Off
#endif
///@}
/*! @name $63 - Setting_HoldActions
This option will automatically disable the laser during a feed hold by invoking a spindle stop
override immediately after coming to a stop. However, this also means that the laser still may
be re-enabled by disabling the spindle stop override, if needed. This is purely a safety feature
to ensure the laser doesn't inadvertently remain powered while at a stop and cause a fire.
*/
///@{
#if !defined DEFAULT_DISABLE_LASER_DURING_HOLD || defined __DOXYGEN__
#define DEFAULT_DISABLE_LASER_DURING_HOLD On
#endif
///@}
/*! @name This option is for what should happen on resume from feed hold.
Default action is to restore spindle and coolant status (if overridden), this contradicts the
behaviour of industrial controllers but is in line with earlier versions of Grbl.
*/
///@{
#if !defined DEFAULT_RESTORE_AFTER_FEED_HOLD || defined __DOXYGEN__
#define DEFAULT_RESTORE_AFTER_FEED_HOLD On
#endif
///@}
/*! @name $64 - Setting_ForceInitAlarm
When grblHAL powers-cycles or is hard reset with the MCU reset button, grblHAL boots up with no ALARM
by default. This is to make it as simple as possible for new users to start using grblHAL. When homing
is enabled and a user has installed limit switches, grblHAL will boot up in an ALARM state to indicate
grblHAL doesn't know its position and to force the user to home before proceeding. This option forces
grblHAL to always initialize into an ALARM state regardless of homing or not. This option is more for
OEMs and LinuxCNC users that would like this power-cycle behavior.
*/
///@{
#if !defined DEFAULT_FORCE_INITIALIZATION_ALARM || defined __DOXYGEN__
#define DEFAULT_FORCE_INITIALIZATION_ALARM Off
#endif
///@}
/*! @name $384 - Setting_DisableG92Persistence
G92 offsets is by default stored to non-volatile storage (NVS) on changes and restored on startup
if \ref COMPATIBILITY_LEVEL is <= 1. If \ref COMPATIBILITY_LEVEL is <= 1 then setting $384 can be used to change this at run-time.
To allow store/restore of the G92 offset when \ref COMPATIBILITY_LEVEL > 1 uncomment the line below and reset settings with $RST=*.
*/
///@{
#if !defined DEFAULT_DISABLE_G92_PERSISTENCE || defined __DOXYGEN__
#if COMPATIBILITY_LEVEL <= 1
#define DEFAULT_DISABLE_G92_PERSISTENCE Off
#else
#define DEFAULT_DISABLE_G92_PERSISTENCE On
#endif
#endif
///@}
/*! @name $398 - Setting_PlannerBlocks
\brief The number of linear motions in the planner buffer to be planned at any give time.
The vast majority of RAM that grblHAL uses is based on this buffer size. Only increase if
there is extra available RAM, like when compiling for MCU with ample amounts of RAM.
Or decrease if the MCU begins to crash due to the lack of available RAM or if the CPU is
having trouble keeping up with planning new incoming motions as they are executed.
*/
///@{
#if !defined DEFAULT_PLANNER_BUFFER_BLOCKS || defined __DOXYGEN__
#define DEFAULT_PLANNER_BUFFER_BLOCKS 100
#endif
///@}
/*! @name $676 - Setting_ResetActions
This option controls actions taken on a soft reset.
*/
/*! /def DEFAULT_HOMING_KEEP_STATUS_ON_RESET
\brief
Enable this setting to keep homed status over a soft reset - if position was not lost due
to a reset during motion.
\internal Bit 6 in settings.homing.flags.
*/
#if !defined DEFAULT_HOMING_KEEP_STATUS_ON_RESET || defined __DOXYGEN__
#define DEFAULT_HOMING_KEEP_STATUS_ON_RESET Off // Default disabled. Set to \ref On or 1 to enable.
#endif
///@}
/*! /def DEFAULT_KEEP_OFFSETS_ON_RESET
\brief
Enable this setting to keep offsets (except G92 which is always kept) over a soft reset.
\internal Bit 17 in settings.flags.
*/
///@{
#if !defined DEFAULT_KEEP_OFFSETS_ON_RESET || defined __DOXYGEN__
#define DEFAULT_KEEP_OFFSETS_ON_RESET Off
#endif
///@}
/*! /def DEFAULT_KEEP_RAPIDS_OVR_ON_RESET
\brief
Enable this setting to keep rapids override over a soft reset.
\internal Bit 21 in settings.flags.
*/
///@{
#if !defined DEFAULT_KEEP_RAPIDS_OVR_ON_RESET || defined __DOXYGEN__
#define DEFAULT_KEEP_RAPIDS_OVR_ON_RESET Off
#endif
///@}
/*! /def DEFAULT_KEEP_FEED_OVR_ON_RESET
\brief
Enable this setting to feedrate override over a soft reset.
\internal Bit 22 in settings.flags.
*/
///@{
#if !defined DEFAULT_KEEP_FEED_OVR_ON_RESET || defined __DOXYGEN__
#define DEFAULT_KEEP_FEED_OVR_ON_RESET Off
#endif
///@}
// Control signals settings (Group_ControlSignals)
#ifndef __DOXYGEN__ // For now do not include in documentation
/*! @name Control signals bit definitions and mask.
__NOTE:__ Do __NOT__ change! Definitions MUST match #control_signals_t struct bit order.
*/
///@{
#define SIGNALS_RESET_BIT (1<<0)
#define SIGNALS_FEEDHOLD_BIT (1<<1)
#define SIGNALS_CYCLESTART_BIT (1<<2)
#define SIGNALS_SAFETYDOOR_BIT (1<<3)
#define SIGNALS_BLOCKDELETE_BIT (1<<4)
#define SIGNALS_STOPDISABLE_BIT (1<<5)
#define SIGNALS_ESTOP_BIT (1<<6)
#define SIGNALS_PROBE_CONNECTED_BIT (1<<7)
#define SIGNALS_MOTOR_FAULT_BIT (1<<8)
#define SIGNALS_MOTOR_WARNING_BIT (1<<9)
#define SIGNALS_LIMITS_OVERRIDE_BIT (1<<10)
#define SIGNALS_SINGLE_BLOCK_BIT (1<<11)
#define SIGNALS_TLS_OVERTRAVEL_BIT (1<<12)
#define SIGNALS_PROBE_OVERTRAVEL (1<<13)
#define SIGNALS_PROBE_TRIGGERED_BIT (1<<14)
#define SIGNALS_BITMASK (SIGNALS_RESET_BIT|SIGNALS_FEEDHOLD_BIT|SIGNALS_CYCLESTART_BIT|SIGNALS_SAFETYDOOR_BIT|SIGNALS_BLOCKDELETE_BIT|SIGNALS_STOPDISABLE_BIT|SIGNALS_ESTOP_BIT|SIGNALS_PROBE_CONNECTED_BIT|SIGNALS_MOTOR_FAULT_BIT)
///@}
#endif
/*! @name $14 - Setting_ControlInvertMask
Inverts logic of the control input signals based on a \ref signalmask. This essentially means you are using
normally-open (NO) switches on the specified pins, rather than the default normally-closed (NC) switches.
<br>__NOTE:__ See above for other signal definitions.
*/
///@{
#if !defined DEFAULT_CONTROL_SIGNALS_INVERT_MASK || defined __DOXYGEN__
#define DEFAULT_CONTROL_SIGNALS_INVERT_MASK 0 // Set to SIGNALS_BITMASK or -1 to invert all signals
#endif
///@}
/*! @name $17 - Setting_ControlPullUpDisableMask
By default, grblHAL sets all input pins to normal-low operation with their internal pull-up resistors
enabled. This simplifies the wiring for users by requiring only a normally closed (NC) switch connected
to ground. It is not recommended to use normally-open (NO) switches as this increases the risk
of electrical noise spuriously triggering the inputs. If normally-open (NO) switches are used the
logic of the input signals should be be inverted with the invert settings below.
The following options disable the internal pull-up resistors, and switches must be now connect to Vcc
instead of ground.
<br>__WARNING:__ When the pull-ups are disabled, this might require additional wiring with pull-down resistors!
Please check driver code and/or documentation.
<br>__NOTE:__ The first example will disable pull-up for all control pins. The second is an example of
disabling pull-up for only a few pins. See above for other signal definitions.
*/
///@{
#if !defined DEFAULT_DISABLE_CONTROL_PINS_PULL_UP_MASK || defined __DOXYGEN__
#define DEFAULT_DISABLE_CONTROL_PINS_PULL_UP_MASK 0 // Set to SIGNALS_BITMASK or -1 to invert all signals
#endif
///@}
// Limits settings (Group_Limits)
/*! @name $5 - Setting_LimitPinsInvertMask
By default, grblHAL sets all input pins to normal-low operation with their internal pull-up resistors
enabled. This simplifies the wiring for users by requiring only a normally closed (NC) switch connected
to ground. It is _not_ recommended to use normally-open (NO) switches as this increases the risk
of electrical noise or cable breaks spuriously triggering the inputs. If normally-open (NO) switches
are used the logic of the input signals should be be inverted with the \ref axismask below.
*/
///@{
#if !defined DEFAULT_LIMIT_SIGNALS_INVERT_MASK || defined __DOXYGEN__
#define DEFAULT_LIMIT_SIGNALS_INVERT_MASK 0 // Set to -1 or AXES_BITMASK to invert for all axes
#endif
///@}
/*! @name $18 - Setting_LimitPullUpDisableMask
The following options disable the internal pull-up resistors by \ref axismask, and switches must
be now connect to Vcc instead of ground.
<br>__WARNING:__ When the pull-ups are disabled, this might require additional wiring with
pull-down resistors! Please check driver code and/or documentation.
*/
///@{
#if !defined DEFAULT_LIMIT_SIGNALS_PULLUP_DISABLE_MASK || defined __DOXYGEN__
#define DEFAULT_LIMIT_SIGNALS_PULLUP_DISABLE_MASK 0 // Set to -1 or AXES_BITMASK to disable pullup for all axes
#endif
///@}
/*! @name $20 - Setting_SoftLimitsEnable
*/
///@{
#if !defined DEFAULT_SOFT_LIMIT_ENABLE || defined __DOXYGEN__
#define DEFAULT_SOFT_LIMIT_ENABLE Off
#endif
///@}
/*! @name $21 - Setting_HardLimitsEnable
*/
///@{
/*! \def DEFAULT_HARD_LIMIT_ENABLE
\brief
At power-up or a reset, grblHAL will check the limit switch states to ensure they are not active
before initialization. If it detects a problem and the hard limits setting is enabled, grblHAL will
simply message the user to check the limits and enter an alarm state, rather than idle. grblHAL will
not throw an alarm message.
*/
#if !defined DEFAULT_HARD_LIMIT_ENABLE || defined __DOXYGEN__
#define DEFAULT_HARD_LIMIT_ENABLE Off
#endif
#if !defined DEFAULT_CHECK_LIMITS_AT_INIT || defined __DOXYGEN__
#define DEFAULT_CHECK_LIMITS_AT_INIT Off
#endif
#if !defined DEFAULT_HARD_LIMITS_DISABLE_FOR_ROTARY || defined __DOXYGEN__
#define DEFAULT_HARD_LIMITS_DISABLE_FOR_ROTARY Off
#endif
/*! @name Group_Limits_DualAxis
\brief Dual axis limits settings (Group_Limits_DualAxis)
To prevent the homing cycle from racking the dual axis, when one limit triggers before the
other due to switch failure or noise, the homing cycle will automatically abort if the second
motor's limit switch does not trigger within the three distance parameters defined below.
Axis length percent will automatically compute a fail distance as a percentage of the max
travel of the other non-dual axis, i.e. if dual axis select is X_AXIS at 5.0%, then the fail
distance will be computed as 5.0% of y-axis max travel. Fail distance max and min are the
limits of how far or little a valid fail distance is.
*/
///@{
/*! @name $347 - Setting_DualAxisLengthFailPercent
*/
///@{
#if !defined DEFAULT_DUAL_AXIS_HOMING_FAIL_AXIS_LENGTH_PERCENT || defined __DOXYGEN__
#define DEFAULT_DUAL_AXIS_HOMING_FAIL_AXIS_LENGTH_PERCENT 5.0f // Float (percent)
#endif
///@}
/*! @name $348 - Setting_DualAxisLengthFailMin
*/
///@{
#if !defined DEFAULT_DUAL_AXIS_HOMING_FAIL_DISTANCE_MIN || defined __DOXYGEN__
#define DEFAULT_DUAL_AXIS_HOMING_FAIL_DISTANCE_MIN 2.5f // Float (mm)
#endif
///@}
/*! @name $348 - Setting_DualAxisLengthFailMin
*/
///@{
#if !defined DEFAULT_DUAL_AXIS_HOMING_FAIL_DISTANCE_MAX || defined __DOXYGEN__
#define DEFAULT_DUAL_AXIS_HOMING_FAIL_DISTANCE_MAX 25.0f // Float (mm)
#endif
///@}
// Coolant settings (Group_Coolant)
/*! @name $15 - Setting_CoolantInvertMask
Inverts the selected coolant signals from active high to active low.
Useful for some pre-built electronic boards.
*/
///@{
#if !defined DEFAULT_INVERT_COOLANT_FLOOD_PIN || defined __DOXYGEN__
#define DEFAULT_INVERT_COOLANT_FLOOD_PIN Off
#endif
#if !defined DEFAULT_INVERT_COOLANT_MIST_PIN || defined __DOXYGEN__
#define DEFAULT_INVERT_COOLANT_MIST_PIN Off // NOTE: not supported by all drivers.
#endif
///@}
/*! @name $673 - Setting_CoolantOnDelay
*/
///@{
#if !defined DEFAULT_COOLANT_ON_DELAY || defined __DOXYGEN__
#define DEFAULT_COOLANT_ON_DELAY 0 // milliseconds: 0 or 500 - 20000
#endif
///@}
// Spindle settings (Group_Spindle)
/*! @name $9 - Setting_SpindlePWMOptions
*/
///@{
#if !defined DEFAULT_SPINDLE_ENABLE_OFF_WITH_ZERO_SPEED || defined __DOXYGEN__
#define DEFAULT_SPINDLE_ENABLE_OFF_WITH_ZERO_SPEED Off
#endif
#if !defined DEFAULT_PWM_SPINDLE_DISABLE_LASER_MODE || defined __DOXYGEN__
#define DEFAULT_PWM_SPINDLE_DISABLE_LASER_MODE Off
#endif
///@}
/*! @name $16 - Setting_SpindleInvertMask
Inverts the selected spindle output signals from active high to active low. Useful for some pre-built electronic boards.
*/
///@{
#if !defined DEFAULT_INVERT_SPINDLE_ENABLE_PIN || defined __DOXYGEN__
#define DEFAULT_INVERT_SPINDLE_ENABLE_PIN Off
#endif
#if !defined DEFAULT_INVERT_SPINDLE_CCW_PIN || defined __DOXYGEN__
#define DEFAULT_INVERT_SPINDLE_CCW_PIN Off // NOTE: not supported by all drivers.
#endif
#if !defined DEFAULT_INVERT_SPINDLE_PWM_PIN || defined __DOXYGEN__
#define DEFAULT_INVERT_SPINDLE_PWM_PIN Off // NOTE: not supported by all drivers.
#endif
///@}
/*! @name $30 - Setting_RpmMax
*/
///@{
#if !defined DEFAULT_SPINDLE_RPM_MAX || defined __DOXYGEN__
#define DEFAULT_SPINDLE_RPM_MAX 1000.0f // rpm
#endif
///@}
/*! @name $31 - Setting_RpmMin
*/
///@{
#if !defined DEFAULT_SPINDLE_RPM_MIN || defined __DOXYGEN__
#define DEFAULT_SPINDLE_RPM_MIN 0.0f // rpm
#endif
///@}
/*! @name $33 - Setting_PWMFreq
*/
///@{
#if !defined DEFAULT_SPINDLE_PWM_FREQ || defined __DOXYGEN__
#define DEFAULT_SPINDLE_PWM_FREQ 5000 // Hz
#endif
///@}
/*! @name $34 - Setting_PWMOffValue
*/
///@{
#if !defined DEFAULT_SPINDLE_PWM_OFF_VALUE || defined __DOXYGEN__
#define DEFAULT_SPINDLE_PWM_OFF_VALUE 0.0f // Percent
#endif
///@}
/*! @name $35 - Setting_PWMMinValue
Used by variable spindle output only. This forces the PWM output to a minimum duty cycle when enabled.
The PWM pin will still read 0V when the spindle is disabled. Most users will not need this option, but
it may be useful in certain scenarios. This minimum PWM settings coincides with the spindle rpm minimum
setting, like rpm max to max PWM. This is handy if you need a larger voltage difference between 0V disabled
and the voltage set by the minimum PWM for minimum rpm. This difference is 0.02V per PWM value. So, when
minimum PWM is at 1, only 0.02 volts separate enabled and disabled. At PWM 5, this would be 0.1V. Keep
in mind that you will begin to lose PWM resolution with increased minimum PWM values, since you have less
and less range over the total 255 PWM levels to signal different spindle speeds.
<br>__!! NOTE:__ Compute duty cycle at the minimum PWM by this equation: (% duty cycle)=(SPINDLE_PWM_MIN_VALUE/255)*100
*/
///@{
#if !defined DEFAULT_SPINDLE_PWM_MIN_VALUE || defined __DOXYGEN__
#define DEFAULT_SPINDLE_PWM_MIN_VALUE 0.0f // Must be greater than zero. Integer (+-255).
#endif
///@}
/*! @name $36 - Setting_PWMMaxValue
*/
///@{
#if !defined DEFAULT_SPINDLE_PWM_MAX_VALUE || defined __DOXYGEN__
#define DEFAULT_SPINDLE_PWM_MAX_VALUE 100.0f // Percent
#endif
///@}
/*! @name $38 - Setting_SpindlePPR
When the HAL driver supports spindle sync then this option sets the number of pulses per revolution
for the spindle encoder. Depending on the driver this may lead to the "spindle at speed" detection
being enabled. When this is enabled grblHAL will wait for the spindle to reach the programmed speed
before continue processing. NOTE: Currently there is no timeout for this wait.
Default value is 0, meaning spindle sync is disabled
*/
///@{
#if !defined DEFAULT_SPINDLE_PPR || defined __DOXYGEN__
#define DEFAULT_SPINDLE_PPR 0 // Pulses per revolution.
#endif
///@}
/*! @name $340 - Setting_SpindleAtSpeedTolerance
*/
///@{
#if !defined DEFAULT_SPINDLE_AT_SPEED_TOLERANCE || defined __DOXYGEN__
#define DEFAULT_SPINDLE_AT_SPEED_TOLERANCE 0.0f // Percent - 0 means not checked
#endif
///@}
/*! @name $394 - Setting_SpindleOnDelay
*/
///@{
#if !defined DEFAULT_SPINDLE_ON_DELAY || defined __DOXYGEN__
#define DEFAULT_SPINDLE_ON_DELAY 0 // milliseconds: 0 or 500 - 20000
#endif
///@}
/*! @name $395 - Setting_SpindleType
*/
///@{
#if !defined DEFAULT_SPINDLE || defined __DOXYGEN__
#define DEFAULT_SPINDLE SPINDLE_PWM0 // Spindle number from spindle_control.h
#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
// bit 0
// always defaults to on
// bit 1
// Closed loop spindle settings (Group_Spindle_ClosedLoop)
#ifndef DEFAULT_SPINDLE_P_GAIN
#define DEFAULT_SPINDLE_P_GAIN 1.0f
#endif
#ifndef DEFAULT_SPINDLE_I_GAIN
#define DEFAULT_SPINDLE_I_GAIN 0.01f
#endif
#ifndef DEFAULT_SPINDLE_D_GAIN
#define DEFAULT_SPINDLE_D_GAIN 0.0f
#endif
#ifndef DEFAULT_SPINDLE_I_MAX
#define DEFAULT_SPINDLE_I_MAX 10.0f
#endif
#if ENABLE_SPINDLE_LINEARIZATION || defined __DOXYGEN__
/*! @name $66 - Setting_LinearSpindlePiece1
Defines the parameters for the first entry in the spindle RPM linearization table.
*/
///@{
#if !defined DEFAULT_RPM_POINT01 || defined __DOXYGEN__
#define DEFAULT_RPM_POINT01 NAN // DEFAULT_SPINDLE_RPM_MIN // Replace NAN with DEFAULT_SPINDLE_RPM_MIN to enable.
#endif
#if !defined DEFAULT_RPM_LINE_A1 || defined __DOXYGEN__
#define DEFAULT_RPM_LINE_A1 3.197101e-03f
#endif
#if !defined DEFAULT_RPM_LINE_B1 || defined __DOXYGEN__
#define DEFAULT_RPM_LINE_B1 -3.526076e-1f
#endif
///@}
/*! @name $67 - Setting_LinearSpindlePiece2
Defines the parameters for the second entry in the spindle RPM linearization table.
*/
///@{
#if !defined DEFAULT_RPM_POINT12 || defined __DOXYGEN__
#define DEFAULT_RPM_POINT12 NAN // Change NAN to a float constant to enable.
#endif
#if !defined DEFAULT_RPM_LINE_A2 || defined __DOXYGEN__
#define DEFAULT_RPM_LINE_A2 1.722950e-2f
#endif
#if !defined DEFAULT_RPM_LINE_B2 || defined __DOXYGEN__
#define DEFAULT_RPM_LINE_B2 1.0f,
#endif
///@}
/*! @name $68 - Setting_LinearSpindlePiece3
Defines the parameters for the third entry in the spindle RPM linearization table.
*/
///@{
#if !defined DEFAULT_RPM_POINT23 || defined __DOXYGEN__
#define DEFAULT_RPM_POINT23 NAN // Change NAN to a float constant to enable.
#endif
#if !defined DEFAULT_RPM_LINE_A3 || defined __DOXYGEN__
#define DEFAULT_RPM_LINE_A3 5.901518e-02f
#endif
#if !defined DEFAULT_RPM_LINE_B3 || defined __DOXYGEN__
#define DEFAULT_RPM_LINE_B3 4.881851e+02f
#endif
///@}
/*! @name $69 - Setting_LinearSpindlePiece4
Defines the parameters for the fourth entry in the spindle RPM linearization table.
*/
///@{
#if !defined DEFAULT_RPM_POINT34 || defined __DOXYGEN__
#define DEFAULT_RPM_POINT34 NAN // Change NAN to a float constant to enable.
#endif
#if !defined DEFAULT_RPM_LINE_A4 || defined __DOXYGEN__
#define DEFAULT_RPM_LINE_A4 1.203413e-01f
#endif
#if !defined DEFAULT_RPM_LINE_B4 || defined __DOXYGEN__
#define DEFAULT_RPM_LINE_B4 1.151360e+03f
#endif
///@}
#endif // ENABLE_SPINDLE_LINEARIZATION
// Settings for second PWM spindle
/*! @name $716 - Setting_SpindleInvertMask1
Inverts the selected spindle output signals from active high to active low. Useful for some pre-built electronic boards.
*/
///@{
#if !defined DEFAULT_INVERT_SPINDLE1_ENABLE_PIN || defined __DOXYGEN__
#define DEFAULT_INVERT_SPINDLE1_ENABLE_PIN Off
#endif
#if !defined DEFAULT_INVERT_SPINDLE1_CCW_PIN || defined __DOXYGEN__
#define DEFAULT_INVERT_SPINDLE1_CCW_PIN Off // NOTE: not supported by all drivers.
#endif
#if !defined DEFAULT_INVERT_SPINDLE1_PWM_PIN || defined __DOXYGEN__
#define DEFAULT_INVERT_SPINDLE1_PWM_PIN Off // NOTE: not supported by all drivers.
#endif
///@}
/*! @name $730 - Setting_RpmMax1
*/
///@{
#if !defined DEFAULT_SPINDLE1_RPM_MAX || defined __DOXYGEN__
#define DEFAULT_SPINDLE1_RPM_MAX 1000.0f // rpm
#endif
///@}
/*! @name $731 - Setting_RpmMin1
*/
///@{
#if !defined DEFAULT_SPINDLE1_RPM_MIN || defined __DOXYGEN__
#define DEFAULT_SPINDLE1_RPM_MIN 0.0f // rpm
#endif
///@}
/*! @name $733 - Setting_PWMFreq1
*/
///@{
#if !defined DEFAULT_SPINDLE1_PWM_FREQ || defined __DOXYGEN__
#define DEFAULT_SPINDLE1_PWM_FREQ 5000 // Hz
#endif
///@}
/*! @name $734 - Setting_PWMOffValue1
*/
///@{
#if !defined DEFAULT_SPINDLE1_PWM_OFF_VALUE || defined __DOXYGEN__
#define DEFAULT_SPINDLE1_PWM_OFF_VALUE 0.0f // Percent
#endif
///@}
/*! @name $735 - Setting_PWMMinValue1
Used by variable spindle output only. This forces the PWM output to a minimum duty cycle when enabled.
The PWM pin will still read 0V when the spindle is disabled. Most users will not need this option, but
it may be useful in certain scenarios. This minimum PWM settings coincides with the spindle rpm minimum
setting, like rpm max to max PWM. This is handy if you need a larger voltage difference between 0V disabled
and the voltage set by the minimum PWM for minimum rpm. This difference is 0.02V per PWM value. So, when
minimum PWM is at 1, only 0.02 volts separate enabled and disabled. At PWM 5, this would be 0.1V. Keep
in mind that you will begin to lose PWM resolution with increased minimum PWM values, since you have less
and less range over the total 255 PWM levels to signal different spindle speeds.
<br>__!! NOTE:__ Compute duty cycle at the minimum PWM by this equation: (% duty cycle)=(SPINDLE1_PWM_MIN_VALUE/255)*100
*/
///@{
#if !defined DEFAULT_SPINDLE1_PWM_MIN_VALUE || defined __DOXYGEN__
#define DEFAULT_SPINDLE1_PWM_MIN_VALUE 0.0f // Must be greater than zero. Integer (+-255).
#endif
///@}
/*! @name $736 - Setting_PWMMaxValue
*/
///@{
#if !defined DEFAULT_SPINDLE1_PWM_MAX_VALUE || defined __DOXYGEN__
#define DEFAULT_SPINDLE1_PWM_MAX_VALUE 100.0f // Percent
#endif
///@}
// Tool change settings (Group_Toolchange)
/*! @name $341 - Setting_ToolChangeMode
0 = Normal mode, 1 = Manual change, 2 = Manual change @ G59.3, 3 = Manual change and probe tolsetter @ G59.3, 4 = Ignore M6
*/
///@{
#if !defined DEFAULT_TOOLCHANGE_MODE || defined __DOXYGEN__
#define DEFAULT_TOOLCHANGE_MODE 0
#endif
///@}
/*! @name $342 - Setting_ToolChangeProbingDistance
*/
///@{
#if !defined DEFAULT_TOOLCHANGE_PROBING_DISTANCE || defined __DOXYGEN__
#define DEFAULT_TOOLCHANGE_PROBING_DISTANCE 30 // max probing distance in mm for mode 3
#endif
///@}
/*! @name $343 - Setting_ToolChangeFeedRate
*/
///@{
#if !defined DEFAULT_TOOLCHANGE_FEED_RATE || defined __DOXYGEN__
#define DEFAULT_TOOLCHANGE_FEED_RATE 25.0f // mm/min
#endif
///@}
/*! @name $344 - Setting_ToolChangeSeekRate
*/
///@{
#if !defined DEFAULT_TOOLCHANGE_SEEK_RATE || defined __DOXYGEN__
#define DEFAULT_TOOLCHANGE_SEEK_RATE 200.0f // mm/min
#endif
///@}
/*! @name $345 - Setting_ToolChangePulloffRate
*/
///@{
#if !defined DEFAULT_TOOLCHANGE_PULLOFF_RATE || defined __DOXYGEN__
#define DEFAULT_TOOLCHANGE_PULLOFF_RATE 200.0f // mm/min
#endif
///@}
/*! @name $346 - Setting_ToolChangeOptions
*/
///@{
#if !defined DEFAULT_TOOLCHANGE_NO_RESTORE_POSITION || defined __DOXYGEN__
#define DEFAULT_TOOLCHANGE_NO_RESTORE_POSITION Off
#endif
#if !defined DEFAULT_TOOLCHANGE_AT_G30 || defined __DOXYGEN__
#define DEFAULT_TOOLCHANGE_AT_G30 Off
#endif
#if !defined DEFAULT_TOOLCHANGE_FAST_PROBE_PULLOFF || defined __DOXYGEN__
#define DEFAULT_TOOLCHANGE_FAST_PROBE_PULLOFF Off
#endif
///@}
/*! @name $485 - Setting_EnableToolPersistence
*/
///@{
#if !defined DEFAULT_PERSIST_TOOL || defined __DOXYGEN__
#define DEFAULT_PERSIST_TOOL Off
#endif
///@}
// Homing settings (Group_Homing)
/*! @name $22 - Setting_HomingEnable
\brief Enable and control homing functionality.
Requires homing cycles to be defined by \ref DEFAULT_HOMING_CYCLE_0 - \ref DEFAULT_HOMING_CYCLE_2 +.
*/
///@{
/*! /def DEFAULT_HOMING_ENABLE
\brief Enables homing overall.
\internal Bit 0 in settings.homing.flags.
*/
#if !defined DEFAULT_HOMING_ENABLE || defined __DOXYGEN__
#define DEFAULT_HOMING_ENABLE Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! /def DEFAULT_HOMING_SINGLE_AXIS_COMMANDS
\brief Enables single axis homing commands.
`$HX`, `$HY`, `$HZ` etc. for homing the respective axes.The full homing
cycle is still invoked by the `$H` command. This is disabled by default.
If you have a two-axis machine, _DON'T USE THIS_. Instead, just alter the homing cycle for two-axes.
\internal Bit 1 in settings.homing.flags.
*/
#if !defined DEFAULT_HOMING_SINGLE_AXIS_COMMANDS || defined __DOXYGEN__
#define DEFAULT_HOMING_SINGLE_AXIS_COMMANDS Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! /def DEFAULT_HOMING_INIT_LOCK
\brief
If homing is enabled, homing init lock sets grblHAL into an alarm state upon power up or a soft reset.
This forces the user to perform the homing cycle before doing anything else. This is
mainly a safety feature to remind the user to home, since position is unknown to grblHAL.
\internal Bit 2 in settings.homing.flags.
*/
#if !defined DEFAULT_HOMING_INIT_LOCK || defined __DOXYGEN__
#define DEFAULT_HOMING_INIT_LOCK Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! /def DEFAULT_HOMING_FORCE_SET_ORIGIN
\brief
After homing, grblHAL will set by default the entire machine space into negative space, as is typical
for professional CNC machines, regardless of where the limit switches are located. Set this
define to \ref On or 1 to force grblHAL to always set the machine origin at the homed location despite switch orientation.
\internal Bit 3 in settings.homing.flags.
*/
#if !defined DEFAULT_HOMING_FORCE_SET_ORIGIN || defined __DOXYGEN__
#define DEFAULT_HOMING_FORCE_SET_ORIGIN Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! \def DEFAULT_LIMITS_TWO_SWITCHES_ON_AXES
\brief
If your machine has two limits switches wired in parallel to one axis, you will need to enable
this feature. Since the two switches are sharing a single pin, there is no way for grblHAL to tell
which one is enabled. This option only effects homing, where if a limit is engaged, grblHAL will
alarm out and force the user to manually disengage the limit switch. Otherwise, if you have one
limit switch for each axis, don't enable this option. By keeping it disabled, you can perform a
homing cycle while on the limit switch and not have to move the machine off of it.
\internal Bit 4 in settings.limits.flags.
*/
#if !defined DEFAULT_LIMITS_TWO_SWITCHES_ON_AXES || defined __DOXYGEN__
#define DEFAULT_LIMITS_TWO_SWITCHES_ON_AXES Off // Default disabled. Set to \ref On or 1 to enable.
#endif
///@}
/*! /def DEFAULT_HOMING_ALLOW_MANUAL
\brief
If enabled this allows using the homing $-commands to set the home position to the
current axis position.
\internal Bit 5 in settings.homing.flags.
*/
#if !defined DEFAULT_HOMING_ALLOW_MANUAL || defined __DOXYGEN__
#define DEFAULT_HOMING_ALLOW_MANUAL Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! /def DEFAULT_HOMING_OVERRIDE_LOCKS
\brief
If homing init lock is enabled this sets grblHAL into an alarm state upon power up or a soft reset.
To allow a soft reset to override the lock uncomment the line below.
\internal Bit 6 in settings.homing.flags.
*/
#if !defined DEFAULT_HOMING_OVERRIDE_LOCKS || defined __DOXYGEN__
#define DEFAULT_HOMING_OVERRIDE_LOCKS Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! /def DEFAULT_HOMING_USE_LIMIT_SWITCHES
\brief
Enable this setting to force using limit switches for homing.
\internal Bit 8 in settings.homing.flags.
*/
#if !defined DEFAULT_HOMING_USE_LIMIT_SWITCHES || defined __DOXYGEN__
#define DEFAULT_HOMING_USE_LIMIT_SWITCHES Off // Default disabled. Set to \ref On or 1 to enable.
#endif
///@}
/*! /def DEFAULT_RUN_STARTUP_SCRIPTS_ONLY_ON_HOMED
\brief
Enable this setting to to only run startup scripts ($N0 and $N1) on homing completed.
\internal Bit 10 in settings.homing.flags.
*/
#if !defined DEFAULT_RUN_STARTUP_SCRIPTS_ONLY_ON_HOMED || defined __DOXYGEN__
#define DEFAULT_RUN_STARTUP_SCRIPTS_ONLY_ON_HOMED Off // Default disabled. Set to \ref On or 1 to enable.
#endif
///@}
/*! @name $23 - Setting_HomingDirMask
\ref axismask controlling the direction of movement during homing.
Unset bits in the mask results in movement in positive direction.
*/
///@{
#if !defined DEFAULT_HOMING_DIR_MASK || defined __DOXYGEN__
#define DEFAULT_HOMING_DIR_MASK 0
#endif
///@}
/*! @name $24 - Setting_HomingFeedRate
*/
///@{
#if !defined DEFAULT_HOMING_FEED_RATE || defined __DOXYGEN__
#define DEFAULT_HOMING_FEED_RATE 25.0f // mm/min
#endif
///@}
/*! @name $25 - Setting_HomingSeekRate
*/
///@{
#if !defined DEFAULT_HOMING_SEEK_RATE || defined __DOXYGEN__
#define DEFAULT_HOMING_SEEK_RATE 500.0f // mm/min
#endif
///@}
/*! @name $26 - Setting_HomingDebounceDelay
*/
///@{
#if !defined DEFAULT_HOMING_DEBOUNCE_DELAY || defined __DOXYGEN__
#define DEFAULT_HOMING_DEBOUNCE_DELAY 250 // msec (0-65k)
#endif
///@}
/*! @name $27 - Setting_HomingPulloff
*/
///@{
#if !defined DEFAULT_HOMING_PULLOFF || defined __DOXYGEN__
#define DEFAULT_HOMING_PULLOFF 1.0f // mm
#endif
///@}
/*! @name $43 - Setting_HomingLocateCycles
Number of homing cycles performed after when the machine initially jogs to limit switches.
This help in preventing overshoot and should improve repeatability. This value should be one or
greater.
*/
///@{
#if !defined DEFAULT_N_HOMING_LOCATE_CYCLE || defined __DOXYGEN__
#define DEFAULT_N_HOMING_LOCATE_CYCLE 1 // Integer (1-127)
#endif
///@}
/*! @name Setting_HomingCycle_1 - Setting_HomingCycle_6
// Define the homing cycle patterns with bitmasks. The homing cycle first performs a search mode
// to quickly engage the limit switches, followed by a slower locate mode, and finished by a short
// pull-off motion to disengage the limit switches. The following DEFAULT_HOMING_CYCLE_x defines are executed
// in order starting with suffix 0 and completes the homing routine for the specified-axes only. If
// an axis is omitted from the defines, it will not home, nor will the system update its position.
// Meaning that this allows for users with non-standard cartesian machines, such as a lathe (x then z,
// with no y), to configure the homing cycle behavior to their needs.
// NOTE: The homing cycle is designed to allow sharing of limit pins, if the axes are not in the same
// cycle, but this requires some pin settings changes in cpu_map.h file. For example, the default homing
// cycle can share the Z limit pin with either X or Y limit pins, since they are on different cycles.
// By sharing a pin, this frees up a precious IO pin for other purposes. In theory, all axes limit pins
// may be reduced to one pin, if all axes are homed with separate cycles, or vice versa, all three axes
// on separate pin, but homed in one cycle. Also, it should be noted that the function of hard limits
// will not be affected by pin sharing.
// NOTE: Defaults are set for a traditional 3-axis CNC machine. Z-axis first to clear, followed by X & Y.
*/
/*! @name $44 - Setting_HomingCycle_1
*/
///@{
#if !defined DEFAULT_HOMING_CYCLE_0 || defined __DOXYGEN__
#define DEFAULT_HOMING_CYCLE_0 (Z_AXIS_BIT) // REQUIRED: First move Z to clear workspace.
#endif
///@}
/*! @name $45 - Setting_HomingCycle_2
*/
///@{
#if !defined DEFAULT_HOMING_CYCLE_1 || defined __DOXYGEN__
#if COREXY
#define DEFAULT_HOMING_CYCLE_1 (X_AXIS_BIT) // OPTIONAL: Then move X.
#else
#define DEFAULT_HOMING_CYCLE_1 (X_AXIS_BIT|Y_AXIS_BIT) // OPTIONAL: Then move X,Y at the same time.
#endif
#endif
///@}
/*! @name $46 - Setting_HomingCycle_3
*/
///@{
#if !defined DEFAULT_HOMING_CYCLE_2 || defined __DOXYGEN__
#if COREXY
#define DEFAULT_HOMING_CYCLE_2 (Y_AXIS_BIT) // OPTIONAL: Then move Y.
#else
#define DEFAULT_HOMING_CYCLE_2 0 // OPTIONAL: Uncomment and add axes mask to enable
#endif
#endif
///@}
/*! @name $47 - Setting_HomingCycle_4
*/
///@{
#if (N_AXIS > 3 && !defined DEFAULT_HOMING_CYCLE_3) || defined __DOXYGEN__
#define DEFAULT_HOMING_CYCLE_3 0 // OPTIONAL: Uncomment and add axes mask to enable
#endif
///@}
/*! @name $48 - Setting_HomingCycle_5
\ref axismask
*/
///@{
#if (N_AXIS > 4 && !defined DEFAULT_HOMING_CYCLE_4) || defined __DOXYGEN__
#define DEFAULT_HOMING_CYCLE_4 0 // OPTIONAL: Uncomment and add axes mask to enable
#endif
///@}
/*! @name $49 - Setting_HomingCycle_6
*/
///@{
#if (N_AXIS > 5 && !defined DEFAULT_HOMING_CYCLE_5) || defined __DOXYGEN__
#define DEFAULT_HOMING_CYCLE_5 0 // OPTIONAL: Uncomment and add axes mask to enable
#endif
///@}
/*! @name $671 - Setting_HomePinsInvertMask
By default, grblHAL sets all input pins to normal-low operation with their internal pull-up resistors
enabled. This simplifies the wiring for users by requiring only a normally closed (NC) switch connected
to ground. It is _not_ recommended to use normally-open (NO) switches as this increases the risk
of electrical noise or cable breaks spuriously triggering the inputs. If normally-open (NO) switches
are used the logic of the input signals should be be inverted with the \ref axismask below.
*/
///@{
#if !defined DEFAULT_HOME_SIGNALS_INVERT_MASK || defined __DOXYGEN__
#define DEFAULT_HOME_SIGNALS_INVERT_MASK 0 // Set to -1 or AXES_BITMASK to invert for all axes
#endif
///@}
// Probing settings (Group_Probing)
/*! @name $6 - Setting_InvertProbePin
*/
///@{
#if !defined DEFAULT_PROBE_SIGNAL_INVERT || defined __DOXYGEN__
#define DEFAULT_PROBE_SIGNAL_INVERT Off
#endif
#if !defined DEFAULT_TOOLSETTER_SIGNAL_INVERT || defined __DOXYGEN__
#define DEFAULT_TOOLSETTER_SIGNAL_INVERT Off
#endif
///@}
/*! @name $19 - Setting_ProbePullUpDisable
*/
///@{
#if !defined DEFAULT_PROBE_SIGNAL_DISABLE_PULLUP || defined __DOXYGEN__
#define DEFAULT_PROBE_SIGNAL_DISABLE_PULLUP Off
#endif
#if !defined DEFAULT_TOOLSETTER_SIGNAL_DISABLE_PULLUP || defined __DOXYGEN__
#define DEFAULT_TOOLSETTER_SIGNAL_DISABLE_PULLUP Off
#endif
///@}
/*! @name $65 - Setting_ProbingFlags
// By default, grblHAL disables feed rate overrides for all G38.x probe cycle commands. Although this
// may be different than some pro-class machine control, it's arguable that it should be this way.
// Most probe sensors produce different levels of error that is dependent on rate of speed. By
// keeping probing cycles to their programmed feed rates, the probe sensor should be a lot more
// repeatable. If needed, you can disable this behavior by uncommenting the define below.
*/
///@{
#if !defined DEFAULT_ALLOW_FEED_OVERRIDE_DURING_PROBE_CYCLES || defined __DOXYGEN__
#define DEFAULT_ALLOW_FEED_OVERRIDE_DURING_PROBE_CYCLES Off
#endif
#if !defined DEFAULT_SOFT_LIMIT_PROBE_CYCLES || defined __DOXYGEN__
#define DEFAULT_SOFT_LIMIT_PROBE_CYCLES Off
#endif
///@}
// Safety door/parking settings (Group_SafetyDoor)
#ifdef DEFAULT_HOMING_ENABLE
/*! @name $41 - Setting_ParkingEnable
// Enables and configures parking motion methods upon a safety door state. Primarily for OEMs
// that desire this feature for their integrated machines. At the moment, grblHAL assumes that
// the parking motion only involves one axis, although the parking implementation was written
// to be easily refactored for any number of motions on different axes by altering the parking
// source code. At this time, grblHAL only supports parking one axis (typically the Z-axis) that
// moves in the positive direction upon retracting and negative direction upon restoring position.
// The motion executes with a slow pull-out retraction motion, power-down, and a fast park.
// Restoring to the resume position follows these set motions in reverse: fast restore to
// pull-out position, power-up with a time-out, and plunge back to the original position at the
// slower pull-out rate.
// NOTE: Still a work-in-progress. Machine coordinates must be in all negative space and
// does not work with DEFAULT_HOMING_FORCE_SET_ORIGIN enabled. Parking motion also moves only in
// positive direction.
* // Default disabled. Uncomment to enable.
*/
///@{
#if !defined DEFAULT_PARKING_ENABLE || defined __DOXYGEN__
#define DEFAULT_PARKING_ENABLE Off // bit 0
// Enables a special set of M-code commands that enables and disables the parking motion.
// These are controlled by `M56`, `M56 P1`, or `M56 Px` to enable and `M56 P0` to disable.
// The command is modal and will be set after a planner sync. Since it is g-code, it is
// executed in sync with g-code commands. It is not a real-time command.
// NOTE: PARKING_ENABLE is required. By default, M56 is active upon initialization. Use
// DEACTIVATE_PARKING_UPON_INIT to set M56 P0 as the power-up default.
#endif
#if !defined DEFAULT_DEACTIVATE_PARKING_UPON_INIT || defined __DOXYGEN__
#define DEFAULT_DEACTIVATE_PARKING_UPON_INIT Off // bit 1
#endif
#if !defined DEFAULT_ENABLE_PARKING_OVERRIDE_CONTROL || defined __DOXYGEN__
#define DEFAULT_ENABLE_PARKING_OVERRIDE_CONTROL Off // bit 2
#endif
///@}
/*! @name $42 - Setting_ParkingAxis
Define which axis that performs the parking motion
*/
///@{
#if !defined DEFAULT_PARKING_AXIS || defined __DOXYGEN__
#define DEFAULT_PARKING_AXIS Z_AXIS //
#endif
///@}
/*! @name $56 - Setting_ParkingPulloutIncrement
*/
///@{
#if !defined DEFAULT_PARKING_PULLOUT_INCREMENT || defined __DOXYGEN__
#define DEFAULT_PARKING_PULLOUT_INCREMENT 5.0f //
#endif
///@}
/*! @name $57 - Setting_ParkingPulloutRate
Spindle pull-out and plunge distance in mm. Incremental distance.
Must be positive value or equal to zero.*/
///@{
#if !defined DEFAULT_PARKING_PULLOUT_RATE || defined __DOXYGEN__
#define DEFAULT_PARKING_PULLOUT_RATE 100.0f // mm/min.
#endif
///@}
/*! @name $58 - Setting_ParkingTarget
Parking axis target. In mm, as machine coordinate [-max_travel, 0].
*/
///@{
#if !defined DEFAULT_PARKING_TARGET || defined __DOXYGEN__
#define DEFAULT_PARKING_TARGET -5.0f // mm
#endif
///@}
/*! @name $59 - Setting_ParkingFastRate
Parking fast rate after pull-out in mm/min.
*/
///@{
#if !defined DEFAULT_PARKING_RATE || defined __DOXYGEN__
#define DEFAULT_PARKING_RATE 500.0f // mm/min
#endif
///@}
/*! @name $61 - Setting_DoorOptions
*/
///@{
/*!
\brief
If set to \ref On or 1 ignore the door open signal command when in IDLE state.
This can be useful for jogging laser cutters/engravers when the lid is open.
*/
#if !defined DEFAULT_DOOR_IGNORE_WHEN_IDLE || defined __DOXYGEN__
#define DEFAULT_DOOR_IGNORE_WHEN_IDLE Off
#endif
/*!
\brief
If set to \ref On or 1 keep the coolant on when door is opened.
*/
#if !defined DEFAULT_DOOR_KEEP_COOLANT_ON || defined __DOXYGEN__
#define DEFAULT_DOOR_KEEP_COOLANT_ON Off
#endif
///@}
/*! @name 392 - Setting_DoorSpindleOnDelay
\brief
After the safety door switch has been toggled and restored, this setting sets the power-up delay
between restoring the spindle and resuming the cycle.
*/
///@{
#if !defined DEFAULT_SAFETY_DOOR_SPINDLE_DELAY || defined __DOXYGEN__
#define DEFAULT_SAFETY_DOOR_SPINDLE_DELAY 4.0f // Float (seconds)
#endif
///@}
/*! @name 393 - Setting_DoorCoolantOnDelay
\brief
After the safety door switch has been toggled and restored, this setting sets the power-up delay
between restoring the coolant and resuming the cycle.
*/
///@{
#if !defined DEFAULT_SAFETY_DOOR_COOLANT_DELAY || defined __DOXYGEN__
#define DEFAULT_SAFETY_DOOR_COOLANT_DELAY 1.0f // Float (seconds)
#endif
///@}
#endif // DEFAULT_HOMING_ENABLE
// Jogging settings (Group_Jogging)
/*! @name $40 - Setting_JogSoftLimited
\brief Soft limit jog commands to stay within machine limits.
Unlike the general soft limits that raises an alarm for motions that exceeds
machine limits this setting, when enabled, keeps them with the limits.
<br>__NOTE:__ Requires the machine to be homed and have correctly set machine limts.
*/
///@{
#if !defined DEFAULT_JOG_LIMIT_ENABLE || defined __DOXYGEN__
#define DEFAULT_JOG_LIMIT_ENABLE Off
#endif
///@}
// Stepper settings (Group_Stepper)
/*! @name $0 - Setting_PulseMicroseconds
\brief Stepper pulse length in microseconds.
<br>__NOTE:__ The different MCUs supported have different interrupt latencies
and some drivers may enable features that are not available on others. This may
lead to this setting not beeing respected exactly over the supported range.
Typically drivers are calibrated to be correct for 5 microsecond pulse lengths,
however if a precise pulse length is required it should be measured and
adjusted either by changing this value or by changing the `STEP_PULSE_LATENCY` symbol
value that many drivers supports. Note that `STEP_PULSE_LATENCY` symbol is driver
specific - it is _not_ defined in the core.
*/
///@{
#if !defined DEFAULT_STEP_PULSE_MICROSECONDS || defined __DOXYGEN__
#define DEFAULT_STEP_PULSE_MICROSECONDS 5.0f
#endif
///@}
/*! @name $1 - Setting_StepperIdleLockTime
Delay in milliseconds before steppers are disabled when idle, range 0-65535.
Which axes are disabled can be defined by the \ref DEFAULT_STEPPER_DEENERGIZE_MASK
symbol. E.g. it might be desirable to unlock X and Y and keep the Z-axis enabled
since the spindle may pull down the Z due to its weight.
<br>__NOTE:__ Setting this value to 255 keeps all steppers enabled.
*/
///@{
#if !defined DEFAULT_STEPPER_IDLE_LOCK_TIME || defined __DOXYGEN__
#define DEFAULT_STEPPER_IDLE_LOCK_TIME 25 // milliseconds
#endif
///@}
/*! @name $2 - Setting_StepInvertMask
\brief \ref axismask controlling the polarity of the step signals. The default is positive pulses.
Set this value to -1 or AXES_BITMASK to invert for all steppers or specify which by mask.
*/
///@{
#if !defined DEFAULT_STEP_SIGNALS_INVERT_MASK || defined __DOXYGEN__
#define DEFAULT_STEP_SIGNALS_INVERT_MASK 0
#endif
///@}
/*! @name $3 - Setting_DirInvertMask
\brief \ref axismask controling the polarity of the stepper direction signals. The default
is positive voltage for motions in negative direction.
Set this value to -1 or AXES_BITMASK to invert for all steppers or specify which by mask.*/
///@{
#if !defined DEFAULT_DIR_SIGNALS_INVERT_MASK || defined __DOXYGEN__
#define DEFAULT_DIR_SIGNALS_INVERT_MASK 0
#endif
///@}
/*! @name $4 - Setting_InvertStepperEnable
\brief \ref axismask for inverting the polarity of the stepper enable signal(s).
Set this value to -1 or AXES_BITMASK to invert for all steppers or specify which by mask.
<br>__NOTE:__ If \ref COMPATIBILITY_LEVEL > 2 this setting reverts to the legacy
Grbl behaviour where 0 inverts the enable signals for all drivers
and 1 does not.
<br>__NOTE:__ This setting is not universally available for individual axes - check
board documentation.
Specify at least \ref X_AXIS_BIT if a common enable signal is used.
*/
///@{
#if !defined DEFAULT_ENABLE_SIGNALS_INVERT_MASK || defined __DOXYGEN__
#define DEFAULT_ENABLE_SIGNALS_INVERT_MASK AXES_BITMASK
#endif
///@}
/*! @name $8 - Setting_GangedDirInvertMask
\brief \ref axismask for inverting the polarity of the stepper direction signal(s) for the
second motor for ganged/auto squared axes.
*/
///@{
#if !defined DEFAULT_GANGED_DIRECTION_INVERT_MASK || defined __DOXYGEN__
#define DEFAULT_GANGED_DIRECTION_INVERT_MASK 0
#endif
///@}
/*! @name $29 - Setting_PulseDelayMicroseconds
*/
///@{
#if !defined DEFAULT_STEP_PULSE_DELAY || defined __DOXYGEN__
#define DEFAULT_STEP_PULSE_DELAY 0.0f
#endif
///@}
/*! @name $37 - Setting_StepperDeenergizeMask
\ref axismask to be OR'ed with stepper disable signal(s). Axes configured will not be disabled.
<br>__NOTE:__ Not universally available for individual axes - check driver documentation.
Specify at least \ref X_AXIS_BIT if a common enable signal is used.
*/
///@{
#if !defined DEFAULT_STEPPER_DEENERGIZE_MASK || defined __DOXYGEN__
#define DEFAULT_STEPPER_DEENERGIZE_MASK 0
#endif
///@}
/*! @name $376 - Settings_RotaryAxes
Designate ABC axes as rotary by \ref axismask. This will disable scaling (to mm) in inches mode.
Set steps/mm for the axes to the value that represent the desired movement per unit.
For the controller the distance is unitless and and can be in degrees, radians, rotations, ...
*/
///@{
#define IS_ROTARY_LETTER(c) (c == 'A' || c == 'B' || c == 'C')
#if !defined DEFAULT_AXIS_ROTATIONAL_MASK || defined __DOXYGEN__
#if N_AXIS > 3 && IS_ROTARY_LETTER(AXIS3_LETTER)
#define RA3 (1<<3)
#else
#define RA3 0
#endif
#if N_AXIS > 4 && IS_ROTARY_LETTER(AXIS4_LETTER)
#define RA4 (1<<4)
#else
#define RA4 0
#endif
#if N_AXIS > 5 && IS_ROTARY_LETTER(AXIS5_LETTER)
#define RA5 (1<<5)
#else
#define RA5 0
#endif
#if N_AXIS > 6 && IS_ROTARY_LETTER(AXIS6_LETTER)
#define RA6 (1<<6)
#else
#define RA6 0
#endif
#if N_AXIS > 7 && IS_ROTARY_LETTER(AXIS7_LETTER)
#define RA7 (1<<7)
#else
#define RA7 0
#endif
#define DEFAULT_AXIS_ROTATIONAL_MASK (RA3|RA4|RA5|RA6|RA7)
#endif
///@}
/*! @name $680 - Setting_StepperEnableDelay
Allowed range 0 - 250 milliseconds. Driver adds ~2 milliseconds.
*/
///@{
#if !defined DEFAULT_STEPPER_ENABLE_DELAY || defined __DOXYGEN__
#define DEFAULT_STEPPER_ENABLE_DELAY 0
#endif
///@}
/*! @name $742 - Setting_MotorWarningsEnable
\brief \ref axismask controlling the which motor warning signals to enable.
Set this value to -1 or AXES_BITMASK to enable for all axes or specify which by mask.
*/
///@{
#if !defined DEFAULT_MOTOR_WARNING_SIGNALS_ENABLE || defined __DOXYGEN__
#define DEFAULT_MOTOR_WARNING_SIGNALS_ENABLE 0
#endif
///@}
/*! @name $743 - Setting_MotorWarningsInvert
\brief \ref axismask controlling the which motor warning signals to to invert.
Set this value to -1 or AXES_BITMASK to invert all warning signals or specify for which axes by mask.
*/
///@{
#if !defined DEFAULT_MOTOR_WARNING_SIGNALS_INVERT || defined __DOXYGEN__
#define DEFAULT_MOTOR_WARNING_SIGNALS_INVERT 0
#endif
///@}
/*! @name $744 - Setting_MotorFaultsEnable
\brief \ref axismask controlling the which motor fault signals to enable.
Set this value to -1 or AXES_BITMASK to enable for all axes or specify which by mask.
*/
///@{
#if !defined DEFAULT_MOTOR_FAULT_SIGNALS_ENABLE || defined __DOXYGEN__
#define DEFAULT_MOTOR_FAULT_SIGNALS_ENABLE 0
#endif
///@}
/*! @name $745 - Setting_MotorFaultsInvert
\brief \ref axismask controlling the which motor fault signals to to invert.
Set this value to -1 or AXES_BITMASK to invert all fault signals or specify for which axes by mask.
*/
///@{
#if !defined DEFAULT_MOTOR_FAULT_SIGNALS_INVERT || defined __DOXYGEN__
#define DEFAULT_MOTOR_FAULT_SIGNALS_INVERT 0
#endif
///@}
/*! @name $481 - Setting_AutoReportInterval
Auto status report interval, allowed range is 100 - 1000. Set to 0 to disable.
*/
///@{
#if !defined DEFAULT_AUTOREPORT_INTERVAL || defined __DOXYGEN__
#define DEFAULT_AUTOREPORT_INTERVAL 0
#endif
///@}
/*! @name $482 - Setting_TimeZoneOffset
Timezone offset from UTC in hours, allowed range is -12.0 - 12.0.
*/
///@{
#if !defined DEFAULT_TIMEZONE_OFFSET || defined __DOXYGEN__
#define DEFAULT_TIMEZONE_OFFSET 0.0f
#endif
///@}
/*! @name $484 - Setting_UnlockAfterEStop
Specifices whether unlock ($X) is needed to clear an E-Stop alarm.
NOTE: The logic is inverted in the stored setting.
*/
///@{
#if !defined DEFAULT_NO_UNLOCK_AFTER_ESTOP || defined __DOXYGEN__
#define DEFAULT_NO_UNLOCK_AFTER_ESTOP Off
#endif
///@}
/*! @name $536 - Setting_RGB_StripLengt0
Number of LEDs in NeoPixel/WS2812 strip 1.
*/
///@{
#if !defined DEFAULT_RGB_STRIP0_LENGTH || defined __DOXYGEN__
#define DEFAULT_RGB_STRIP0_LENGTH 0
#endif
///@}
/*! @name $537 - Setting_RGB_StripLengt1
Number of LEDs in NeoPixel/WS2812 strip 2.
*/
///@{
#if !defined DEFAULT_RGB_STRIP1_LENGTH || defined __DOXYGEN__
#define DEFAULT_RGB_STRIP1_LENGTH 0
#endif
///@}
/*! @name $538 - Setting_RotaryWrap
Enable fast return to G28 position for rotary axes by \ref axismask.
Use:
G91G28<axisletter>0
G90
*/
///@{
#if !defined DEFAULT_AXIS_ROTARY_WRAP_MASK || defined __DOXYGEN__
#define DEFAULT_AXIS_ROTARY_WRAP_MASK 0
#endif
///@}
/*! @name $374 - Settings_ModBus_BaudRate
Default baud rate for ModBus RTU stream.
*/
///@{
#if !defined DEFAULT_MODBUS_STREAM_BAUD || defined __DOXYGEN__
#define DEFAULT_MODBUS_STREAM_BAUD 3 // 0 = 2400, 1 = 4800, 2 = 9600, 3 = 19200, 4 = 38400, 5 = 115200
#endif
///@}
/*! @name $681 - Setting_ModBus_StreamFormat
Default stream format settings for ModBus RTU stream.
*/
///@{
#if !defined DEFAULT_MODBUS_STREAM_DATA_BITS || defined __DOXYGEN__
#define DEFAULT_MODBUS_STREAM_DATA_BITS 0 // 0 = 8, 1 = 7
#endif
///@}
///@{
#if !defined DEFAULT_MODBUS_STREAM_STOP_BITS || defined __DOXYGEN__
#define DEFAULT_MODBUS_STREAM_STOP_BITS 0 // 0 = 1, 1 = 1.5, 2 = 2, 3 = 0.5
#endif
///@}///@{
#if !defined DEFAULT_MODBUS_STREAM_PARITY || defined __DOXYGEN__
#define DEFAULT_MODBUS_STREAM_PARITY 0 // 0 = None, 1 = Even, 2 = Odd
#endif
///@}
/*! @name $650 - Setting_FSOptions
Filing systems options.
*/
///@{
/*! /def DEFAULT_FS_SD_AUTOMOUNT
\brief Auto mount SD card on startup.
\internal Bit 0 in settings.fs_options.mask.
*/
#if !defined DEFAULT_FS_SD_AUTOMOUNT || defined __DOXYGEN__
#define DEFAULT_FS_SD_AUTOMOUNT Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! /def DEFAULT_FS_LITLLEFS_HIDDEN
\brief Hides LittleFS mount from directory listings.
\internal Bit 1 in settings.fs_options.mask.
*/
#if !defined DEFAULT_FS_LITLLEFS_HIDDEN || defined __DOXYGEN__
#define DEFAULT_FS_LITLLEFS_HIDDEN Off // Default disabled. Set to \ref On or 1 to enable.
#endif
/*! /def DEFAULT_FS_HIERACHICAL_LISTING
\brief
Adds directory entries in $F and $F+ output to allow hierarchical navigation of the directoy tree.
\internal Bit 2 in settings.fs_options.mask.
*/
#if !defined DEFAULT_FS_HIERACHICAL_LISTING || defined __DOXYGEN__
#define DEFAULT_FS_HIERACHICAL_LISTING Off // Default disabled. Set to \ref On or 1 to enable.
#endif
///@}
// Axis settings (Group_XAxis - Group_VAxis)
/*! @name $10x - Setting_AxisStepsPerMM
*/
///@{
#if !defined DEFAULT_X_STEPS_PER_MM || defined __DOXYGEN__
#define DEFAULT_X_STEPS_PER_MM 250.0f
#endif
#if !defined DEFAULT_Y_STEPS_PER_MM || defined __DOXYGEN__
#define DEFAULT_Y_STEPS_PER_MM 250.0f
#endif
#if !defined DEFAULT_Z_STEPS_PER_MM || defined __DOXYGEN__
#define DEFAULT_Z_STEPS_PER_MM 250.0f
#endif
#if (defined A_AXIS && !defined DEFAULT_A_STEPS_PER_MM) || defined __DOXYGEN__
#define DEFAULT_A_STEPS_PER_MM 250.0f
#endif
#if (defined B_AXIS && !defined DEFAULT_B_STEPS_PER_MM) || defined __DOXYGEN__
#define DEFAULT_B_STEPS_PER_MM 250.0f
#endif
#if (defined C_AXIS && !defined DEFAULT_C_STEPS_PER_MM) || defined __DOXYGEN__
#define DEFAULT_C_STEPS_PER_MM 250.0f
#endif
#if (defined U_AXIS && !defined DEFAULT_U_STEPS_PER_MM) || defined __DOXYGEN__
#define DEFAULT_U_STEPS_PER_MM 250.0f
#endif
#if (defined V_AXIS && !defined DEFAULT_V_STEPS_PER_MM) || defined __DOXYGEN__
#define DEFAULT_V_STEPS_PER_MM 250.0f
#endif
#if (defined W_AXIS && !defined DEFAULT_W_STEPS_PER_MM) || defined __DOXYGEN__
#define DEFAULT_W_STEPS_PER_MM 250.0f
#endif
///@}
/*! @name $11x - Setting_AxisMaxRate
*/
///@{
#if !defined DEFAULT_X_MAX_RATE || defined __DOXYGEN__
#define DEFAULT_X_MAX_RATE 500.0f // mm/min
#endif
#if !defined DEFAULT_Y_MAX_RATE || defined __DOXYGEN__
#define DEFAULT_Y_MAX_RATE 500.0f // mm/min
#endif
#if !defined DEFAULT_Z_MAX_RATE || defined __DOXYGEN__
#define DEFAULT_Z_MAX_RATE 500.0f // mm/min
#endif
#if (defined A_AXIS && !defined DEFAULT_A_MAX_RATE) || defined __DOXYGEN__
#define DEFAULT_A_MAX_RATE 500.0f // mm/min
#endif
#if (defined B_AXIS && !defined DEFAULT_B_MAX_RATE) || defined __DOXYGEN__
#define DEFAULT_B_MAX_RATE 500.0f // mm/min
#endif
#if (defined C_AXIS && !defined DEFAULT_C_MAX_RATE) || defined __DOXYGEN__
#define DEFAULT_C_MAX_RATE 500.0f // mm/min
#endif
#if (defined U_AXIS && !defined DEFAULT_U_MAX_RATE) || defined __DOXYGEN__
#define DEFAULT_U_MAX_RATE 500.0f // mm/min
#endif
#if (defined V_AXIS && !defined DEFAULT_V_MAX_RATE) || defined __DOXYGEN__
#define DEFAULT_V_MAX_RATE 500.0f // mm/min
#endif
#if (defined W_AXIS && !defined DEFAULT_W_MAX_RATE) || defined __DOXYGEN__
#define DEFAULT_W_MAX_RATE 500.0f // mm/min
#endif
///@}
/*! @name 12x - Setting_AxisAcceleration
*/
///@{
#if !defined DEFAULT_X_ACCELERATION || defined __DOXYGEN__
#define DEFAULT_X_ACCELERATION 10.0f // mm/sec^2
#endif
#if !defined DEFAULT_Y_ACCELERATION || defined __DOXYGEN__
#define DEFAULT_Y_ACCELERATION 10.0f // mm/sec^2
#endif
#if !defined DEFAULT_Z_ACCELERATION || defined __DOXYGEN__
#define DEFAULT_Z_ACCELERATION 10.0f // mm/sec^2
#endif
#if (defined A_AXIS && !defined DEFAULT_A_ACCELERATION) || defined __DOXYGEN__
#define DEFAULT_A_ACCELERATION 10.0f // mm/sec^2
#endif
#if (defined B_AXIS && !defined DEFAULT_B_ACCELERATION) || defined __DOXYGEN__
#define DEFAULT_B_ACCELERATION 10.0f // mm/sec^2
#endif
#if (defined C_AXIS && !defined DEFAULT_C_ACCELERATION) || defined __DOXYGEN__
#define DEFAULT_C_ACCELERATION 10.0f // mm/sec^2
#endif
#if (defined U_AXIS && !defined DEFAULT_U_ACCELERATION) || defined __DOXYGEN__
#define DEFAULT_U_ACCELERATION 10.0f // mm/sec^2
#endif
#if (defined V_AXIS && !defined DEFAULT_V_ACCELERATION) || defined __DOXYGEN__
#define DEFAULT_V_ACCELERATION 10.0f // mm/sec^2
#endif
#if (defined W_AXIS && !defined DEFAULT_W_ACCELERATION) || defined __DOXYGEN__
#define DEFAULT_W_ACCELERATION 10.0f // mm/sec^2
#endif
///@}
/*! @name 22x - Setting_AxisJerk
*/
///@{
#if !defined DEFAULT_X_JERK|| defined __DOXYGEN__
#define DEFAULT_X_JERK (DEFAULT_X_ACCELERATION * 10.0f) // mm/sec^3
#endif
#if !defined DEFAULT_Y_JERK|| defined __DOXYGEN__
#define DEFAULT_Y_JERK (DEFAULT_Y_ACCELERATION * 10.0f) // mm/sec^3
#endif
#if !defined DEFAULT_Z_JERK || defined __DOXYGEN__
#define DEFAULT_Z_JERK (DEFAULT_Z_ACCELERATION * 10.0f) // mm/sec^3
#endif
#if (defined A_AXIS && !defined DEFAULT_A_JERK) || defined __DOXYGEN__
#define DEFAULT_A_JERK (DEFAULT_A_ACCELERATION * 10.0f) // mm/sec^3
#endif
#if (defined B_AXIS && !defined DEFAULT_B_JERK) || defined __DOXYGEN__
#define DEFAULT_B_JERK (DEFAULT_B_ACCELERATION * 10.0f) // mm/sec^3
#endif
#if (defined C_AXIS && !defined DEFAULT_C_JERK) || defined __DOXYGEN__
#define DEFAULT_C_JERK (DEFAULT_C_ACCELERATION * 10.0f) // mm/sec^3
#endif
#if (defined U_AXIS && !defined DEFAULT_U_JERK) || defined __DOXYGEN__
#define DEFAULT_U_JERK (DEFAULT_U_ACCELERATION * 10.0f) // mm/sec^3
#endif
#if (defined V_AXIS && !defined DEFAULT_V_JERK) || defined __DOXYGEN__
#define DEFAULT_V_JERK (DEFAULT_V_ACCELERATION * 10.0f) // mm/sec^3
#endif
#if (defined W_AXIS && !defined DEFAULT_W_JERK) || defined __DOXYGEN__
#define DEFAULT_W_JERK (DEFAULT_W_ACCELERATION * 10.0f) // mm/sec^3
#endif
///@}
/*! @name 13x - Setting_AxisMaxTravel
__NOTE:__ Must be a positive values.
*/
///@{
#if !defined DEFAULT_X_MAX_TRAVEL || defined __DOXYGEN__
#define DEFAULT_X_MAX_TRAVEL 200.0f // mm
#endif
#if !defined DEFAULT_Y_MAX_TRAVEL || defined __DOXYGEN__
#define DEFAULT_Y_MAX_TRAVEL 200.0f // mm
#endif
#if !defined DEFAULT_Z_MAX_TRAVEL || defined __DOXYGEN__
#define DEFAULT_Z_MAX_TRAVEL 200.0f // mm
#endif
#if (defined A_AXIS && !defined DEFAULT_A_MAX_TRAVEL) || defined __DOXYGEN__
#define DEFAULT_A_MAX_TRAVEL 200.0f // mm
#endif
#if (defined B_AXIS && !defined DEFAULT_B_MAX_TRAVEL) || defined __DOXYGEN__
#define DEFAULT_B_MAX_TRAVEL 200.0f // mm
#endif
#if (defined C_AXIS && !defined DEFAULT_C_MAX_TRAVEL) || defined __DOXYGEN__
#define DEFAULT_C_MAX_TRAVEL 200.0f // mm
#endif
#if (defined U_AXIS && !defined DEFAULT_U_MAX_TRAVEL) || defined __DOXYGEN__
#define DEFAULT_U_MAX_TRAVEL 200.0f // mm
#endif
#if (defined V_AXIS && !defined DEFAULT_V_MAX_TRAVEL) || defined __DOXYGEN__
#define DEFAULT_V_MAX_TRAVEL 200.0f // mm
#endif
#if (defined W_AXIS && !defined DEFAULT_W_MAX_TRAVEL) || defined __DOXYGEN__
#define DEFAULT_W_MAX_TRAVEL 200.0f // mm
#endif
///@}
/*! @name 14x - Setting_AxisStepperCurrent
*
*/
///@{
#if !defined DEFAULT_X_CURRENT || defined __DOXYGEN__
#define DEFAULT_X_CURRENT 500.0f // mA RMS
#endif
#if !defined DEFAULT_Y_CURRENT || defined __DOXYGEN__
#define DEFAULT_Y_CURRENT 500.0f // mA RMS
#endif
#if !defined DEFAULT_Z_CURRENT || defined __DOXYGEN__
#define DEFAULT_Z_CURRENT 500.0f // mA RMS
#endif
#if (defined A_AXIS && !defined DEFAULT_A_CURRENT) || defined __DOXYGEN__
#define DEFAULT_A_CURRENT 500.0f // mA RMS
#endif
#if (defined B_AXIS && !defined DEFAULT_B_CURRENT) || defined __DOXYGEN__
#define DEFAULT_B_CURRENT 500.0f // mA RMS
#endif
#if (defined C_AXIS && !defined DEFAULT_C_CURRENT) || defined __DOXYGEN__
#define DEFAULT_C_CURRENT 500.0f // mA RMS
#endif
#if (defined U_AXIS && !defined DEFAULT_U_CURRENT) || defined __DOXYGEN__
#define DEFAULT_U_CURRENT 500.0f // mA RMS
#endif
#if (defined V_AXIS && !defined DEFAULT_V_CURRENT) || defined __DOXYGEN__
#define DEFAULT_V_CURRENT 500.0f // mA RMS
#endif
#if (defined W_AXIS && !defined DEFAULT_W_CURRENT) || defined __DOXYGEN__
#define DEFAULT_W_CURRENT 500.0f // mA RMS
#endif
///@}
// Sanity checks
// N_TOOLS may have been defined on the compiler command line.
#if !defined(N_TOOLS)
#define N_TOOLS 0
#elif N_TOOLS > 32
#undef N_TOOLS
#define N_TOOLS 32
#endif
#if N_SYS_SPINDLE > N_SPINDLE
#undef N_SYS_SPINDLE
#define N_SYS_SPINDLE N_SPINDLE
#endif
#if N_SYS_SPINDLE < 1
#undef N_SYS_SPINDLE
#define N_SYS_SPINDLE 1
#endif
#if N_SYS_SPINDLE > 8
#undef N_SYS_SPINDLE
#define N_SYS_SPINDLE 8
#endif
#if NGC_EXPRESSIONS_ENABLE && !NGC_PARAMETERS_ENABLE
#undef NGC_PARAMETERS_ENABLE
#define NGC_PARAMETERS_ENABLE On
#endif
#if (REPORT_WCO_REFRESH_BUSY_COUNT < REPORT_WCO_REFRESH_IDLE_COUNT)
#error "WCO busy refresh is less than idle refresh."
#endif
#if (REPORT_OVERRIDE_REFRESH_BUSY_COUNT < REPORT_OVERRIDE_REFRESH_IDLE_COUNT)
#error "Override busy refresh is less than idle refresh."
#endif
#if (REPORT_WCO_REFRESH_IDLE_COUNT < 2)
#error "WCO refresh must be greater than one."
#endif
#if (REPORT_OVERRIDE_REFRESH_IDLE_COUNT < 1)
#error "Override refresh must be greater than zero."
#endif
#if DEFAULT_LASER_MODE && DEFAULT_LATHE_MODE
#error "Cannot enable laser and lathe mode at the same time!"
#endif
#if LATHE_UVW_OPTION && AXIS_REMAP_ABC2UVW
#warning "Cannot enable lathe UVW option when N_AXIS > 6 or ABC words are remapped!"
#undef LATHE_UVW_OPTION
#define LATHE_UVW_OPTION Off
#endif
#if DEFAULT_CONTROL_SIGNALS_INVERT_MASK < 0
#undef DEFAULT_CONTROL_SIGNALS_INVERT_MASK
#define DEFAULT_CONTROL_SIGNALS_INVERT_MASK SIGNALS_BITMASK
#endif
#if DEFAULT_LIMIT_SIGNALS_INVERT_MASK < 0
#undef DEFAULT_LIMIT_SIGNALS_INVERT_MASK
#define DEFAULT_LIMIT_SIGNALS_INVERT_MASK AXES_BITMASK
#endif
#if DEFAULT_LIMIT_SIGNALS_PULLUP_DISABLE_MASK < 0
#undef DEFAULT_LIMIT_SIGNALS_PULLUP_DISABLE_MASK
#define DEFAULT_LIMIT_SIGNALS_PULLUP_DISABLE_MASK AXES_BITMASK
#endif
#if DEFAULT_STEP_SIGNALS_INVERT_MASK < 0
#undef DEFAULT_STEP_SIGNALS_INVERT_MASK
#define DEFAULT_STEP_SIGNALS_INVERT_MASK AXES_BITMASK
#endif
#if DEFAULT_ENABLE_SIGNALS_INVERT_MASK < 0
#undef DEFAULT_ENABLE_SIGNALS_INVERT_MASK
#define DEFAULT_ENABLE_SIGNALS_INVERT_MASK AXES_BITMASK
#endif
#if DEFAULT_SPINDLE_ON_DELAY
#if DEFAULT_SPINDLE_ON_DELAY < 500
#undef DEFAULT_SPINDLE_ON_DELAY
#define DEFAULT_SPINDLE_ON_DELAY 500
#elif DEFAULT_SPINDLE_ON_DELAY > 20000
#undef DEFAULT_SPINDLE_ON_DELAY
#define DEFAULT_SPINDLE_ON_DELAY 20000
#endif
#endif
#if DEFAULT_COOLANT_ON_DELAY
#if DEFAULT_COOLANT_ON_DELAY < 500
#undef DEFAULT_COOLANT_ON_DELAY
#define DEFAULT_COOLANT_ON_DELAY 500
#elif DEFAULT_COOLANT_ON_DELAY > 20000
#undef DEFAULT_COOLANT_ON_DELAY
#define DEFAULT_COOLANT_ON_DELAY 20000
#endif
#endif
#if DEFAULT_PARKING_ENABLE > 0
#if DEFAULT_HOMING_FORCE_SET_ORIGIN > 0
#error "DEFAULT_HOMING_FORCE_SET_ORIGIN is not supported with DEFAULT_PARKING_ENABLE at this time."
#endif
#endif
#if DEFAULT_ENABLE_PARKING_OVERRIDE_CONTROL > 0
#if DEFAULT_PARKING_ENABLE < 1
#error "DEFAULT_ENABLE_PARKING_OVERRIDE_CONTROL must be enabled with DEFAULT_PARKING_ENABLE."
#endif
#endif
/*! \page page1 Documentation of some common concepts used in config.h
\section axismask axismask
Example axismasks, replace XXX with the symbol name you want to define sans `_MASK`:
<br>No axes:
<br>`#define XXX_MASK 0`
<br>All axes:
<br>`#define XXX_MASK AXES_BITMASK`
<br>`#define XXX_MASK -1` // the value may be used from the compiler command line.
<br>Single axis:
<br>`#define XXX_MASK Z_AXIS`
<br>`#define XXX_MASK 4` // same as above but as a bitfield value, the value may be used from the compiler command line.
<br>Specific axes:
<br>`#define XXX_MASK (X_AXIS || Y_AXIS)`
<br>`#define XXX_MASK 3` // same as above but as a bitfield value, the value may be used from the compiler command line.
\section axis axis
Bitfield values are the sum of the individual bit values for each axis, these are:
<br>`X_AXIS = 1`
<br>`Y_AXIS = 2`
<br>`Z_AXIS = 4`
<br>`A_AXIS = 8`
<br>`B_AXIS = 16`
<br>`C_AXIS = 32`
<br>`U_AXIS = 64`
<br>`V_AXIS = 128`
\section signalmask signalmask
Example signalmasks, replace XXX with the symbol name you want to define sans `_MASK`:
<br>No signals:
<br>`#define XXX_MASK 0`
<br>All signals:
<br>`#define XXX_MASK SIGNALS_BITMASK`
<br>`#define XXX_MASK -1` // the value may be used from the compiler command line.
<br>Single axis:
<br>`#define XXX_MASK SIGNALS_ESTOP_BIT`
<br>`#define XXX_MASK 64` // same as above but as a bitfield value, the value may be used from the compiler command line.
<br>Specific axes:
<br>`#define XXX_MASK (SIGNALS_FEEDHOLD_BIT || SIGNALS_CYCLESTART_BIT)`
<br>`#define XXX_MASK 6` // same as above but as a bitfield value, the value may be used from the compiler command line.
\section signal signal
<br>`SIGNALS_RESET_BIT = 1`
<br>`SIGNALS_FEEDHOLD_BIT = 2`
<br>`SIGNALS_CYCLESTART_BIT= 4`
<br>`SIGNALS_SAFETYDOOR_BIT = 8`
<br>`SIGNALS_BLOCKDELETE_BIT = 16`
<br>`SIGNALS_STOPDISABLE_BIT = 32`
<br>`SIGNALS_ESTOP_BIT = 64`
<br>`SIGNALS_PROBE_CONNECTED_BIT = 128`
<br>`SIGNALS_MOTOR_FAULT_BIT = 256`
<br>`SIGNALS_BITMASK = 512`
*/
#endif // _GRBL_CONFIG_H_