This is a comprehensive list of configuration options understood by the Smoothie firmware.
Some advanced options are omitted from this list and are not recommended for general use.
If you want more information about a given module, how it works and how to configure it, (and any advanced options that are not in this list) you can refer to that module’s specific documentation page.
For information on pin options and electrical settings (pull up, pull down, open drain, etc.), please refer to configuring-smoothie.
The system configuration controls core firmware behavior including step generation frequency, USB modes, LED indicators, and communication interfaces. These settings affect fundamental system operation and should be configured before other modules. For complete documentation, see the system settings section.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Maximum step generation frequency in Hertz. This is the theoretical maximum rate at which the firmware can generate step pulses across all motors, based on MCU speed and firmware overhead. The actual achievable speed depends on this frequency, microstepping, and steps per millimeter. V1 default is 100kHz, V2 default is 200kHz (50kHz in debug builds). Higher frequencies enable faster machine movement but require more CPU processing power. | ||
| Duration of the step pulse sent to stepper drivers in microseconds. This controls how long the STEP signal remains high before returning low. Increase this value if stepper motors are missing steps, behaving erratically, or making unusual noises. Most modern stepper drivers work fine with 1µs pulses, but older drivers may require 2-3µs pulses for reliable operation. Some external drivers explicitly specify minimum pulse width requirements in their datasheets. | ||
| Enable DFU (Device Firmware Update) mode for developers. When enabled, the board can enter DFU mode for low-level firmware flashing via USB without needing the SD card bootloader. This is primarily for firmware developers and advanced users who need to flash firmware directly to the microcontroller's internal flash memory. Disabled by default for safety to prevent accidental bricking of the board. Only enable if you understand the risks and need direct flash access. | ||
| Enable Mass Storage Class mode which allows the SD card to be accessed as a USB drive when connected to a computer. When enabled, you can drag and drop files directly to the board's SD card without removing it. NOTE: V1 setting is inverted (msd_disable) and requires special firmware to function, while V2 uses standard msc_enable logic and is enabled by default. Disabling this can improve USB serial reliability on some systems. | ||
| — | LED that flashes when the board is in Mass Storage Class mode and the SD card is being accessed. Provides visual feedback when the SD card is being read or written via USB, warning you not to disconnect the cable during file operations. The LED flashes rapidly during active transfers and stays off when no transfers are occurring. Only used when msc_enable is true. | |
| Optional secondary play LED pin that mirrors the main play LED state. In V1, this setting disables the play LED. In V2, this specifies an auxiliary LED pin. Useful for lighted kill buttons, external status indicators, or remote control panels that need to show when the machine is running (playing G-code from SD card) or idle. The LED turns on when actively executing G-code and turns off when idle or paused. | ||
| — | Global enable pin for all FETs (Field Effect Transistors) controlling heaters, fans, and other high-power outputs. This is typically a NOT-enable signal (active low) that controls power to all output FETs. When this pin is high (disabled), all FET outputs are turned off as a safety measure. Both this pin and fets_power_enable_pin must be in the correct state for FETs to operate. This provides hardware-level safety control over all high-power outputs. | |
| — | Global power enable pin for FETs. This is typically an active high enable signal that controls the power supply to all FET circuits. On the Prime board, this controls a separate power rail that supplies the FET drivers. Both this pin and fets_enable_pin must be in the correct state for FETs to operate. This dual-control approach provides enhanced safety by requiring two independent signals for high-power output operation, preventing accidental activation. | |
| — | Automatically flash firmware from flashme.bin file if present on SD card at boot. When enabled, the system checks for a valid flashme.bin file on startup and automatically performs the firmware update if found. The file is renamed to flashme.old after successful flashing. Disable this if you want manual control over firmware updates or if automatic updates interfere with your workflow. Useful for automated deployment in production environments. | |
| Enables GRBL compatibility mode for CNC applications. When enabled, the firmware responds with GRBL-style status messages and command acknowledgments, making it compatible with GRBL-based software and sender applications like bCNC, Universal G-code Sender, and similar CNC control programs. This mode changes how certain G-codes are interpreted and how responses are formatted to match GRBL's behavior. Essential for using GRBL-specific features in CAM software. | ||
| — | Enables config-override functionality allowing runtime configuration changes to be saved with |
|
| Enable a second USB serial console port for simultaneous connections. When enabled, the board presents two USB serial interfaces (composite device), allowing both a host application (like Pronterface) and a terminal to be connected at the same time. Both ports share the same USB connection but appear as separate COM/tty devices to the host operating system. Useful for debugging while running a print job, or for having both manual control and automated monitoring. | ||
| UART communication speed in bits per second. Must match the baudrate configured on the connected device. Higher baudrates allow faster communication and G-code streaming. Common values are 9600, 19200, 38400, 57600, and 115200. V1 setting applies to UART0 (primary serial port), while V2 allows per-UART configuration. Note that higher baudrates may be less reliable over long cable runs or in electrically noisy environments. | ||
| — | Number of data bits per character transmitted over UART. Standard serial communication uses 8 bits, which can represent 256 different values (0-255) per character. This should match the configuration of the device you're communicating with. Some older systems may use 7-bit communication, but this is rare in modern applications. | |
| — | UART hardware channel number to use. Different boards support different numbers of UART channels. Channel 0 is typically the primary debug UART. The Smoothieboard supports multiple UART channels with different pin assignments. Consult your board's pinout documentation to determine which channel corresponds to which physical pins. | |
| — | Use the UART as a console interface for sending and receiving commands, versus using it for raw data transmission. When true, the UART behaves like the USB serial console, accepting G-code commands and providing response messages. When false, it can be used for raw binary communication or specialized protocols. | |
| — | Enable UART console for serial communication over hardware UART pins. When enabled, the board can communicate via a dedicated UART channel in addition to USB serial, allowing simultaneous connections or communication with other microcontrollers. Useful for interfacing with external devices like touchscreens, Raspberry Pi, or other embedded systems. | |
| — | Parity checking mode for error detection. "none" means no parity bit is added, maximizing data throughput. "odd" and "even" add an extra bit to make the total number of 1-bits odd or even respectively, allowing detection of single-bit errors. Must match the parity setting of the connected device. Parity checking is less common in modern short-distance serial communication but can be useful for noisy environments. | |
| — | Number of stop bits appended after each character. Stop bits provide synchronization time between characters, allowing the receiver to prepare for the next character. Most modern serial communication uses 1 stop bit, though 2 stop bits can be used for slower or noisier communication links. Must match the configuration of the connected device. | |
| — | Sets the PWM frequency for hardware PWM timer 1 in Hertz. V2 uses two hardware PWM timers (PWM1 and PWM2), each with 4 channels. All channels on the same timer share the same frequency. Typical values range from 1000Hz (for heaters) to 20000Hz (for fans and motor control). Lower frequencies reduce electromagnetic interference but may cause audible noise in some devices. Higher frequencies are quieter but may not be compatible with all hardware. | |
| — | Sets the PWM frequency for hardware PWM timer 2 in Hertz. V2 uses two hardware PWM timers (PWM1 and PWM2), each with 4 channels. All channels on the same timer share the same frequency. Typical values range from 1000Hz (for heaters) to 20000Hz (for fans and motor control). Having two independent timers allows using different frequencies for different output types (e.g., 1kHz for heaters on PWM1, 20kHz for fans on PWM2). |
The Motion Control module is the heart of Smoothie’s kinematic system. It handles coordinate transformation, acceleration planning, and real-time motion execution. This module converts G-code commands into precise stepper motor movements based on your machine’s kinematics (cartesian, delta, CoreXY, etc.). For complete documentation, see the Motion Control page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Default rate for |
||
| Default rate for |
||
| Arcs are cut into segments (lines). This is the maximum error for line segments that divide arcs. Controls arc segmentation quality versus performance using adaptive segment sizing. | ||
| Lines can be cut into segments (generally not useful with cartesian coordinates robots), this sets the maximum length of any given segment. Segments longer than this will be cut into several segments. When set to |
||
| Instead of cutting lines into segments based on a distance, cut them based on time: segments will be cut so that Smoothie executes about |
||
| Defines how many blocks (line segments) are stored in RAM for look-ahead acceleration calculation. Do not change this unless you know exactly what you are doing. The reason is that increasing the size of the queue makes it take up more RAM space and can result in Smoothie running out of RAM, depending on your configuration and how much the rest of your modules take up space. Larger values allow better speed optimization through corners but consume more memory. | ||
| Acceleration in millimetres/second/second. Higher values make your machine faster and shakier, lower values make your machine slower and sturdier. This is generally proportional to the weight of the tool you are trying to move. This is the rate at which the machine accelerates and decelerates during moves. Can be overridden using |
||
| Specific acceleration for Z axis movements. When set to a valid number, overrides the default |
||
| Acceleration in millimetres/second/second for the alpha actuator (X axis on cartesian). Do not set on deltas. When set to a valid number, overrides the global default |
||
| Acceleration in millimetres/second/second for the beta actuator (Y axis on cartesian). Do not set on deltas. When set to a valid number, overrides the global default |
||
| Acceleration in millimetres/second/second for the gamma actuator (Z axis on cartesian). Do not set on deltas. When set to a valid number, overrides the global default |
||
| Similar to the old "max_jerk", in millimeters. Defines how much the machine slows down when decelerating proportional to the vector angle of change of direction. See here and here. Lower values mean being more careful, higher values mean being faster and have more jerk. This replaces traditional "jerk" settings with a more mathematically sound approach. | ||
| Junction deviation for Z only moves. |
||
| Sets the minimum planner speed in millimetres/sec. This is the lowest speed the planner will ever set a move to. Not generally useful. Prevents extremely slow movements that could cause stepper stalls or uneven extrusion in 3D printing. When set to |
||
| Duration of step pulses to the stepper motor drivers, in microseconds. Actual step pulse is generally 2µs above this (so |
||
| Base frequency for stepping, higher values give smoother movement. Do not modify unless you know exactly what you are doing. |
Actuators define the physical stepper motors that move your machine’s axes. Each actuator has configuration for pin assignments, steps per millimeter, maximum speeds, microstepping, and optional features like motor reversal and slaving for dual-motor setups. Proper actuator configuration is essential for accurate motion control.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| — | Enables real-time checking of TMC driver error status bits including overtemperature, short circuit, and open load conditions. When enabled, the firmware periodically reads driver status registers and reports any detected errors to the console. | |
| — | Determines whether the system immediately enters HALT state when a TMC driver reports an error condition. When enabled, any driver alarm (overtemperature, short circuit, open load) causes the system to stop all operations immediately. | |
| — | Defines a global enable pin that controls power to all stepper motors simultaneously. This acts as a master enable/disable switch for all motors. On Prime board with TMC drivers, this is typically set to |
|
| X axis: Per-axis acceleration override that allows setting a different acceleration value for this specific actuator, independent of the global default acceleration. When set to |
||
| X axis: Defines the GPIO pin used for controlling the direction signal to the stepper motor driver. This pin determines whether the motor rotates clockwise or counter-clockwise. The direction can be inverted by appending |
||
| X axis: Specifies the stepper driver chip type used for this actuator. This setting determines how the firmware communicates with and controls the motor driver. Valid values include |
||
| X axis: Defines the individual enable signal output pin for this specific stepper motor driver. When set, this pin controls whether the driver is enabled or disabled independently of other motors. Most configurations set this to |
||
| X axis: Defines the maximum speed for this actuator in millimeters per minute. This value is converted internally to mm/sec by dividing by 60. The maximum rate limits how fast the motor can move and prevents the stepper from skipping steps or stalling. Typical value is |
||
| X axis: Sets the microstepping divisor for this stepper driver. Microstepping divides each full motor step into smaller increments for smoother motion and reduced vibration. Common values are |
||
| — | X axis: Reverses the motor direction by inverting the direction signal without modifying the pin definition. This provides a cleaner and more readable way to reverse motor direction compared to using the |
|
| — | X axis: Configures this actuator to be slaved to another axis for dual-motor configurations such as dual Y-axis motors for gantry machines. Only axes A, B, C (delta, epsilon, zeta) can be slaved to X, Y, Z (alpha, beta, gamma). | |
| X axis: Defines the GPIO pin used for sending step pulses to the stepper motor driver for this actuator. Each step pulse advances the motor by one microstep according to the driver's microstepping configuration. Both step and dir pins must be defined for an axis to be active. | ||
| X axis: Specifies the number of motor steps required to move exactly 1mm on the X axis. This is the most critical calibration parameter for accurate positioning. Typical value for GT2 belt with 20-tooth pulley and 1/16 microstepping is |
||
| Y axis: Per-axis acceleration override that allows setting a different acceleration value for this specific actuator, independent of the global default acceleration. When set to |
||
| Y axis: Defines the GPIO pin used for controlling the direction signal to the stepper motor driver. This pin determines whether the motor rotates clockwise or counter-clockwise. The direction can be inverted by appending |
||
| Y axis: Specifies the stepper driver chip type used for this actuator. This setting determines how the firmware communicates with and controls the motor driver. Valid values include |
||
| Y axis: Defines the individual enable signal output pin for this specific stepper motor driver. When set, this pin controls whether the driver is enabled or disabled independently of other motors. Most configurations set this to |
||
| Y axis: Defines the maximum speed for this actuator in millimeters per minute. This value is converted internally to mm/sec by dividing by 60. The maximum rate limits how fast the motor can move and prevents the stepper from skipping steps or stalling. Typical value is |
||
| Y axis: Sets the microstepping divisor for this stepper driver. Microstepping divides each full motor step into smaller increments for smoother motion and reduced vibration. Common values are |
||
| — | Y axis: Reverses the motor direction by inverting the direction signal without modifying the pin definition. This provides a cleaner and more readable way to reverse motor direction compared to using the |
|
| — | Y axis: Configures this actuator to be slaved to another axis for dual-motor configurations such as dual Y-axis motors for gantry machines. Only axes A, B, C (delta, epsilon, zeta) can be slaved to X, Y, Z (alpha, beta, gamma). | |
| Y axis: Defines the GPIO pin used for sending step pulses to the stepper motor driver for this actuator. Each step pulse advances the motor by one microstep according to the driver's microstepping configuration. Both step and dir pins must be defined for an axis to be active. | ||
| Y axis: Specifies the number of motor steps required to move exactly 1mm on the Y axis. This is the most critical calibration parameter for accurate positioning. Typical value for GT2 belt with 20-tooth pulley and 1/16 microstepping is |
||
| Z axis: Per-axis acceleration override that allows setting a different acceleration value for this specific actuator, independent of the global default acceleration. When set to |
||
| Z axis: Defines the GPIO pin used for controlling the direction signal to the stepper motor driver. This pin determines whether the motor rotates clockwise or counter-clockwise. The direction can be inverted by appending |
||
| Z axis: Specifies the stepper driver chip type used for this actuator. This setting determines how the firmware communicates with and controls the motor driver. Valid values include |
||
| Z axis: Defines the individual enable signal output pin for this specific stepper motor driver. When set, this pin controls whether the driver is enabled or disabled independently of other motors. Most configurations set this to |
||
| Z axis: Defines the maximum speed for this actuator in millimeters per minute. For Cartesian machines with leadscrew Z-axis, this is often set much lower than alpha/beta (e.g., |
||
| Z axis: Sets the microstepping divisor for this stepper driver. Microstepping divides each full motor step into smaller increments for smoother motion and reduced vibration. Common values are |
||
| — | Z axis: Reverses the motor direction by inverting the direction signal without modifying the pin definition. This provides a cleaner and more readable way to reverse motor direction compared to using the |
|
| — | Z axis: Configures this actuator to be slaved to another axis for dual-motor configurations such as dual Y-axis motors for gantry machines. Only axes A, B, C (delta, epsilon, zeta) can be slaved to X, Y, Z (alpha, beta, gamma). | |
| Z axis: Defines the GPIO pin used for sending step pulses to the stepper motor driver for this actuator. Each step pulse advances the motor by one microstep according to the driver's microstepping configuration. Both step and dir pins must be defined for an axis to be active. | ||
| Z axis: Specifies the number of motor steps required to move exactly 1mm on the Z axis. For Cartesian machines with leadscrew Z-axis, typical value is |
The motion planner performs lookahead optimization across queued moves to calculate optimal acceleration profiles and cornering speeds. It uses junction deviation instead of traditional jerk control for smoother motion. The planner queue size and junction deviation values significantly impact motion quality and print speed.
| V1 Setting | V2 Setting | Description |
|---|---|---|
|
Controls cornering speed using the junction deviation algorithm, which replaces traditional jerk-based acceleration control. This value represents the maximum allowable deviation from the true corner path when the toolhead changes direction. The algorithm treats each junction as tangent to a circular arc and uses centripetal acceleration approximation to calculate the maximum safe entry speed at path junctions.
Key Points:
|
||
|
Separate junction deviation setting specifically for Z-axis-only moves (X=0, Y=0, Z≠0), allowing different cornering behavior for the Z axis which often has different mechanical characteristics than XY axes (lead screws vs. belts). When set to a valid number, allows independent Z-axis cornering control. When set to Key Points:
|
||
|
Minimum speed the planner will allow for any move. A value of Key Points:
|
||
|
Number of motion blocks (movements) held in the planner queue for lookahead optimization. The planner performs forward and reverse passes across the entire queue to optimize acceleration profiles and cornering speeds. Larger queues enable smoother motion planning through better lookahead but consume more RAM (DTCM RAM on v2). Each block holds complete motion data for one G-code move including step counts, acceleration parameters, and timing information for all actuators.
Key Points:
|
||
|
Milliseconds to wait when the planner queue is full before checking again. This prevents the CPU from spinning in a tight loop when the queue is full and waiting for space. The delay balances responsiveness versus CPU efficiency. Lower values make the system more responsive to new commands when the queue is full, but use more CPU checking. Higher values reduce CPU overhead but may add latency.
Key Points:
|
The conveyor module enables continuous belt or conveyor functionality, allowing infinite Z-axis printing on belt printers or continuous part production systems. This advanced feature coordinates motion between the standard axes and a moving work surface.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Global Conveyor Settings | ||
| — | Enables periodic checking of TMC driver error status bits including overtemperature warnings, overtemperature shutdown, short circuit detection, open load detection, and stall detection. When enabled, the system continuously monitors driver health and can take preventive action before catastrophic failures occur. This is particularly important for TMC2590 and TMC2660 drivers which provide extensive diagnostics. | |
| — | If set to true, any TMC driver error immediately triggers the system to enter ON_HALT state (emergency stop), stopping all motion and disabling motors to prevent damage. When false, errors are logged but the system continues operation. This should typically be enabled for safety, especially during initial setup and testing, to prevent damage from wiring issues or mechanical problems. | |
| — | Global enable pin that controls power or enable signal for all motor drivers simultaneously. On the Prime board with TMC drivers, this pin controls VCC_IO power to all driver chips, allowing a single pin to enable/disable all motors at once. This is useful for emergency stops, power saving when idle, and ensuring all motors are disabled during initialization. Set to 'nc' (not connected) if not using a global enable pin. | |
| Time delay in milliseconds before the conveyor starts processing queued blocks after the first block enters an empty queue. This delay allows the queue to accumulate multiple blocks, enabling better lookahead planning and smoother motion by allowing the planner to optimize acceleration and deceleration across multiple moves. Typical values range from 10-100ms. Higher values improve motion smoothness but increase response latency. | ||
| X Axis Configuration | ||
| X axis: Acceleration and deceleration rate for this specific actuator in mm/s². When set to a positive value, this overrides the global motion control acceleration setting for moves involving the X axis. This allows fine-tuning acceleration per axis to account for differences in mass, mechanical design, and performance requirements. Leave unset or set to 0 to use the global acceleration value. | ||
| — | X axis: MCU pin that sets the rotation direction for the stepper motor driver. The logic level (high or low) determines whether the motor moves forward or backward. Use the '!' prefix to invert the pin logic if your motor moves in the wrong direction (e.g., '! |
|
| — | X axis: Specifies the stepper driver chip type for this actuator. Prime board has onboard TMC2590 or TMC2660 drivers for the first four axes (alpha/beta/gamma/delta). External drivers are configured using driver type keywords like 'DRV8825', 'A4988', 'TMC2130', etc. The driver type determines available features like microstepping, current control, and diagnostic capabilities. | |
| — | X axis: Optional enable pin for stepper motor driver. On Prime board with TMC2590/TMC2660 drivers, this is typically set to 'nc' (not connected) because these drivers are enabled via SPI and the global motors_enable_pin controls VCC_IO power. For external drivers like A4988 or DRV8825, this pin enables/disables the driver. Use '!' prefix to invert logic if needed. | |
| X axis: Maximum speed this actuator can achieve, specified in mm/min. Limits are enforced during motion planning to prevent missed steps, mechanical damage, and excessive vibration. This should be set based on your machine's mechanical capabilities, stepper motor specifications, and power supply limitations. Typical values range from 6000-30000 mm/min depending on machine type and quality. | ||
| — | Microstepping subdivision setting for the X axis's stepper driver. Microstepping divides each full motor step into smaller sub-steps for smoother motion and reduced noise. Common values are 16, 32, 64, 128, or 256. Higher microstepping provides smoother motion but requires more processing power and may reduce maximum speed. For TMC drivers this is configured via SPI; for basic drivers it must match hardware DIP switch settings. | |
| — | X axis: Software-based reversal of motor direction without modifying hardware pin definitions. This is a cleaner and more readable alternative to adding '!' to the dir_pin setting. Set to 'true' to reverse the motor direction. This is particularly useful when you need to maintain consistent pin definitions but need to account for mechanical mounting differences or motor wiring variations. | |
| — | X axis: Configures this actuator to move in sync with another axis for dual-motor configurations. Only A/B/C axes (delta/epsilon/zeta) can be slaved to primary X/Y/Z axes. The slaved motor exactly mirrors the master motor's movements, useful for gantry systems requiring two motors on the same axis. Set to the master axis letter (e.g., 'X' to slave this motor to the X axis primary motor). | |
| — | X axis: MCU pin that outputs step pulses to the stepper motor driver. Each rising edge on this pin triggers the driver to advance the motor by one microstep. The step pulse width is controlled by the global microseconds_per_step_pulse setting. Pin format is 'port.pin' (e.g., '2.0' for port 2, pin 0). | |
| X axis: Number of motor steps required to move one millimeter on the X axis. This is the most critical calibration setting as it defines the relationship between commanded distances and actual physical movement. Calculated as: (motor steps per revolution × microstepping × gear ratio) / (belt pitch × pulley teeth) for belt-driven systems, or (motor steps per revolution × microstepping) / (leadscrew pitch) for screw-driven systems. | ||
| Y Axis Configuration | ||
| Y axis: Acceleration and deceleration rate for this specific actuator in mm/s². When set to a positive value, this overrides the global motion control acceleration setting for moves involving the Y axis. This allows fine-tuning acceleration per axis to account for differences in mass, mechanical design, and performance requirements. Leave unset or set to 0 to use the global acceleration value. | ||
| — | Y axis: MCU pin that sets the rotation direction for the stepper motor driver. The logic level (high or low) determines whether the motor moves forward or backward. Use the '!' prefix to invert the pin logic if your motor moves in the wrong direction (e.g., '! |
|
| — | Y axis: Specifies the stepper driver chip type for this actuator. Prime board has onboard TMC2590 or TMC2660 drivers for the first four axes (alpha/beta/gamma/delta). External drivers are configured using driver type keywords like 'DRV8825', 'A4988', 'TMC2130', etc. The driver type determines available features like microstepping, current control, and diagnostic capabilities. | |
| — | Y axis: Optional enable pin for stepper motor driver. On Prime board with TMC2590/TMC2660 drivers, this is typically set to 'nc' (not connected) because these drivers are enabled via SPI and the global motors_enable_pin controls VCC_IO power. For external drivers like A4988 or DRV8825, this pin enables/disables the driver. Use '!' prefix to invert logic if needed. | |
| Y axis: Maximum speed this actuator can achieve, specified in mm/min. Limits are enforced during motion planning to prevent missed steps, mechanical damage, and excessive vibration. This should be set based on your machine's mechanical capabilities, stepper motor specifications, and power supply limitations. Typical values range from 6000-30000 mm/min depending on machine type and quality. | ||
| — | Microstepping subdivision setting for the Y axis's stepper driver. Microstepping divides each full motor step into smaller sub-steps for smoother motion and reduced noise. Common values are 16, 32, 64, 128, or 256. Higher microstepping provides smoother motion but requires more processing power and may reduce maximum speed. For TMC drivers this is configured via SPI; for basic drivers it must match hardware DIP switch settings. | |
| — | Y axis: Software-based reversal of motor direction without modifying hardware pin definitions. This is a cleaner and more readable alternative to adding '!' to the dir_pin setting. Set to 'true' to reverse the motor direction. This is particularly useful when you need to maintain consistent pin definitions but need to account for mechanical mounting differences or motor wiring variations. | |
| — | Y axis: Configures this actuator to move in sync with another axis for dual-motor configurations. Only A/B/C axes (delta/epsilon/zeta) can be slaved to primary X/Y/Z axes. The slaved motor exactly mirrors the master motor's movements, useful for gantry systems requiring two motors on the same axis. Set to the master axis letter (e.g., 'Y' to slave this motor to the Y axis primary motor). | |
| — | Y axis: MCU pin that outputs step pulses to the stepper motor driver. Each rising edge on this pin triggers the driver to advance the motor by one microstep. The step pulse width is controlled by the global microseconds_per_step_pulse setting. Pin format is 'port.pin' (e.g., '2.2' for port 2, pin 2). | |
| Y axis: Number of motor steps required to move one millimeter on the Y axis. This is the most critical calibration setting as it defines the relationship between commanded distances and actual physical movement. Calculated as: (motor steps per revolution × microstepping × gear ratio) / (belt pitch × pulley teeth) for belt-driven systems, or (motor steps per revolution × microstepping) / (leadscrew pitch) for screw-driven systems. | ||
| Z Axis Configuration | ||
| Z axis: Acceleration and deceleration rate for this specific actuator in mm/s². When set to a positive value, this overrides the global motion control acceleration setting for moves involving the Z axis. This allows fine-tuning acceleration per axis to account for differences in mass, mechanical design, and performance requirements. Leave unset or set to 0 to use the global acceleration value. | ||
| — | Z axis: MCU pin that sets the rotation direction for the stepper motor driver. The logic level (high or low) determines whether the motor moves forward or backward. Use the '!' prefix to invert the pin logic if your motor moves in the wrong direction (e.g., '! |
|
| — | Z axis: Specifies the stepper driver chip type for this actuator. Prime board has onboard TMC2590 or TMC2660 drivers for the first four axes (alpha/beta/gamma/delta). External drivers are configured using driver type keywords like 'DRV8825', 'A4988', 'TMC2130', etc. The driver type determines available features like microstepping, current control, and diagnostic capabilities. | |
| — | Z axis: Optional enable pin for stepper motor driver. On Prime board with TMC2590/TMC2660 drivers, this is typically set to 'nc' (not connected) because these drivers are enabled via SPI and the global motors_enable_pin controls VCC_IO power. For external drivers like A4988 or DRV8825, this pin enables/disables the driver. Use '!' prefix to invert logic if needed. | |
| Z axis: Maximum speed this actuator can achieve, specified in mm/min. Limits are enforced during motion planning to prevent missed steps, mechanical damage, and excessive vibration. This should be set based on your machine's mechanical capabilities, stepper motor specifications, and power supply limitations. Typical values range from 6000-30000 mm/min depending on machine type and quality. | ||
| — | Microstepping subdivision setting for the Z axis's stepper driver. Microstepping divides each full motor step into smaller sub-steps for smoother motion and reduced noise. Common values are 16, 32, 64, 128, or 256. Higher microstepping provides smoother motion but requires more processing power and may reduce maximum speed. For TMC drivers this is configured via SPI; for basic drivers it must match hardware DIP switch settings. | |
| — | Z axis: Software-based reversal of motor direction without modifying hardware pin definitions. This is a cleaner and more readable alternative to adding '!' to the dir_pin setting. Set to 'true' to reverse the motor direction. This is particularly useful when you need to maintain consistent pin definitions but need to account for mechanical mounting differences or motor wiring variations. | |
| — | Z axis: Configures this actuator to move in sync with another axis for dual-motor configurations. Only A/B/C axes (delta/epsilon/zeta) can be slaved to primary X/Y/Z axes. The slaved motor exactly mirrors the master motor's movements, useful for gantry systems requiring two motors on the same axis. Set to the master axis letter (e.g., 'Z' to slave this motor to the Z axis primary motor). | |
| — | Z axis: MCU pin that outputs step pulses to the stepper motor driver. Each rising edge on this pin triggers the driver to advance the motor by one microstep. The step pulse width is controlled by the global microseconds_per_step_pulse setting. Pin format is 'port.pin' (e.g., '2.4' for port 2, pin 4). | |
| Z axis: Number of motor steps required to move one millimeter on the Z axis. This is the most critical calibration setting as it defines the relationship between commanded distances and actual physical movement. Calculated as: (motor steps per revolution × microstepping × gear ratio) / (belt pitch × pulley teeth) for belt-driven systems, or (motor steps per revolution × microstepping) / (leadscrew pitch) for screw-driven systems. | ||
Current control manages the electrical current delivered to stepper motor drivers, either through digital potentiometers (digipot) on older boards or through integrated TMC driver control on newer boards. Proper current settings prevent motor overheating while ensuring adequate torque. For complete documentation, see the Current Control page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| — | Enables digital control of stepper motor driver currents via digipot chip. When enabled, allows software configuration of motor currents through the digipot interface instead of manual potentiometer adjustment. Required for using current settings in configuration file. | |
| — | Selects the digipot (digital potentiometer) chip used for current control. Different boards use different digipot chips, and this setting must match your hardware. Common values include "mcp4451" for Smoothieboard v1 and X5, "ad5206" for early prototypes. Incorrect chip selection will result in non-functional current control. | |
| Maximum current in amperes that can be set for any motor. This is a safety limit that prevents setting currents higher than the hardware can safely handle. Typically set to 2.0A for standard Smoothieboard with onboard drivers, or 2.4A for boards with upgraded drivers. Exceeding driver current ratings can damage both drivers and motors. | ||
| Conversion factor for translating current values (in amperes) to digipot wiper positions (0-255). This is hardware-specific and depends on the sense resistor value and digipot chip characteristics. Default is 113.5 for most Smoothieboards. This value is calculated based on the formula: factor = 255 * R_sense / V_ref, where V_ref is typically 2.5V. Incorrect values result in actual motor current not matching configured values. | ||
| Sets the motor current for the alpha axis (X axis in Cartesian machines) in Amperes. This setting controls how much current is delivered to the stepper motor driver. V1 uses digipot control (MCP4451), while V2 uses SPI-controlled TMC2590/TMC2660 drivers on Prime boards or PWM control on BOARD_MINIALPHA. Typical values range from 0.5A to 2.0A depending on motor specifications. Higher current provides more torque but generates more heat. | ||
| — | PWM pin for controlling the alpha axis motor current on boards that use PWM-based current control (specifically BOARD_MINIALPHA). Most Smoothieboard configurations do not use this setting as they rely on SPI-controlled TMC drivers or external drivers with hardware current adjustment. Only relevant for boards with analog current reference inputs. | |
| Sets the motor current for the beta axis (Y axis in Cartesian machines) in Amperes. This setting controls how much current is delivered to the stepper motor driver. V1 uses digipot control (MCP4451), while V2 uses SPI-controlled TMC2590/TMC2660 drivers on Prime boards or PWM control on BOARD_MINIALPHA. Typical values range from 0.5A to 2.0A depending on motor specifications. | ||
| — | PWM pin for controlling the beta axis motor current on boards that use PWM-based current control (specifically BOARD_MINIALPHA). Most Smoothieboard configurations do not use this setting as they rely on SPI-controlled TMC drivers or external drivers with hardware current adjustment. | |
| Sets the motor current for the gamma axis (Z axis in Cartesian machines) in Amperes. This setting controls how much current is delivered to the stepper motor driver. V1 uses digipot control (MCP4451), while V2 uses SPI-controlled TMC2590/TMC2660 drivers on Prime boards or PWM control on BOARD_MINIALPHA. Z-axis often benefits from higher current values for lifting the toolhead or bed, especially on larger machines. | ||
| — | PWM pin for controlling the gamma axis motor current on boards that use PWM-based current control (specifically BOARD_MINIALPHA). Most Smoothieboard configurations do not use this setting as they rely on SPI-controlled TMC drivers or external drivers with hardware current adjustment. | |
| Sets the motor current for the delta axis (A axis, typically first extruder E0 on 3D printers, or rotary A axis on CNC machines) in Amperes. This setting controls how much current is delivered to the stepper motor driver. V1 uses digipot control (MCP4451), while V2 uses SPI-controlled TMC2590/TMC2660 drivers on Prime boards or PWM control on BOARD_MINIALPHA. Extruder motors often require 0.8A to 1.5A depending on whether they are direct drive or geared. | ||
| — | PWM pin for controlling the delta axis motor current on boards that use PWM-based current control (specifically BOARD_MINIALPHA). Most Smoothieboard configurations do not use this setting as they rely on SPI-controlled TMC drivers or external drivers with hardware current adjustment. | |
| Sets the motor current for the epsilon axis (B axis, typically second extruder E1 on 3D printers, or rotary B axis on CNC machines) in Amperes. V1 default is -1 (disabled) since epsilon is not standard on v1 boards. V2 Prime boards have only first four axes (XYZA) with onboard TMC drivers; epsilon typically uses external driver. Setting to -1 disables the channel and prevents digipot configuration attempts for non-existent hardware. | ||
| — | PWM pin for controlling the epsilon axis motor current on boards that use PWM-based current control (specifically BOARD_MINIALPHA). Most Smoothieboard configurations do not use this setting. | |
| Sets the motor current for the zeta axis (C axis, typically third extruder E2 on 3D printers, or rotary C axis on CNC machines) in Amperes. Default value of -1 disables this channel. Available on both MCP4451 and AD5206 digipot chips. V2 Prime boards have only first four axes (XYZA) with onboard TMC drivers; zeta typically uses external driver. | ||
| — | PWM pin for controlling the zeta axis motor current on boards that use PWM-based current control (specifically BOARD_MINIALPHA). Most Smoothieboard configurations do not use this setting. | |
| — | Current setting for the seventh stepper motor driver current control, channel 6 of the digipot (available only on MCP4451 chip, not AD5206). Default value of -1 disables this channel. Very rarely used except on custom multi-extruder or multi-axis setups. Only available when using MCP4451 digipot chip; attempting to use with AD5206 will cause configuration errors. | |
| — | Current setting for the eighth stepper motor driver current control, channel 7 of the digipot (last channel, available only on MCP4451 chip). Default value of -1 disables this channel. This is the maximum number of axes supported by the MCP4451 digipot. Extremely rare usage, only for specialized machines requiring 8 independent motor drivers. |
Endstops define the physical limit switches that establish your machine’s home position and travel limits. They can be configured as minimum or maximum position stops, with various electrical configurations (normally open, normally closed, pull-up, pull-down). Proper endstop configuration is critical for safe homing and preventing crashes. For complete documentation, see the Endstops page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Always enabled if configured in v2 | Master enable switch for the traditional root-level endstop configuration method. When set to |
|
| Enables CoreXY-specific homing behavior. When enabled, X and Y axes home individually (one at a time) rather than simultaneously. Both X and Y motors are stopped when either endstop is triggered during homing. CRITICAL: Must be enabled for CoreXY and H-Bot kinematics to prevent incorrect homing behavior. | ||
| Enables linear delta robot homing behavior. When enabled, |
||
| Enables rotary delta robot homing behavior. Similar to linear delta, but endstop positions represent actuator angles (in degrees), not cartesian coordinates. CRITICAL: Must be enabled for rotary delta kinematics. | ||
| Enables SCARA robot arm homing behavior. When enabled, disables arm solution during homing (homes in actuator space, not cartesian space). Resets arms to plausible minimum angles (-30, 30, 0) before homing to prevent extreme positions. CRITICAL: Must be enabled for SCARA kinematics. | ||
| Specifies a custom homing order, forcing axes to home one at a time in the specified sequence. Must be 3-6 characters specifying axis letters (XYZABC) in desired order. IMPORTANT: Any axis not specified in the string will NOT be homed. Examples: |
||
| Controls whether the Z axis homes before or after the X and Y axes. When |
||
| Controls whether the machine automatically moves to the origin (0,0 or 0,0,0) after homing completes. Cartesian default: |
||
| Not documented in v2 | If enabled, moves to a predefined park position after homing instead of moving to origin. The park position is set using |
|
| Number of consecutive reads required to confirm a limit switch trigger. This provides debouncing for limit switches (not homing endstops). IMPORTANT: Only used for limit switches (when |
||
| Debounce time in milliseconds for homing endstops. When an endstop is triggered during homing, it must remain triggered for this duration before being accepted as a valid trigger. IMPORTANT: Only used for homing endstops during |
||
| DELTA/SCARA ONLY. Software trim for alpha tower/joint endstop. Compensates for small variations in endstop positions between towers. Positive values move the effective endstop position toward the endstop (shortens tower). Negative values move away from endstop (lengthens tower). Units are millimeters for linear deltas, degrees for rotary deltas. Set via |
||
| DELTA/SCARA ONLY. Software trim for beta tower/joint endstop. Compensates for small variations in endstop positions between towers. Positive values move the effective endstop position toward the endstop (shortens tower). Negative values move away from endstop (lengthens tower). Units are millimeters for linear deltas, degrees for rotary deltas. Set via |
||
| DELTA/SCARA ONLY. Software trim for gamma tower/joint endstop. Compensates for small variations in endstop positions between towers. Positive values move the effective endstop position toward the endstop (shortens tower). Negative values move away from endstop (lengthens tower). Units are millimeters for linear deltas, degrees for rotary deltas. Set via |
||
| Alpha (X axis or alpha tower) minimum limit endstop pin. Set to |
||
| Alpha (X axis or alpha tower) maximum limit endstop pin. Set to |
||
| In which direction to home. If set to |
||
| This gets loaded after homing when |
||
| This gets loaded after homing when |
||
| This determines how far the X axis can travel looking for the endstop before it gives up. CRITICAL: Set this value larger than your actual machine travel distance to prevent false failures. | ||
| If set to true, the machine will stop if one of the alpha (X axis or alpha tower) endstops are hit during normal operation. Machine halts and enters ALARM state. | ||
| Speed, in millimetres/second, at which to home for the alpha actuator (X axis or alpha tower). This is the first phase of the two-stage homing process. | ||
| Speed, in millimetres/second, at which to re-home for the alpha actuator (X axis or alpha tower) once the endstop is hit once. This is the precision phase of the two-stage homing process. Slower speeds provide more accurate and repeatable homing positions. | ||
| Distance to retract the alpha actuator (X axis or alpha tower) once the endstop is first hit, before re-homing at a slower speed. Must be large enough to fully release the endstop switch. | ||
| Beta (Y axis or beta tower) minimum limit endstop pin. Set to |
||
| Beta (Y axis or beta tower) maximum limit endstop pin. Set to |
||
| In which direction to home. If set to |
||
| This gets loaded after homing when |
||
| This gets loaded after homing when |
||
| This determines how far the Y axis can travel looking for the endstop before it gives up. CRITICAL: Set this value larger than your actual machine travel distance to prevent false failures. | ||
| If set to true, the machine will stop if one of the beta (Y axis or beta tower) endstops are hit during normal operation. Machine halts and enters ALARM state. | ||
| Speed, in millimetres/second, at which to home for the beta actuator (Y axis or beta tower). This is the first phase of the two-stage homing process. | ||
| Speed, in millimetres/second, at which to re-home for the beta actuator (Y axis or beta tower) once the endstop is hit once. This is the precision phase of the two-stage homing process. Slower speeds provide more accurate and repeatable homing positions. | ||
| Distance to retract the beta actuator (Y axis or beta tower) once the endstop is first hit, before re-homing at a slower speed. Must be large enough to fully release the endstop switch. | ||
| Gamma (Z axis or gamma tower) minimum limit endstop pin. Set to |
||
| Gamma (Z axis or gamma tower) maximum limit endstop pin. Set to |
||
| In which direction to home. If set to |
||
| This gets loaded after homing when |
||
| This gets loaded after homing when |
||
| This determines how far the Z axis can travel looking for the endstop before it gives up. CRITICAL: Set this value larger than your actual machine travel distance to prevent false failures. | ||
| If set to true, the machine will stop if one of the gamma (Z axis or gamma tower) endstops are hit during normal operation. Machine halts and enters ALARM state. | ||
| Speed, in millimetres/second, at which to home for the gamma actuator (Z axis or gamma tower). This is the first phase of the two-stage homing process. Z-axis typically uses a slower rate (4-10 mm/s) for safety to prevent bed crashes. | ||
| Speed, in millimetres/second, at which to re-home for the gamma actuator (Z axis or gamma tower) once the endstop is hit once. This is the precision phase of the two-stage homing process. Z-axis often uses the slowest rate (1-5 mm/s) for maximum precision. | ||
| Distance to retract the gamma actuator (Z axis or gamma tower) once the endstop is first hit, before re-homing at a slower speed. Z-axis often uses smaller values (1-3 mm) to minimize travel. Must be large enough to fully release the endstop switch. |
The Z Probe module enables bed leveling and probing functionality using various probe types including mechanical switches, proximity sensors, and BLTouch devices. The probe is used to measure bed surface topology for automatic compensation. For complete documentation, see the ZProbe page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Enables the Z-probe module. When set to true, the probe module is loaded and all probing features become available. Set to false to disable probing entirely and free memory if not using a probe. | ||
Defines the GPIO pin connected to the probe signal. Use ! suffix to invert logic (normally-closed vs normally-open) and ^ to enable internal pull-up resistor. Example: 1.28!^ means pin 1.28 with inverted logic and pull-up enabled. |
||
| Speed at which the probe approaches the bed during actual probing moves, in millimeters per second. Slower speeds improve accuracy but increase total probing time. Typical values: 5-10 mm/s. | ||
| Travel speed between probe points and for initial rapid approach moves, in millimeters per second. Does not affect probing accuracy but reduces total time for multi-point bed leveling operations. Typical values: 50-200 mm/s. | ||
| Speed when retracting from a probe point, in millimeters per second. When set to 0 (default), automatically calculates as slow_feedrate × 2 for faster retraction without sacrificing accuracy. | ||
| Probe signal debounce time in milliseconds. The probe signal must remain continuously triggered for this duration before being considered a valid trigger. Set to 1 or 2 if your probe is noisy and gives false readings. Higher values reduce false triggers but may affect accuracy. | ||
| Height above the bed to position the probe before starting each probing move, in millimeters. Once the bed's approximate height is known (after first probe or homing), subsequent probes start from this height. Typical values: 5-10 mm. | ||
| Maximum distance the probe will travel downward before giving up on a probe attempt, in millimeters. Safety feature to prevent crashes if probe fails to trigger. If not defined, uses gamma_max value from endstop configuration. Set to slightly less than your build height. | ||
| Time to wait before starting each probe move, in seconds. Allows mechanical settling after XY positioning and before Z probe begins. Particularly useful for piezo Z-probes to avoid false triggers from vibration. Typical values: 0.1-0.5 seconds. | ||
| Probe in +Z direction instead of -Z direction. Used for specialized machine setups where the probe moves upward to find the surface rather than downward. Rarely needed for standard configurations. | ||
G-code command(s) to run before each probe point. Used for deployable probes like BLTouch/3DTouch that need to extend or deploy before probing. Multiple commands can be separated by semicolons. Example: M280 S10 to deploy BLTouch pin. |
||
G-code command(s) to run after each probe point. Used for deployable probes like BLTouch/3DTouch that need to retract after probing. Multiple commands can be separated by semicolons. Example: M280 S90 to retract BLTouch pin. |
||
| — | Enables manual probe attachment mode for removable probes. When enabled, the machine moves to the mount_position and waits for the user to manually attach the probe before probing operations. V2 removed this feature. | |
| — | Position in machine coordinates where the machine moves and waits for manual probe attachment when m_attach is enabled. Specified as comma-separated X,Y,Z coordinates. Only used when m_attach is true. V2 removed this feature. |
Leveling strategies define how the firmware compensates for bed irregularities or calibrates delta geometry. Different strategies are optimized for different machine types and use cases.
Three-point leveling uses measurements at three corners to calculate a plane that represents the bed surface. This is the simplest leveling strategy, suitable for rigid beds with minimal warping. It’s commonly used on delta printers for initial calibration.
| V1 Setting | V2 Setting | Description |
|---|---|---|
Enables the three-point leveling strategy which probes three user-defined points on the bed to calculate a plane equation. The strategy applies Z compensation during printing to maintain the nozzle parallel to the bed surface, correcting for bed tilt. This is the simplest leveling strategy and works well for flat beds with simple tilt. In v2, set zprobe.leveling to "three point". |
||
First probe point coordinates in machine coordinate system, specified as comma-separated X and Y values. The three points should ideally form an equilateral triangle and be positioned as far apart as possible within the printable area for maximum leveling accuracy. This point becomes the Z=0 reference after the first probe. Format: X,Y (e.g., 100.0,0.0) |
||
Second probe point coordinates in machine coordinate system. Should be positioned to form a triangle with point1 and point3, ideally an equilateral triangle for balanced leveling across the bed surface. The further apart the three points are, the better the leveling accuracy. Format: X,Y (e.g., 200.0,200.0) |
||
Third probe point coordinates in machine coordinate system. Completes the triangle with point1 and point2. The three points define the plane used for bed leveling compensation. Maximum leveling accuracy is achieved when the three points form a large equilateral triangle. Format: X,Y (e.g., 0.0,200.0) |
||
Offset of the probe tip from the nozzle tip in X, Y, and Z dimensions. These offsets are critical for accurate compensation as they tell the firmware where the probe is relative to the actual printing nozzle. Positive X means probe is to the right of nozzle, positive Y means probe is forward of nozzle, positive Z means probe trigger point is above nozzle tip. Format: X,Y,Z (default: 0,0,0) |
||
Automatically homes the X and Y axes before running the G32 bed leveling probe sequence. Homing ensures the machine is at a known position before probing begins, which is essential for accurate and repeatable leveling. Disable this only if you want manual control over homing or are using work coordinate system offsets. Default: true |
||
Maximum acceptable difference in millimeters between the highest and lowest probe points. If the bed is flatter than this tolerance (difference between highest and lowest point is less than this value), no compensation plane is applied as the bed is considered flat enough. Also used to validate the first probe point repeatability. Default: 0.03 mm |
||
Enables saving the calculated bed plane to config-override when M500 is issued. When enabled, the plane parameters (A, B, C, D coefficients) are saved and can be restored later with M561 using those parameters. This allows you to save a known-good bed level and reload it without re-probing. Default: false |
Delta calibration strategy performs comprehensive calibration of linear delta kinematics including tower positions, delta radius, arm lengths, and Z-height. This strategy is specifically designed for delta printers and uses multiple probe points to optimize geometric parameters.
| V1 Setting | V2 Setting | Description |
|---|---|---|
Enables the delta calibration strategy for automatically calibrating linear delta printer geometry. The strategy probes seven points (three at towers, three between towers, one at center) and adjusts endstop trim values and delta radius to minimize height differences. This strategy is specifically for delta kinematics and is automatically loaded for delta printers if no other strategy is specified. In v2, set zprobe.calibration to "delta". |
||
Radius in millimeters at which to probe the bed for delta calibration. This determines the size of the circular pattern formed by the seven probe points: three points at the tower positions on this radius, three points between towers on this radius, and one point at center (radius 0). The radius should be as large as possible while staying within the printable area. Default: 100 mm |
||
Absolute Z machine position in millimeters to move to after homing and before starting the initial bed probe. This height must be high enough that the probe will not hit the bed during the rapid descent phase. This is a critical safety parameter that prevents crashes during the first probe approach. Default: 10 mm |
Delta grid calibration creates a detailed height map of the build surface specifically for delta printers, accounting for both mechanical imperfections and bed surface irregularities. This provides more detailed compensation than three-point leveling.
| V1 Setting | V2 Setting | Description |
|---|---|---|
Enables the delta grid leveling strategy for height mapping across circular delta printer beds. The strategy probes a grid of points in a circular pattern (skipping corners outside the radius) and stores height offsets. During printing, the firmware interpolates between the nearest four grid points to calculate Z compensation for any XY position. In v2, set zprobe.leveling to "delta grid". |
||
Radius of the circular bed area to probe and compensate in millimeters. The grid probes a square region, but points outside this radius are skipped, creating a circular probe pattern. This radius should be at least as large as the maximum printing radius to ensure full bed compensation coverage. Default: 50 mm |
||
Grid size in both X and Y dimensions, determining the total number of probe points. A size of 7 creates a 7×7 grid = 49 potential probe points (points outside the radius are automatically skipped). Larger grids provide more accurate compensation but increase probing time significantly. Must be an odd number. Default: 7 |
||
Offset of the probe tip from the nozzle tip in X, Y, and Z dimensions. These offsets compensate for the physical displacement between where the probe triggers and where the nozzle actually is. Correct offsets are essential for accurate bed compensation. Format: X,Y,Z (default: 0,0,0) |
||
Absolute Z machine position in millimeters to move to after homing before starting the grid probe sequence. This safety parameter prevents the probe from crashing into the bed during the initial descent. Must be high enough to clear the bed surface. Default: 10 mm |
||
Automatically homes all axes before running the G31 grid probing sequence. Homing ensures the machine is at a known position before probing, which is essential for repeatable and accurate grid generation. Disable only if you want manual control over the homing process. Default: true |
||
Automatically saves M375 command to config-override when M500 is issued, causing the grid to be loaded from /sd/delta.grid on boot and compensation to be enabled automatically. This allows persistent bed leveling across power cycles without re-probing. Default: false |
||
Probe tolerance for repeatability checks and validation during grid creation. Used to validate that probe measurements are consistent and repeatable across multiple probes of the same point. Default: 0.03 mm |
||
| N/A (feature removed) | DEPRECATED - This setting is no longer supported and will produce an error if used. For square or rectangular beds, use the rectangular-grid strategy instead of delta-grid. |
Rectangular grid leveling creates a detailed height map using probe points arranged in a regular grid pattern. This strategy provides the most accurate compensation for beds with significant warping or irregularities. It’s commonly used on Cartesian and CoreXY printers.
| V1 Setting | V2 Setting | Description |
|---|---|---|
Enables the rectangular grid leveling strategy for Cartesian and CoreXY machines. The strategy probes a rectangular area with configurable dimensions and grid density, storing height offsets at each point. During printing, interpolation between the nearest four grid points provides smooth Z compensation across the entire bed. In v2, set zprobe.leveling to "cartesian grid". |
||
Default grid size for both X and Y dimensions if grid_x_size and grid_y_size are not explicitly specified. Must be an odd number to ensure a center point exists. This is a fallback value; specifying grid_x_size and grid_y_size directly allows non-square grids. Default: 7 |
||
Number of probe points in the X dimension, allowing rectangular (non-square) grids. If both grid_x_size and grid_y_size are specified, they override the 'size' setting. This enables different resolutions in X and Y directions for beds with different characteristics. Must be an odd number. Default: 7 |
||
Number of probe points in the Y dimension, allowing rectangular (non-square) grids. When specified together with grid_x_size, enables non-square grids tailored to bed dimensions. Must be odd to ensure proper interpolation with a center point. Default: 7 |
||
| Width of the rectangular bed area to probe in the X dimension, measured in millimeters. This defines the total X extent of the probing area. The grid points are evenly distributed across this width. This is a required setting for the rectangular grid strategy to function. | ||
| Length of the rectangular bed area to probe in the Y dimension, measured in millimeters. This defines the total Y extent of the probing area. The grid points are evenly distributed across this length. This is a required setting for the rectangular grid strategy to function. | ||
Offset of the probe tip from the nozzle tip in X, Y, and Z dimensions. These offsets are critical for accurate positioning as they tell the firmware where the probe actually is relative to the print nozzle. The Z offset is typically 0 for this strategy as it uses relative height mapping. Format: X,Y,Z (default: 0,0,0) |
||
Optional absolute Z machine position in millimeters to move to before starting the grid probe. If not set (NAN) or ≤0, probing starts from the current Z position. When set to a valid positive value, provides a safety feature by ensuring the probe starts from a known height above the bed. Default: 10 mm |
||
Automatically home before running G31/G32 probing operations (unless in two-corners mode or R1 is specified in the G-code command). Homing ensures the machine starts from a known position for repeatable and accurate grid generation. Can be disabled for manual homing control. Default: true |
||
Automatically saves M375 command to config-override when M500 is issued, causing the grid to be loaded from /sd/cartesian.grid (or /sd/cartesian_nm.grid for non-square grids) on boot. Enables persistent bed leveling across power cycles without re-probing every time. Default: false |
||
Probe tolerance in millimeters for repeatability validation during grid creation. Used to verify that probe measurements are consistent and repeatable, ensuring the grid data is reliable before it is used for compensation. Default: 0.03 mm |
||
Enables two-corners mode where G31/G32 requires XYAB parameters instead of using pre-configured dimensions. In this mode: XY defines the starting position, A defines width, B defines length from that position. This allows dynamic probe area definition but prevents grid saving. Mode can be toggled at runtime with G32 R1 (enable) or R0 (disable). Useful for PCB milling with varying board sizes. Default: false |
||
Changes the grid display format for M375.1 from raw values to a human-readable table with coordinates. When enabled, the output includes X and Y coordinates for each grid point along with the height value, making it easier to understand and visualize the bed topology. Default: false |
||
Maximum Z height in millimeters where bed compensation is applied. Above this height, no compensation is added to Z moves. Used together with dampening_start to create a fade zone where compensation gradually reduces from 100% to 0%. Prevents compensation from affecting tall prints unnecessarily. |
||
Z height in millimeters where bed compensation begins to fade out. Between dampening_start and height_limit, compensation is linearly scaled from 100% to 0%. This creates a smooth transition zone where compensation gradually reduces, preventing abrupt changes in Z movement. |
||
Enables manual probe attachment mode for removable probes. Before probing begins, the machine moves to the mount_position and waits for the user to manually attach the probe and trigger it to signal readiness. This allows use of removable probes that are not permanently mounted on the tool head. Default: false |
||
Position in machine coordinates where the machine moves and waits for manual probe attachment when m_attach is enabled. Should be a safe, easily accessible position where the operator can comfortably attach the removable probe. Only used if m_attach is set to true. Format: X,Y,Z (default: 0,0,50) |
||
G-code command to execute before each individual probing operation. Use underscore _ as space separator in the command string. Commonly used to deploy servo-actuated probes like BLTouch (e.g., M280_S10 becomes M280 S10). The underscore characters are automatically converted to spaces before execution. |
||
G-code command to execute after each individual probing operation. Use underscore _ as space separator in the command string. Commonly used to retract servo-actuated probes like BLTouch (e.g., M281_S90 becomes M281 S90). The underscore characters are automatically converted to spaces before execution. |
The Extruder module controls filament extrusion for 3D printing, managing the stepper motor that pushes filament through the hotend. It handles acceleration, retraction, and coordinates with temperature control for safe operation. For complete documentation, see the Extruder page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Whether to activate this extruder instance. All configuration is ignored if |
||
| Number of stepper motor steps required to move one millimeter of filament through the extruder. This critical calibration value depends on your stepper motor steps/revolution (typically 200 for 1.8° motors), microstepping setting (common values: 16x = 3200 steps/rev), and your extruder gear ratio/hobbed bolt diameter. Calculate as: |
||
| Filament diameter in millimeters for volumetric extrusion mode. When set to a value greater than |
||
| Maximum acceleration for the extruder stepper motor in |
||
| Maximum allowable speed for the extruder stepper motor in |
||
| Pin for the extruder stepper motor driver's step signal. Each step pulse moves the motor one microstep according to the driver's microstepping configuration. The step pin toggles high/low for each step, creating the pulse train that drives the motor. Typical pins on Smoothieboard: |
||
| Pin for the extruder stepper motor driver's direction signal. Controls whether the motor rotates forward (extrude filament) or backward (retract filament). The direction pin must be set before step pulses are sent. Typical pins on Smoothieboard: |
||
| Pin for the extruder stepper motor driver's enable signal. When active, the motor driver is powered and holds position with full torque. When inactive, the driver is disabled and the motor freewheels (no holding torque). Typical pins on Smoothieboard: |
||
| X-axis offset of this extruder's nozzle from the primary extruder (T0) in millimeters. Used only in multi-extruder setups to compensate for physical nozzle position differences. When switching tools with |
||
| Y-axis offset of this extruder's nozzle from the primary extruder (T0) in millimeters. Used only in multi-extruder setups to compensate for physical nozzle position differences. Positive values mean this extruder's nozzle is toward the back (away from Y=0) compared to T0. See |
||
| Z-axis offset of this extruder's nozzle from the primary extruder (T0) in millimeters. Used only in multi-extruder setups to compensate for different nozzle heights. Positive values mean this extruder's nozzle is higher (further from the bed) than T0. Critical for proper first layer when switching extruders. Calibrate by homing Z, moving to a known position with T0, switching to this tool, and measuring the height difference. Even small differences (0.05mm) can cause first layer problems. Some slicers can compensate for Z-offset in G-code, but it's best to configure it in firmware for consistent behavior across all print jobs. | ||
| Amount of filament to retract during firmware retraction in millimeters. Used by |
||
| Speed at which filament is retracted during firmware retraction in |
||
| Additional length of filament to extrude when recovering (unretract) beyond the retracted amount. Used by |
||
| Speed at which filament is recovered (unretracted) during firmware unretraction in |
||
| Amount to lift the Z-axis during retraction in millimeters (Z-hop or Z-lift feature). When |
||
| Speed for Z-axis movement during Z-lift operations in |
The Temperature Control module manages heating and cooling for components like hotends, heated beds, and heated chambers. It supports multiple temperature sensors (thermistor, thermocouple, PT100), PID control for precise temperature regulation, and comprehensive safety features including thermal runaway protection. For complete documentation, see the Temperature Control page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Whether to activate this temperaturecontrol module. You can create as many temperaturecontrol modules as you want, simply by giving a new module a name, and setting its |
||
| Pin for the thermistor to read. ADC ports TH1 to TH4 are pins |
||
| Pin that controls the heater. This can be used to control a Mosfet on board or an external Solid State Relay. Set to |
||
| Set the type of sensor used to read temperature. Values can be |
||
| Set the thermistor model for this module. Several different common models are pre-defined, see thermistor choice guide. | ||
| Manually set the |
||
| Manually set the |
||
| Reference temperature in degrees Celsius for the thermistor resistance |
||
| Series resistor value in ohms in the thermistor circuit. This is a board property and usually doesn't need to be changed. Standard Smoothieboard uses 0 (no series resistor). | ||
| Pull-up resistor value in ohms in the thermistor circuit. This is a board property and usually doesn't need to be changed. Standard Smoothieboard uses 4700 ohms. | ||
| Steinhart-Hart equation coefficients (c1, c2, c3) for accurate temperature calculation across full temperature range. Specify as three comma-separated floats (no spaces). This enables the most accurate temperature measurement method. | ||
| Three temperature/resistance pairs used to auto-calculate Steinhart-Hart coefficients. Format: T1,R1,T2,R2,T3,R3 where T is temperature in °C and R is resistance in ohms. Best practice: use 25°C, 150°C, and 240°C points from the thermistor datasheet. | ||
| Forces use of beta-based predefined thermistor table instead of Steinhart-Hart coefficients when using a predefined thermistor name. This setting only applies when a predefined thermistor name is specified. | ||
| If the sensor is set to |
||
| If the sensor is set to |
||
| V1 only | Required ADC pin for reading AD8495 thermocouple amplifier output. Only used when sensor type is |
|
| V1 only | Temperature offset in degrees Celsius for AD8495 sensor calibration. Default is 0. Adafruit AD8495 boards typically require an offset of 250. Only used when sensor type is |
|
| V1 only | Required ADC pin for reading PT1000 RTD sensor. Only used when sensor type is |
|
| How many times per second to read temperature from the sensor. This setting determines how often the sensor is read and PID calculation is performed. Higher values improve control stability but increase CPU load. | ||
| V1 only | How many times per second to switch the heating element on or off. Set to a low value (20) if using a Solid State Relay. | |
| Maximum PWM value for the heating element. This can be from |
||
| Set to true to use bang bang control rather than PID. Bang-bang (on/off) control is suitable for slow-response systems like heated beds with mechanical relays or SSRs. | ||
| Set to the temperature in degrees C to use as hysteresis for bang bang control. Creates a deadband of ±hysteresis around the target temperature to prevent rapid heater switching. | ||
| P factor for PID temperature regulation. Determines the controller's response to current temperature error. Higher values increase responsiveness but may cause oscillation. Use |
||
| I factor for PID temperature regulation. Eliminates steady-state temperature error over time by accumulating past errors. Internally scaled by PIDdt (1/readings_per_second). Higher values eliminate offset faster but risk overshoot. Use |
||
| D factor for PID temperature regulation. Reduces overshoot by damping the rate of temperature change. Internally scaled by PIDdt. Higher values reduce overshoot but may slow response. Use |
||
| Maximum value for the I variable in the PID control. This should usually be set to about the same value as |
||
| Enable alternative integral windup protection behavior. When false (default), I term updates continuously. When true, I term only updates when PID output is not saturated (anti-windup). | ||
| V2 only | Use Proportional on Measurement instead of Proportional on Error. PonM mode reduces overshoot when changing setpoint by applying the P term to measurement changes rather than error changes. See this article for detailed explanation. | |
| Calling this M-code will return the current temperature. Standard: |
||
| This is the M-code for simply setting the temperature. For example here, the value is |
||
| This is the M-code for setting the temperature then waiting for that temperature to be reached before doing anything. For example here, the value is |
||
| The letter this module's temperature will be identified as in the |
||
| V2 only | Tool number for M-code addressing and tool selection. Determines which temperature controller is addressed by T commands and whether the controller responds to tool change commands. Auto-assigned: 0 for hotend, 1 for hotend2, 254 for bed, 253 for board. | |
| If set, no temperature above this will be accepted and if the temperature exceeds this value the system will be forced into a HALT state. This protects against thermal runaway and prevents damage to the machine and surroundings. | ||
| Minimum safe temperature threshold. If sensor reads below this value (e.g., thermistor disconnected), system immediately enters HALT state and heater turns off. This is a critical safety feature that detects sensor failures. | ||
| If we take longer than this many seconds to heatup, the system will be forced into a HALT state. Set to 0 to disable it. Default is 900 seconds. Detects heater failure, insufficient power, or disconnected heater. | ||
| If we take longer than this many seconds to cooldown, the system will be forced into a HALT state. Set to 0 to disable it. Default is disabled. Detects stuck heater or sensor failures. | ||
| If set to non-zero, and the target temperature is reached, and temperature diverges from the target temperature by more than this, the system will be forced into a HALT state. Detects heater stuck on, sensor failure, cooling system failure, or part cooling fan blowing on thermistor. | ||
| Acceptable temperature tolerance (±°C) for determining when target temperature has been "reached". Temperature must be within (target ± runaway_error_range) to be considered at target and to satisfy |
||
| V1 only | Temperature preset 1 for quick selection (e.g., 200°C for PLA hotend temperature). | |
| V1 only | Temperature preset 2 for quick selection (e.g., 230°C for ABS hotend temperature). |
The Temperature Switch module automatically controls outputs (fans, coolers, heaters) based on temperature thresholds. This is commonly used for hotend cooling fans that turn on when the hotend reaches a certain temperature, or chamber heaters that maintain ambient temperature. For complete documentation, see the Temperature Switch page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Creates and enables a new TemperatureSwitch module instance. When set to true, this module will monitor temperature from a specified TemperatureControl module and automatically control a Switch module based on configured thresholds and trigger conditions. Multiple temperature switch instances can be configured simultaneously by using different instance names. Each instance requires a unique module name (e.g., hotend, bed, chamber). Module will not function unless enabled and must be accompanied by valid designator and switch configuration. | ||
Specifies which TemperatureControl module to monitor by matching its designator character. The temperature switch reads the current temperature from the temperature control module with this designator and uses it to determine when to trigger the switch. If multiple temperature control modules share the same designator, the highest temperature among them is used for comparison. For backward compatibility, temperatureswitch.hotend defaults to designator T if not specified (deprecated behavior). Empty designator string causes the temperature switch to be considered invalid and non-functional. Case-sensitive matching - T and t are different designators. The temperature reading is polled at intervals defined by heatup_poll and cooldown_poll settings. |
||
| Specifies the name of the Switch module to be controlled by this temperature switch. When temperature conditions are met, this switch will be toggled on or off according to the configured trigger mode and inversion settings. The switch must be configured and enabled in the switch module settings before it can be controlled. The specified switch must exist and be properly configured with output_pin and output_type. Typically controls one of the small MOSFETs on the Smoothieboard. Switch state is only changed when armed (either always armed if arm_mcode=0, or manually armed via M-code). | ||
Legacy parameter name for specifying the switch module to control. This parameter has been replaced by temperatureswitch.switch but is still supported for backward compatibility with older configurations. New configurations should use the switch parameter instead. Only used as fallback if temperatureswitch.{name}.switch is not defined. Maintained for backward compatibility with configurations from older Smoothieware versions. Functionally identical to temperatureswitch.{name}.switch parameter. Not recommended for new configurations - use switch parameter for clarity. |
||
Sets the temperature threshold in degrees Celsius at which the switch state changes. The exact behavior depends on the trigger mode: in "level" mode, the switch turns on above this temperature and off below it; in "rising" mode, the switch triggers when crossing upward through this threshold; in "falling" mode, the switch triggers when crossing downward through this threshold. Temperature comparison uses: current_temp >= threshold_temp for HIGH_TEMP state determination. For typical hotend cooling applications, set this 10-20°C below the hotend operating temperature. Inverted mode reverses the on/off logic but uses the same threshold comparison. Temperature is read from the highest value among all temperature controllers matching the configured designator. The threshold applies regardless of whether the switch is inverted or not - inversion only affects the final switch output state. |
||
| Defines the polling interval in seconds when the system is in the LOW_TEMP state (below threshold temperature). This controls how frequently the temperature is checked while heating up. A shorter interval provides faster response when temperature rises toward the threshold, but increases system overhead. The polling occurs on the second tick event, so actual timing may vary by ±1 second. Active when current temperature < threshold_temp (LOW_TEMP state). Faster polling during heatup ensures timely switch activation. After temperature crosses threshold, automatically switches to cooldown_poll interval. Initial state uses heatup_poll interval and performs first check immediately. Lower values (e.g., 5-10 seconds) provide quicker response but consume more processing time. Higher values (e.g., 20-30 seconds) reduce overhead but may delay switch activation. | ||
| Defines the polling interval in seconds when the system is in the HIGH_TEMP state (at or above threshold temperature). This controls how frequently the temperature is checked while at operating temperature or cooling down. A longer interval reduces system overhead during stable high-temperature operation, while still monitoring for temperature drops that should trigger switch state changes. Active when current temperature >= threshold_temp (HIGH_TEMP state). Slower polling during stable operation reduces system load. After temperature falls below threshold, automatically switches to heatup_poll interval. Suitable for applications where switch should remain on for extended periods. Polling occurs on the second tick event, so actual timing may vary by ±1 second. Higher values reduce processing overhead when temperature is stable above threshold. | ||
| Determines the triggering behavior mode of the temperature switch. This setting controls whether the switch responds to sustained temperature levels, rising temperature edges, or falling temperature edges. The mode fundamentally changes how temperature threshold crossings are interpreted and affects the arming behavior. Level mode: Switch follows temperature state continuously. When armed and temperature >= threshold, switch is on; when temperature < threshold, switch is off. Remains active as long as armed. Rising mode: Switch activates only when transitioning from LOW_TEMP to HIGH_TEMP (edge detection). Requires arming via M-code for each activation cycle. Falling mode: Switch deactivates only when transitioning from HIGH_TEMP to LOW_TEMP (edge detection). Requires arming via M-code for each activation cycle. Edge-triggered modes (rising/falling) automatically disarm after triggering, requiring re-arming for subsequent triggers. Invalid trigger values default to "level" mode. State changes only occur when temperature crosses the threshold boundary, not during stable states. Works in conjunction with inverted setting - inversion is applied after trigger logic determines switch state. | ||
| Reverses the normal switch control logic. When enabled, the switch turns off when temperature exceeds the threshold (instead of turning on), and turns on when temperature falls below the threshold. This is useful for heaters or devices that should activate during cooling rather than heating. The inversion occurs at the final switch control stage, after all trigger logic has been evaluated. Normal mode (false): Temperature >= threshold → switch on; temperature < threshold → switch off. Inverted mode (true): Temperature >= threshold → switch off; temperature < threshold → switch on. Inversion is applied in set_switch() function after trigger type determines the desired state. Works with all trigger modes (level, rising, falling). Temperature threshold comparison logic remains unchanged; only the final switch output is inverted. Useful for controlling heating elements that should turn off when target temperature is reached. Common use case: emergency cooling systems that activate when temperature drops too low. | ||
Defines a custom M-code command that must be executed to arm the temperature switch before it can trigger. This provides manual control over when the temperature switch is active, preventing unwanted switch activation. Setting to 0 disables the arming requirement, making the switch always armed and operating automatically based on temperature. When set to 0: Switch is always armed and operates automatically. When set to M-code: Switch starts disarmed and requires manual arming via G-code command. Arming command: M<code> S1 arms the switch (e.g., M1100 S1). Disarming command: M<code> S0 disarms the switch (e.g., M1100 S0). Level trigger mode: Switch remains armed and continues operating while armed. Edge trigger modes (rising/falling): Switch automatically disarms after triggering once, requiring re-arming for subsequent triggers. Provides safety mechanism for critical temperature-dependent operations. Disarmed switches do not control their associated switch modules. Module only registers for G-code events if arm_mcode != 0. |
The Laser module provides PWM control for laser cutters and engravers, with power modulation based on feed rate and optional fire button support. It includes safety features and supports both continuous and pulsed operation modes. For complete documentation, see the Laser page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Whether to activate the laser module at all. All configuration is ignored if false. The laser module is used for laser cutting using a laser diode or CO2 laser tube. When set to |
||
| This pin will control the laser. Pulse width will be modulated to vary power output (PWM). The preferred and more descriptive parameter for specifying the PWM control pin for the laser. PWM duty cycle directly controls laser power output percentage. CRITICAL: Only hardware PWM pins are supported: |
||
| DEPRECATED: Legacy parameter that specifies the pin controlling the laser through PWM. This setting has been superseded by |
||
| This pin turns on when the laser turns on, and off when the laser turns off. Provides a simple on/off signal synchronized with laser firing, independent of the PWM power level. This is a digital on/off signal, NOT PWM - it is either high or low. Commonly used to enable/disable air assist compressors, fume extraction fans, laser power supply enable pins for additional safety, or safety interlocks that monitor when laser is active. | ||
| This is the maximum duty cycle that will be applied to the laser. Value is from |
||
| This duty cycle will be used for travel moves to keep the laser active without actually burning. Useful for some diode setups. Value is from |
||
| DEPRECATED: This parameter has been deprecated and replaced by |
||
| Maximum S-value accepted from G-code commands. Determines the S-value range: set to |
||
| Whether the laser power should be proportional to the current speed, so as speed of movement ramps up (and down), laser power is proportionally adjusted, so that the amount of laser power/quantity of photons for a given distance/area is always constant, even if speed has to increase/decrease progressively. This is true by default. Enables automatic power scaling based on actual instantaneous movement speed. When enabled (default), power calculation: |
||
| PWM frequency expressed as the period in microseconds. Sets the PWM period (and thus frequency) for laser control. The PWM frequency equals 1,000,000 divided by this period value. This frequency affects how smoothly the laser power can be controlled and must be appropriate for your specific laser driver electronics. The system uses this period to limit the maximum rate of power adjustments. Default is |
||
| Default S value for laser operations when no S parameter is specified in G-code. Represents laser power as a fraction from |
The Spindle module controls spindle motors for CNC milling and routing operations. It supports both PWM speed control and relay-based on/off control, with configurable speed ranges and direction control. For complete documentation, see the Spindle page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Enables the spindle control module. When true, the spindle module is loaded and available for G-code control (M3/M5 commands). V1 provides a dedicated spindle module with PID control, tachometer feedback, and Modbus VFD support. V2 uses a simple switch module instance for basic on/off or PWM control (no PID or feedback). | ||
| Spindle control mode. V1 supports three types: pwm (closed-loop PID control with tachometer feedback for precise RPM), analog (open-loop PWM output for VFDs/ESCs with 0-10V or PWM inputs), or modbus (RS485 communication for Modbus VFDs like Huanyang). V2 only supports: digital (on/off relay) or pwm (variable speed, open-loop only). | ||
| PWM output pin for spindle control. Must be hardware PWM-capable ( |
||
| PWM frequency for spindle control. V1 uses period in microseconds (default 1000µs = 1kHz, frequency = 1,000,000 / period). V2 uses frequency in Hz via pwm1.frequency or pwm2.frequency settings. Most VFDs and spindle controllers work with 1-50 kHz. Check your VFD documentation for required frequency. | ||
| Maximum PWM duty cycle (0.0-1.0). Acts as both a safety limit and calibration factor. Some spindle controllers (like MC2100) require less than 100% duty cycle for maximum speed (MC2100 uses 0.85). Setting below 1.0 limits maximum spindle speed even when G-code requests full power, protecting the motor from overcurrent. | ||
| Controls spindle behavior during emergency stop. When false (recommended), spindle stops immediately on any halt condition (emergency stop, limit switch trigger) for safety. When true, spindle continues running during halts. This is a safety-critical setting - use with extreme caution. | ||
| — | Tachometer input pin for closed-loop RPM control (V1 PWM mode only). Must be an interrupt-capable pin on Port 0 or Port 2 (pin number must be 2.x or 0.x). Receives pulses from hall-effect sensor, optical encoder, or other tachometer. Used with PID controller for precise RPM maintenance. Not available in V2. | |
| — | Number of tachometer pulses per spindle revolution (V1 PWM mode only). Used to calculate actual RPM from tachometer feedback. Hall-effect sensors typically provide 1 pulse per revolution, optical encoders may provide many pulses per revolution. Essential for accurate RPM calculation in closed-loop mode. Not available in V2. | |
| — | Default RPM when M3 is issued without S parameter (V1 PWM mode only). If G-code contains "M3" without specifying speed, this RPM will be used. Default 5000 RPM. Only applies to PWM spindle type with feedback control. Not available in V2. | |
| — | PID proportional term for closed-loop spindle control (V1 PWM mode only). Controls how aggressively the controller responds to RPM error. Higher values provide faster response but may cause oscillation. Lower values provide smoother operation but slower response. Requires tuning for specific spindle. Unit is 1/RPM. Default 0.0001. Not available in V2. | |
| — | PID integral term for closed-loop spindle control (V1 PWM mode only). Eliminates steady-state error by accumulating error over time. Higher values eliminate offset faster but may cause overshoot. Set too high and system becomes unstable. Requires tuning for specific spindle. Unit is 1/(RPM × seconds). Default 0.0001. Not available in V2. | |
| — | PID derivative term for closed-loop spindle control (V1 PWM mode only). Responds to rate of change of error, providing damping to reduce overshoot and oscillation. Higher values provide more damping but may slow response and amplify noise. Often set lower than P and I terms. Unit is 1/(RPM/seconds). Default 0.0001. Not available in V2. | |
| — | Low-pass filter time constant in seconds for tachometer smoothing (V1 PWM mode only). Filters out noise and transient fluctuations in RPM measurement. Higher values provide more smoothing but slower response to actual speed changes. Lower values provide faster response but may amplify tachometer noise. Default 0.1 seconds. Not available in V2. | |
| — | Minimum RPM when spindle is on (V1 analog mode only). When spindle is enabled, speed cannot go below this value. Prevents stalling and ensures minimum cutting speed. If G-code requests speed below min_rpm (but greater than 0), this minimum will be used instead. |
|
| — | Maximum RPM at 100% PWM (V1 analog mode only). Calibrates PWM output to spindle's maximum speed. For example, if your VFD is configured for 24000 RPM maximum and you request 12000 RPM (S12000), the system will output 50% PWM. Essential for accurate speed control with VFDs and ESCs. Default 5000 RPM. Not available in V2. | |
| — | Optional digital output pin to enable VFD/power supply (V1 analog mode only). Typically connected to VFD's RUN/ENABLE input via optocoupler. Goes high when spindle is commanded on ( |
|
| — | VFD manufacturer/model for Modbus control (V1 modbus mode only). Currently only supports "huanyang" VFDs. Determines the Modbus protocol and register mapping used for RS485 communication. Huanyang VFDs must be configured for RS485 control before use: PD001=2 (run command source: communication port), PD002=2 (frequency source: communication port), PD163=1 (address: 1), PD164=1 (baud: 9600), PD165=3 (data method: 8N1 RTU). Not available in V2. | |
| — | RS485 receive pin for Modbus communication (V1 modbus mode only). Used with TX and DIR pins to communicate with Modbus VFDs. Requires RS485 transceiver chip (MAX485 or similar) between Smoothieboard and VFD. This pin receives data from the VFD. Not available in V2. | |
| — | RS485 transmit pin for Modbus communication (V1 modbus mode only). Used with RX and DIR pins to communicate with Modbus VFDs. Requires RS485 transceiver chip. This pin sends data to the VFD. Not available in V2. | |
| — | RS485 direction control pin (V1 modbus mode only). RS485 is half-duplex, so a single pair of wires is used for both sending and receiving. This pin switches the RS485 transceiver between transmit and receive modes. Typically connected to DE/RE pins on MAX485 chip. Not available in V2. | |
| — | G-code command to turn spindle on (V2 only, via switch module). Typically M3 for spindle clockwise. Can be configured to any G-code or M-code. Not needed in V1 (M3 is hardcoded). | |
| — | G-code command to turn spindle off (V2 only, via switch module). Typically M5 for spindle stop. Can be configured to any G-code or M-code. Not needed in V1 (M5 is hardcoded). |
The Switch module provides general-purpose digital I/O control, allowing you to define custom switches and buttons that trigger actions, control outputs, or execute G-code sequences. Switches can be momentary or toggle, with configurable input and output pins. For complete documentation, see the Switch page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Creates and enables a new Switch module instance. When set to true, the switch module is active and will respond to configured inputs and control outputs. Set to false to disable the switch instance without removing its configuration. Each switch instance requires a unique name. | ||
| Specifies a GPIO pin that controls the switch state through hardware input. When this pin becomes high the switch changes to the ON state, and when it becomes low the switch changes to the OFF state (behavior depends on input_pin_behavior). Input pins are polled at 100ms intervals. Pin can be configured with pullup (^) or inverted (!) modifiers. | ||
| Defines how the input pin controls the switch state. If set to momentary (default), the switch state tracks the pin state directly - when the input pin becomes high the switch changes to ON, and when it becomes low the switch changes to OFF. If set to toggle, pin state transitions (low-to-high) flip the switch state between ON and OFF. | ||
| Specifies a G-code or M-code command that sets the switch to the ON state. When this command is received, the switch turns ON. Supports optional subcode matching via switch.{name}.subcode. The S parameter can control PWM value for PWM-type outputs. Commands are queued and executed synchronously with motion. | ||
| Specifies a G-code or M-code command that sets the switch to the OFF state. When this command is received, the switch turns OFF. Supports optional subcode matching via switch.{name}.subcode. Commands are queued and executed synchronously with motion. | ||
| Specifies a subcode for input command matching. Allows multiple switch instances to respond to different subcodes of the same base command (e.g., M106.1 vs M106.2). Subcode 0 is the default and matches commands without explicit subcodes. Only evaluated when input_on_command and/or input_off_command are set. | ||
| Specifies the GPIO pin that is controlled by the switch. This pin will be set low when the switch is OFF, and high when the switch is ON. The pin's behavior depends on output_type (digital on/off, PWM, hardware PWM, or software PWM). For hardware PWM (hwpwm), pin must be PWM-capable. | ||
| Sets the type of output for the switch output pin. If set to digital the pin can only be low or high. If set to pwm (the default, using Sigma-Delta PWM) the pin can be set to any PWM value between 0 and 255 using the S parameter. If set to hwpwm will use Real PWM (requires PWM-capable pin), with S value as duty cycle in percent. Can also be set to swpwm for software-emulated PWM that won't interfere with hardware PWM peripherals. Can be set to none to disable the output entirely. | ||
| Specifies a G-code command to execute when the switch transitions to the ON state. The command is sent to the G-code parser and executed. Underscores in the command are replaced with spaces to allow multi-word commands (e.g., M117_Hello_World becomes M117 Hello World). Commands execute in the main loop when switch state changes to ON. | ||
| Specifies a G-code command to execute when the switch transitions to the OFF state. The command is sent to the G-code parser and executed. Underscores in the command are replaced with spaces before execution. Commands execute in the main loop when switch state changes to OFF. Special handling: $J STOP triggers emergency stop request for continuous jog (only works with input pins). | ||
| Sets the initial state of the switch when the system boots. If set to false (default) the module is initialized OFF, if set to true the module is initialized ON. For PWM outputs with startup_state true, uses default_on_value instead of startup_value. For input-pin switches (momentary mode), initial state is read from pin and overrides this setting. | ||
| Sets the PWM value when the switch is in the OFF state or at startup if startup_state is false. For SIGMADELTA PWM, this is a 0-255 value. For hardware/software PWM (hwpwm/swpwm), this is a 0-100 percentage. This value is also used as the PWM value on HALT for HWPWM and SWPWM. The startup_state must be false for this to take effect. | ||
| Sets the PWM duty cycle percentage when the switch is turned ON without an explicit S parameter. Only applies to hardware PWM (hwpwm) and software PWM (swpwm) output types. Value range is 0-100 (percentage). This is the value used when switch is turned on via command or when startup_state is true. Can be overridden by S parameter in commands (e.g., M106 S75 sets to 75%). | ||
| Sets the maximum PWM value for sigma-delta PWM output. Allows limiting the maximum output power/speed when using PWM mode. The S parameter in commands is scaled from 0-255 to 0-max_pwm. Only applies to SIGMADELTA (pwm) output type, not for hwpwm or swpwm. Default 255 means no limiting (full range). | ||
| Sets the PWM period in milliseconds for hardware PWM and software PWM outputs. This determines the PWM frequency. For servo control, typical value is 20ms (50Hz). Only applies to HWPWM and SWPWM output types. Lower period means higher frequency and faster PWM switching. For servos, standard is 20ms (50Hz), some servos support 10ms (100Hz). For LEDs, higher frequencies prevent visible flicker. | ||
| Defines the pin state (0 or 1) to set during a crash, watchdog reset, or debug halt condition. This is a safety feature to ensure outputs are in a safe state when the system fails. Different from halt_set_to which handles |
||
| Defines the switch state (true or false) to set during a HALT condition (typically triggered by |
||
| When set to true, prevents the switch from changing state during HALT conditions ( |
The Joystick module enables manual machine control using analog joystick inputs, allowing operators to jog axes smoothly without G-code commands. This is useful for manual positioning, tool changes, and setup operations.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Not available in v2 | If true, create and enable a new Joystick module with the specified name. The joystick module allows you to read analog input from joystick devices and use them to control machine movement via the Jogger module or other control systems. Each joystick instance requires a unique name. | |
| Not available in v2 | Specifies which SmoothieBoard pin should be used to read the analog joystick value. The pin must be one of the analog-capable pins (typically |
|
| Not available in v2 | Sets how many times per second to update the joystick reading. Higher values provide more responsive control but use more CPU time. Typical values are 10-100 Hz. Default is 10 Hz if not specified. | |
| Not available in v2 | Sets what voltage will map to zero output. This is typically the center position of the joystick, usually around 1.65V (half of 3.3V). The joystick module subtracts this offset from the measured voltage before scaling. Can be automatically determined using the auto_zero feature. | |
| Not available in v2 | Sets what voltage will map to +1 or -1 output. If endpoint is greater than zero_offset, it specifies what voltage maps to +1. If endpoint is less than zero_offset, it specifies what voltage maps to -1. This defines the full range of motion for the joystick. Typical value is 3.3V (or close to it, like 3.2V) for maximum range. | |
| Not available in v2 | If true, enables the auto-zeroing feature, which automatically determines the zero_offset value at startup by averaging readings during the startup_time period. This is useful for joysticks where the center position voltage may vary slightly between devices. Do not move the joystick during startup when this is enabled. | |
| Not available in v2 | Sets how long (in milliseconds) after SmoothieBoard resets to obtain readings to average for the auto-zero offset calculation. Must be at least 1000 / refresh_rate to ensure sufficient samples, but should not be too long to avoid the joystick being moved during measurement. Typical value is 1000ms (1 second). | |
| Not available in v2 | Sets the default value of the joystick output during the startup_time period when auto-zeroing is active. This value should be between -1 and 1, and is typically 0 to indicate no movement during calibration. This prevents unwanted motion while the auto-zero feature is determining the center position. |
The Jogger module provides simple manual jog controls using buttons or encoders, with configurable step sizes and speeds. Unlike the joystick module which uses analog inputs, jogger uses discrete digital inputs for precise incremental movements.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| Not available in v2 | If true, enable the Jogger module. The Jogger module allows you to control machine movement using joystick input, providing smooth continuous motion in the direction of the joystick rather than discrete steps. | |
| Not available in v2 | Specifies the module name of the Joystick module that the alpha (first) jog axis will read from. This connects a joystick instance to the first axis of jogging control. The value should be the name of a configured joystick module (e.g., "horizontal", "vertical"). | |
| Not available in v2 | Specifies the module name of the Joystick module that the beta (second) jog axis will read from. This connects a joystick instance to the second axis of jogging control. The value should be the name of a configured joystick module (e.g., "horizontal", "vertical"). | |
| Not available in v2 | Sets a comma-separated list of machine axes which will be controlled by the jogger. Axis letters are given in order of jog axis alpha, beta, etc. The first item in the list will be used on startup. Issuing the toggle axes command (M778 by default) will cycle between the items in the list. Valid machine letters are X, Y, Z, A, B, C. Use "-" for no axis controlled. Do not use spaces in the list. Example: "XY,XZ,-Z" allows toggling between XY control, XZ control, and no alpha axis with Z beta axis. | |
| Not available in v2 | Sets which M-code number the "set axes" command will use. For example, if set to 777, use M777 to set the jog axes. This command allows you to directly specify which axes to control with the joystick (e.g., M777 XY sets jogging to control X and Y axes). | |
| Not available in v2 | Sets which M-code number the "toggle axes" command will use. For example, if set to 778, use M778 to toggle the jog axes. This command cycles through the axis combinations specified in the jog_axes setting, allowing you to switch between different control modes (e.g., XY mode, XZ mode, etc.). | |
| Not available in v2 | Sets the maximum speed the machine will jog in mm/min. This is the speed reached when the joystick is pushed to its maximum extent. If not specified, the Jogger uses the general configuration "default_seek_rate" ( |
|
| Not available in v2 | Sets the threshold the joystick must cross before movement occurs. This is a value between 0 and 1 representing the fraction of joystick movement required to start jogging. For example, 0.05 means the joystick must be moved 5% from center before motion begins. This prevents unwanted motion from small joystick movements or electrical noise. Increase this value if you experience drift or unwanted motion. | |
| Not available in v2 | Sets the non-linearity of the joystick to speed conversion function. Values greater than 1.0 create a curved response where small joystick movements result in proportionally slower speeds, giving finer control near center. A value of 1.0 is linear (50% joystick movement = 50% max speed). Typical values: 1.0 (linear), 1.5 (slight curve for better control), 2.0 (more pronounced curve), 3.0 (very sensitive near center). Higher values provide more precise control for small adjustments but require larger movements to reach full speed. | |
| Not available in v2 | Specifies how many times per second to read the joysticks and update the jog motion. Higher values provide smoother, more responsive control but use more CPU time. Typical value is 100 Hz. Must be coordinated with the joystick module's refresh_rate setting. | |
| Not available in v2 | Sets the number of tiny movement segments per second while jogging. The jogger breaks continuous motion into small discrete segments for smooth execution. Higher values create smoother motion but require more processing. Typical value is 10 Hz. This is different from refresh_rate - refresh_rate determines how often joystick position is read, while segment_frequency determines how often new movement commands are generated. |
The Panel module handles communication with LCD displays and control panels, supporting various display types including RepRap Discount Full Graphic Smart Controller, Viki2, and other common 3D printer displays. Panels provide local control without requiring a host computer. For complete documentation, see the Panel page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
viki2, mini_viki2, and st7565_glcd. Adjust this value if the display appears too faint or too dark.
|
||
true, reverse the screen orientation. Use this if your panel is mounted upside down.
|
||
1. This is a number of lines to offset the menu lines by on screen. Adjust if menu items don't align properly on your display.
|
||
nc if you use no encoder. The ^ modifier defines menu move direction. Use ! for pull-up/pull-down and ^ to invert.
|
||
nc if you use no encoder. The ^ modifier defines menu move direction. Use ! for pull-up/pull-down and ^ to invert.
|
||
|
|
||
! modifier inverts the signal polarity (use for active-low buttons).
|
||
|
|
||
! modifier inverts the signal polarity.
|
||
! modifier inverts the signal polarity.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
universal_adapter, this pin can be connected to the adapter to ask if it is busy or not. The universal adapter uses this for daisy-chaining multiple devices.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
true if your panel has an external SD card slot, or if you want to connect a second SD card slot to one of your Smoothieboard's SPI ports. Enables additional SD card interface beyond the onboard SD slot.
|
||
|
|
||
|
|
||
nc if you don't use an SD card detect signal. This pin detects when an SD card is inserted or removed.
|
||
|
|
||
true, create a new custom menu entry for the panel with the name {name}. You can create any number of custom entries as long as they have different names. Replace {name} with your menu identifier.
|
||
_) are converted to spaces when displayed. This is what the user sees when browsing the menu.
|
||
_ character gets converted to space in the menu and commands (and must be used instead of the space character), and the | character is used to separate multiple commands that should be executed in sequence.
|
The Network module enables Ethernet connectivity on supported boards, allowing remote control, file upload, and web interface access. Network functionality requires appropriate hardware support. For complete documentation, see the Network page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
true to use any network features including webserver, telnet, Plan9, or SFTP services.
|
||
true, enable the web server service on port 80, which provides a control and upload web interface. The web interface allows you to control the machine, upload files, and monitor status from any web browser on your network.
|
||
true, enable the telnet service on port 23, which behaves much like a Serial interface. Telnet provides command-line access to Smoothie over the network, useful for streaming G-code or running console commands remotely.
|
||
true, enable the Plan9 (9P/Styx) network filesystem on port 564, which allows mounting the Smoothieboard SD card as a network filesystem on Linux systems. This provides direct filesystem access similar to NFS or SMB.
|
||
auto to use DHCP for automatic configuration, or specify a static IP address (e.g., 192.168.1.100). When using a static IP, you must also configure network.ip_mask and network.ip_gateway.
|
||
network.ip_address is set to a static IP (not auto). When using DHCP, this setting is ignored and the subnet mask is provided automatically by the DHCP server.
|
||
network.ip_address is set to a static IP (not auto). With DHCP, the gateway is provided automatically by the DHCP server.
|
||
|
|
||
http://smoothie-cnc/) instead of IP address. Only used when network.ip_address is set to auto (DHCP mode). Has no effect with static IP configuration.
|
The Player module manages G-code file execution from the SD card, including file selection, pause/resume, progress tracking, and status reporting. It coordinates with all other modules during print execution. For complete documentation, see the Player page.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| If set to true, automatically plays the on_boot_gcode file when the board boots up. This allows for automated startup routines like homing or initial positioning. | ||
| Path to the G-code file to play when the board boots. Default is /sd/on_boot.gcode. Useful for automating startup tasks like homing the printer or setting initial temperatures. | ||
| G-code to execute automatically right after a suspend command is received. Use underscores (_) instead of spaces in G-code commands. Commonly used to retract filament and move the toolhead away from the print. Example: G91_G0_E-5_G0_Z10_G90_G0_X-50_Y-50 (retracts 5mm, raises Z by 10mm, moves to safe position). | ||
| G-code to execute automatically after a resume command but before resuming the print. Use underscores (_) instead of spaces. Generally not needed since resume restores the previous state automatically. Example: G91_G1_E1_G90 (extrudes 1mm to prime the nozzle). | ||
| Controls heater behavior during suspend. When false (default), heaters turn OFF on suspend and back ON on resume. When true, heaters remain ON during suspend. Set to true for short pauses to avoid waiting for heaters to reheat. |
Additional configuration options for specialized features and modules.
| V1 Setting | V2 Setting | Description |
|---|---|---|
| — | Disables the 4 flashing status LEDs on the board. When set to true, all status indication LEDs are turned off, which can be useful for reducing visual distractions in dark environments, reducing power consumption slightly, or for applications where LED light might interfere with sensors or processes. The LEDs normally indicate board activity, SD card access, and other status information. This setting does not affect the play LED or other functional indicators. | |
| — | Controls when "ok" responses are sent. When true (default and recommended), sends "ok" once per line of input. When false, reverts to the old (incorrect) behavior of sending "ok" after each command is executed, which can cause timing issues with some host software. This setting should remain true for proper G-code streaming and command synchronization. Setting it to false is only useful for debugging legacy host software compatibility issues. | |
| Enables the "kill" button functionality for emergency halt operations. When enabled, a physical button can be used to immediately halt all machine operations, turn off heaters and high-power outputs, and enter a safe state. This is a critical safety feature for CNC machines, 3D printers, and laser cutters. The kill button provides hardware-level emergency stop capability independent of software state. | ||
| Specifies the GPIO pin to use for the kill button. The button should be wired between this pin and ground. The pin is configured as input with internal pull-up resistor, so pressing the button (connecting pin to ground) triggers the emergency stop. Use a normally-closed (NC) button for maximum safety so that a wire break also triggers the kill state. The pin specification includes optional modifiers like "!" for inversion. | ||
| — | When enabled, the kill button acts as a toggle switch instead of a momentary trigger. First press activates kill state (emergency stop), second press deactivates it. When disabled (default and recommended), the kill button is level-triggered: machine is killed while button is held, and resumes normal operation when released. Toggle mode can be dangerous as it requires deliberate action to recover from kill state. | |
| — | Allows the kill button to be used to recover from kill state without requiring power cycle or |