metadata:
  version: v2
  total_settings: 335
  total_modules: 14
  last_updated: '2025-11-07'
  firmware_repo: Smoothieware/Smoothieware2
  source_file: src/docs/smoothieware-v2-config.md
modules:
- name: General/System
  description: General and System
  setting_count: 21
  settings:
  - name: grbl_mode
    type: bool
    default: false
    module: root
    context: Global setting affecting G-code interpretation
    defined_in: Firmware/src/main.cpp:267
    section: '[general]'
    description: 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.
    corresponding_v1: none (new feature in v2)
    corresponding_v2: general.grbl_mode
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - motion control.compliant_seek_rate
    - motion control.nist_G30
    related_pages:
    - grbl-mode
    - cnc-mill-guide
    - from-grbl
  - name: config-override
    type: bool
    default: false
    module: root
    context: Global setting controlling runtime configuration save/load
    defined_in: Firmware/src/main.cpp:270
    section: '[general]'
    description: Enables config-override functionality allowing runtime configuration changes to be saved with M500 and loaded
      automatically on boot. When enabled, settings can be overridden and persisted without modifying the main config.ini
      file. The override file is stored as config-override.ini on the SD card. Unlike v1 where the override file was always
      active if present, v2 requires explicit enabling of this feature.
    corresponding_v1: none (config-override was always active in v1 if file present)
    corresponding_v2: general.config-override
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - configuring-smoothie
    - override-warning
    - temperaturecontrol-pid-autotuning
  - name: step_pulse_us
    type: number
    default: 1 (1 microsecond, hardware default)
    module: root
    context: Global setting affecting all stepper drivers
    defined_in: Firmware/src/main.cpp:278
    section: '[system]'
    description: 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 (TMC, DRV8825, A4988) work fine with 1µs pulses, but older drivers
      like the original A4983 or drivers with optoisolated inputs may require 2-3µs pulses for reliable operation.
    corresponding_v1: microseconds_per_step_pulse
    corresponding_v2: system.step_pulse_us
    units: µs (microseconds)
    related_settings:
    - step_frequency
    related_pages:
    - stepper-motors
    - troubleshooting
  - name: step_frequency
    type: number
    default: 200000 (200 kHz in release builds), 50000 (50 kHz in debug builds)
    module: root
    context: Global setting affecting maximum achievable speeds
    defined_in: Firmware/src/main.cpp:284
    section: '[system]'
    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. In debug builds, this defaults to 50 kHz to accommodate
      slower code execution with debug symbols. Lowering this value can improve system stability if experiencing issues at
      high speeds.
    corresponding_v1: none (was hardcoded in v1)
    corresponding_v2: system.step_frequency
    units: Hz (frequency)
    related_settings:
    - actuator.*.max_rate
    - motion control.default_seek_rate
    - step_pulse_us
    related_pages:
    - motion-control
    - stepper-motors
    - troubleshooting
  - name: aux_play_led
    type: pin
    default: '"nc" (not connected)'
    module: root
    context: Global setting for status indication
    defined_in: Firmware/src/main.cpp:290
    section: '[system]'
    description: Optional secondary play LED pin that mirrors the main play LED state. 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. This is in addition to the
      primary play LED on the board itself.
    corresponding_v1: play_led_pin (functionality expanded in v2)
    corresponding_v2: system.aux_play_led
    valid_values:
    - value: Any valid pin specification in format PXn with optional modifiers
      description: ''
    - value: or "nc"
      description: ''
    related_pages:
    - playled
    - player
    - kill-pause-button
  - name: flash_on_boot
    type: bool
    default: true
    module: root
    context: Global setting for firmware updates
    defined_in: Firmware/src/main.cpp:298
    section: '[system]'
    description: 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.
    corresponding_v1: none (v1 always checked for flashme.bin)
    corresponding_v2: system.flash_on_boot
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - dfu_enable
    related_pages:
    - flashing-smoothie-firmware
    - sd-card
    - troubleshooting
  - name: dfu_enable
    type: bool
    default: false
    module: root
    context: Global setting for development/debugging
    defined_in: Firmware/src/main.cpp:300
    section: '[system]'
    description: 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.
    corresponding_v1: none (DFU mode not available in v1)
    corresponding_v2: system.dfu_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - flash_on_boot
    related_pages:
    - flashing-smoothie-firmware
    - flashing-the-bootloader
  - name: msc_enable
    type: bool
    default: true
    module: root
    context: Global setting for USB functionality
    defined_in: Firmware/src/main.cpp:303
    section: '[system]'
    description: 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. The SD card
      is automatically ejected from the host computer when disconnecting USB. This is the most convenient way to update configuration
      files, upload G-code, and manage files on the SD card.
    corresponding_v1: none (MSC was always enabled in v1)
    corresponding_v2: system.msc_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - msc_led
    related_pages:
    - sd-card
    - mac-drivers
    - linux-drivers
    - windows-drivers
    - missing-web-interface
  - name: msc_led
    type: pin
    default: '"PF13" (Prime board), "nc" (other boards)'
    module: root
    context: Global setting for status indication
    defined_in: Firmware/src/main.cpp:311
    section: '[system]'
    description: 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.
    corresponding_v1: none (MSC LED indication new in v2)
    corresponding_v2: system.msc_led
    valid_values:
    - value: Any valid pin specification or "nc"
      description: ''
    related_settings:
    - msc_enable
    related_pages:
    - sd-card
    - pinout
  - name: fets_enable_pin
    type: pin
    default: '"PF14!o" (Prime board - inverted open-drain), "nc" (other boards)'
    module: root
    context: Global hardware power control
    defined_in: Firmware/src/main.cpp:474
    section: '[system]'
    description: 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. The Prime board uses an inverted open-drain configuration
      on PF14. Both this pin and fets_power_enable_pin must be in the correct state for FETs to operate.
    corresponding_v1: none (global FET control new in v2)
    corresponding_v2: system.fets_enable_pin
    valid_values:
    - value: Any valid pin specification with modifiers or "nc"
      description: ''
    related_settings:
    - fets_power_enable_pin
    related_pages:
    - mosfets
    - pinout
    - safety-thermistor
  - name: fets_power_enable_pin
    type: pin
    default: '"PD7" (Prime board), "nc" (other boards)'
    module: root
    context: Global hardware power control
    defined_in: Firmware/src/main.cpp:485
    section: '[system]'
    description: 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.
    corresponding_v1: none (global FET power control new in v2)
    corresponding_v2: system.fets_power_enable_pin
    valid_values:
    - value: Any valid pin specification with modifiers or "nc"
      description: ''
    related_settings:
    - fets_enable_pin
    related_pages:
    - mosfets
    - pinout
    - main-power-input
  - name: second_usb_serial_enable
    type: bool
    default: false
    module: root
    context: Global USB configuration
    defined_in: Firmware/src/Consoles.cpp:685
    section: '[consoles]'
    description: Enable a second USB serial console port for simultaneous connections. When enabled, the board presents two
      USB serial interfaces (composite device), allowing multiple programs to communicate with the board concurrently without
      conflicts. This is useful for running a host program (like Octoprint or Pronterface) on one port while using a terminal
      for debugging or manual commands on the second port. Both ports have full command access.
    corresponding_v1: none (second USB serial new in v2)
    corresponding_v2: consoles.second_usb_serial_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - uart console.enable
    related_pages:
    - connecting-smoothie
    - octoprint
    - pronterface
    - console-commands
  - name: enable
    type: bool
    default: false
    module: root
    context: UART hardware configuration
    defined_in: Firmware/src/Consoles.cpp:692
    section: '[uart console]'
    description: 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. This is useful for connecting to external devices like Raspberry
      Pi, touchscreen panels, Bluetooth modules, or isolated debugging terminals. The UART can be configured as a full console
      (with command processing) or as a raw data channel.
    corresponding_v1: uart0.baud_rate (presence enabled UART in v1)
    corresponding_v2: uart console.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - console
    - channel
    - baudrate
    - bits
    - stop_bits
    - parity
    related_pages:
    - uart
    - connecting-smoothie
    - bluetooth-serial
  - name: console
    type: bool
    default: true
    module: root
    context: UART functionality mode
    defined_in: Firmware/src/Consoles.cpp:695
    section: '[uart console]'
    description: 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 with full command processing, G-code interpretation, and status
      responses. When false, the UART is a raw data channel without command interpretation, useful for application-specific
      protocols or binary data transmission.
    corresponding_v1: none (UART was always console in v1 if enabled)
    corresponding_v2: uart console.console
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - enable
    - baudrate
    related_pages:
    - uart
    - console-commands
    - communication
  - name: channel
    type: number
    default: 0
    module: root
    context: Hardware channel selection
    defined_in: Firmware/src/Consoles.cpp:697
    section: '[uart console]'
    description: UART hardware channel number to use. Different boards support different numbers of UART channels. Channel
      0 is typically the primary debug UART. The STM32H7 microcontroller has up to 8 USART/UART peripherals, but not all may
      be broken out to accessible pins on a given board. Check your board's schematic or pinout diagram to determine which
      channels are available and their corresponding pin assignments.
    corresponding_v1: none (v1 only had one UART channel)
    corresponding_v2: uart console.channel
    valid_values:
    - value: 0-7 (board dependent - not all channels available on all boards)
      description: ''
    related_settings:
    - enable
    - console
    - baudrate
    related_pages:
    - uart
    - pinout
    - lpc4337-pin-usage
  - name: baudrate
    type: number
    default: 115200
    module: root
    context: UART serial communication speed
    defined_in: Firmware/src/Consoles.cpp:698
    section: '[uart console]'
    description: UART communication speed in bits per second. Must match the baudrate configured on the connected device.
      Higher baudrates allow faster communication and shorter latency, but may be less reliable over long cable runs, with
      electrical noise, or with cheap UART adapters. 115200 is the standard default that works well in most situations. 3D
      printing applications sometimes use 250000 baud for faster command throughput.
    corresponding_v1: uart0.baud_rate
    corresponding_v2: uart console.baudrate
    units: baud (bits per second)
    valid_values:
    - value: Standard baud rates - must match connected device exactly
      description: ''
    related_settings:
    - enable
    - channel
    - bits
    - stop_bits
    - parity
    related_pages:
    - uart
    - connecting-smoothie
    - bluetooth-serial
  - name: bits
    type: number
    default: 8
    module: root
    context: UART frame format
    defined_in: Firmware/src/Consoles.cpp:699
    section: '[uart console]'
    description: Number of data bits per character transmitted over UART. Standard serial communication uses 8 bits, which
      can represent 256 different values (0-255) per byte. This is sufficient for all ASCII characters, extended characters,
      and binary data. 7-bit mode is legacy support for old systems that only used 7-bit ASCII. 5-6 bit modes are extremely
      rare. 9-bit mode is for specialized multi-processor communication protocols.
    corresponding_v1: none (always 8 bits in v1)
    corresponding_v2: uart console.bits
    valid_values:
    - value: 5-9 (5
      description: ''
    - value: '6'
      description: ''
    - value: '7'
      description: ''
    - value: '8'
      description: ''
    - value: or 9 data bits)
      description: ''
    related_settings:
    - baudrate
    - stop_bits
    - parity
    related_pages:
    - uart
  - name: stop_bits
    type: number
    default: 1
    module: root
    context: UART frame format
    defined_in: Firmware/src/Consoles.cpp:700
    section: '[uart console]'
    description: 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 serial communication uses 1 stop bit as this is sufficient
      for synchronization at typical baud rates. 2 stop bits can be used for more robust communication at slower speeds or
      in electrically noisy environments, at the cost of reduced data throughput.
    corresponding_v1: none (always 1 stop bit in v1)
    corresponding_v2: uart console.stop_bits
    valid_values:
    - value: '1'
      description: ''
    - value: '2'
      description: ''
    related_settings:
    - baudrate
    - bits
    - parity
    related_pages:
    - uart
  - name: parity
    type: enum
    default: none
    module: root
    context: UART error detection
    defined_in: Firmware/src/Consoles.cpp:701
    section: '[uart console]'
    description: 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 in each character odd or even respectively, allowing
      basic error detection. Parity can detect single-bit errors but cannot correct them. Modern serial communication rarely
      uses parity because higher-level protocols (like G-code checksums) provide better error detection.
    corresponding_v1: none (always no parity in v1)
    corresponding_v2: uart console.parity
    valid_values:
    - value: '"none"'
      description: ''
    - value: '"odd"'
      description: ''
    - value: '"even"'
      description: ''
    related_settings:
    - baudrate
    - bits
    - stop_bits
    related_pages:
    - uart
    - communication
  - name: pwm1.frequency
    type: number
    default: 10000
    units: Hz
    module: root
    context: Hardware PWM timer configuration
    defined_in: Firmware/src/main.cpp:357
    section: '[pwm1]'
    description: 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. This setting configures the base frequency
      for all devices using PWM1 channels (PWM1_1, PWM1_2, PWM1_3, PWM1_4). Common uses include laser power control, fan control,
      and spindle speed control. The frequency must be appropriate for the connected device - lasers typically use 10-50 kHz,
      while servos need 50 Hz. Unlike v1 where PWM period was configured per-module, v2 configures PWM frequency globally
      per timer before modules are loaded.
    corresponding_v1: laser_module_pwm_period (when used for laser - note v1 uses period in microseconds, v2 uses frequency
      in Hz)
    corresponding_v2: pwm1.frequency
    description_bullets:
    - Default 10000 Hz (10 kHz) works for most applications
    - Laser control typically uses 10000-50000 Hz for smooth power modulation
    - Servo control requires 50 Hz for standard RC servos
    - Fan control can use 10000-25000 Hz to avoid audible noise
    - All channels on PWM1 (PWM1_1 through PWM1_4) share this frequency
    - 'Conversion from v1: frequency (Hz) = 1,000,000 / period (µs)'
    related_settings:
    - pwm2.frequency
    - laser.pwm_pin
    - switch.*.output_pin
    related_pages:
    - laser
    - laser-options
    - pwm-capable
    examples:
    - 'frequency = 10000  # 10 kHz - default, good for lasers and fans'
    - 'frequency = 50000  # 50 kHz - high frequency for fast-switching laser drivers'
    - 'frequency = 50     # 50 Hz - required for RC servos and some BLTouch clones'
    - 'frequency = 25000  # 25 kHz - alternative for some laser drivers'
  - name: pwm2.frequency
    type: number
    default: 10000
    units: Hz
    module: root
    context: Hardware PWM timer configuration
    defined_in: Firmware/src/main.cpp:363
    section: '[pwm2]'
    description: 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. This setting configures the base frequency
      for all devices using PWM2 channels (PWM2_1, PWM2_2, PWM2_3, PWM2_4). This allows using different frequencies on different
      timers - for example, PWM1 at 10 kHz for laser control while PWM2 runs at 50 Hz for servo control. Common in mixed configurations
      where one timer controls high-frequency devices (lasers, fans) and another controls low-frequency devices (servos, BLTouch
      probes).
    corresponding_v1: none (v2-specific architecture - v1 configured PWM per-module)
    corresponding_v2: pwm2.frequency
    description_bullets:
    - Default 10000 Hz (10 kHz) works for most applications
    - Commonly set to 50 Hz when using servos or BLTouch on PWM2 channels
    - Independent from PWM1 frequency - can run different frequencies simultaneously
    - All channels on PWM2 (PWM2_1 through PWM2_4) share this frequency
    - Enables mixed-use configurations (e.g., laser on PWM1 @ 10kHz, servo on PWM2 @ 50Hz)
    - Must be configured before modules that use PWM2 channels are loaded
    related_settings:
    - pwm1.frequency
    - zprobe.probe_pin
    - switch.*.output_pin
    related_pages:
    - zprobe
    - bltouch
    - pwm-capable
    examples:
    - 'frequency = 50      # 50 Hz - required for RC servos and BLTouch'
    - 'frequency = 10000   # 10 kHz - default for general PWM devices'
    - 'frequency = 333     # 333 Hz - some hobby servos prefer this frequency'
- name: Motion Control
  description: Motion Control
  setting_count: 57
  settings:
  - name: default_feed_rate
    type: number
    default: 4000.0 (66.7 mm/s)
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:218
    section: '[motion control]'
    description: Default speed for coordinated G1/G2/G3 moves when no F parameter is specified in G-code. This is the fallback
      feed rate used when a move command doesn't explicitly set a speed. The firmware stores this value internally in mm/s
      but the configuration uses mm/min for consistency with G-code standards.
    corresponding_v1: default_feed_rate
    corresponding_v2: motion control.default_feed_rate
    units: mm/min
    related_pages:
    - motion-control
    - g1
    - g2
    - g3
    - supported-g-codes
  - name: default_seek_rate
    type: number
    default: 4000.0 (66.7 mm/s)
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:219
    section: '[motion control]'
    description: Default speed for G0 rapid positioning moves when no F parameter is specified or when compliant_seek_rate
      is enabled. Rapid moves are uncoordinated non-cutting movements used to position the tool between work areas quickly.
      The firmware stores this internally in mm/s but configuration uses mm/min.
    corresponding_v1: default_seek_rate
    corresponding_v2: motion control.default_seek_rate
    units: mm/min
    related_settings:
    - compliant_seek_rate
    - default_feed_rate
    related_pages:
    - motion-control
    - g0
    - grbl-mode
    - supported-g-codes
  - name: compliant_seek_rate
    type: bool
    default: false
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:220
    section: '[motion control]'
    description: Enables GRBL-compliant behavior where G0 rapid moves always use default_seek_rate regardless of F parameter.
      When false (default), the F parameter affects both G0 and G1 moves. When true, G0 ignores F and always uses default_seek_rate,
      matching GRBL's strict interpretation of the G-code standard.
    corresponding_v1: none (new feature in v2)
    corresponding_v2: motion control.compliant_seek_rate
    related_settings:
    - default_seek_rate
    - default_feed_rate
    related_pages:
    - motion-control
    - grbl-mode
    - g0
    - from-grbl
  - name: mm_per_line_segment
    type: number
    default: 0.0 (segmentation disabled)
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:221
    section: '[motion control]'
    description: Fixed segment length for straight-line moves when using cartesian grid bed leveling compensation. When set
      to a positive value, all G1 moves longer than this distance will be broken into segments of this length, allowing the
      firmware to apply Z-compensation adjustments along the path. When set to 0, segmentation is disabled except for arcs
      and delta kinematics.
    corresponding_v1: mm_per_line_segment
    corresponding_v2: motion control.mm_per_line_segment
    units: mm
    related_settings:
    - delta_segments_per_second
    - mm_per_arc_segment
    related_pages:
    - motion-control
    - rectangular-grid-calibration-options
    - pcb-milling
  - name: delta_segments_per_second
    type: number
    default: 100 (for delta kinematics), 0 (for cartesian)
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:222
    section: '[motion control]'
    description: Segmentation rate for delta and rotary delta kinematics. Determines how many segments per second are generated
      for moves to ensure smooth arc motion. Higher values produce smoother curves and more accurate positioning but increase
      processor load and memory usage. This setting is automatically set based on arm_solution and is essential for proper
      delta printer operation.
    corresponding_v1: delta_segments_per_second
    corresponding_v2: motion control.delta_segments_per_second
    units: segments/s
    related_settings:
    - arm_solution
    - segment_z_moves
    - planner_queue_size
    related_pages:
    - motion-control
    - delta
    - arm-solutions
    - linear-delta
  - name: mm_per_arc_segment
    type: number
    default: 0.0 (use error-based segmentation)
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:223
    section: '[motion control]'
    description: Fixed arc segment length for G2/G3 circular interpolation moves. When set to a positive value, arcs are divided
      into segments of this fixed length. When set to 0 (default), the firmware uses adaptive error-based segmentation controlled
      by mm_max_arc_error instead. Fixed segmentation can be faster to compute but adaptive segmentation provides better quality
      with fewer segments.
    corresponding_v1: mm_per_arc_segment
    corresponding_v2: motion control.mm_per_arc_segment
    units: mm
    related_settings:
    - mm_max_arc_error
    - arc_correction
    related_pages:
    - motion-control
    - g2
    - g3
  - name: mm_max_arc_error
    type: number
    default: 0.01
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:224
    section: '[motion control]'
    description: Maximum chord-to-arc deviation allowed for adaptive arc segmentation when mm_per_arc_segment is 0. This value
      controls the trade-off between arc smoothness and segment count. Smaller values produce smoother arcs that more closely
      match the true circular path but require more segments. Larger values reduce computational load but may produce visible
      faceting on small-radius arcs.
    corresponding_v1: mm_max_arc_error
    corresponding_v2: motion control.mm_max_arc_error
    units: mm
    related_settings:
    - mm_per_arc_segment
    - arc_correction
    related_pages:
    - motion-control
    - g2
    - g3
  - name: arc_correction
    type: number
    default: 5
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:225
    section: '[motion control]'
    description: Number of arc segments to process before applying correction to compensate for accumulated floating-point
      errors during arc generation. Higher values improve computational efficiency by reducing correction frequency but may
      accumulate more error before correction. Lower values provide more frequent correction but increase overhead. The default
      value of 5 provides good balance for most applications.
    corresponding_v1: arc_correction
    corresponding_v2: motion control.arc_correction
    related_settings:
    - mm_per_arc_segment
    - mm_max_arc_error
    related_pages:
    - motion-control
    - g2
    - g3
  - name: x_axis_max_speed
    type: number
    default: 60000 (1000 mm/s)
    module: motion_control
    context: Per-axis setting
    defined_in: Firmware/src/robot/Robot.cpp:228
    section: '[motion control]'
    description: Maximum speed limit for X axis in mm/min. This is a hard limit that prevents the X axis from exceeding this
      speed regardless of commanded feed rate or rapid speed. The firmware will scale down moves that would exceed this limit
      while maintaining proper coordination with other axes. Set this based on the mechanical capabilities and motor performance
      of your X axis.
    corresponding_v1: x_axis_max_speed
    corresponding_v2: motion control.x_axis_max_speed
    units: mm/min
    related_settings:
    - y_axis_max_speed
    - z_axis_max_speed
    - max_speed
    - actuator.alpha.max_rate
    related_pages:
    - motion-control
    - delta
    - cartesian
    - stepper-motors
  - name: y_axis_max_speed
    type: number
    default: 60000 (1000 mm/s)
    module: motion_control
    context: Per-axis setting
    defined_in: Firmware/src/robot/Robot.cpp:229
    section: '[motion control]'
    description: Maximum speed limit for Y axis in mm/min. This is a hard limit that prevents the Y axis from exceeding this
      speed regardless of commanded feed rate or rapid speed. The firmware will scale down moves that would exceed this limit
      while maintaining proper coordination with other axes. Set this based on the mechanical capabilities and motor performance
      of your Y axis.
    corresponding_v1: y_axis_max_speed
    corresponding_v2: motion control.y_axis_max_speed
    units: mm/min
    related_settings:
    - x_axis_max_speed
    - z_axis_max_speed
    - max_speed
    - actuator.beta.max_rate
    related_pages:
    - motion-control
    - delta
    - cartesian
    - stepper-motors
  - name: z_axis_max_speed
    type: number
    default: 300 (5 mm/s)
    module: motion_control
    context: Per-axis setting
    defined_in: Firmware/src/robot/Robot.cpp:230
    section: '[motion control]'
    description: Maximum speed limit for Z axis in mm/min. Typically much slower than XY axes due to heavier loads, higher
      mechanical advantage of lead screws, and safety considerations. On cartesian machines, Z usually carries the entire
      X gantry or build platform. On delta machines, Z is a virtual axis and this limit applies to vertical motion. Set conservatively
      to prevent crashes and ensure positioning accuracy.
    corresponding_v1: z_axis_max_speed
    corresponding_v2: motion control.z_axis_max_speed
    units: mm/min
    related_settings:
    - x_axis_max_speed
    - y_axis_max_speed
    - max_speed
    - actuator.gamma.max_rate
    related_pages:
    - motion-control
    - delta
    - cartesian
    - stepper-motors
  - name: max_speed
    type: number
    default: 0 (disabled)
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:231
    section: '[motion control]'
    description: Overall maximum speed limit across all axes regardless of individual per-axis limits. When set to 0 (default),
      this global limit is disabled and only the individual x/y/z_axis_max_speed limits apply. When set to a positive value,
      no move will exceed this speed even if individual axes could go faster. Useful for imposing a system-wide speed cap
      for safety or machine limitations.
    corresponding_v1: none (new feature in v2)
    corresponding_v2: motion control.max_speed
    units: mm/min
    related_settings:
    - x_axis_max_speed
    - y_axis_max_speed
    - z_axis_max_speed
    related_pages:
    - motion-control
    - stepper-motors
  - name: default_acceleration
    type: number
    default: 100
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:234
    section: '[motion control]'
    description: Default acceleration for all axes when no per-actuator override is specified. This value determines how quickly
      the machine can change speed during moves. Higher acceleration reduces move time but increases vibration and mechanical
      stress. Lower acceleration provides smoother motion but increases total job time. Can be overridden per-actuator using
      actuator.{axis}.acceleration settings.
    corresponding_v1: acceleration
    corresponding_v2: motion control.default_acceleration
    units: mm/s²
    related_settings:
    - actuator.{axis}.acceleration
    - junction_deviation
    related_pages:
    - motion-control
    - stepper-motors
    - delta
    - cartesian
  - name: segment_z_moves
    type: bool
    default: true
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:236
    section: '[motion control]'
    description: Enable segmentation for Z-only moves on delta machines. When true (default), vertical Z movements on delta
      printers are broken into segments for smooth motion through the delta kinematics. When false, Z-only moves bypass segmentation
      for improved performance. Should always be true for delta and rotary delta machines. Can be set to false for cartesian
      machines to reduce processing overhead on pure Z moves.
    corresponding_v1: none (new feature in v2)
    corresponding_v2: motion control.segment_z_moves
    related_settings:
    - arm_solution
    - delta_segments_per_second
    related_pages:
    - motion-control
    - delta
    - arm-solutions
  - name: save_wcs
    type: bool
    default: false
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:237
    section: '[motion control]'
    description: Save work coordinate systems (G54-G59) to config-override file when M500 is issued. When true, all WCS offsets
      are saved and restored on boot, allowing coordinate systems to persist across power cycles. When false (default), WCS
      offsets are lost on reboot and must be re-established. Useful for CNC machines with multiple fixture setups or recurring
      job positions.
    corresponding_v1: save_g54 (expanded in v2 to cover G54-G59)
    corresponding_v2: motion control.save_wcs
    related_settings:
    - save_g92
    - set_g92
    related_pages:
    - motion-control
    - g54
    - supported-g-codes
  - name: must_be_homed
    type: bool
    default: false (cartesian), true (delta/rotary delta)
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:241
    section: '[motion control]'
    description: Require all axes to be homed before allowing any motion commands. When true, the machine will reject move
      commands until a homing cycle (G28) has been completed. This is automatically set to true for delta and rotary delta
      kinematics where unhomed positions can cause mechanical interference or crashes. Cartesian machines can optionally enable
      this for additional safety.
    corresponding_v1: none (new safety feature in v2)
    corresponding_v2: motion control.must_be_homed
    related_settings:
    - arm_solution
    - endstops
    related_pages:
    - motion-control
    - delta
    - endstops
    - g28-reprap
  - name: arm_solution
    type: enum
    default: cartesian
    module: motion_control
    context: Global setting
    defined_in: Firmware/src/robot/Robot.cpp:191
    section: '[motion control]'
    description: Specifies the kinematics solution that converts Cartesian coordinates (X,Y,Z) from G-code into actuator positions
      for your specific machine type. This is one of the most fundamental configuration settings as it determines how all
      motion commands are interpreted and executed. Each arm solution has its own set of additional parameters that must be
      configured in the appropriate kinematics section.
    corresponding_v1: arm_solution
    corresponding_v2: motion control.arm_solution
    valid_values:
    - value: cartesian
      description: Standard Cartesian kinematics with 1:1 motor-to-axis mapping
    - value: linear_delta
      description: Linear delta kinematics (Kossel-style delta printers)
    - value: rotary_delta
      description: Rotary delta kinematics (delta with rotational joints)
    - value: hbot
      description: H-Bot belt-driven kinematics
    - value: corexy
      description: CoreXY belt-driven kinematics
    - value: corexz
      description: CoreXZ belt-driven kinematics (XZ plane instead of XY)
    - value: morgan
      description: Morgan SCARA arm kinematics
    - value: rostock
      description: Alias for linear_delta (Rostock-style delta)
    - value: kossel
      description: Alias for linear_delta (Kossel-style delta)
    - value: delta
      description: Alias for linear_delta (generic delta)
    related_settings:
    - linear delta.arm_length
    - linear delta.arm_radius (for deltas)
    related_pages:
    - motion-control
    - arm-solutions
    - delta
    - cartesian
    - corexy
    - hbot
    - morgan-scara
  - name: junction_deviation
    type: number
    default: 0.05
    module: planner
    context: Global setting
    defined_in: Firmware/src/robot/Planner.cpp:40
    section: '[planner]'
    description: Maximum allowed deviation from the true path at direction change junctions during cornering. This replaces
      traditional jerk-based cornering algorithms with a more sophisticated approach. Lower values produce slower, more precise
      corners that follow the intended path more closely. Higher values allow faster cornering but introduce more deviation
      from the theoretical path, potentially causing rounding at sharp corners.
    corresponding_v1: junction_deviation
    corresponding_v2: planner.junction_deviation
    units: mm
    related_settings:
    - z_junction_deviation
    - default_acceleration
    related_pages:
    - motion-control
    - planner
  - name: z_junction_deviation
    type: number
    default: -1 (use junction_deviation value)
    module: planner
    context: Global setting
    defined_in: Firmware/src/robot/Planner.cpp:41
    section: '[planner]'
    description: Separate junction deviation setting specifically for Z axis moves. When set to -1 (default), Z axis uses
      the same junction_deviation value as XY axes. When set to a positive value, this overrides junction deviation for moves
      involving Z axis changes. Commonly set higher than XY junction deviation in 3D printing to allow faster Z movements
      (layer changes, Z-hops) without affecting XY print quality.
    corresponding_v1: z_junction_deviation
    corresponding_v2: planner.z_junction_deviation
    units: mm
    related_settings:
    - junction_deviation
    - default_acceleration
    related_pages:
    - motion-control
    - planner
  - name: minimum_planner_speed
    type: number
    default: 0
    module: planner
    context: Global setting
    defined_in: Firmware/src/robot/Planner.cpp:42
    section: '[planner]'
    description: Minimum speed the planner will allow for any move. When set to 0 (default), the planner can slow moves down
      to a complete stop if needed for proper acceleration/deceleration. When set to a positive value, moves will never slow
      below this speed, which can prevent extrusion problems in 3D printing but may cause jerky motion at tight corners or
      during complex acceleration planning.
    corresponding_v1: minimum_planner_speed
    corresponding_v2: planner.minimum_planner_speed
    units: mm/s
    related_settings:
    - junction_deviation
    - default_acceleration
    related_pages:
    - motion-control
    - planner
  - name: planner_queue_size
    type: number
    default: 32
    module: planner
    context: Global setting
    defined_in: Firmware/src/robot/Planner.cpp:43
    section: '[planner]'
    description: Number of motion blocks in the planner queue buffer. Larger values allow smoother motion planning and better
      acceleration management by looking further ahead in the move sequence, but consume more RAM. Smaller values reduce memory
      usage but may cause stuttering on complex paths with many short segments. The default of 32 provides good performance
      for most applications.
    corresponding_v1: planner_queue_size
    corresponding_v2: planner.planner_queue_size
    related_settings:
    - junction_deviation
    - delta_segments_per_second
    related_pages:
    - motion-control
    - planner
  - name: queue_delay_time_ms
    type: number
    default: 100
    module: conveyor
    context: Global setting
    defined_in: Firmware/src/robot/Conveyor.cpp:47
    section: '[conveyor]'
    description: Time to wait before the conveyor starts processing the motion queue after receiving the first block. This
      delay allows the planner queue to fill up slightly before execution begins, which improves motion planning smoothness
      by providing more lookahead context. Higher values improve planning quality but add latency between G-code command and
      physical motion. Lower values reduce latency but may result in less optimal planning.
    corresponding_v1: queue_delay_time_ms (renamed from planner context)
    corresponding_v2: conveyor.queue_delay_time_ms
    units: ms
    related_settings:
    - planner_queue_size
    related_pages:
    - motion-control
    - planner
  - name: x.steps_per_mm
    type: number
    default: 80.0 (XY with GT2 belt), 2560.0 (Z with lead screw)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:370
    section: '[actuator]'
    description: 'X axis: Number of motor steps required to move exactly 1mm along the X axis. This is the most critical calibration
      value and depends on motor steps per revolution (typically 200 for 1.8° steppers), microstepping setting, and mechanical
      transmission ratio (belt pitch and pulley teeth for belts, thread pitch for lead screws). Incorrect values cause dimensional
      inaccuracy in all movements.'
    corresponding_v1: alpha_steps_per_mm
    corresponding_v2: actuator.alpha.steps_per_mm, etc.
    units: steps/mm
    related_settings:
    - <axis>.microsteps
    - <axis>.max_rate
    related_pages:
    - motion-control
    - stepper-motors
    - extruder-guide
  - name: y.steps_per_mm
    type: number
    default: 80.0 (XY with GT2 belt), 2560.0 (Z with lead screw)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:370
    section: '[actuator]'
    description: 'Y axis: Number of motor steps required to move exactly 1mm along the Y axis. This is the most critical calibration
      value and depends on motor steps per revolution (typically 200 for 1.8° steppers), microstepping setting, and mechanical
      transmission ratio (belt pitch and pulley teeth for belts, thread pitch for lead screws). Incorrect values cause dimensional
      inaccuracy in all movements.'
    corresponding_v1: beta_steps_per_mm
    corresponding_v2: actuator.alpha.steps_per_mm, etc.
    units: steps/mm
    related_settings:
    - <axis>.microsteps
    - <axis>.max_rate
    related_pages:
    - motion-control
    - stepper-motors
    - extruder-guide
  - name: z.steps_per_mm
    type: number
    default: 80.0 (XY with GT2 belt), 2560.0 (Z with lead screw)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:370
    section: '[actuator]'
    description: 'Z axis: Number of motor steps required to move exactly 1mm along the Z axis. This is the most critical calibration
      value and depends on motor steps per revolution (typically 200 for 1.8° steppers), microstepping setting, and mechanical
      transmission ratio (belt pitch and pulley teeth for belts, thread pitch for lead screws). Incorrect values cause dimensional
      inaccuracy in all movements.'
    corresponding_v1: gamma_steps_per_mm
    corresponding_v2: actuator.alpha.steps_per_mm, etc.
    units: steps/mm
    related_settings:
    - <axis>.microsteps
    - <axis>.max_rate
    related_pages:
    - motion-control
    - stepper-motors
    - extruder-guide
  - name: x.max_rate
    type: number
    default: 30000 (500 mm/s)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:371
    section: '[actuator]'
    description: 'X axis: Maximum speed this individual actuator/motor can achieve in mm/min. This limits the motor speed
      regardless of commanded feed rate or axis max speed settings. Should be set based on motor capabilities, driver current,
      microstepping, and mechanical load. Used to prevent individual motors from exceeding their performance limits even if
      the X axis geometry would allow higher speeds.'
    corresponding_v1: alpha_max_rate
    corresponding_v2: actuator.alpha.max_rate, etc.
    units: mm/min
    related_settings:
    - x_axis_max_speed
    - <axis>.steps_per_mm
    - <axis>.microsteps
    related_pages:
    - motion-control
    - stepper-motors
  - name: y.max_rate
    type: number
    default: 30000 (500 mm/s)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:371
    section: '[actuator]'
    description: 'Y axis: Maximum speed this individual actuator/motor can achieve in mm/min. This limits the motor speed
      regardless of commanded feed rate or axis max speed settings. Should be set based on motor capabilities, driver current,
      microstepping, and mechanical load. Used to prevent individual motors from exceeding their performance limits even if
      the Y axis geometry would allow higher speeds.'
    corresponding_v1: beta_max_rate
    corresponding_v2: actuator.alpha.max_rate, etc.
    units: mm/min
    related_settings:
    - x_axis_max_speed
    - <axis>.steps_per_mm
    - <axis>.microsteps
    related_pages:
    - motion-control
    - stepper-motors
  - name: z.max_rate
    type: number
    default: 30000 (500 mm/s)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:371
    section: '[actuator]'
    description: 'Z axis: Maximum speed this individual actuator/motor can achieve in mm/min. This limits the motor speed
      regardless of commanded feed rate or axis max speed settings. Should be set based on motor capabilities, driver current,
      microstepping, and mechanical load. Used to prevent individual motors from exceeding their performance limits even if
      the Z axis geometry would allow higher speeds.'
    corresponding_v1: gamma_max_rate
    corresponding_v2: actuator.alpha.max_rate, etc.
    units: mm/min
    related_settings:
    - x_axis_max_speed
    - <axis>.steps_per_mm
    - <axis>.microsteps
    related_pages:
    - motion-control
    - stepper-motors
  - name: x.acceleration
    type: number
    default: -1 (use default_acceleration)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:372
    section: '[actuator]'
    description: 'X axis: Per-actuator acceleration override. When set to -1 (default), this actuator uses the global default_acceleration
      setting. When set to a positive value, this acceleration applies specifically to this actuator regardless of the global
      default. Useful for axes with different mechanical characteristics, such as giving Z axis slower acceleration than XY
      to prevent layer shifts.'
    corresponding_v1: none (new feature in v2)
    corresponding_v2: actuator.alpha.acceleration, etc.
    units: mm/s²
    related_settings:
    - default_acceleration
    related_pages:
    - motion-control
    - stepper-motors
  - name: y.acceleration
    type: number
    default: -1 (use default_acceleration)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:372
    section: '[actuator]'
    description: 'Y axis: Per-actuator acceleration override. When set to -1 (default), this actuator uses the global default_acceleration
      setting. When set to a positive value, this acceleration applies specifically to this actuator regardless of the global
      default. Useful for axes with different mechanical characteristics, such as giving Z axis slower acceleration than XY
      to prevent layer shifts.'
    corresponding_v1: none (new feature in v2)
    corresponding_v2: actuator.alpha.acceleration, etc.
    units: mm/s²
    related_settings:
    - default_acceleration
    related_pages:
    - motion-control
    - stepper-motors
  - name: z.acceleration
    type: number
    default: -1 (use default_acceleration)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:372
    section: '[actuator]'
    description: 'Z axis: Per-actuator acceleration override. When set to -1 (default), this actuator uses the global default_acceleration
      setting. When set to a positive value, this acceleration applies specifically to this actuator regardless of the global
      default. Useful for axes with different mechanical characteristics, such as giving Z axis slower acceleration than XY
      to prevent layer shifts.'
    corresponding_v1: none (new feature in v2)
    corresponding_v2: actuator.alpha.acceleration, etc.
    units: mm/s²
    related_settings:
    - default_acceleration
    related_pages:
    - motion-control
    - stepper-motors
  - name: x.step_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD3, beta=PK2, gamma=PG3, delta=PC6)'
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:266
    section: '[actuator]'
    description: 'X axis: GPIO pin used to send step pulses to the motor driver. Each rising edge on this pin advances the
      motor by one microstep. The pin must be connected to the STEP input of your stepper driver chip. Pin assignment is board-specific
      and must match your hardware schematic. Incorrect pin assignment causes motors not to move or move the wrong axis.'
    corresponding_v1: alpha_step_pin
    corresponding_v2: actuator.alpha.step_pin, etc.
    valid_values:
    - value: STM32 pin specification in format PXn (e.g.
      description: ''
    - value: PD3)
      description: ''
    related_settings:
    - <axis>.dir_pin
    - <axis>.en_pin
    related_pages:
    - motion-control
    - pinout
    - stepper-motors
    - pin-configuration
  - name: y.step_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD3, beta=PK2, gamma=PG3, delta=PC6)'
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:266
    section: '[actuator]'
    description: 'Y axis: GPIO pin used to send step pulses to the motor driver. Each rising edge on this pin advances the
      motor by one microstep. The pin must be connected to the STEP input of your stepper driver chip. Pin assignment is board-specific
      and must match your hardware schematic. Incorrect pin assignment causes motors not to move or move the wrong axis.'
    corresponding_v1: beta_step_pin
    corresponding_v2: actuator.alpha.step_pin, etc.
    valid_values:
    - value: STM32 pin specification in format PXn (e.g.
      description: ''
    - value: PD3)
      description: ''
    related_settings:
    - <axis>.dir_pin
    - <axis>.en_pin
    related_pages:
    - motion-control
    - pinout
    - stepper-motors
    - pin-configuration
  - name: z.step_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD3, beta=PK2, gamma=PG3, delta=PC6)'
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:266
    section: '[actuator]'
    description: 'Z axis: GPIO pin used to send step pulses to the motor driver. Each rising edge on this pin advances the
      motor by one microstep. The pin must be connected to the STEP input of your stepper driver chip. Pin assignment is board-specific
      and must match your hardware schematic. Incorrect pin assignment causes motors not to move or move the wrong axis.'
    corresponding_v1: gamma_step_pin
    corresponding_v2: actuator.alpha.step_pin, etc.
    valid_values:
    - value: STM32 pin specification in format PXn (e.g.
      description: ''
    - value: PD3)
      description: ''
    related_settings:
    - <axis>.dir_pin
    - <axis>.en_pin
    related_pages:
    - motion-control
    - pinout
    - stepper-motors
    - pin-configuration
  - name: x.dir_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD4, beta=PG2, gamma=PG4, delta=PG5)'
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:267
    section: '[actuator]'
    description: 'X axis: GPIO pin used to control motor direction. The logic level on this pin determines whether the motor
      rotates clockwise or counter-clockwise when step pulses are sent. Add ! suffix to invert the direction signal if the
      motor runs backwards. Pin must be connected to the DIR input of your stepper driver.'
    corresponding_v1: alpha_dir_pin
    corresponding_v2: actuator.alpha.dir_pin, etc.
    valid_values:
    - value: STM32 pin specification with optional inversion
      description: ''
    related_settings:
    - <axis>.step_pin
    - <axis>.reversed
    related_pages:
    - motion-control
    - pinout
    - stepper-motors
    - pin-configuration
  - name: y.dir_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD4, beta=PG2, gamma=PG4, delta=PG5)'
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:267
    section: '[actuator]'
    description: 'Y axis: GPIO pin used to control motor direction. The logic level on this pin determines whether the motor
      rotates clockwise or counter-clockwise when step pulses are sent. Add ! suffix to invert the direction signal if the
      motor runs backwards. Pin must be connected to the DIR input of your stepper driver.'
    corresponding_v1: beta_dir_pin
    corresponding_v2: actuator.alpha.dir_pin, etc.
    valid_values:
    - value: STM32 pin specification with optional inversion
      description: ''
    related_settings:
    - <axis>.step_pin
    - <axis>.reversed
    related_pages:
    - motion-control
    - pinout
    - stepper-motors
    - pin-configuration
  - name: z.dir_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD4, beta=PG2, gamma=PG4, delta=PG5)'
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:267
    section: '[actuator]'
    description: 'Z axis: GPIO pin used to control motor direction. The logic level on this pin determines whether the motor
      rotates clockwise or counter-clockwise when step pulses are sent. Add ! suffix to invert the direction signal if the
      motor runs backwards. Pin must be connected to the DIR input of your stepper driver.'
    corresponding_v1: gamma_dir_pin
    corresponding_v2: actuator.alpha.dir_pin, etc.
    valid_values:
    - value: STM32 pin specification with optional inversion
      description: ''
    related_settings:
    - <axis>.step_pin
    - <axis>.reversed
    related_pages:
    - motion-control
    - pinout
    - stepper-motors
    - pin-configuration
  - name: x.en_pin
    type: pin
    default: nc (not connected, use common enable pin)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:268
    section: '[actuator]'
    description: 'X axis: GPIO pin used to enable/disable this specific motor driver. When not connected (nc), motor enable
      is controlled by the global motors_enable_pin or by the driver itself. Some drivers always run (no enable needed), others
      use a global enable pin, and some require individual enable pins per motor.'
    corresponding_v1: alpha_en_pin
    corresponding_v2: actuator.alpha.en_pin, etc.
    valid_values:
    - value: STM32 pin specification or nc
      description: ''
    related_settings:
    - common.motors_enable_pin
    related_pages:
    - motion-control
    - pinout
    - stepper-motors
  - name: y.en_pin
    type: pin
    default: nc (not connected, use common enable pin)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:268
    section: '[actuator]'
    description: 'Y axis: GPIO pin used to enable/disable this specific motor driver. When not connected (nc), motor enable
      is controlled by the global motors_enable_pin or by the driver itself. Some drivers always run (no enable needed), others
      use a global enable pin, and some require individual enable pins per motor.'
    corresponding_v1: beta_en_pin
    corresponding_v2: actuator.alpha.en_pin, etc.
    valid_values:
    - value: STM32 pin specification or nc
      description: ''
    related_settings:
    - common.motors_enable_pin
    related_pages:
    - motion-control
    - pinout
    - stepper-motors
  - name: z.en_pin
    type: pin
    default: nc (not connected, use common enable pin)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:268
    section: '[actuator]'
    description: 'Z axis: GPIO pin used to enable/disable this specific motor driver. When not connected (nc), motor enable
      is controlled by the global motors_enable_pin or by the driver itself. Some drivers always run (no enable needed), others
      use a global enable pin, and some require individual enable pins per motor.'
    corresponding_v1: gamma_en_pin
    corresponding_v2: actuator.alpha.en_pin, etc.
    valid_values:
    - value: STM32 pin specification or nc
      description: ''
    related_settings:
    - common.motors_enable_pin
    related_pages:
    - motion-control
    - pinout
    - stepper-motors
  - name: x.microsteps
    type: number
    default: 32
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:311
    section: '[actuator]'
    description: 'X axis: Microstepping subdivision setting for the TMC stepper driver. Higher values provide smoother motion
      and finer resolution but reduce maximum achievable speed and increase CPU load. Lower values allow higher speeds but
      may cause vibration and reduce positioning resolution. The value is sent to the TMC driver chip to configure its internal
      interpolation.'
    corresponding_v1: none (configured in motor_driver_control in v1)
    corresponding_v2: actuator.alpha.microsteps, etc.
    valid_values:
    - value: 'Powers of 2: 1'
      description: ''
    - value: '2'
      description: ''
    - value: '4'
      description: ''
    - value: '8'
      description: ''
    - value: '16'
      description: ''
    - value: '32'
      description: ''
    - value: '64'
      description: ''
    - value: '128'
      description: ''
    - value: '256'
      description: ''
    related_settings:
    - <axis>.steps_per_mm
    - <axis>.max_rate
    related_pages:
    - motion-control
    - stepper-motors
    - advancedmotordriver
  - name: y.microsteps
    type: number
    default: 32
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:311
    section: '[actuator]'
    description: 'Y axis: Microstepping subdivision setting for the TMC stepper driver. Higher values provide smoother motion
      and finer resolution but reduce maximum achievable speed and increase CPU load. Lower values allow higher speeds but
      may cause vibration and reduce positioning resolution. The value is sent to the TMC driver chip to configure its internal
      interpolation.'
    corresponding_v1: none (configured in motor_driver_control in v1)
    corresponding_v2: actuator.alpha.microsteps, etc.
    valid_values:
    - value: 'Powers of 2: 1'
      description: ''
    - value: '2'
      description: ''
    - value: '4'
      description: ''
    - value: '8'
      description: ''
    - value: '16'
      description: ''
    - value: '32'
      description: ''
    - value: '64'
      description: ''
    - value: '128'
      description: ''
    - value: '256'
      description: ''
    related_settings:
    - <axis>.steps_per_mm
    - <axis>.max_rate
    related_pages:
    - motion-control
    - stepper-motors
    - advancedmotordriver
  - name: z.microsteps
    type: number
    default: 32
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:311
    section: '[actuator]'
    description: 'Z axis: Microstepping subdivision setting for the TMC stepper driver. Higher values provide smoother motion
      and finer resolution but reduce maximum achievable speed and increase CPU load. Lower values allow higher speeds but
      may cause vibration and reduce positioning resolution. The value is sent to the TMC driver chip to configure its internal
      interpolation.'
    corresponding_v1: none (configured in motor_driver_control in v1)
    corresponding_v2: actuator.alpha.microsteps, etc.
    valid_values:
    - value: 'Powers of 2: 1'
      description: ''
    - value: '2'
      description: ''
    - value: '4'
      description: ''
    - value: '8'
      description: ''
    - value: '16'
      description: ''
    - value: '32'
      description: ''
    - value: '64'
      description: ''
    - value: '128'
      description: ''
    - value: '256'
      description: ''
    related_settings:
    - <axis>.steps_per_mm
    - <axis>.max_rate
    related_pages:
    - motion-control
    - stepper-motors
    - advancedmotordriver
  - name: x.reversed
    type: bool
    default: false
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:271
    section: '[actuator]'
    description: 'X axis: Reverse motor direction without modifying the dir_pin definition. When set to true, the firmware
      inverts the direction signal internally, which is cleaner than adding ! to the dir_pin setting. This makes configuration
      more readable and easier to understand. If dir_pin already has ! inversion, the firmware issues a warning and ignores
      this setting to avoid double-inversion.'
    corresponding_v1: none (new feature in v2)
    corresponding_v2: actuator.alpha.reversed, etc.
    related_settings:
    - <axis>.dir_pin
    related_pages:
    - motion-control
    - stepper-motors
  - name: y.reversed
    type: bool
    default: false
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:271
    section: '[actuator]'
    description: 'Y axis: Reverse motor direction without modifying the dir_pin definition. When set to true, the firmware
      inverts the direction signal internally, which is cleaner than adding ! to the dir_pin setting. This makes configuration
      more readable and easier to understand. If dir_pin already has ! inversion, the firmware issues a warning and ignores
      this setting to avoid double-inversion.'
    corresponding_v1: none (new feature in v2)
    corresponding_v2: actuator.alpha.reversed, etc.
    related_settings:
    - <axis>.dir_pin
    related_pages:
    - motion-control
    - stepper-motors
  - name: z.reversed
    type: bool
    default: false
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:271
    section: '[actuator]'
    description: 'Z axis: Reverse motor direction without modifying the dir_pin definition. When set to true, the firmware
      inverts the direction signal internally, which is cleaner than adding ! to the dir_pin setting. This makes configuration
      more readable and easier to understand. If dir_pin already has ! inversion, the firmware issues a warning and ignores
      this setting to avoid double-inversion.'
    corresponding_v1: none (new feature in v2)
    corresponding_v2: actuator.alpha.reversed, etc.
    related_settings:
    - <axis>.dir_pin
    related_pages:
    - motion-control
    - stepper-motors
  - name: x.driver
    type: enum
    default: tmc2590 or tmc2660 (Prime board, based on board ID), external (E1+)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:300
    section: '[actuator]'
    description: 'X axis: Specifies the stepper driver chip type for this motor. Determines how the motor is controlled and
      which advanced features are available. TMC drivers provide SPI configuration, current control, stall detection, and
      diagnostics. External drivers use only step/dir/enable signals with no advanced features. The default driver type is
      automatically selected based on Smoothieboard v2 board ID.'
    corresponding_v1: motor_driver_control.{axis}.chip (completely restructured in v2)
    corresponding_v2: actuator.alpha.driver, etc.
    valid_values:
    - value: tmc2590
      description: ''
    - value: tmc2660
      description: ''
    - value: external
      description: ''
    related_settings:
    - tmc2590 or tmc2660 section
    - current control
    related_pages:
    - motion-control
    - advancedmotordriver
    - stepper-motors
  - name: y.driver
    type: enum
    default: tmc2590 or tmc2660 (Prime board, based on board ID), external (E1+)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:300
    section: '[actuator]'
    description: 'Y axis: Specifies the stepper driver chip type for this motor. Determines how the motor is controlled and
      which advanced features are available. TMC drivers provide SPI configuration, current control, stall detection, and
      diagnostics. External drivers use only step/dir/enable signals with no advanced features. The default driver type is
      automatically selected based on Smoothieboard v2 board ID.'
    corresponding_v1: motor_driver_control.{axis}.chip (completely restructured in v2)
    corresponding_v2: actuator.alpha.driver, etc.
    valid_values:
    - value: tmc2590
      description: ''
    - value: tmc2660
      description: ''
    - value: external
      description: ''
    related_settings:
    - tmc2590 or tmc2660 section
    - current control
    related_pages:
    - motion-control
    - advancedmotordriver
    - stepper-motors
  - name: z.driver
    type: enum
    default: tmc2590 or tmc2660 (Prime board, based on board ID), external (E1+)
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:300
    section: '[actuator]'
    description: 'Z axis: Specifies the stepper driver chip type for this motor. Determines how the motor is controlled and
      which advanced features are available. TMC drivers provide SPI configuration, current control, stall detection, and
      diagnostics. External drivers use only step/dir/enable signals with no advanced features. The default driver type is
      automatically selected based on Smoothieboard v2 board ID.'
    corresponding_v1: motor_driver_control.{axis}.chip (completely restructured in v2)
    corresponding_v2: actuator.alpha.driver, etc.
    valid_values:
    - value: tmc2590
      description: ''
    - value: tmc2660
      description: ''
    - value: external
      description: ''
    related_settings:
    - tmc2590 or tmc2660 section
    - current control
    related_pages:
    - motion-control
    - advancedmotordriver
    - stepper-motors
  - name: delta.slaved_to
    type: string
    default: '"" (not slaved)'
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:319
    section: '[actuator]'
    description: 'A/delta actuator: Slaves this secondary motor to alpha, beta, or gamma for a dual-motor X, Y, or Z axis.
      Only A/B/C actuators can be slaves, one slave is allowed per primary, and software slaving requires an internal TMC2590
      or TMC2660 driver. The secondary actuator must be last in the contiguous actuator list.'
    corresponding_v1: none (new feature in v2)
    corresponding_v2: actuator.delta.slaved_to
    valid_values:
    - value: alpha
      description: ''
    - value: beta
      description: ''
    - value: gamma
      description: ''
    - value: '"" (empty = not slaved)'
      description: ''
    related_settings:
    - <axis>.driver
    related_pages:
    - actuator-slaving
    - stepper-motors
  - name: epsilon.slaved_to
    type: string
    default: '"" (not slaved)'
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:319
    section: '[actuator]'
    description: 'B/epsilon actuator: Slaves this secondary motor to alpha, beta, or gamma for a dual-motor X, Y, or Z axis.
      Use epsilon when delta remains an independent A axis or is otherwise unavailable. The internal-TMC and actuator-ordering
      restrictions documented on the Slaved Axes page still apply.'
    corresponding_v1: none (new feature in v2)
    corresponding_v2: actuator.epsilon.slaved_to
    valid_values:
    - value: alpha
      description: ''
    - value: beta
      description: ''
    - value: gamma
      description: ''
    - value: '"" (empty = not slaved)'
      description: ''
    related_settings:
    - <axis>.driver
    related_pages:
    - actuator-slaving
    - stepper-motors
  - name: zeta.slaved_to
    type: string
    default: '"" (not slaved)'
    module: actuator
    context: Per-actuator setting
    defined_in: Firmware/src/robot/Robot.cpp:319
    section: '[actuator]'
    description: 'C/zeta actuator: Slaves this secondary motor to alpha, beta, or gamma for a dual-motor X, Y, or Z axis.
      Use zeta when preceding actuator slots are occupied. The internal-TMC, one-slave, and contiguous-order restrictions
      documented on the Slaved Axes page still apply.'
    corresponding_v1: none (new feature in v2)
    corresponding_v2: actuator.zeta.slaved_to
    valid_values:
    - value: alpha
      description: ''
    - value: beta
      description: ''
    - value: gamma
      description: ''
    - value: '"" (empty = not slaved)'
      description: ''
    related_settings:
    - <axis>.driver
    related_pages:
    - actuator-slaving
    - stepper-motors
  - name: common.check_driver_errors
    type: bool
    default: true
    module: actuator
    context: Global setting affecting all actuators
    defined_in: Firmware/src/robot/Robot.cpp:383
    section: '[actuator]'
    description: Enable periodic checking of TMC driver error status bits. When enabled, the firmware reads error registers
      from TMC2590/TMC2660 drivers to detect over-temperature warnings, over-temperature shutdown, short circuits to ground
      or supply, and other fault conditions. Errors are logged to console and can optionally trigger emergency halt. Disable
      only if experiencing false error reports.
    corresponding_v1: none (new feature in v2)
    corresponding_v2: actuator.common.check_driver_errors
    related_settings:
    - common.halt_on_driver_alarm
    related_pages:
    - motion-control
    - advancedmotordriver
  - name: common.halt_on_driver_alarm
    type: bool
    default: false
    module: actuator
    context: Global setting affecting all actuators
    defined_in: Firmware/src/robot/Robot.cpp:384
    section: '[actuator]'
    description: Enter ON_HALT emergency state when any TMC driver error is detected. When true, the machine immediately stops
      all motion and disables motors if a driver fault occurs (over-temperature, short circuit, etc.). When false (default),
      errors are logged to console but the machine continues operating. Setting to true provides maximum safety but may cause
      false stops if drivers report spurious errors.
    corresponding_v1: none (new safety feature in v2)
    corresponding_v2: actuator.common.halt_on_driver_alarm
    related_settings:
    - common.check_driver_errors
    related_pages:
    - motion-control
    - advancedmotordriver
    - killbutton
  - name: common.motors_enable_pin
    type: pin
    default: PH13! (Prime board with TMC drivers), nc (no TMC drivers)
    module: actuator
    context: Global setting affecting all actuators
    defined_in: Firmware/src/robot/Robot.cpp:390
    section: '[actuator]'
    description: Global enable pin that controls all motors simultaneously. When this pin is asserted (low with ! suffix),
      all motor drivers are enabled. When de-asserted, all drivers are disabled and motors are unpowered. This provides a
      master enable/disable control and is commonly used with emergency stop circuits. Pin assignment is board-specific.
    corresponding_v1: none (new feature in v2)
    corresponding_v2: actuator.common.motors_enable_pin
    valid_values:
    - value: STM32 pin specification with optional inversion or nc
      description: ''
    related_settings:
    - <axis>.en_pin
    related_pages:
    - motion-control
    - killbutton
    - emergencystop
  - name: arm_length
    type: number
    default: 250.0
    units: mm
    module: linear_delta
    context: Linear delta kinematics parameter
    defined_in: Firmware/src/robot/arm_solutions/LinearDeltaSolution.cpp:31
    section: '[linear delta]'
    description: Length of the diagonal rods connecting the carriages to the effector (end effector platform) in millimeters.
      This is the distance from the carriage pivot point to the effector pivot point. Critical parameter for delta kinematics
      - must be measured accurately for proper positioning. Longer arms generally allow for larger build volumes but may reduce
      precision at the edges. This value is used in all forward and inverse kinematics calculations.
    corresponding_v1: arm_length
    corresponding_v2: linear delta.arm_length
    description_bullets:
    - Measure from center of carriage ball joint to center of effector ball joint
    - Must be identical for all three arms on a delta printer
    - Typical values range from 200mm to 400mm depending on printer size
    - Longer arms = larger print volume but potentially less precision at edges
    - Critical for accurate positioning - measure carefully
    - Changes require recalibration with M665 in firmware
    related_settings:
    - arm_radius
    - arm_solution
    - delta_segments_per_second
    related_pages:
    - linear-delta
    - delta
    - calibration-delta
    examples:
    - 'arm_length = 250.0  # Standard for many delta printers'
    - 'arm_length = 300.0  # Larger delta with extended reach'
    - 'arm_length = 217.5  # Mini delta printer'
  - name: arm_radius
    type: number
    default: 124.0
    units: mm
    module: linear_delta
    context: Linear delta kinematics parameter
    defined_in: Firmware/src/robot/arm_solutions/LinearDeltaSolution.cpp:33
    section: '[linear delta]'
    description: Horizontal distance from the center of the build platform to the tower's carriage pivot point when the effector
      is centered and at Z=0. Also called delta radius. This defines the working radius of the delta printer. Along with arm_length,
      this is a critical calibration parameter. Smaller radius = more compact printer but smaller build volume. Larger radius
      = bigger build volume but requires longer arms.
    corresponding_v1: arm_radius
    corresponding_v2: linear delta.arm_radius
    description_bullets:
    - Distance from center to tower measured horizontally when effector is centered
    - Also known as delta radius or tower radius
    - Directly affects build volume diameter (build diameter ≈ 2 × arm_radius)
    - Must match physical printer geometry
    - Used with arm_length in all delta kinematics calculations
    - Changes require recalibration with M665 in firmware
    related_settings:
    - arm_length
    - arm_solution
    - delta_segments_per_second
    related_pages:
    - linear-delta
    - delta
    - calibration-delta
    examples:
    - 'arm_radius = 124.0  # Standard delta configuration'
    - 'arm_radius = 150.0  # Larger build volume delta'
    - 'arm_radius = 90.0   # Compact/mini delta'
- name: Planner
  description: Planner
  setting_count: 4
  settings:
  - name: junction_deviation
    type: number
    default: 0.05 (0.05mm)
    module: planner
    context: Global planner setting affecting all XY moves
    defined_in: Firmware/src/robot/Planner.cpp:40
    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.
    corresponding_v1: junction_deviation
    corresponding_v2: planner.junction_deviation
    units: mm
    related_settings:
    - planner.z_junction_deviation
    - motion_control.default_acceleration
    - actuator.{motor}.acceleration
    related_pages:
    - motion-control
    - planner
    - delta
    - cartesian
  - name: z_junction_deviation
    type: number
    default: -1 (disabled - uses standard junction_deviation value)
    module: planner
    context: Applied only to Z-axis-only moves (X=0, Y=0, Z≠0)
    defined_in: Firmware/src/robot/Planner.cpp:41
    description: Separate junction deviation setting specifically for Z-axis-only moves, allowing different cornering behavior
      for the Z axis which often has different mechanical characteristics than XY axes (lead screws vs. belts). When set to
      -1 (default), Z-only moves use the standard junction_deviation value. Setting a specific value enables independent Z-axis
      cornering control.
    corresponding_v1: z_junction_deviation
    corresponding_v2: planner.z_junction_deviation
    units: mm
    valid_values:
    - value: -1 (disabled
      description: ''
    - value: uses junction_deviation value) or 0.0 to 0.2 (when enabled)
      description: ''
    related_settings:
    - planner.junction_deviation
    - motion_control.z_axis_max_speed
    - actuator.gamma.max_rate
    related_pages:
    - motion-control
    - planner
    - endstops
  - name: minimum_planner_speed
    type: number
    default: 0
    module: planner
    context: Global speed floor applied during lookahead planning
    defined_in: Firmware/src/robot/Planner.cpp:42
    description: Minimum speed the planner will allow during motion, setting a floor for entry/exit speeds at junctions. A
      value of 0.0 allows the planner to decelerate to a complete stop at corners when needed for precision. Non-zero values
      maintain continuous motion flow but may sacrifice dimensional accuracy at sharp corners.
    corresponding_v1: minimum_planner_speed
    corresponding_v2: planner.minimum_planner_speed
    units: mm/s
    related_settings:
    - motion_control.default_feed_rate
    - planner.junction_deviation
    - motion_control.default_acceleration
    related_pages:
    - motion-control
    - planner
  - name: planner_queue_size
    type: number
    default: 32
    module: planner
    context: Allocated in DTCM RAM for fast access during motion planning
    defined_in: Firmware/src/robot/Planner.cpp:43
    description: 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 DTCM RAM. Each block holds complete motion
      data for one G-code move including step counts, acceleration parameters, and timing information for all actuators.
    corresponding_v1: planner_queue_size
    corresponding_v2: planner.planner_queue_size
    units: blocks (number of motion blocks)
    valid_values:
    - value: 16 to 128 (practical limits based on available DTCM RAM)
      description: ''
    related_settings:
    - motion_control.default_acceleration
    - planner.junction_deviation
    - motion_control.delta_segments_per_second
    related_pages:
    - motion-control
    - planner
    - delta
- name: Conveyor
  description: Conveyor (Motion Queue Management)
  setting_count: 34
  settings:
  - name: queue_delay_time_ms
    type: number
    default: 100
    module: conveyor
    context: Global conveyor behavior setting
    defined_in: Firmware/src/robot/Conveyor.cpp:47
    description: 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 several blocks before execution begins, ensuring smoother
      motion planning and preventing stuttering on the first few moves of a job. The conveyor waits for either this timeout
      to expire OR for the queue to become full before allowing the StepTicker to fetch blocks for execution.
    corresponding_v1: queue_delay_time_ms (functionally identical, same default value)
    corresponding_v2: queue_delay_time_ms
    units: milliseconds
    related_settings:
    - planner.planner_queue_size
    related_pages:
    - motion-control
    - howitworks
  - name: x.steps_per_mm
    type: number
    default: 80 (for alpha/beta XY axes), 2560 (for gamma Z axis with lead screw), 700 (for delta extruder)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:370
    description: '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 motor steps and physical distance. The value depends on motor step angle,
      microstepping setting, mechanical transmission ratio (belt pitch and pulley teeth for belt drives, or lead pitch for
      lead screws), and gear ratios for extruders.'
    corresponding_v1: alpha_steps_per_mm
    corresponding_v2: x.steps_per_mm
    units: steps/mm
    related_settings:
    - <axis>.microsteps
    - <axis>.max_rate
    - <axis>.driver
    related_pages:
    - stepper-motors
    - delta
    - extruder-guide
  - name: y.steps_per_mm
    type: number
    default: 80 (for alpha/beta XY axes), 2560 (for gamma Z axis with lead screw), 700 (for delta extruder)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:370
    description: '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 motor steps and physical distance. The value depends on motor step angle,
      microstepping setting, mechanical transmission ratio (belt pitch and pulley teeth for belt drives, or lead pitch for
      lead screws), and gear ratios for extruders.'
    corresponding_v1: beta_steps_per_mm
    corresponding_v2: y.steps_per_mm
    units: steps/mm
    related_settings:
    - <axis>.microsteps
    - <axis>.max_rate
    - <axis>.driver
    related_pages:
    - stepper-motors
    - delta
    - extruder-guide
  - name: z.steps_per_mm
    type: number
    default: 80 (for alpha/beta XY axes), 2560 (for gamma Z axis with lead screw), 700 (for delta extruder)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:370
    description: '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 motor steps and physical distance. The value depends on motor step angle,
      microstepping setting, mechanical transmission ratio (belt pitch and pulley teeth for belt drives, or lead pitch for
      lead screws), and gear ratios for extruders.'
    corresponding_v1: gamma_steps_per_mm
    corresponding_v2: z.steps_per_mm
    units: steps/mm
    related_settings:
    - <axis>.microsteps
    - <axis>.max_rate
    - <axis>.driver
    related_pages:
    - stepper-motors
    - delta
    - extruder-guide
  - name: x.max_rate
    type: number
    default: 30000 (500 mm/s)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:371
    description: 'X axis: Maximum speed this actuator can achieve, specified in mm/min. Limits are enforced during motion
      planning to prevent missed steps, mechanical damage, or loss of position. The planner will never command this actuator
      to move faster than this rate. Value is specified in mm/min but converted internally to mm/s by dividing by 60.'
    corresponding_v1: alpha_max_rate
    corresponding_v2: x.max_rate
    units: mm/min
    related_settings:
    - motion control.x_axis_max_speed
    - motion control.y_axis_max_speed
    - motion control.z_axis_max_speed
    - <axis>.steps_per_mm
    - <axis>.acceleration
    related_pages:
    - motion-control
    - stepper-motors
  - name: y.max_rate
    type: number
    default: 30000 (500 mm/s)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:371
    description: 'Y axis: Maximum speed this actuator can achieve, specified in mm/min. Limits are enforced during motion
      planning to prevent missed steps, mechanical damage, or loss of position. The planner will never command this actuator
      to move faster than this rate. Value is specified in mm/min but converted internally to mm/s by dividing by 60.'
    corresponding_v1: beta_max_rate
    corresponding_v2: y.max_rate
    units: mm/min
    related_settings:
    - motion control.x_axis_max_speed
    - motion control.y_axis_max_speed
    - motion control.z_axis_max_speed
    - <axis>.steps_per_mm
    - <axis>.acceleration
    related_pages:
    - motion-control
    - stepper-motors
  - name: z.max_rate
    type: number
    default: 30000 (500 mm/s)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:371
    description: 'Z axis: Maximum speed this actuator can achieve, specified in mm/min. Limits are enforced during motion
      planning to prevent missed steps, mechanical damage, or loss of position. The planner will never command this actuator
      to move faster than this rate. Value is specified in mm/min but converted internally to mm/s by dividing by 60.'
    corresponding_v1: gamma_max_rate
    corresponding_v2: z.max_rate
    units: mm/min
    related_settings:
    - motion control.x_axis_max_speed
    - motion control.y_axis_max_speed
    - motion control.z_axis_max_speed
    - <axis>.steps_per_mm
    - <axis>.acceleration
    related_pages:
    - motion-control
    - stepper-motors
  - name: x.acceleration
    type: number
    default: -1 (use global motion control.default_acceleration)
    module: actuator
    context: Per-actuator instance setting (optional override of global default)
    defined_in: Firmware/src/robot/Robot.cpp:372
    description: '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.default_acceleration setting for the X axis only. Use this to limit acceleration
      on heavy axes (typically Z) or axes with different mechanical characteristics. A value of -1 means use the global default
      acceleration.'
    corresponding_v1: none (v1 had global acceleration only, no per-axis override)
    corresponding_v2: x.acceleration
    units: mm/s²
    related_settings:
    - motion control.default_acceleration
    - planner.junction_deviation
    - <axis>.max_rate
    related_pages:
    - motion-control
  - name: y.acceleration
    type: number
    default: -1 (use global motion control.default_acceleration)
    module: actuator
    context: Per-actuator instance setting (optional override of global default)
    defined_in: Firmware/src/robot/Robot.cpp:372
    description: '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.default_acceleration setting for the Y axis only. Use this to limit acceleration
      on heavy axes (typically Z) or axes with different mechanical characteristics. A value of -1 means use the global default
      acceleration.'
    corresponding_v1: none (v1 had global acceleration only, no per-axis override)
    corresponding_v2: y.acceleration
    units: mm/s²
    related_settings:
    - motion control.default_acceleration
    - planner.junction_deviation
    - <axis>.max_rate
    related_pages:
    - motion-control
  - name: z.acceleration
    type: number
    default: -1 (use global motion control.default_acceleration)
    module: actuator
    context: Per-actuator instance setting (optional override of global default)
    defined_in: Firmware/src/robot/Robot.cpp:372
    description: '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.default_acceleration setting for the Z axis only. Use this to limit acceleration
      on heavy axes (typically Z) or axes with different mechanical characteristics. A value of -1 means use the global default
      acceleration.'
    corresponding_v1: none (v1 had global acceleration only, no per-axis override)
    corresponding_v2: z.acceleration
    units: mm/s²
    related_settings:
    - motion control.default_acceleration
    - planner.junction_deviation
    - <axis>.max_rate
    related_pages:
    - motion-control
  - name: x.step_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD3, beta=PK2, gamma=PG3, delta=PC6)'
    module: actuator
    context: Per-actuator hardware pin mapping
    defined_in: Firmware/src/robot/Robot.cpp:266
    description: '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 duration is controlled by the global system.step_pulse_us
      setting. This pin must be connected to the STEP input of your stepper driver chip.'
    corresponding_v1: alpha_step_pin
    corresponding_v2: x.step_pin
    valid_values:
    - value: Valid STM32 pin name (e.g.
      description: ''
    - value: PD3
      description: ''
    - value: PK2
      description: ''
    - value: PE5) or nc (not connected)
      description: ''
    related_settings:
    - <axis>.dir_pin
    - <axis>.en_pin
    - system.step_pulse_us
    - system.step_frequency
    related_pages:
    - pinout
    - stepper-motors
  - name: y.step_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD3, beta=PK2, gamma=PG3, delta=PC6)'
    module: actuator
    context: Per-actuator hardware pin mapping
    defined_in: Firmware/src/robot/Robot.cpp:266
    description: '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 duration is controlled by the global system.step_pulse_us
      setting. This pin must be connected to the STEP input of your stepper driver chip.'
    corresponding_v1: beta_step_pin
    corresponding_v2: y.step_pin
    valid_values:
    - value: Valid STM32 pin name (e.g.
      description: ''
    - value: PD3
      description: ''
    - value: PK2
      description: ''
    - value: PE5) or nc (not connected)
      description: ''
    related_settings:
    - <axis>.dir_pin
    - <axis>.en_pin
    - system.step_pulse_us
    - system.step_frequency
    related_pages:
    - pinout
    - stepper-motors
  - name: z.step_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD3, beta=PK2, gamma=PG3, delta=PC6)'
    module: actuator
    context: Per-actuator hardware pin mapping
    defined_in: Firmware/src/robot/Robot.cpp:266
    description: '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 duration is controlled by the global system.step_pulse_us
      setting. This pin must be connected to the STEP input of your stepper driver chip.'
    corresponding_v1: gamma_step_pin
    corresponding_v2: z.step_pin
    valid_values:
    - value: Valid STM32 pin name (e.g.
      description: ''
    - value: PD3
      description: ''
    - value: PK2
      description: ''
    - value: PE5) or nc (not connected)
      description: ''
    related_settings:
    - <axis>.dir_pin
    - <axis>.en_pin
    - system.step_pulse_us
    - system.step_frequency
    related_pages:
    - pinout
    - stepper-motors
  - name: x.dir_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD4, beta=PG2, gamma=PG4, delta=PG5)'
    module: actuator
    context: Per-actuator hardware pin mapping
    defined_in: Firmware/src/robot/Robot.cpp:267
    description: '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 reverse. If the motor moves in the wrong direction, either add the
      ! modifier to this pin OR use the <axis>.reversed setting (the reversed setting is preferred for clearer configuration).'
    corresponding_v1: alpha_dir_pin
    corresponding_v2: x.dir_pin
    valid_values:
    - value: Valid STM32 pin name with optional ! inversion modifier
      description: ''
    related_settings:
    - <axis>.step_pin
    - <axis>.reversed
    - <axis>.en_pin
    related_pages:
    - pinout
    - stepper-motors
  - name: y.dir_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD4, beta=PG2, gamma=PG4, delta=PG5)'
    module: actuator
    context: Per-actuator hardware pin mapping
    defined_in: Firmware/src/robot/Robot.cpp:267
    description: '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 reverse. If the motor moves in the wrong direction, either add the
      ! modifier to this pin OR use the <axis>.reversed setting (the reversed setting is preferred for clearer configuration).'
    corresponding_v1: beta_dir_pin
    corresponding_v2: y.dir_pin
    valid_values:
    - value: Valid STM32 pin name with optional ! inversion modifier
      description: ''
    related_settings:
    - <axis>.step_pin
    - <axis>.reversed
    - <axis>.en_pin
    related_pages:
    - pinout
    - stepper-motors
  - name: z.dir_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD4, beta=PG2, gamma=PG4, delta=PG5)'
    module: actuator
    context: Per-actuator hardware pin mapping
    defined_in: Firmware/src/robot/Robot.cpp:267
    description: '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 reverse. If the motor moves in the wrong direction, either add the
      ! modifier to this pin OR use the <axis>.reversed setting (the reversed setting is preferred for clearer configuration).'
    corresponding_v1: gamma_dir_pin
    corresponding_v2: z.dir_pin
    valid_values:
    - value: Valid STM32 pin name with optional ! inversion modifier
      description: ''
    related_settings:
    - <axis>.step_pin
    - <axis>.reversed
    - <axis>.en_pin
    related_pages:
    - pinout
    - stepper-motors
  - name: x.en_pin
    type: pin
    default: nc (not connected - Prime board uses driver chip enable control)
    module: actuator
    context: Per-actuator hardware pin mapping (optional)
    defined_in: Firmware/src/robot/Robot.cpp:268
    description: '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 the drivers have internal enable control and use the global common.motors_enable_pin
      instead. External stepper drivers may require individual enable pins, in which case configure them here.'
    corresponding_v1: alpha_en_pin
    corresponding_v2: x.en_pin
    valid_values:
    - value: Valid STM32 pin name with optional ! inversion
      description: ''
    - value: or nc
      description: ''
    related_settings:
    - common.motors_enable_pin
    - <axis>.step_pin
    - <axis>.dir_pin
    related_pages:
    - pinout
    - stepper-motors
  - name: y.en_pin
    type: pin
    default: nc (not connected - Prime board uses driver chip enable control)
    module: actuator
    context: Per-actuator hardware pin mapping (optional)
    defined_in: Firmware/src/robot/Robot.cpp:268
    description: '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 the drivers have internal enable control and use the global common.motors_enable_pin
      instead. External stepper drivers may require individual enable pins, in which case configure them here.'
    corresponding_v1: beta_en_pin
    corresponding_v2: y.en_pin
    valid_values:
    - value: Valid STM32 pin name with optional ! inversion
      description: ''
    - value: or nc
      description: ''
    related_settings:
    - common.motors_enable_pin
    - <axis>.step_pin
    - <axis>.dir_pin
    related_pages:
    - pinout
    - stepper-motors
  - name: z.en_pin
    type: pin
    default: nc (not connected - Prime board uses driver chip enable control)
    module: actuator
    context: Per-actuator hardware pin mapping (optional)
    defined_in: Firmware/src/robot/Robot.cpp:268
    description: '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 the drivers have internal enable control and use the global common.motors_enable_pin
      instead. External stepper drivers may require individual enable pins, in which case configure them here.'
    corresponding_v1: gamma_en_pin
    corresponding_v2: z.en_pin
    valid_values:
    - value: Valid STM32 pin name with optional ! inversion
      description: ''
    - value: or nc
      description: ''
    related_settings:
    - common.motors_enable_pin
    - <axis>.step_pin
    - <axis>.dir_pin
    related_pages:
    - pinout
    - stepper-motors
  - name: x.driver
    type: enum
    default: tmc2590 or tmc2660 (Prime board, auto-detected based on board_id), external (for epsilon and beyond)
    module: actuator
    context: Per-actuator driver type specification
    defined_in: Firmware/src/robot/Robot.cpp:300
    description: '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 = XYZA). The specific chip type is auto-detected based on the
      board''s hardware ID. Additional axes (epsilon, zeta) or external expansion drivers must use "external" mode which provides
      basic step/dir/enable control without advanced TMC features.'
    corresponding_v1: none (v1 had external motor_driver_control module, v2 has integrated TMC support)
    corresponding_v2: x.driver
    valid_values:
    - value: tmc2590
      description: ''
    - value: tmc2660
      description: ''
    - value: external
      description: ''
    related_settings:
    - tmc2590.*
    - tmc2660.*
    - current control.<axis>.current
    related_pages:
    - advancedmotordriver
  - name: y.driver
    type: enum
    default: tmc2590 or tmc2660 (Prime board, auto-detected based on board_id), external (for epsilon and beyond)
    module: actuator
    context: Per-actuator driver type specification
    defined_in: Firmware/src/robot/Robot.cpp:300
    description: '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 = XYZA). The specific chip type is auto-detected based on the
      board''s hardware ID. Additional axes (epsilon, zeta) or external expansion drivers must use "external" mode which provides
      basic step/dir/enable control without advanced TMC features.'
    corresponding_v1: none (v1 had external motor_driver_control module, v2 has integrated TMC support)
    corresponding_v2: y.driver
    valid_values:
    - value: tmc2590
      description: ''
    - value: tmc2660
      description: ''
    - value: external
      description: ''
    related_settings:
    - tmc2590.*
    - tmc2660.*
    - current control.<axis>.current
    related_pages:
    - advancedmotordriver
  - name: z.driver
    type: enum
    default: tmc2590 or tmc2660 (Prime board, auto-detected based on board_id), external (for epsilon and beyond)
    module: actuator
    context: Per-actuator driver type specification
    defined_in: Firmware/src/robot/Robot.cpp:300
    description: '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 = XYZA). The specific chip type is auto-detected based on the
      board''s hardware ID. Additional axes (epsilon, zeta) or external expansion drivers must use "external" mode which provides
      basic step/dir/enable control without advanced TMC features.'
    corresponding_v1: none (v1 had external motor_driver_control module, v2 has integrated TMC support)
    corresponding_v2: z.driver
    valid_values:
    - value: tmc2590
      description: ''
    - value: tmc2660
      description: ''
    - value: external
      description: ''
    related_settings:
    - tmc2590.*
    - tmc2660.*
    - current control.<axis>.current
    related_pages:
    - advancedmotordriver
  - name: x.microsteps
    type: number
    default: 32
    module: actuator
    context: Per-actuator driver microstepping configuration
    defined_in: Firmware/src/robot/Robot.cpp:311
    description: Microstepping subdivision setting for the X axis's stepper driver. Microstepping divides each full motor
      step into smaller sub-steps for smoother motion and quieter operation. Higher microstepping values provide smoother
      motion and reduced noise but may limit maximum achievable speed and torque at high velocities. The Prime board default
      of 32 provides excellent balance between smoothness and performance.
    corresponding_v1: none (v1 configured microsteps in motor_driver_control module or via hardware jumpers)
    corresponding_v2: x.microsteps
    valid_values:
    - value: '1'
      description: ''
    - value: '2'
      description: ''
    - value: '4'
      description: ''
    - value: '8'
      description: ''
    - value: '16'
      description: ''
    - value: '32'
      description: ''
    - value: '64'
      description: ''
    - value: '128'
      description: ''
    - value: 256 (driver-dependent
      description: ''
    - value: TMC supports all
      description: ''
    - value: external drivers vary)
      description: ''
    related_settings:
    - <axis>.steps_per_mm
    - tmc2590.<axis>.step_interpolation
    - <axis>.max_rate
    related_pages:
    - stepper-motors
    - advancedmotordriver
  - name: y.microsteps
    type: number
    default: 32
    module: actuator
    context: Per-actuator driver microstepping configuration
    defined_in: Firmware/src/robot/Robot.cpp:311
    description: Microstepping subdivision setting for the Y axis's stepper driver. Microstepping divides each full motor
      step into smaller sub-steps for smoother motion and quieter operation. Higher microstepping values provide smoother
      motion and reduced noise but may limit maximum achievable speed and torque at high velocities. The Prime board default
      of 32 provides excellent balance between smoothness and performance.
    corresponding_v1: none (v1 configured microsteps in motor_driver_control module or via hardware jumpers)
    corresponding_v2: y.microsteps
    valid_values:
    - value: '1'
      description: ''
    - value: '2'
      description: ''
    - value: '4'
      description: ''
    - value: '8'
      description: ''
    - value: '16'
      description: ''
    - value: '32'
      description: ''
    - value: '64'
      description: ''
    - value: '128'
      description: ''
    - value: 256 (driver-dependent
      description: ''
    - value: TMC supports all
      description: ''
    - value: external drivers vary)
      description: ''
    related_settings:
    - <axis>.steps_per_mm
    - tmc2590.<axis>.step_interpolation
    - <axis>.max_rate
    related_pages:
    - stepper-motors
    - advancedmotordriver
  - name: z.microsteps
    type: number
    default: 32
    module: actuator
    context: Per-actuator driver microstepping configuration
    defined_in: Firmware/src/robot/Robot.cpp:311
    description: Microstepping subdivision setting for the Z axis's stepper driver. Microstepping divides each full motor
      step into smaller sub-steps for smoother motion and quieter operation. Higher microstepping values provide smoother
      motion and reduced noise but may limit maximum achievable speed and torque at high velocities. The Prime board default
      of 32 provides excellent balance between smoothness and performance.
    corresponding_v1: none (v1 configured microsteps in motor_driver_control module or via hardware jumpers)
    corresponding_v2: z.microsteps
    valid_values:
    - value: '1'
      description: ''
    - value: '2'
      description: ''
    - value: '4'
      description: ''
    - value: '8'
      description: ''
    - value: '16'
      description: ''
    - value: '32'
      description: ''
    - value: '64'
      description: ''
    - value: '128'
      description: ''
    - value: 256 (driver-dependent
      description: ''
    - value: TMC supports all
      description: ''
    - value: external drivers vary)
      description: ''
    related_settings:
    - <axis>.steps_per_mm
    - tmc2590.<axis>.step_interpolation
    - <axis>.max_rate
    related_pages:
    - stepper-motors
    - advancedmotordriver
  - name: x.reversed
    type: bool
    default: false
    module: actuator
    context: Per-actuator direction control
    defined_in: Firmware/src/robot/Robot.cpp:271
    description: 'X axis: Software-based reversal of motor direction without modifying hardware pin definitions. This is a
      cleaner and more readable alternative to adding the ! inversion modifier to <axis>.dir_pin. If the motor moves in the
      wrong direction during homing or normal moves, set this to true. If dir_pin already has the ! modifier, this setting
      is ignored and a warning is printed to avoid double-inversion.'
    corresponding_v1: none (v1 only supported pin inversion with ! modifier)
    corresponding_v2: x.reversed
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - <axis>.dir_pin
    related_pages:
    - stepper-motors
  - name: y.reversed
    type: bool
    default: false
    module: actuator
    context: Per-actuator direction control
    defined_in: Firmware/src/robot/Robot.cpp:271
    description: 'Y axis: Software-based reversal of motor direction without modifying hardware pin definitions. This is a
      cleaner and more readable alternative to adding the ! inversion modifier to <axis>.dir_pin. If the motor moves in the
      wrong direction during homing or normal moves, set this to true. If dir_pin already has the ! modifier, this setting
      is ignored and a warning is printed to avoid double-inversion.'
    corresponding_v1: none (v1 only supported pin inversion with ! modifier)
    corresponding_v2: y.reversed
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - <axis>.dir_pin
    related_pages:
    - stepper-motors
  - name: z.reversed
    type: bool
    default: false
    module: actuator
    context: Per-actuator direction control
    defined_in: Firmware/src/robot/Robot.cpp:271
    description: 'Z axis: Software-based reversal of motor direction without modifying hardware pin definitions. This is a
      cleaner and more readable alternative to adding the ! inversion modifier to <axis>.dir_pin. If the motor moves in the
      wrong direction during homing or normal moves, set this to true. If dir_pin already has the ! modifier, this setting
      is ignored and a warning is printed to avoid double-inversion.'
    corresponding_v1: none (v1 only supported pin inversion with ! modifier)
    corresponding_v2: z.reversed
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - <axis>.dir_pin
    related_pages:
    - stepper-motors
  - name: delta.slaved_to
    type: enum
    default: '"" (empty string = not slaved)'
    module: actuator
    context: Per-actuator dual-motor configuration (advanced)
    defined_in: Firmware/src/robot/Robot.cpp:319
    description: 'A/delta actuator: Configures this secondary internal-TMC motor to mirror alpha, beta, or gamma. It ceases
      to be an independent A axis. Match the motor calibration and follow the one-slave and actuator-ordering restrictions
      on the Slaved Axes page.'
    corresponding_v1: none (v1 did not support axis slaving)
    corresponding_v2: delta.slaved_to
    valid_values:
    - value: alpha
      description: ''
    - value: beta
      description: ''
    - value: gamma
      description: ''
    - value: '"" (or none)'
      description: ''
    related_settings:
    - <axis>.steps_per_mm
    - <axis>.microsteps
    - <axis>.driver
    related_pages:
    - actuator-slaving
  - name: epsilon.slaved_to
    type: enum
    default: '"" (empty string = not slaved)'
    module: actuator
    context: Per-actuator dual-motor configuration (advanced)
    defined_in: Firmware/src/robot/Robot.cpp:319
    description: 'B/epsilon actuator: Configures this secondary internal-TMC motor to mirror alpha, beta, or gamma. It ceases
      to be an independent B axis. Use it when delta remains independent, and follow the ordering restrictions on the Slaved
      Axes page.'
    corresponding_v1: none (v1 did not support axis slaving)
    corresponding_v2: epsilon.slaved_to
    valid_values:
    - value: alpha
      description: ''
    - value: beta
      description: ''
    - value: gamma
      description: ''
    - value: '"" (or none)'
      description: ''
    related_settings:
    - <axis>.steps_per_mm
    - <axis>.microsteps
    - <axis>.driver
    related_pages:
    - actuator-slaving
  - name: zeta.slaved_to
    type: enum
    default: '"" (empty string = not slaved)'
    module: actuator
    context: Per-actuator dual-motor configuration (advanced)
    defined_in: Firmware/src/robot/Robot.cpp:319
    description: 'C/zeta actuator: Configures this secondary internal-TMC motor to mirror alpha, beta, or gamma. It ceases
      to be an independent C axis. Use it when earlier actuator slots are occupied, and follow the ordering restrictions on
      the Slaved Axes page.'
    corresponding_v1: none (v1 did not support axis slaving)
    corresponding_v2: zeta.slaved_to
    valid_values:
    - value: alpha
      description: ''
    - value: beta
      description: ''
    - value: gamma
      description: ''
    - value: '"" (or none)'
      description: ''
    related_settings:
    - <axis>.steps_per_mm
    - <axis>.microsteps
    - <axis>.driver
    related_pages:
    - actuator-slaving
  - name: common.check_driver_errors
    type: bool
    default: true
    module: actuator
    context: Global TMC driver error monitoring (TMC drivers only)
    defined_in: Firmware/src/robot/Robot.cpp:383
    description: Enables periodic checking of TMC driver error status bits including overtemperature warnings, overtemperature
      shutdown, short circuit detection, open load detection, and stall detection if configured. Errors are logged to the
      console and may trigger system halt if halt_on_driver_alarm is also enabled. Checking occurs approximately once per
      second via the SlowTicker timer interrupt.
    corresponding_v1: none (v1 did not have integrated TMC driver support)
    corresponding_v2: common.check_driver_errors
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - common.halt_on_driver_alarm
    related_pages:
    - advancedmotordriver
    - troubleshooting
  - name: common.halt_on_driver_alarm
    type: bool
    default: false
    module: actuator
    context: Global TMC driver error response behavior (TMC drivers only)
    defined_in: Firmware/src/robot/Robot.cpp:384
    description: 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. If false (default), driver errors are logged to console but the system continues
      operation, allowing manual intervention. This setting provides a trade-off between safety (automatic halt) and operational
      flexibility (manual response to errors). Requires check_driver_errors to be enabled.
    corresponding_v1: none (v1 did not have integrated TMC driver support)
    corresponding_v2: common.halt_on_driver_alarm
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - common.check_driver_errors
    related_pages:
    - advancedmotordriver
    - troubleshooting
    - emergencystop
  - name: common.motors_enable_pin
    type: pin
    default: PH13! (Prime board with TMC drivers), nc (external drivers)
    module: actuator
    context: Global motor enable control for all drivers
    defined_in: Firmware/src/robot/Robot.cpp:390
    description: 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 TMC driver chips, serving as a master enable/disable for
      all motors. Setting this pin to true (accounting for inversion) enables all motors globally. Individual motor enable
      pins (<axis>.en_pin) can provide additional per-motor control on top of this global enable.
    corresponding_v1: none (v1 did not have global motor enable pin)
    corresponding_v2: common.motors_enable_pin
    valid_values:
    - value: Valid STM32 pin name with optional ! inversion
      description: ''
    - value: or nc
      description: ''
    related_settings:
    - <axis>.en_pin
    related_pages:
    - pinout
    - emergencystop
- name: Actuators
  description: Actuators (Stepper Motors & Drivers)
  setting_count: 33
  settings:
  - name: actuator.x.step_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD3, beta=PK2, gamma=PG3, delta=PC6, others=nc)'
    module: actuator
    context: Per-actuator instance setting (one for each motor axis)
    defined_in: Firmware/src/robot/Robot.cpp:266
    description: '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. The pin
      must be connected to the STEP input of your stepper driver. Both step and dir pins must be defined for an axis to be
      active.'
    corresponding_v1: alpha_step_pin
    corresponding_v2: actuator.alpha.step_pin, etc. (same setting)
    valid_values:
    - value: Pin specification in format P<port><pin> or nc
      description: ''
    related_settings:
    - actuator.<axis>.dir_pin
    - actuator.<axis>.en_pin
    - actuator.<axis>.driver
    related_pages:
    - smoothieboard-v2-prime
    - pin-configuration
    - stepper-motors
  - name: actuator.y.step_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD3, beta=PK2, gamma=PG3, delta=PC6, others=nc)'
    module: actuator
    context: Per-actuator instance setting (one for each motor axis)
    defined_in: Firmware/src/robot/Robot.cpp:266
    description: '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. The pin
      must be connected to the STEP input of your stepper driver. Both step and dir pins must be defined for an axis to be
      active.'
    corresponding_v1: beta_step_pin
    corresponding_v2: actuator.alpha.step_pin, etc. (same setting)
    valid_values:
    - value: Pin specification in format P<port><pin> or nc
      description: ''
    related_settings:
    - actuator.<axis>.dir_pin
    - actuator.<axis>.en_pin
    - actuator.<axis>.driver
    related_pages:
    - smoothieboard-v2-prime
    - pin-configuration
    - stepper-motors
  - name: actuator.z.step_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD3, beta=PK2, gamma=PG3, delta=PC6, others=nc)'
    module: actuator
    context: Per-actuator instance setting (one for each motor axis)
    defined_in: Firmware/src/robot/Robot.cpp:266
    description: '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. The pin
      must be connected to the STEP input of your stepper driver. Both step and dir pins must be defined for an axis to be
      active.'
    corresponding_v1: gamma_step_pin
    corresponding_v2: actuator.alpha.step_pin, etc. (same setting)
    valid_values:
    - value: Pin specification in format P<port><pin> or nc
      description: ''
    related_settings:
    - actuator.<axis>.dir_pin
    - actuator.<axis>.en_pin
    - actuator.<axis>.driver
    related_pages:
    - smoothieboard-v2-prime
    - pin-configuration
    - stepper-motors
  - name: actuator.x.dir_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD4, beta=PG2, gamma=PG4, delta=PG5, others=nc)'
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:267
    description: '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
      ! to the pin specification or by using the reversed setting.'
    corresponding_v1: alpha_dir_pin
    corresponding_v2: actuator.alpha.dir_pin, etc. (same setting)
    valid_values:
    - value: Pin specification in format P<port><pin> or nc
      description: ''
    - value: optionally with ! modifier for inversion
      description: ''
    related_settings:
    - actuator.<axis>.step_pin
    - actuator.<axis>.reversed
    - actuator.<axis>.en_pin
    related_pages:
    - smoothieboard-v2-prime
    - pin-configuration
    - stepper-motors
  - name: actuator.y.dir_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD4, beta=PG2, gamma=PG4, delta=PG5, others=nc)'
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:267
    description: '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
      ! to the pin specification or by using the reversed setting.'
    corresponding_v1: beta_dir_pin
    corresponding_v2: actuator.alpha.dir_pin, etc. (same setting)
    valid_values:
    - value: Pin specification in format P<port><pin> or nc
      description: ''
    - value: optionally with ! modifier for inversion
      description: ''
    related_settings:
    - actuator.<axis>.step_pin
    - actuator.<axis>.reversed
    - actuator.<axis>.en_pin
    related_pages:
    - smoothieboard-v2-prime
    - pin-configuration
    - stepper-motors
  - name: actuator.z.dir_pin
    type: pin
    default: 'Board-specific (Prime: alpha=PD4, beta=PG2, gamma=PG4, delta=PG5, others=nc)'
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:267
    description: '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
      ! to the pin specification or by using the reversed setting.'
    corresponding_v1: gamma_dir_pin
    corresponding_v2: actuator.alpha.dir_pin, etc. (same setting)
    valid_values:
    - value: Pin specification in format P<port><pin> or nc
      description: ''
    - value: optionally with ! modifier for inversion
      description: ''
    related_settings:
    - actuator.<axis>.step_pin
    - actuator.<axis>.reversed
    - actuator.<axis>.en_pin
    related_pages:
    - smoothieboard-v2-prime
    - pin-configuration
    - stepper-motors
  - name: actuator.x.en_pin
    type: pin
    default: nc (not connected, uses driver enable or global enable instead)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:268
    description: '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 nc and use either the global motors_enable_pin or driver-specific enable via SPI (for TMC drivers).'
    corresponding_v1: alpha_en_pin
    corresponding_v2: actuator.alpha.en_pin, etc. (same setting)
    valid_values:
    - value: Pin specification in format P<port><pin> or nc
      description: ''
    related_settings:
    - actuator.common.motors_enable_pin
    - actuator.<axis>.step_pin
    - actuator.<axis>.dir_pin
    related_pages:
    - smoothieboard-v2-prime
    - pin-configuration
    - stepper-motors
  - name: actuator.y.en_pin
    type: pin
    default: nc (not connected, uses driver enable or global enable instead)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:268
    description: '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 nc and use either the global motors_enable_pin or driver-specific enable via SPI (for TMC drivers).'
    corresponding_v1: beta_en_pin
    corresponding_v2: actuator.alpha.en_pin, etc. (same setting)
    valid_values:
    - value: Pin specification in format P<port><pin> or nc
      description: ''
    related_settings:
    - actuator.common.motors_enable_pin
    - actuator.<axis>.step_pin
    - actuator.<axis>.dir_pin
    related_pages:
    - smoothieboard-v2-prime
    - pin-configuration
    - stepper-motors
  - name: actuator.z.en_pin
    type: pin
    default: nc (not connected, uses driver enable or global enable instead)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:268
    description: '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 nc and use either the global motors_enable_pin or driver-specific enable via SPI (for TMC drivers).'
    corresponding_v1: gamma_en_pin
    corresponding_v2: actuator.alpha.en_pin, etc. (same setting)
    valid_values:
    - value: Pin specification in format P<port><pin> or nc
      description: ''
    related_settings:
    - actuator.common.motors_enable_pin
    - actuator.<axis>.step_pin
    - actuator.<axis>.dir_pin
    related_pages:
    - smoothieboard-v2-prime
    - pin-configuration
    - stepper-motors
  - name: actuator.x.steps_per_mm
    type: number
    default: 80.0 (XY axes), 2560.0 (Z axis), 700.0 (extruder typical)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:370
    description: '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. The value depends on motor steps per revolution (typically
      200 for 1.8° steppers, 400 for 0.9° steppers), microstepping setting, and mechanical transmission (belt pitch and pulley
      teeth for belts, thread pitch for lead screws).'
    corresponding_v1: alpha_steps_per_mm
    corresponding_v2: actuator.alpha.steps_per_mm, etc. (same setting)
    units: steps/mm
    related_settings:
    - actuator.<axis>.microsteps
    - actuator.<axis>.max_rate
    - motion control.default_acceleration
    related_pages:
    - stepper-motors
    - motion-control
    - extruder-guide
  - name: actuator.y.steps_per_mm
    type: number
    default: 80.0 (XY axes), 2560.0 (Z axis), 700.0 (extruder typical)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:370
    description: '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. The value depends on motor steps per revolution (typically
      200 for 1.8° steppers, 400 for 0.9° steppers), microstepping setting, and mechanical transmission (belt pitch and pulley
      teeth for belts, thread pitch for lead screws).'
    corresponding_v1: beta_steps_per_mm
    corresponding_v2: actuator.alpha.steps_per_mm, etc. (same setting)
    units: steps/mm
    related_settings:
    - actuator.<axis>.microsteps
    - actuator.<axis>.max_rate
    - motion control.default_acceleration
    related_pages:
    - stepper-motors
    - motion-control
    - extruder-guide
  - name: actuator.z.steps_per_mm
    type: number
    default: 80.0 (XY axes), 2560.0 (Z axis), 700.0 (extruder typical)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:370
    description: 'Z axis: Specifies the number of motor steps required to move exactly 1mm on the Z axis. This is the most
      critical calibration parameter for accurate positioning. The value depends on motor steps per revolution (typically
      200 for 1.8° steppers, 400 for 0.9° steppers), microstepping setting, and mechanical transmission (belt pitch and pulley
      teeth for belts, thread pitch for lead screws).'
    corresponding_v1: gamma_steps_per_mm
    corresponding_v2: actuator.alpha.steps_per_mm, etc. (same setting)
    units: steps/mm
    related_settings:
    - actuator.<axis>.microsteps
    - actuator.<axis>.max_rate
    - motion control.default_acceleration
    related_pages:
    - stepper-motors
    - motion-control
    - extruder-guide
  - name: actuator.x.max_rate
    type: number
    default: 30000
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:371
    description: '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 due to excessive speed. This should be set conservatively based on your mechanical system''s capabilities.'
    corresponding_v1: alpha_max_rate
    corresponding_v2: actuator.alpha.max_rate, etc. (same setting)
    units: 'mm/min (NOTE: Different from most other speed settings which use mm/sec)'
    related_settings:
    - actuator.<axis>.steps_per_mm
    - actuator.<axis>.acceleration
    - motion control.x_axis_max_speed
    related_pages:
    - motion-control
    - stepper-motors
  - name: actuator.y.max_rate
    type: number
    default: 30000
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:371
    description: '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 due to excessive speed. This should be set conservatively based on your mechanical system''s capabilities.'
    corresponding_v1: beta_max_rate
    corresponding_v2: actuator.alpha.max_rate, etc. (same setting)
    units: 'mm/min (NOTE: Different from most other speed settings which use mm/sec)'
    related_settings:
    - actuator.<axis>.steps_per_mm
    - actuator.<axis>.acceleration
    - motion control.x_axis_max_speed
    related_pages:
    - motion-control
    - stepper-motors
  - name: actuator.z.max_rate
    type: number
    default: 30000
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:371
    description: 'Z 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 due to excessive speed. This should be set conservatively based on your mechanical system''s capabilities.'
    corresponding_v1: gamma_max_rate
    corresponding_v2: actuator.alpha.max_rate, etc. (same setting)
    units: 'mm/min (NOTE: Different from most other speed settings which use mm/sec)'
    related_settings:
    - actuator.<axis>.steps_per_mm
    - actuator.<axis>.acceleration
    - motion control.x_axis_max_speed
    related_pages:
    - motion-control
    - stepper-motors
  - name: actuator.x.acceleration
    type: number
    default: -1 (use motion control.default_acceleration instead)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:372
    description: 'X axis: Per-axis acceleration override that allows setting a different acceleration value for this specific
      actuator, independent of the global default acceleration. This is particularly useful for Z-axis which often requires
      lower acceleration than XY axes to prevent layer artifacts or skipped steps. When set to -1 (default), the motor uses
      the global motion control.default_acceleration value.'
    corresponding_v1: none (v1 did not support per-axis acceleration, only global acceleration or z_acceleration)
    corresponding_v2: actuator.alpha.acceleration, etc. (new feature in v2)
    units: mm/sec²
    valid_values:
    - value: Float >= -1 (use -1 to use global default acceleration)
      description: ''
    related_settings:
    - motion control.default_acceleration
    - actuator.<axis>.max_rate
    - planner.junction_deviation
    related_pages:
    - motion-control
    - stepper-motors
  - name: actuator.y.acceleration
    type: number
    default: -1 (use motion control.default_acceleration instead)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:372
    description: 'Y axis: Per-axis acceleration override that allows setting a different acceleration value for this specific
      actuator, independent of the global default acceleration. This is particularly useful for Z-axis which often requires
      lower acceleration than XY axes to prevent layer artifacts or skipped steps. When set to -1 (default), the motor uses
      the global motion control.default_acceleration value.'
    corresponding_v1: none (v1 did not support per-axis acceleration, only global acceleration or z_acceleration)
    corresponding_v2: actuator.alpha.acceleration, etc. (new feature in v2)
    units: mm/sec²
    valid_values:
    - value: Float >= -1 (use -1 to use global default acceleration)
      description: ''
    related_settings:
    - motion control.default_acceleration
    - actuator.<axis>.max_rate
    - planner.junction_deviation
    related_pages:
    - motion-control
    - stepper-motors
  - name: actuator.z.acceleration
    type: number
    default: -1 (use motion control.default_acceleration instead)
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:372
    description: 'Z axis: Per-axis acceleration override that allows setting a different acceleration value for this specific
      actuator, independent of the global default acceleration. This is particularly useful for Z-axis which often requires
      lower acceleration than XY axes to prevent layer artifacts or skipped steps. When set to -1 (default), the motor uses
      the global motion control.default_acceleration value.'
    corresponding_v1: none (v1 did not support per-axis acceleration, only global acceleration or z_acceleration)
    corresponding_v2: actuator.alpha.acceleration, etc. (new feature in v2)
    units: mm/sec²
    valid_values:
    - value: Float >= -1 (use -1 to use global default acceleration)
      description: ''
    related_settings:
    - motion control.default_acceleration
    - actuator.<axis>.max_rate
    - planner.junction_deviation
    related_pages:
    - motion-control
    - stepper-motors
  - name: actuator.x.driver
    type: string
    default: 'Board-dependent (Prime: tmc2590 or tmc2660 for XYZ+A based on board ID, external for B+C)'
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:300
    description: '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. On Smoothieboard v2 Prime, the driver type is auto-detected based on
      the board hardware version, but can be overridden. For axes using TMC drivers, additional configuration in [tmc2590]
      or [tmc2660] sections is required.'
    corresponding_v1: motor_driver_control.*.chip (but semantics very different - v1 used external SPI drivers, v2 has integrated
      TMC drivers)
    corresponding_v2: actuator.alpha.driver, etc. (same setting)
    valid_values:
    - value: tmc2590
      description: ''
    - value: tmc2660
      description: ''
    - value: external
      description: ''
    related_settings:
    - tmc2590.<axis>.spi_cs_pin
    - tmc2660.<axis>.spi_cs_pin
    - current control.<axis>.current
    related_pages:
    - smoothieboard-v2-prime
    - stepper-motors
    - advancedmotordriver
  - name: actuator.y.driver
    type: string
    default: 'Board-dependent (Prime: tmc2590 or tmc2660 for XYZ+A based on board ID, external for B+C)'
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:300
    description: '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. On Smoothieboard v2 Prime, the driver type is auto-detected based on
      the board hardware version, but can be overridden. For axes using TMC drivers, additional configuration in [tmc2590]
      or [tmc2660] sections is required.'
    corresponding_v1: motor_driver_control.*.chip (but semantics very different - v1 used external SPI drivers, v2 has integrated
      TMC drivers)
    corresponding_v2: actuator.alpha.driver, etc. (same setting)
    valid_values:
    - value: tmc2590
      description: ''
    - value: tmc2660
      description: ''
    - value: external
      description: ''
    related_settings:
    - tmc2590.<axis>.spi_cs_pin
    - tmc2660.<axis>.spi_cs_pin
    - current control.<axis>.current
    related_pages:
    - smoothieboard-v2-prime
    - stepper-motors
    - advancedmotordriver
  - name: actuator.z.driver
    type: string
    default: 'Board-dependent (Prime: tmc2590 or tmc2660 for XYZ+A based on board ID, external for B+C)'
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:300
    description: '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. On Smoothieboard v2 Prime, the driver type is auto-detected based on
      the board hardware version, but can be overridden. For axes using TMC drivers, additional configuration in [tmc2590]
      or [tmc2660] sections is required.'
    corresponding_v1: motor_driver_control.*.chip (but semantics very different - v1 used external SPI drivers, v2 has integrated
      TMC drivers)
    corresponding_v2: actuator.alpha.driver, etc. (same setting)
    valid_values:
    - value: tmc2590
      description: ''
    - value: tmc2660
      description: ''
    - value: external
      description: ''
    related_settings:
    - tmc2590.<axis>.spi_cs_pin
    - tmc2660.<axis>.spi_cs_pin
    - current control.<axis>.current
    related_pages:
    - smoothieboard-v2-prime
    - stepper-motors
    - advancedmotordriver
  - name: actuator.x.microsteps
    type: number
    default: 32
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:311
    description: '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. Higher microstepping values provide smoother motion
      but reduce maximum achievable speed and torque. This setting directly affects the steps_per_mm calculation.'
    corresponding_v1: motor_driver_control.*.microsteps (for external SPI drivers in v1)
    corresponding_v2: actuator.alpha.microsteps, etc. (same setting)
    valid_values:
    - value: '1'
      description: ''
    - value: '2'
      description: ''
    - value: '4'
      description: ''
    - value: '8'
      description: ''
    - value: '16'
      description: ''
    - value: '32'
      description: ''
    - value: '64'
      description: ''
    - value: '128'
      description: ''
    - value: 256 (driver dependent)
      description: ''
    related_settings:
    - actuator.<axis>.steps_per_mm
    - tmc2590.<axis>.step_interpolation
    - tmc2660.<axis>.step_interpolation
    related_pages:
    - stepper-motors
    - advancedmotordriver
  - name: actuator.y.microsteps
    type: number
    default: 32
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:311
    description: '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. Higher microstepping values provide smoother motion
      but reduce maximum achievable speed and torque. This setting directly affects the steps_per_mm calculation.'
    corresponding_v1: motor_driver_control.*.microsteps (for external SPI drivers in v1)
    corresponding_v2: actuator.alpha.microsteps, etc. (same setting)
    valid_values:
    - value: '1'
      description: ''
    - value: '2'
      description: ''
    - value: '4'
      description: ''
    - value: '8'
      description: ''
    - value: '16'
      description: ''
    - value: '32'
      description: ''
    - value: '64'
      description: ''
    - value: '128'
      description: ''
    - value: 256 (driver dependent)
      description: ''
    related_settings:
    - actuator.<axis>.steps_per_mm
    - tmc2590.<axis>.step_interpolation
    - tmc2660.<axis>.step_interpolation
    related_pages:
    - stepper-motors
    - advancedmotordriver
  - name: actuator.z.microsteps
    type: number
    default: 32
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:311
    description: '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. Higher microstepping values provide smoother motion
      but reduce maximum achievable speed and torque. This setting directly affects the steps_per_mm calculation.'
    corresponding_v1: motor_driver_control.*.microsteps (for external SPI drivers in v1)
    corresponding_v2: actuator.alpha.microsteps, etc. (same setting)
    valid_values:
    - value: '1'
      description: ''
    - value: '2'
      description: ''
    - value: '4'
      description: ''
    - value: '8'
      description: ''
    - value: '16'
      description: ''
    - value: '32'
      description: ''
    - value: '64'
      description: ''
    - value: '128'
      description: ''
    - value: 256 (driver dependent)
      description: ''
    related_settings:
    - actuator.<axis>.steps_per_mm
    - tmc2590.<axis>.step_interpolation
    - tmc2660.<axis>.step_interpolation
    related_pages:
    - stepper-motors
    - advancedmotordriver
  - name: actuator.x.reversed
    type: bool
    default: false
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:271
    description: '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 ! modifier on the dir_pin
      setting. When set to true, the firmware inverts the direction signal internally.'
    corresponding_v1: none (v1 used ! modifier on dir_pin only)
    corresponding_v2: actuator.alpha.reversed, etc. (same setting)
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - actuator.<axis>.dir_pin
    - actuator.<axis>.slaved_to
    related_pages:
    - stepper-motors
    - smoothieboard-v2-prime
  - name: actuator.y.reversed
    type: bool
    default: false
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:271
    description: '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 ! modifier on the dir_pin
      setting. When set to true, the firmware inverts the direction signal internally.'
    corresponding_v1: none (v1 used ! modifier on dir_pin only)
    corresponding_v2: actuator.alpha.reversed, etc. (same setting)
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - actuator.<axis>.dir_pin
    - actuator.<axis>.slaved_to
    related_pages:
    - stepper-motors
    - smoothieboard-v2-prime
  - name: actuator.z.reversed
    type: bool
    default: false
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:271
    description: '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 ! modifier on the dir_pin
      setting. When set to true, the firmware inverts the direction signal internally.'
    corresponding_v1: none (v1 used ! modifier on dir_pin only)
    corresponding_v2: actuator.alpha.reversed, etc. (same setting)
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - actuator.<axis>.dir_pin
    - actuator.<axis>.slaved_to
    related_pages:
    - stepper-motors
    - smoothieboard-v2-prime
  - name: actuator.x.slaved_to
    type: string
    default: '"" (empty string, not slaved)'
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:319
    description: '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).
      The slaved actuator moves in sync with its master but is not registered in the actuators array.'
    corresponding_v1: none (slaved actuators are a new feature in v2)
    corresponding_v2: actuator.epsilon.slaved_to, etc. (same setting)
    valid_values:
    - value: X
      description: ''
    - value: Y
      description: ''
    - value: Z
      description: ''
    - value: or empty string (not slaved)
      description: ''
    related_settings:
    - actuator.<axis>.reversed
    - endstops.<name>.axis
    - current control.<axis>.current
    related_pages:
    - smoothieboard-v2-prime
    - stepper-motors
    - endstops
  - name: actuator.y.slaved_to
    type: string
    default: '"" (empty string, not slaved)'
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:319
    description: '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).
      The slaved actuator moves in sync with its master but is not registered in the actuators array.'
    corresponding_v1: none (slaved actuators are a new feature in v2)
    corresponding_v2: actuator.epsilon.slaved_to, etc. (same setting)
    valid_values:
    - value: X
      description: ''
    - value: Y
      description: ''
    - value: Z
      description: ''
    - value: or empty string (not slaved)
      description: ''
    related_settings:
    - actuator.<axis>.reversed
    - endstops.<name>.axis
    - current control.<axis>.current
    related_pages:
    - smoothieboard-v2-prime
    - stepper-motors
    - endstops
  - name: actuator.z.slaved_to
    type: string
    default: '"" (empty string, not slaved)'
    module: actuator
    context: Per-actuator instance setting
    defined_in: Firmware/src/robot/Robot.cpp:319
    description: '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).
      The slaved actuator moves in sync with its master but is not registered in the actuators array.'
    corresponding_v1: none (slaved actuators are a new feature in v2)
    corresponding_v2: actuator.epsilon.slaved_to, etc. (same setting)
    valid_values:
    - value: X
      description: ''
    - value: Y
      description: ''
    - value: Z
      description: ''
    - value: or empty string (not slaved)
      description: ''
    related_settings:
    - actuator.<axis>.reversed
    - endstops.<name>.axis
    - current control.<axis>.current
    related_pages:
    - smoothieboard-v2-prime
    - stepper-motors
    - endstops
  - name: actuator.common.motors_enable_pin
    type: pin
    default: PH13! (Prime with TMC drivers), nc (external drivers)
    module: actuator
    context: Common setting (applies to all actuators globally)
    defined_in: Firmware/src/robot/Robot.cpp:390
    description: Defines a global enable pin that controls power to all stepper motors simultaneously. This acts as a master
      enable/disable switch for all motors. When the pin is set high (or low if inverted), all motors are enabled; when toggled
      off, all motors are disabled. On Prime board with TMC drivers, this is typically set to PH13! (inverted because TMC
      chips use active-low enable).
    corresponding_v1: none (v1 used individual enable pins, not global enable)
    corresponding_v2: actuator.common.motors_enable_pin (same setting)
    valid_values:
    - value: Pin specification in format P<port><pin> or nc
      description: ''
    related_settings:
    - actuator.<axis>.en_pin
    - actuator.common.check_driver_errors
    - kill button.enable
    related_pages:
    - smoothieboard-v2-prime
    - pin-configuration
    - stepper-motors
  - name: actuator.common.check_driver_errors
    type: bool
    default: true
    module: actuator
    context: Common setting (applies to all TMC drivers)
    defined_in: Firmware/src/robot/Robot.cpp:383
    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. This is a safety feature specific to TMC2590 and TMC2660 drivers.
    corresponding_v1: none (driver error checking is a new feature for TMC drivers in v2)
    corresponding_v2: actuator.common.check_driver_errors (same setting)
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - actuator.common.halt_on_driver_alarm
    - actuator.<axis>.driver
    related_pages:
    - smoothieboard-v2-prime
    - advancedmotordriver
    - troubleshooting
  - name: actuator.common.halt_on_driver_alarm
    type: bool
    default: false
    module: actuator
    context: Common setting (applies to all TMC drivers)
    defined_in: Firmware/src/robot/Robot.cpp:384
    description: 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. When disabled (default), errors are logged to the console but execution continues.
    corresponding_v1: motor_driver_control.*.alarm (similar concept but different implementation)
    corresponding_v2: actuator.common.halt_on_driver_alarm (same setting)
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - actuator.common.check_driver_errors
    - kill button.enable
    related_pages:
    - smoothieboard-v2-prime
    - advancedmotordriver
    - troubleshooting
    - stopping-smoothie
- name: Current Control
  description: Motor current control for stepper drivers
  setting_count: 12
  settings:
  - name: alpha.current
    type: number
    default: 1.5 (typical for X/Y/Z axes), 0.8 (typical for extruders), no hardcoded default (must be configured)
    module: currentcontrol
    context: Per-axis motor current configuration
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:78
    section: '[current control]'
    description: 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. On Prime boards with TMC2590/TMC2660 drivers, this is set
      via SPI communication to the driver chip. On BOARD_MINIALPHA boards, this uses PWM control. Higher current provides
      more torque but generates more heat. Set this to match your motor's rated current, typically 80-90% of the motor's maximum
      rated current to prevent overheating. Current can be adjusted at runtime using M906 (milliamps) or M907 (amps) G-codes,
      and saved with M500.
    corresponding_v1: motor_driver_control.alpha.current (in motor_driver_control module)
    corresponding_v2: current control.alpha.current
    units: A (Amperes)
    valid_values:
    - value: Positive number, typically 0.5 to 2.5 depending on motor specifications
      description: ''
    related_settings:
    - alpha.driver
    - tmc2590.alpha.*
    - tmc2660.alpha.*
    - alpha.microsteps
    - alpha.standstill_current
    related_pages:
    - currentcontrol
    - advancedmotordriver
    - stepper-motors
  - name: beta.current
    type: number
    default: 1.5 (typical for X/Y/Z axes), 0.8 (typical for extruders), no hardcoded default (must be configured)
    module: currentcontrol
    context: Per-axis motor current configuration
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:78
    section: '[current control]'
    description: 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. On Prime boards with TMC2590/TMC2660 drivers, this is set
      via SPI communication to the driver chip. On BOARD_MINIALPHA boards, this uses PWM control. Higher current provides
      more torque but generates more heat. Set this to match your motor's rated current, typically 80-90% of the motor's maximum
      rated current to prevent overheating. Current can be adjusted at runtime using M906 (milliamps) or M907 (amps) G-codes,
      and saved with M500.
    corresponding_v1: motor_driver_control.beta.current (in motor_driver_control module)
    corresponding_v2: current control.beta.current
    units: A (Amperes)
    valid_values:
    - value: Positive number, typically 0.5 to 2.5 depending on motor specifications
      description: ''
    related_settings:
    - beta.driver
    - tmc2590.beta.*
    - tmc2660.beta.*
    - beta.microsteps
    - beta.standstill_current
    related_pages:
    - currentcontrol
    - advancedmotordriver
    - stepper-motors
  - name: gamma.current
    type: number
    default: 1.0 (typical for Z axis), 1.5 (typical for X/Y), no hardcoded default (must be configured)
    module: currentcontrol
    context: Per-axis motor current configuration
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:78
    section: '[current control]'
    description: 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. On Prime boards with TMC2590/TMC2660 drivers, this is set
      via SPI communication to the driver chip. On BOARD_MINIALPHA boards, this uses PWM control. Higher current provides
      more torque but generates more heat. Z axis often uses slightly lower current than X/Y since it typically has mechanical
      advantage from lead screws. Set this to match your motor's rated current, typically 80-90% of the motor's maximum rated
      current to prevent overheating. Current can be adjusted at runtime using M906 (milliamps) or M907 (amps) G-codes, and
      saved with M500.
    corresponding_v1: motor_driver_control.gamma.current (in motor_driver_control module)
    corresponding_v2: current control.gamma.current
    units: A (Amperes)
    valid_values:
    - value: Positive number, typically 0.5 to 2.5 depending on motor specifications
      description: ''
    related_settings:
    - gamma.driver
    - tmc2590.gamma.*
    - tmc2660.gamma.*
    - gamma.microsteps
    - gamma.standstill_current
    related_pages:
    - currentcontrol
    - advancedmotordriver
    - stepper-motors
  - name: delta.current
    type: number
    default: 0.8 (typical for extruders), 1.8 (typical for A axis on CNC), no hardcoded default (must be configured)
    module: currentcontrol
    context: Per-axis motor current configuration
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:78
    section: '[current control]'
    description: 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.
      On Prime boards with TMC2590/TMC2660 drivers, this is set via SPI communication to the driver chip. On BOARD_MINIALPHA
      boards, this uses PWM control. Extruder motors typically use lower current (0.8-1.2A) than positioning axes since they
      need less torque. Higher current provides more torque but generates more heat. Set this to match your motor's rated
      current, typically 80-90% of the motor's maximum rated current to prevent overheating. Current can be adjusted at runtime
      using M906 (milliamps) or M907 (amps) G-codes, and saved with M500.
    corresponding_v1: motor_driver_control.delta.current (in motor_driver_control module)
    corresponding_v2: current control.delta.current
    units: A (Amperes)
    valid_values:
    - value: Positive number, typically 0.5 to 2.5 depending on motor specifications
      description: ''
    related_settings:
    - delta.driver
    - tmc2590.delta.*
    - tmc2660.delta.*
    - delta.microsteps
    - delta.standstill_current
    related_pages:
    - currentcontrol
    - advancedmotordriver
    - stepper-motors
    - extruder
  - name: epsilon.current
    type: number
    default: 0.8 (typical for extruders), 1.8 (typical for B axis on CNC), no hardcoded default (must be configured)
    module: currentcontrol
    context: Per-axis motor current configuration
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:78
    section: '[current control]'
    description: 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. This setting controls how much current is delivered to the stepper motor driver.
      Note that on Prime boards, only the first four axes (alpha/beta/gamma/delta = XYZA) have onboard TMC2590/TMC2660 drivers.
      The epsilon axis typically uses an external driver which must be set to "external" mode in the actuator configuration.
      For external drivers, current control may need to be set via hardware potentiometers on the driver board rather than
      this software setting. Current can be adjusted at runtime using M906 (milliamps) or M907 (amps) G-codes, and saved with
      M500.
    corresponding_v1: motor_driver_control.epsilon.current (in motor_driver_control module)
    corresponding_v2: current control.epsilon.current
    units: A (Amperes)
    valid_values:
    - value: Positive number, typically 0.5 to 2.5 depending on motor specifications
      description: ''
    related_settings:
    - epsilon.driver
    - epsilon.microsteps
    - epsilon.standstill_current
    related_pages:
    - currentcontrol
    - advancedmotordriver
    - stepper-motors
    - multiple-extruders
  - name: zeta.current
    type: number
    default: 0.8 (typical for extruders), 1.8 (typical for C axis on CNC), no hardcoded default (must be configured)
    module: currentcontrol
    context: Per-axis motor current configuration
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:78
    section: '[current control]'
    description: 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. This setting controls how much current is delivered to the stepper motor driver. Note
      that on Prime boards, only the first four axes (alpha/beta/gamma/delta = XYZA) have onboard TMC2590/TMC2660 drivers.
      The zeta axis typically uses an external driver which must be set to "external" mode in the actuator configuration.
      For external drivers, current control may need to be set via hardware potentiometers on the driver board rather than
      this software setting. Current can be adjusted at runtime using M906 (milliamps) or M907 (amps) G-codes, and saved with
      M500.
    corresponding_v1: motor_driver_control.zeta.current (in motor_driver_control module)
    corresponding_v2: current control.zeta.current
    units: A (Amperes)
    valid_values:
    - value: Positive number, typically 0.5 to 2.5 depending on motor specifications
      description: ''
    related_settings:
    - zeta.driver
    - zeta.microsteps
    - zeta.standstill_current
    related_pages:
    - currentcontrol
    - advancedmotordriver
    - stepper-motors
    - multiple-extruders
  - name: alpha.pin
    type: pin
    default: '"nc" (not connected, not used on most boards)'
    module: currentcontrol
    context: PWM-based current control (BOARD_MINIALPHA only)
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:86
    section: '[current control]'
    description: 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. This pin outputs a PWM signal that controls a current control
      circuit, with the duty cycle proportional to the desired current. The formula used is PWM = current / 2.0625. Only configure
      this if you have a custom board design that uses PWM-based current control and you know the specific pin assignment.
      Standard Prime boards do not use this setting.
    corresponding_v1: none (PWM current control is specific to certain v2 board designs)
    corresponding_v2: current control.alpha.pin
    valid_values:
    - value: Valid STM32 pin name (e.g., "PA5") or "nc" for not connected
      description: ''
    related_settings:
    - alpha.current
    - alpha.driver
    related_pages:
    - currentcontrol
    - pin-configuration
  - name: beta.pin
    type: pin
    default: '"nc" (not connected, not used on most boards)'
    module: currentcontrol
    context: PWM-based current control (BOARD_MINIALPHA only)
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:86
    section: '[current control]'
    description: 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. This pin outputs a PWM signal that controls a current control
      circuit, with the duty cycle proportional to the desired current. The formula used is PWM = current / 2.0625. Only configure
      this if you have a custom board design that uses PWM-based current control and you know the specific pin assignment.
      Standard Prime boards do not use this setting.
    corresponding_v1: none (PWM current control is specific to certain v2 board designs)
    corresponding_v2: current control.beta.pin
    valid_values:
    - value: Valid STM32 pin name (e.g., "PA6") or "nc" for not connected
      description: ''
    related_settings:
    - beta.current
    - beta.driver
    related_pages:
    - currentcontrol
    - pin-configuration
  - name: gamma.pin
    type: pin
    default: '"nc" (not connected, not used on most boards)'
    module: currentcontrol
    context: PWM-based current control (BOARD_MINIALPHA only)
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:86
    section: '[current control]'
    description: 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. This pin outputs a PWM signal that controls a current control
      circuit, with the duty cycle proportional to the desired current. The formula used is PWM = current / 2.0625. Only configure
      this if you have a custom board design that uses PWM-based current control and you know the specific pin assignment.
      Standard Prime boards do not use this setting.
    corresponding_v1: none (PWM current control is specific to certain v2 board designs)
    corresponding_v2: current control.gamma.pin
    valid_values:
    - value: Valid STM32 pin name (e.g., "PA7") or "nc" for not connected
      description: ''
    related_settings:
    - gamma.current
    - gamma.driver
    related_pages:
    - currentcontrol
    - pin-configuration
  - name: delta.pin
    type: pin
    default: '"nc" (not connected, not used on most boards)'
    module: currentcontrol
    context: PWM-based current control (BOARD_MINIALPHA only)
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:86
    section: '[current control]'
    description: 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. This pin outputs a PWM signal that controls a current control
      circuit, with the duty cycle proportional to the desired current. The formula used is PWM = current / 2.0625. Only configure
      this if you have a custom board design that uses PWM-based current control and you know the specific pin assignment.
      Standard Prime boards do not use this setting.
    corresponding_v1: none (PWM current control is specific to certain v2 board designs)
    corresponding_v2: current control.delta.pin
    valid_values:
    - value: Valid STM32 pin name (e.g., "PA8") or "nc" for not connected
      description: ''
    related_settings:
    - delta.current
    - delta.driver
    related_pages:
    - currentcontrol
    - pin-configuration
  - name: epsilon.pin
    type: pin
    default: '"nc" (not connected, not used on most boards)'
    module: currentcontrol
    context: PWM-based current control (BOARD_MINIALPHA only)
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:86
    section: '[current control]'
    description: 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 as they rely on SPI-controlled TMC drivers
      or external drivers with hardware current adjustment. This pin outputs a PWM signal that controls a current control
      circuit, with the duty cycle proportional to the desired current. The formula used is PWM = current / 2.0625. Only configure
      this if you have a custom board design that uses PWM-based current control and you know the specific pin assignment.
      Standard Prime boards do not use this setting.
    corresponding_v1: none (PWM current control is specific to certain v2 board designs)
    corresponding_v2: current control.epsilon.pin
    valid_values:
    - value: Valid STM32 pin name (e.g., "PA9") or "nc" for not connected
      description: ''
    related_settings:
    - epsilon.current
    - epsilon.driver
    related_pages:
    - currentcontrol
    - pin-configuration
  - name: zeta.pin
    type: pin
    default: '"nc" (not connected, not used on most boards)'
    module: currentcontrol
    context: PWM-based current control (BOARD_MINIALPHA only)
    defined_in: Firmware/src/modules/utils/currentcontrol/CurrentControl.cpp:86
    section: '[current control]'
    description: 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 as they rely on SPI-controlled TMC drivers
      or external drivers with hardware current adjustment. This pin outputs a PWM signal that controls a current control
      circuit, with the duty cycle proportional to the desired current. The formula used is PWM = current / 2.0625. Only configure
      this if you have a custom board design that uses PWM-based current control and you know the specific pin assignment.
      Standard Prime boards do not use this setting.
    corresponding_v1: none (PWM current control is specific to certain v2 board designs)
    corresponding_v2: current control.zeta.pin
    valid_values:
    - value: Valid STM32 pin name (e.g., "PA10") or "nc" for not connected
      description: ''
    related_settings:
    - zeta.current
    - zeta.driver
    related_pages:
    - currentcontrol
    - pin-configuration
- name: Extruder
  description: extruder
  setting_count: 12
  settings:
  - name: enable
    type: bool
    default: false
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:66
    description: Enables this extruder instance. When set to false, all other configuration for this extruder is ignored and
      the extruder will not be available for use. Multiple extruders can be enabled by creating multiple named instances within
      the [extruder] section. Each enabled extruder must have a unique tool_id and corresponding actuator motor configured
      (delta for T0, epsilon for T1, zeta for T2).
    corresponding_v1: extruder.hotend.enable
    corresponding_v2: extruder.hotend.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - extruder.tool_id
    - actuator.delta.steps_per_mm
    - temperature control.enable
    related_pages:
    - extruder
    - multiple-extruders
    - 3d-printer-guide
    - extruder-guide
  - name: tool_id
    type: number
    default: 0
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:97
    description: 'Tool number identifier for this extruder instance. Used for tool selection with T commands (T0, T1, etc.)
      and M6 tool change commands. The tool_id determines which actuator motor is used: tool_id 0 uses delta axis (motor index
      3), tool_id 1 uses epsilon axis (motor index 4), tool_id 2 uses zeta axis (motor index 5). Each extruder must have a
      unique tool_id within the system.'
    corresponding_v1: none (implicit based on instance order)
    corresponding_v2: extruder.hotend.tool_id
    valid_values:
    - value: 0-5 (limited by available actuators)
      description: ''
    related_settings:
    - extruder.enable
    - actuator.delta.steps_per_mm
    - actuator.epsilon.steps_per_mm
    - actuator.zeta.steps_per_mm
    related_pages:
    - extruder
    - multiple-extruders
    - atc
  - name: x_offset
    type: number
    default: 0
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:98
    description: X-axis offset in millimeters from the primary nozzle position (tool 0). Used in multi-extruder setups to
      define the physical horizontal spacing between nozzles. When this tool is selected, the coordinate system is shifted
      by this offset so that G-code coordinates remain consistent across tool changes. Positive values indicate the nozzle
      is to the right of the origin, negative values to the left.
    corresponding_v1: extruder.hotend.x_offset
    corresponding_v2: extruder.hotend.x_offset
    units: mm
    related_settings:
    - extruder.y_offset
    - extruder.z_offset
    - extruder.tool_id
    related_pages:
    - extruder
    - multiple-extruders
    - 3d-printer-guide
  - name: y_offset
    type: number
    default: 0
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:99
    description: Y-axis offset in millimeters from the primary nozzle position (tool 0). Used in multi-extruder setups to
      define the physical front-to-back spacing between nozzles. When this tool is selected, the coordinate system is shifted
      by this offset so that G-code coordinates remain consistent across tool changes. Positive values indicate the nozzle
      is forward (toward Y+), negative values backward (toward Y-).
    corresponding_v1: extruder.hotend.y_offset
    corresponding_v2: extruder.hotend.y_offset
    units: mm
    related_settings:
    - extruder.x_offset
    - extruder.z_offset
    - extruder.tool_id
    related_pages:
    - extruder
    - multiple-extruders
    - 3d-printer-guide
  - name: z_offset
    type: number
    default: 0
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:100
    description: Z-axis offset in millimeters from the primary nozzle position (tool 0). Used in multi-extruder setups to
      compensate for height differences between nozzles. When this tool is selected, the coordinate system is shifted by this
      offset so that both nozzles print at the correct Z height. Positive values raise the effective Z position, negative
      values lower it. This compensates for physical differences in nozzle length or mounting height.
    corresponding_v1: extruder.hotend.z_offset
    corresponding_v2: extruder.hotend.z_offset
    units: mm
    related_settings:
    - extruder.x_offset
    - extruder.y_offset
    - extruder.tool_id
    related_pages:
    - extruder
    - multiple-extruders
    - 3d-printer-guide
  - name: filament_diameter
    type: number
    default: 0.0 (volumetric extrusion disabled)
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:103
    description: Filament diameter in millimeters for volumetric extrusion mode. When set to a value greater than 0.01mm,
      enables volumetric extrusion where E values in G-code are interpreted as cubic millimeters (mm³) of plastic volume instead
      of linear filament distance. The firmware calculates the volumetric multiplier as 1.0 / (π × (diameter/2)²) and applies
      this to all E movements. When set to 0 or any value ≤ 0.01, volumetric mode is disabled and E values are treated as
      linear millimeters of filament.
    corresponding_v1: extruder.hotend.filament_diameter
    corresponding_v2: extruder.hotend.filament_diameter
    units: mm
    valid_values:
    - value: 0 or 0.01 to disable volumetric extrusion
      description: ''
    - value: or positive diameter value in mm
      description: ''
    related_settings:
    - extruder.retract_length
    - extruder.retract_recover_length
    related_pages:
    - extruder
    - extruder-guide
    - 3d-printer-guide
  - name: retract_length
    type: number
    default: 3
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:104
    description: 'Firmware retraction length in millimeters when G10 (firmware retract) command is executed. This is the amount
      of filament to retract from the hotend to prevent oozing and stringing during non-print travel moves. The actual retraction
      distance depends on your extruder type: direct drive extruders require shorter retraction distances (0.5-2mm) because
      the filament path is short, while Bowden extruders require longer distances (3-6mm) due to the length and flexibility
      of the PTFE tube between motor and hotend.'
    corresponding_v1: extruder.hotend.retract_length
    corresponding_v2: extruder.hotend.retract_length
    units: mm
    related_settings:
    - extruder.retract_feedrate
    - extruder.retract_recover_length
    - extruder.retract_zlift_length
    related_pages:
    - extruder
    - extruder-guide
    - g10
    - 3d-printer-guide
  - name: retract_feedrate
    type: number
    default: 45
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:105
    description: 'Firmware retraction speed in millimeters per second when G10 (firmware retract) command is executed. Controls
      how quickly the filament is pulled back from the hotend during retraction. Bowden extruders can typically handle faster
      retraction speeds (30-60 mm/s) than direct drive extruders (20-40 mm/s) because the long PTFE tube provides some cushioning.
      The speed affects print quality and reliability: too fast may cause extruder motor skipping or filament grinding, too
      slow increases print time and may allow more oozing during the retract operation.'
    corresponding_v1: extruder.hotend.retract_feedrate
    corresponding_v2: extruder.hotend.retract_feedrate
    units: mm/s
    related_settings:
    - extruder.retract_length
    - extruder.retract_recover_feedrate
    - actuator.delta.max_rate
    related_pages:
    - extruder
    - extruder-guide
    - g10
    - stepper-motors
  - name: retract_recover_length
    type: number
    default: 0
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:106
    description: Additional filament length in millimeters to extrude during unretract (G11) beyond the original retract_length.
      This extra amount compensates for filament that oozed out of the nozzle during the retracted state. The total recovery
      distance is retract_length + retract_recover_length. Positive values extrude more filament than was retracted (compensating
      for oozing losses), while negative values extrude less (useful if filament expands in the hot zone). Most users leave
      this at 0 and only adjust if experiencing under-extrusion after retracts.
    corresponding_v1: extruder.hotend.retract_recover_length
    corresponding_v2: extruder.hotend.retract_recover_length
    units: mm
    valid_values:
    - value: Any float value
      description: ''
    - value: typically -0.2 to +0.5 mm
      description: ''
    related_settings:
    - extruder.retract_length
    - extruder.retract_recover_feedrate
    related_pages:
    - extruder
    - extruder-guide
    - g11
  - name: retract_recover_feedrate
    type: number
    default: 30
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:107
    description: Firmware unretract (recover) speed in millimeters per second when G11 (firmware unretract) command is executed.
      Controls how quickly filament is pushed back into the hotend after retraction. This speed is typically set lower than
      retract_feedrate to allow the filament to melt and flow smoothly into the nozzle without causing pressure spikes or
      blobs. Too fast can cause blobs at the start of extrusion after a travel move, while too slow increases print time unnecessarily.
    corresponding_v1: extruder.hotend.retract_recover_feedrate
    corresponding_v2: extruder.hotend.retract_recover_feedrate
    units: mm/s
    related_settings:
    - extruder.retract_feedrate
    - extruder.retract_recover_length
    - extruder.retract_length
    related_pages:
    - extruder
    - extruder-guide
    - g11
  - name: retract_zlift_length
    type: number
    default: 0.0 (Z-hop disabled)
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:108
    description: Z-axis lift (hop) distance in millimeters during firmware retraction. When set to a value greater than 0,
      the Z-axis will lift by this amount during G10 (retract) and lower back down during G11 (unretract). This Z-hop feature
      temporarily raises the nozzle during travel moves to prevent the nozzle from dragging across already-printed parts,
      reducing the risk of knocking over tall features or leaving drag marks. Set to 0 to disable Z-hop completely. The Z-hop
      is cancelled automatically if an absolute Z move occurs between G10 and G11.
    corresponding_v1: extruder.hotend.retract_zlift_length
    corresponding_v2: extruder.hotend.retract_zlift_length
    units: mm
    related_settings:
    - extruder.retract_zlift_feedrate
    - extruder.retract_length
    - motion control.z_axis_max_speed
    related_pages:
    - extruder
    - extruder-guide
    - g10
    - g11
  - name: retract_zlift_feedrate
    type: number
    default: 6000 (100 mm/s after conversion from mm/min)
    module: extruder
    context: Module instance setting (supports multiple extruder instances)
    defined_in: Firmware/src/modules/tools/extruder/Extruder.cpp:109
    description: Z-axis movement speed during firmware retraction Z-lift operations in millimeters per minute. Controls how
      quickly the Z-axis lifts during G10 (retract with Z-hop) and lowers during G11 (unretract). This setting is converted
      to mm/s internally by dividing by 60. This is the ONLY extruder setting that uses mm/min units instead of mm/s - all
      other feedrates in the extruder module use mm/s. The speed should typically match your Z-axis max_rate capability to
      avoid unnecessary slowdowns during Z-hop moves.
    corresponding_v1: extruder.hotend.retract_zlift_feedrate
    corresponding_v2: extruder.hotend.retract_zlift_feedrate
    units: 'mm/min (NOTE: This is the ONLY extruder setting using mm/min instead of mm/s)'
    related_settings:
    - extruder.retract_zlift_length
    - motion control.z_axis_max_speed
    - actuator.gamma.max_rate
    related_pages:
    - extruder
    - extruder-guide
    - g10
    - g11
    - motion-control
- name: Temperature Control
  description: Temperature Control
  setting_count: 32
  settings:
  - name: enable
    type: bool
    default: false
    module: temperature_control
    context: Module instance setting (multi-instance support)
    defined_in: TemperatureControl.cpp:83
    description: Enables this temperature controller instance. When set to true, this temperature controller will actively
      monitor its sensor and maintain the target temperature using PID control or bang-bang control depending on configuration.
    corresponding_v1: temperature_control.{name}.enable
    corresponding_v2: temperature_control.{name}.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - temperature_control.{name}.heater_pin
    - temperature_control.{name}.sensor
    - temperature_control.{name}.thermistor_pin
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-pid
    - temperaturecontrol-pid-autotuning
  - name: tool_id
    type: number
    default: Auto-assigned (0 for hotend, 1 for hotend2, 254 for bed, 253 for board)
    module: temperature_control
    context: Module instance setting
    defined_in: TemperatureControl.cpp:141
    description: 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.
    corresponding_v1: none (new explicit feature in v2)
    corresponding_v2: temperature_control.{name}.tool_id
    valid_values:
    - value: 0-255
      description: ''
    related_settings:
    - temperature_control.{name}.designator
    - extruder.{name}.tool_id
    related_pages:
    - temperaturecontrol
    - extruder
    - multiple-extruders
  - name: designator
    type: string
    default: Auto-assigned ("T" for hotend, "T2" for hotend2, "B" for bed, "P" for board)
    module: temperature_control
    context: Module instance setting
    defined_in: TemperatureControl.cpp:146
    description: Single-letter or short temperature designator used in M105 temperature reports and display output. This identifier
      appears in temperature status messages and helps users distinguish between multiple temperature controllers.
    corresponding_v1: temperature_control.{name}.designator
    corresponding_v2: temperature_control.{name}.designator
    valid_values:
    - value: Any string (typically single letter or short identifier)
      description: ''
    related_settings:
    - temperature_control.{name}.tool_id
    related_pages:
    - temperaturecontrol
    - supported-g-codes
  - name: sensor
    type: enum
    default: thermistor
    module: temperature_control
    context: Module instance setting
    defined_in: TemperatureControl.cpp:178
    description: Temperature sensor type selection. Determines which sensor driver to use for reading temperature. This setting
      tells the firmware whether to expect an analog thermistor input or a digital SPI thermocouple sensor.
    corresponding_v1: none (implicit, sensor type determined by configured parameters)
    corresponding_v2: temperature_control.{name}.sensor
    valid_values:
    - value: '"thermistor"'
      description: ''
    - value: '"max31855"'
      description: ''
    related_settings:
    - temperature_control.{name}.thermistor_pin
    - temperature_control.{name}.spi_channel
    - temperature_control.{name}.spi_select_pin
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-thermistor-choice
    - pt100
  - name: thermistor_pin
    type: pin
    default: Board-specific ("ADC1_1" for hotend, "ADC1_2" for hotend2, "ADC1_3" for bed, "ADC1_0" for board on Prime)
    module: temperature_control
    context: Thermistor sensor setting (only used when sensor is thermistor)
    defined_in: Thermistor.cpp:114
    description: ADC channel pin used to read thermistor voltage for temperature calculation. This pin connects to the voltage
      divider circuit containing the thermistor.
    corresponding_v1: temperature_control.{name}.thermistor_pin
    corresponding_v2: temperature_control.{name}.thermistor_pin
    valid_values:
    - value: Valid ADC pin names (board-specific)
      description: ''
    related_settings:
    - temperature_control.{name}.sensor
    - temperature_control.{name}.r2
    - temperature_control.{name}.thermistor
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-thermistor-choice
    - pinout
    - smoothieboard-v2-prime
  - name: thermistor
    type: string
    default: '"" (must specify predefined name or use custom beta/coefficients)'
    module: temperature_control
    context: Thermistor sensor setting (optional shortcut for common thermistors)
    defined_in: Thermistor.cpp:60
    description: Predefined thermistor name that automatically loads factory-calibrated coefficients for common thermistors.
      Using predefined thermistors simplifies configuration and provides accurate temperature readings without manual calibration.
    corresponding_v1: temperature_control.{name}.thermistor
    corresponding_v2: temperature_control.{name}.thermistor
    valid_values:
    - value: Predefined thermistor names (see Predefined Thermistors section)
      description: ''
    related_settings:
    - temperature_control.{name}.use_beta_table
    - temperature_control.{name}.beta
    - temperature_control.{name}.coefficients
    - temperature_control.{name}.rt_curve
    - temperature_control.{name}.r0
    - temperature_control.{name}.r1
    - temperature_control.{name}.r2
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-thermistor-choice
    - steinharthart
  - name: use_beta_table
    type: bool
    default: false
    module: temperature_control
    context: Thermistor sensor setting (only applies when using predefined thermistor names)
    defined_in: Thermistor.cpp:55
    description: 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.
    corresponding_v1: temperature_control.{name}.use_beta_table
    corresponding_v2: temperature_control.{name}.use_beta_table
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - temperature_control.{name}.thermistor
    - temperature_control.{name}.beta
    - temperature_control.{name}.coefficients
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-thermistor-choice
    - steinharthart
  - name: beta
    type: number
    default: 4066 (EPCOS100K default when using beta mode)
    module: temperature_control
    context: Thermistor sensor setting (beta equation mode)
    defined_in: Thermistor.cpp:106
    description: Thermistor beta coefficient for beta equation temperature calculation. Beta is a material constant that characterizes
      how the thermistor's resistance changes with temperature. See http://reprap.org/wiki/MeasuringThermistorBeta for measurement
      procedures.
    corresponding_v1: temperature_control.{name}.beta
    corresponding_v2: temperature_control.{name}.beta
    units: Kelvin (dimensionless thermistor coefficient)
    valid_values:
    - value: Positive number (typically 3000-5000)
      description: ''
    related_settings:
    - temperature_control.{name}.r0
    - temperature_control.{name}.t0
    - temperature_control.{name}.thermistor
    - temperature_control.{name}.use_beta_table
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-thermistor-choice
    - steinharthart
  - name: coefficients
    type: string
    default: '"" (not used unless specified)'
    module: temperature_control
    context: Thermistor sensor setting (Steinhart-Hart mode)
    defined_in: Thermistor.cpp:128
    description: 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.
    corresponding_v1: temperature_control.{name}.coefficients
    corresponding_v2: temperature_control.{name}.coefficients
    valid_values:
    - value: Three comma-separated floats in format "c1
      description: ''
    - value: c2
      description: ''
    - value: c3" (no spaces)
      description: ''
    related_settings:
    - temperature_control.{name}.rt_curve
    - temperature_control.{name}.thermistor
    - temperature_control.{name}.use_beta_table
    - temperature_control.{name}.r1
    - temperature_control.{name}.r2
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-thermistor-choice
    - steinharthart
  - name: rt_curve
    type: string
    default: '"" (not used unless specified)'
    module: temperature_control
    context: Thermistor sensor setting (Steinhart-Hart mode, alternative to coefficients)
    defined_in: Thermistor.cpp:132
    description: '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.'
    corresponding_v1: temperature_control.{name}.rt_curve
    corresponding_v2: temperature_control.{name}.rt_curve
    valid_values:
    - value: Six comma-separated values in format "T1
      description: ''
    - value: R1
      description: ''
    - value: T2
      description: ''
    - value: R2
      description: ''
    - value: T3
      description: ''
    - value: R3" (no spaces)
      description: ''
    related_settings:
    - temperature_control.{name}.coefficients
    - temperature_control.{name}.thermistor
    - temperature_control.{name}.r1
    - temperature_control.{name}.r2
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-thermistor-choice
    - steinharthart
  - name: spi_channel
    type: number
    default: -1 (not used for thermistors)
    module: temperature_control
    context: MAX31855 sensor setting
    defined_in: max31855.cpp:27
    description: SPI channel number for MAX31855 thermocouple sensor communication. All MAX31855 sensors must use the same
      SPI channel, with unique chip select pins to distinguish between sensors.
    corresponding_v1: none (MAX31855 support is new in v2)
    corresponding_v2: temperature_control.{name}.spi_channel
    valid_values:
    - value: Non-negative integer (SPI channel number
      description: ''
    - value: board-dependent)
      description: ''
    related_settings:
    - temperature_control.{name}.spi_select_pin
    - temperature_control.{name}.sensor
    - temperature_control.{name}.readings_per_second
    related_pages:
    - temperaturecontrol
    - pt100
    - smoothieboard-v2-prime
  - name: spi_select_pin
    type: pin
    default: '"nc" (not connected, invalid for active sensors)'
    module: temperature_control
    context: MAX31855 sensor setting
    defined_in: max31855.cpp:56
    description: SPI chip select (CS) pin for MAX31855 sensor. Each MAX31855 sensor requires a unique chip select pin to enable
      communication on the shared SPI bus.
    corresponding_v1: none (MAX31855 support is new in v2)
    corresponding_v2: temperature_control.{name}.spi_select_pin
    valid_values:
    - value: Valid GPIO pin names (board-specific)
      description: ''
    related_settings:
    - temperature_control.{name}.spi_channel
    - temperature_control.{name}.sensor
    related_pages:
    - temperaturecontrol
    - pt100
    - pin-configuration
    - smoothieboard-v2-prime
  - name: heater_pin
    type: pin
    default: Board-specific ("PE0" for hotend, "PB8" for hotend2, "PE3" for bed, "nc" for board on Prime)
    module: temperature_control
    context: Module instance setting
    defined_in: TemperatureControl.cpp:159
    description: PWM output pin used to control heater power via MOSFET or SSR. Set to "nc" (not connected) for read-only
      temperature monitoring without heater control.
    corresponding_v1: temperature_control.{name}.heater_pin
    corresponding_v2: temperature_control.{name}.heater_pin
    valid_values:
    - value: Valid PWM-capable pin or "nc"
      description: ''
    related_settings:
    - temperature_control.{name}.max_pwm
    - temperature_control.{name}.enable
    related_pages:
    - temperaturecontrol
    - mosfets
    - mosfets-table
    - pinout
    - smoothieboard-v2-prime
  - name: max_pwm
    type: number
    default: 255 (full 8-bit PWM range)
    module: temperature_control
    context: Module instance setting (only applies when heater_pin is configured)
    defined_in: TemperatureControl.cpp:209
    description: Maximum PWM duty cycle value for heater output. This limits the maximum power delivered to the heater. Standard
      8-bit PWM range is 0-255 where 255 is 100% duty cycle (full power).
    corresponding_v1: temperature_control.{name}.max_pwm
    corresponding_v2: temperature_control.{name}.max_pwm
    units: PWM steps (0-255 scale)
    valid_values:
    - value: 0-255
      description: ''
    related_settings:
    - temperature_control.{name}.i_max
    - temperature_control.{name}.bang_bang
    - temperature_control.{name}.heater_pin
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-pid
    - mosfets
  - name: p_factor
    type: number
    default: 10
    module: temperature_control
    context: Module instance setting (PID control)
    defined_in: TemperatureControl.cpp:232
    description: PID proportional term. Determines the controller's response to current temperature error. Higher values increase
      responsiveness but may cause oscillation. Use M303 PID autotune for optimal values.
    corresponding_v1: temperature_control.{name}.p_factor
    corresponding_v2: temperature_control.{name}.p_factor
    units: Dimensionless (PWM output per degree Celsius of error)
    valid_values:
    - value: Positive number (typically 5-50)
      description: ''
    related_settings:
    - temperature_control.{name}.i_factor
    - temperature_control.{name}.d_factor
    - temperature_control.{name}.use_ponm
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-pid
    - temperaturecontrol-pid-autotuning
    - temperaturecontrol-fine-tuning
  - name: i_factor
    type: number
    default: 0.3
    module: temperature_control
    context: Module instance setting (PID control)
    defined_in: TemperatureControl.cpp:233
    description: PID integral term. 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 M303 autotune
      for optimal values.
    corresponding_v1: temperature_control.{name}.i_factor
    corresponding_v2: temperature_control.{name}.i_factor
    units: Dimensionless (PWM per degree-second of accumulated error, internally scaled by PIDdt)
    valid_values:
    - value: Non-negative number (typically 0.1-2.0)
      description: ''
    related_settings:
    - temperature_control.{name}.p_factor
    - temperature_control.{name}.d_factor
    - temperature_control.{name}.i_max
    - temperature_control.{name}.windup
    - temperature_control.{name}.readings_per_second
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-pid
    - temperaturecontrol-pid-autotuning
    - temperaturecontrol-fine-tuning
  - name: d_factor
    type: number
    default: 200
    module: temperature_control
    context: Module instance setting (PID control)
    defined_in: TemperatureControl.cpp:234
    description: PID derivative term. Reduces overshoot by damping the rate of temperature change. Internally scaled by PIDdt.
      Higher values reduce overshoot but may slow response. Use M303 autotune for optimal values.
    corresponding_v1: temperature_control.{name}.d_factor
    corresponding_v2: temperature_control.{name}.d_factor
    units: Dimensionless (PWM per degree/second rate of change, internally scaled by PIDdt)
    valid_values:
    - value: Non-negative number (typically 50-500)
      description: ''
    related_settings:
    - temperature_control.{name}.p_factor
    - temperature_control.{name}.i_factor
    - temperature_control.{name}.use_ponm
    - temperature_control.{name}.readings_per_second
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-pid
    - temperaturecontrol-pid-autotuning
    - temperaturecontrol-fine-tuning
  - name: use_ponm
    type: bool
    default: false
    module: temperature_control
    context: Module instance setting (PID control mode)
    defined_in: TemperatureControl.cpp:236
    description: 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 http://brettbeauregard.com/blog/2017/06/introducing-proportional-on-measurement/
      for detailed explanation.
    corresponding_v1: none (new feature in v2)
    corresponding_v2: temperature_control.{name}.use_ponm
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - temperature_control.{name}.p_factor
    - temperature_control.{name}.i_factor
    - temperature_control.{name}.d_factor
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-pid
    - temperaturecontrol-fine-tuning
  - name: i_max
    type: number
    default: Same as max_pwm (255 by default)
    module: temperature_control
    context: Module instance setting (PID control, integral windup limit)
    defined_in: TemperatureControl.cpp:240
    description: Maximum value for integral term accumulation (anti-windup limit). Prevents the I term from accumulating excessively
      during prolonged error conditions. Limits how much the integral term can contribute to the total PID output.
    corresponding_v1: temperature_control.{name}.i_max
    corresponding_v2: temperature_control.{name}.i_max
    units: PWM steps (same scale as max_pwm)
    valid_values:
    - value: 0 to max_pwm
      description: ''
    related_settings:
    - temperature_control.{name}.i_factor
    - temperature_control.{name}.max_pwm
    - temperature_control.{name}.windup
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-pid
    - temperaturecontrol-fine-tuning
  - name: windup
    type: bool
    default: false
    module: temperature_control
    context: Module instance setting (PID control, anti-windup mode)
    defined_in: TemperatureControl.cpp:208
    description: 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).
    corresponding_v1: temperature_control.{name}.windup
    corresponding_v2: temperature_control.{name}.windup
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - temperature_control.{name}.i_factor
    - temperature_control.{name}.i_max
    - temperature_control.{name}.max_pwm
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-pid
    - temperaturecontrol-fine-tuning
  - name: bang_bang
    type: bool
    default: false
    module: temperature_control
    context: Module instance setting (control mode selection)
    defined_in: TemperatureControl.cpp:206
    description: Use bang-bang (on/off) control instead of PID. Heater is full-on when temperature is below (target - hysteresis),
      full-off when above (target + hysteresis). Suitable for slow-response systems like heated beds with mechanical relays
      or SSRs.
    corresponding_v1: temperature_control.{name}.bang_bang
    corresponding_v2: temperature_control.{name}.bang_bang
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - temperature_control.{name}.hysteresis
    - temperature_control.{name}.max_pwm
    - temperature_control.{name}.p_factor
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-pid
  - name: hysteresis
    type: number
    default: 2 (±2°C deadband)
    module: temperature_control
    context: Module instance setting (bang-bang mode only)
    defined_in: TemperatureControl.cpp:207
    description: Temperature hysteresis for bang-bang mode. Creates a deadband of ±hysteresis around the target temperature
      to prevent rapid heater switching.
    corresponding_v1: temperature_control.{name}.hysteresis
    corresponding_v2: temperature_control.{name}.hysteresis
    units: °C
    valid_values:
    - value: Positive number (typically 1-5)
      description: ''
    related_settings:
    - temperature_control.{name}.bang_bang
    - temperature_control.{name}.max_temp
    - temperature_control.{name}.min_temp
    related_pages:
    - temperaturecontrol
  - name: min_temp
    type: number
    default: 0 (0°C)
    module: temperature_control
    context: Module instance setting (safety feature)
    defined_in: TemperatureControl.cpp:156
    description: 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.
    corresponding_v1: temperature_control.{name}.min_temp
    corresponding_v2: temperature_control.{name}.min_temp
    units: °C
    valid_values:
    - value: Temperature in °C (should be below expected room temperature)
      description: ''
    related_settings:
    - temperature_control.{name}.max_temp
    - temperature_control.{name}.runaway_range
    related_pages:
    - temperaturecontrol
    - troubleshooting
    - error
  - name: max_temp
    type: number
    default: 300 (300°C)
    module: temperature_control
    context: Module instance setting (safety feature)
    defined_in: TemperatureControl.cpp:155
    description: Maximum safe temperature threshold. If sensor reads above this value OR if setpoint is set above this value,
      system immediately enters HALT state. This protects against thermal runaway and prevents damage to the machine and surroundings.
      - Heating element safe operating temperature - PTFE tube rating (260°C max, 240°C recommended) - Thermistor maximum
      temperature rating - Fire safety considerations
    corresponding_v1: temperature_control.{name}.max_temp
    corresponding_v2: temperature_control.{name}.max_temp
    units: °C
    valid_values:
    - value: Positive temperature in °C
      description: ''
    related_settings:
    - temperature_control.{name}.min_temp
    - temperature_control.{name}.runaway_range
    - temperature_control.{name}.runaway_heating_timeout
    related_pages:
    - temperaturecontrol
    - safety-thermistor
    - troubleshooting
  - name: runaway_range
    type: number
    default: 20 (±20°C)
    module: temperature_control
    context: Module instance setting (safety feature)
    defined_in: TemperatureControl.cpp:149
    description: Maximum allowed temperature deviation from target (±°C) after target temperature is reached. If temperature
      swings beyond ±runaway_range for 5 consecutive seconds after reaching target, system triggers HALT. Set to 0 to disable
      (NOT RECOMMENDED - removes critical safety protection). - Heater stuck on (temperature continues rising) - Sensor failure
      (sudden temperature drop) - Cooling system failure - Part cooling fan blowing on thermistor
    corresponding_v1: temperature_control.{name}.runaway_range
    corresponding_v2: temperature_control.{name}.runaway_range
    units: °C
    valid_values:
    - value: Non-negative integer (0 disables
      description: ''
    - value: 10-30 typical)
      description: ''
    related_settings:
    - temperature_control.{name}.runaway_heating_timeout
    - temperature_control.{name}.runaway_cooling_timeout
    - temperature_control.{name}.runaway_error_range
    - temperature_control.{name}.max_temp
    related_pages:
    - temperaturecontrol
    - troubleshooting
    - safety-thermistor
  - name: runaway_heating_timeout
    type: number
    default: 300 (5 minutes)
    module: temperature_control
    context: Module instance setting (safety feature)
    defined_in: TemperatureControl.cpp:150
    description: Maximum time allowed (in seconds) to reach target temperature during heating. If target is not reached within
      this time, system triggers HALT. Detects heater failure, insufficient power, or disconnected heater. Set to 0 to disable
      (NOT RECOMMENDED). - Heater disconnected or failed - Insufficient heater power - Thermal path blocked - Wrong thermistor
      type configured (reads wrong temperature)
    corresponding_v1: temperature_control.{name}.runaway_heating_timeout
    corresponding_v2: temperature_control.{name}.runaway_heating_timeout
    units: seconds
    valid_values:
    - value: Non-negative integer (0 disables
      description: ''
    - value: 180-600 typical)
      description: ''
    related_settings:
    - temperature_control.{name}.runaway_cooling_timeout
    - temperature_control.{name}.runaway_error_range
    - temperature_control.{name}.runaway_range
    - temperature_control.{name}.max_temp
    related_pages:
    - temperaturecontrol
    - troubleshooting
  - name: runaway_cooling_timeout
    type: number
    default: Same as runaway_heating_timeout (300 seconds)
    module: temperature_control
    context: Module instance setting (safety feature)
    defined_in: TemperatureControl.cpp:151
    description: Maximum time allowed (in seconds) to cool down when reducing temperature setpoint. If cooling takes longer
      than this timeout, system triggers HALT. Detects stuck heater or sensor failures. Set to 0 to disable. - Heater stuck
      on (can't cool down) - Sensor failure (reading stuck at high temperature) - Thermal insulation too effective
    corresponding_v1: none (new feature in v2)
    corresponding_v2: temperature_control.{name}.runaway_cooling_timeout
    units: seconds
    valid_values:
    - value: Non-negative integer (0 disables
      description: ''
    - value: 180-600 typical)
      description: ''
    related_settings:
    - temperature_control.{name}.runaway_heating_timeout
    - temperature_control.{name}.runaway_error_range
    - temperature_control.{name}.runaway_range
    related_pages:
    - temperaturecontrol
    - troubleshooting
  - name: runaway_error_range
    type: number
    default: 1.0 (±1.0°C)
    module: temperature_control
    context: Module instance setting (safety feature)
    defined_in: TemperatureControl.cpp:152
    description: 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 M109 wait conditions.
    corresponding_v1: none (new feature in v2)
    corresponding_v2: temperature_control.{name}.runaway_error_range
    units: °C
    valid_values:
    - value: Positive number (typically 0.5-2.0)
      description: ''
    related_settings:
    - temperature_control.{name}.runaway_heating_timeout
    - temperature_control.{name}.runaway_cooling_timeout
    - temperature_control.{name}.runaway_range
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-pid
  - name: readings_per_second
    type: number
    default: 20 (20 Hz)
    module: temperature_control
    context: Module instance setting
    defined_in: TemperatureControl.cpp:145
    description: Temperature sensor reading and PID update frequency in Hz. This setting determines how often the sensor is
      read and PID calculation is performed. Higher values improve control stability but increase CPU load. The PID time constant
      (PIDdt = 1/readings_per_second) is automatically calculated.
    corresponding_v1: temperature_control.{name}.readings_per_second
    corresponding_v2: temperature_control.{name}.readings_per_second
    units: Hz (readings per second)
    valid_values:
    - value: Positive integer (typically 1-100
      description: ''
    - value: practical range 10-30)
      description: ''
    related_settings:
    - temperature_control.{name}.i_factor
    - temperature_control.{name}.d_factor
    - temperature_control.{name}.sensor
    related_pages:
    - temperaturecontrol
    - temperaturecontrol-pid
  - name: set_m_code
    type: number
    default: 104 (if tool_id < 100), 140 (if tool_id ≥ 100)
    module: temperature_control
    context: Module instance setting
    defined_in: TemperatureControl.cpp:142
    description: 'M-code number used to set target temperature without waiting for temperature to be reached. Standard: M104
      for hotends, M140 for heated beds. This command sets the target and returns immediately, allowing other commands to
      execute while heating. - M104 for hotends (tool_id 0-99) - M140 for beds (tool_id 100+)'
    corresponding_v1: temperature_control.{name}.set_m_code
    corresponding_v2: temperature_control.{name}.set_m_code
    valid_values:
    - value: 100-999 (M-code number range)
      description: ''
    related_settings:
    - temperature_control.{name}.set_and_wait_m_code
    - temperature_control.{name}.get_m_code
    - temperature_control.{name}.tool_id
    related_pages:
    - temperaturecontrol
    - supported-g-codes
  - name: set_and_wait_m_code
    type: number
    default: 109 (if tool_id < 100), 190 (if tool_id ≥ 100)
    module: temperature_control
    context: Module instance setting
    defined_in: TemperatureControl.cpp:143
    description: 'M-code number used to set target temperature and wait until temperature is reached before continuing. Standard:
      M109 for hotends, M190 for heated beds. This command blocks further G-code execution until temperature reaches target
      within runaway_error_range. - M109 for hotends (tool_id 0-99) - M190 for beds (tool_id 100+)'
    corresponding_v1: temperature_control.{name}.set_and_wait_m_code
    corresponding_v2: temperature_control.{name}.set_and_wait_m_code
    valid_values:
    - value: 100-999 (M-code number range)
      description: ''
    related_settings:
    - temperature_control.{name}.set_m_code
    - temperature_control.{name}.get_m_code
    - temperature_control.{name}.runaway_error_range
    - temperature_control.{name}.tool_id
    related_pages:
    - temperaturecontrol
    - supported-g-codes
  - name: get_m_code
    type: number
    default: 105
    module: temperature_control
    context: Module instance setting
    defined_in: TemperatureControl.cpp:144
    description: 'M-code number used to query and report current temperature. Standard: M105 returns all active temperatures
      in format designator:current/target @pwm. This is typically the same M-code (105) for all temperature controllers.'
    corresponding_v1: temperature_control.{name}.get_m_code
    corresponding_v2: temperature_control.{name}.get_m_code
    valid_values:
    - value: 100-999 (M-code number range)
      description: ''
    related_settings:
    - temperature_control.{name}.designator
    - temperature_control.{name}.tool_id
    - temperature_control.{name}.set_m_code
    related_pages:
    - temperaturecontrol
    - supported-g-codes
    - octoprint
- name: Switch
  description: Switch
  setting_count: 17
  settings:
  - name: enable
    type: bool
    default: false
    module: switch
    context: Module instance setting (multi-instance support via named instances)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:58
    description: Enables this switch instance. When set to true, this switch becomes active and will respond to configured
      commands or monitor input pins. Each switch instance must be explicitly enabled to function.
    corresponding_v1: switch.{name}.enable
    corresponding_v2: enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - switch
    - switch-options
    - mosfets
  - name: input_pin
    type: pin
    default: '"" (empty string = output mode)'
    module: switch
    context: Input mode only (mutually exclusive with output settings)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:80
    description: GPIO pin to monitor as physical button or switch input. When configured, this switch operates in input mode
      and monitors the pin for state changes. Input mode is mutually exclusive with output mode - a switch can be either an
      input or an output, not both.
    corresponding_v1: switch.{name}.input_pin
    corresponding_v2: input_pin
    valid_values:
    - value: Pin specification in STM32 format with optional modifiers
      description: ''
    related_settings:
    - switch.{name}.input_pin_behavior
    - switch.{name}.output_on_command
    - switch.{name}.output_off_command
    related_pages:
    - switch
    - pin-configuration
    - endstops
  - name: input_pin_behavior
    type: enum
    default: momentary
    module: switch
    context: Input mode only (requires input_pin to be configured)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:90
    description: Defines how the input pin state changes are interpreted. Momentary behavior treats the input like a pushbutton
      where press and release are distinct actions. Toggle behavior treats each press as a state flip, useful for latching
      switches or to toggle features on/off with a momentary button.
    corresponding_v1: switch.{name}.input_pin_behavior
    corresponding_v2: input_pin_behavior
    valid_values:
    - value: '"momentary"'
      description: ''
    - value: '"toggle"'
      description: ''
    related_settings:
    - switch.{name}.input_pin
    related_pages:
    - switch
    - killbutton
  - name: output_on_command
    type: string
    default: ''
    module: switch
    context: Input mode only (when input_pin is configured)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:92
    description: G-code or M-code command to execute when the input switch is activated (button pressed for momentary, or
      toggled on for toggle behavior). The command is dispatched to the G-code processor as if it were received from a serial
      console.
    corresponding_v1: switch.{name}.output_on_command
    corresponding_v2: output_on_command
    related_settings:
    - switch.{name}.output_off_command
    - switch.{name}.input_pin
    - switch.{name}.input_pin_behavior
    related_pages:
    - switch
    - supported-g-codes
  - name: output_off_command
    type: string
    default: ''
    module: switch
    context: Input mode only (when input_pin is configured)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:93
    description: G-code or M-code command to execute when the input switch is deactivated (button released for momentary,
      or toggled off for toggle behavior). Like output_on_command, this is dispatched to the G-code processor.
    corresponding_v1: switch.{name}.output_off_command
    corresponding_v2: output_off_command
    related_settings:
    - switch.{name}.output_on_command
    - switch.{name}.input_pin
    - switch.{name}.input_pin_behavior
    related_pages:
    - switch
    - supported-g-codes
  - name: input_on_command
    type: string
    default: ''
    module: switch
    context: Output mode only (when output_pin is configured)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:121
    description: The G-code or M-code command that will activate (turn on) this output switch. When Smoothie receives this
      command via serial, network, or SD card, it will turn on the associated output pin according to the configured output
      type.
    corresponding_v1: switch.{name}.input_on_command
    corresponding_v2: input_on_command
    valid_values:
    - value: G-code or M-code string starting with G or M followed by numeric code
      description: ''
    related_settings:
    - switch.{name}.input_off_command
    - switch.{name}.subcode
    - switch.{name}.output_type
    related_pages:
    - switch
    - supported-g-codes
  - name: input_off_command
    type: string
    default: ''
    module: switch
    context: Output mode only (when output_pin is configured)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:122
    description: The G-code or M-code command that will deactivate (turn off) this output switch. When Smoothie receives this
      command, it will turn off the associated output pin regardless of output type.
    corresponding_v1: switch.{name}.input_off_command
    corresponding_v2: input_off_command
    valid_values:
    - value: G-code or M-code string starting with G or M followed by numeric code
      description: ''
    related_settings:
    - switch.{name}.input_on_command
    - switch.{name}.subcode
    - switch.{name}.output_type
    related_pages:
    - switch
    - supported-g-codes
  - name: subcode
    type: number
    default: 0
    module: switch
    context: Output mode (optional, used for differentiating multiple switches with same M-code)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:120
    description: Subcode differentiator that allows multiple switch instances to respond to the same M-code with different
      subcode suffixes. This enables commands like M106.0, M106.1, M106.2 to control different fans independently. The subcode
      can be set explicitly or parsed from the command string suffix.
    corresponding_v1: switch.{name}.subcode
    corresponding_v2: subcode
    valid_values:
    - value: Non-negative integer
      description: ''
    - value: typically 0-9
      description: ''
    related_settings:
    - switch.{name}.input_on_command
    - switch.{name}.input_off_command
    related_pages:
    - switch
    - multiple-extruders
  - name: output_pin
    type: pin
    default: '"nc" (not connected)'
    module: switch
    context: Output mode only (mutually exclusive with input_pin)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:141
    description: GPIO pin or hardware PWM channel to control as an output. This pin will be driven high/low for digital outputs
      or modulated for PWM outputs based on commands received and output type configuration.
    corresponding_v1: switch.{name}.output_pin
    corresponding_v2: output_pin
    valid_values:
    - value: Pin specification in STM32 format with optional modifiers
      description: ''
    - value: or special pin names
      description: ''
    related_settings:
    - switch.{name}.output_type
    related_pages:
    - switch
    - pinout
    - mosfets
    - pwm-capable
  - name: output_type
    type: enum
    default: none (must be explicitly set for output mode)
    module: switch
    context: Output mode only
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:135
    description: Specifies the output control method for this switch. Digital provides simple on/off control for devices like
      relays and power switches. Sigma-delta PWM provides software-based PWM suitable for fans and simple motor control. Hardware
      PWM provides precise, high-frequency PWM for servos, laser power control, and other applications requiring accurate
      duty cycle control.
    corresponding_v1: switch.{name}.output_type
    corresponding_v2: output_type
    valid_values:
    - value: '"digital"'
      description: ''
    - value: '"sigmadeltapwm"'
      description: ''
    - value: '"hwpwm"'
      description: ''
    related_settings:
    - switch.{name}.output_pin
    - switch.{name}.max_pwm
    - switch.{name}.startup_value
    related_pages:
    - switch
    - mosfets
    - pwm-capable
  - name: max_pwm
    type: number
    default: 255
    module: switch
    context: Sigma-delta PWM output only (only used when output_type is sigmadeltapwm)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:191
    description: Maximum PWM value for sigma-delta PWM outputs. Incoming S values from G-code (range 0-255) are scaled proportionally
      to this maximum. This allows limiting the maximum output power or speed without modifying G-code. For example, with
      max_pwm=128, sending M106 S255 will output 50% duty cycle instead of 100%.
    corresponding_v1: switch.{name}.max_pwm
    corresponding_v2: max_pwm
    valid_values:
    - value: 1-255
      description: ''
    related_settings:
    - switch.{name}.output_type
    - switch.{name}.startup_value
    related_pages:
    - switch
  - name: startup_state
    type: bool
    default: false
    module: switch
    context: Output mode only
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:128
    description: Determines the initial on/off state when firmware boots. For digital outputs, this directly sets the pin
      high (true) or low (false). For PWM outputs, true means the startup_value is applied at boot, while false means the
      output starts at minimum/off.
    corresponding_v1: switch.{name}.startup_state
    corresponding_v2: startup_state
    valid_values:
    - value: true (on at boot)
      description: ''
    - value: false (off at boot)
      description: ''
    related_settings:
    - switch.{name}.startup_value
    - switch.{name}.default_on_value
    - switch.{name}.output_type
    related_pages:
    - switch
  - name: startup_value
    type: number
    default: max_pwm value for sigmadeltapwm, 0 for hwpwm
    module: switch
    context: PWM outputs only (sigmadeltapwm or hwpwm types)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:192 (sigmadeltapwm), Firmware/src/modules/tools/switch/Switch.cpp:201
      (hwpwm)
    description: Initial PWM value applied at firmware boot. For sigma-delta PWM, this is an integer value from 0 to max_pwm.
      For hardware PWM, this is a floating point percentage from 0.0 to 100.0. The value is only applied if startup_state
      is true (for sigmadelta) or false (for hwpwm).
    corresponding_v1: switch.{name}.startup_value
    corresponding_v2: startup_value
    related_settings:
    - switch.{name}.startup_state
    - switch.{name}.output_type
    - switch.{name}.max_pwm
    - switch.{name}.default_on_value
    related_pages:
    - switch
  - name: default_on_value
    type: number
    default: 0
    module: switch
    context: Hardware PWM output only (only used when output_type is hwpwm)
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:202
    description: Default PWM duty cycle percentage (0-100%) applied when the switch is turned on without specifying an S or
      P parameter in the G-code command. This is only used for hardware PWM outputs and provides a sensible default power
      level when the exact value isn't specified.
    corresponding_v1: switch.{name}.default_on_value
    corresponding_v2: default_on_value
    valid_values:
    - value: 0.0 to 100.0 (percentage duty cycle)
      description: ''
    related_settings:
    - switch.{name}.output_type
    - switch.{name}.startup_value
    related_pages:
    - switch
  - name: failsafe_set_to
    type: bool
    default: false
    module: switch
    context: Output mode only
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:129
    description: State to set this output to during failsafe or emergency conditions. This setting determines whether the
      switch should be turned on (true) or off (false) when the system enters a failsafe state. Used for safety-critical outputs
      like PSU control, cooling fans, or emergency lighting.
    corresponding_v1: switch.{name}.failsafe_set_to
    corresponding_v2: failsafe_set_to
    valid_values:
    - value: true (high/on)
      description: ''
    - value: false (low/off)
      description: ''
    related_settings:
    - switch.{name}.halt_set_to
    - switch.{name}.ignore_on_halt
    related_pages:
    - switch
    - killbutton
    - emergencystop
  - name: halt_set_to
    type: bool
    default: false
    module: switch
    context: Output mode only
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:130
    description: State to set this output to when the system enters halt state, such as when the kill button is pressed, a
      driver error occurs, or M112 emergency stop is issued. This provides controlled shutdown behavior for different peripherals.
      Commonly used to stop motors and heaters while keeping cooling fans running.
    corresponding_v1: switch.{name}.halt_set_to
    corresponding_v2: halt_set_to
    valid_values:
    - value: true (high/on)
      description: ''
    - value: false (low/off)
      description: ''
    related_settings:
    - switch.{name}.failsafe_set_to
    - switch.{name}.ignore_on_halt
    related_pages:
    - switch
    - killbutton
    - emergencystop
  - name: ignore_on_halt
    type: bool
    default: false
    module: switch
    context: Output mode only
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:131
    description: If true, prevents this switch from changing state when system enters halt. The output maintains its current
      state regardless of halt_set_to setting. Useful for hotend cooling fans that should remain in their current state (on
      if they were on, off if they were off) during emergency stops to ensure proper cooling without forcing them to any specific
      state.
    corresponding_v1: none (new in v2)
    corresponding_v2: ignore_on_halt
    valid_values:
    - value: true (ignore halt
      description: ''
    - value: maintain current state)
      description: ''
    - value: false (apply halt_set_to value)
      description: ''
    related_settings:
    - switch.{name}.halt_set_to
    related_pages:
    - switch
    - killbutton
    - emergencystop
    - temperatureswitch
- name: ZProbe & Leveling
  description: ZProbe & Leveling Strategies
  setting_count: 41
  settings:
  - name: enable
    type: bool
    default: false
    module: zprobe
    context: Global module setting
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:71
    description: Enables the Z-probe module. When set to true, the probe module is loaded and all probing features become
      available including bed leveling strategies, probe testing, and calibration commands.
    corresponding_v1: zprobe.enable
    corresponding_v2: zprobe.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - zprobe
    - endstops
    - delta
    - z-probe-guide
  - name: probe_pin
    type: pin
    default: nc (not connected)
    module: zprobe
    context: Global module setting
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:75
    description: Defines the GPIO pin connected to the probe signal. The probe should output a HIGH signal when touching the
      bed (or LOW if inverted with !). This pin is read at 1kHz in an interrupt service routine to detect probe triggers during
      moves.
    corresponding_v1: zprobe.probe_pin
    corresponding_v2: zprobe.probe_pin
    valid_values:
    - value: Pin specification in STM32 format (e.g.
      description: ''
    - value: PD3
      description: ''
    - value: PE1!
      description: ''
    - value: PF2^)
      description: ''
    related_settings:
    - zprobe.debounce_ms
    related_pages:
    - zprobe
    - pin-configuration
    - sensor-types
  - name: slow_feedrate
    type: number
    default: 5 (mm/sec)
    module: zprobe
    context: Global module setting
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:135
    description: Speed at which the probe approaches the bed during actual probing moves. Slower speeds improve accuracy by
      reducing overshoot and mechanical bouncing, but increase total probing time. This speed is used for the final precision
      probe after any fast approach.
    corresponding_v1: zprobe.slow_feedrate
    corresponding_v2: zprobe.slow_feedrate
    units: mm/sec
    related_settings:
    - zprobe.fast_feedrate
    - zprobe.return_feedrate
    - zprobe.debounce_ms
    related_pages:
    - zprobe
    - sensor-types
  - name: fast_feedrate
    type: number
    default: 100 (mm/sec)
    module: zprobe
    context: Global module setting
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:136
    description: Travel speed between probe points and for initial rapid approach moves. Does not affect probing accuracy
      but reduces total time for multi-point bed leveling operations. Limited by machine capabilities and acceleration settings.
    corresponding_v1: zprobe.fast_feedrate
    corresponding_v2: zprobe.fast_feedrate
    units: mm/sec
    related_settings:
    - zprobe.slow_feedrate
    - zprobe.return_feedrate
    related_pages:
    - zprobe
    - motion-control
  - name: return_feedrate
    type: number
    default: 0 (auto-calculated)
    module: zprobe
    context: Global module setting
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:137
    description: Speed when retracting from a probe point. When set to 0, the firmware automatically calculates return speed
      as slow_feedrate * 2, capped at fast_feedrate. Setting an explicit value overrides this calculation.
    corresponding_v1: zprobe.return_feedrate
    corresponding_v2: zprobe.return_feedrate
    units: mm/sec
    related_settings:
    - zprobe.slow_feedrate
    - zprobe.fast_feedrate
    related_pages:
    - zprobe
  - name: probe_height
    type: number
    default: 5.0 (mm)
    module: zprobe
    context: Global module setting
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:134
    description: Height above the bed to position the probe before starting each probing move. This is the Z height maintained
      during XY travel moves between probe points. Must be high enough that the probe won't crash into the bed or any bed
      obstructions during lateral moves.
    corresponding_v1: zprobe.probe_height
    corresponding_v2: zprobe.probe_height
    units: mm
    related_settings:
    - zprobe.max_travel
    related_pages:
    - zprobe
    - z-probe-guide
  - name: max_travel
    type: number
    default: 200 (mm)
    module: zprobe
    context: Global module setting
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:139
    description: Maximum distance the probe will travel downward before giving up on a probe attempt. Safety feature to prevent
      crashes if the bed is much lower than expected or if the probe fails to trigger. Probe moves abort with error if this
      distance is exceeded without trigger.
    corresponding_v1: zprobe.max_z or gamma_max
    corresponding_v2: zprobe.max_travel
    units: mm
    related_settings:
    - zprobe.probe_height
    related_pages:
    - zprobe
    - z-probe-guide
  - name: reverse_z
    type: bool
    default: false
    module: zprobe
    context: Global module setting
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:138
    description: Probe in +Z direction instead of -Z direction. Used for specialized machine setups where the probe moves
      upward to contact a surface above the nozzle rather than downward to contact a bed below.
    corresponding_v1: zprobe.reverse_z
    corresponding_v2: zprobe.reverse_z
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - zprobe
  - name: dwell_before_probing
    type: number
    default: 0 (seconds)
    module: zprobe
    context: Global module setting
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:141
    description: Time to wait before starting each probe move. Allows mechanical settling after XY positioning and before
      Z probe begins. Useful for deployable probes (e.g., BLTouch that needs time to deploy), machines with mechanical flex,
      or to allow vibrations to dampen.
    corresponding_v1: zprobe.dwell_before_probing
    corresponding_v2: zprobe.dwell_before_probing
    units: seconds
    related_settings:
    - zprobe.debounce_ms
    - leveling strategy before_probe_gcode
    related_pages:
    - zprobe
    - sensor-types
  - name: debounce_ms
    type: number
    default: 0 (milliseconds)
    module: zprobe
    context: Global module setting
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:83
    description: Probe signal debounce time in milliseconds. The probe signal must remain continuously triggered for this
      duration before being considered a valid trigger. Prevents false triggers from electrical noise, mechanical bouncing,
      or transient signals. Each millisecond is verified at 1kHz in the ISR.
    corresponding_v1: zprobe.debounce_ms
    corresponding_v2: zprobe.debounce_ms
    units: milliseconds
    related_settings:
    - zprobe.probe_pin
    - zprobe.slow_feedrate
    related_pages:
    - zprobe
    - sensor-types
  - name: leveling
    type: string
    default: '"" (none)'
    module: zprobe
    context: Strategy selection
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:86
    description: Selects which bed leveling strategy to enable. Only one leveling strategy can be active at a time. Each strategy
      has its own configuration section with strategy-specific parameters. Leveling strategies apply Z-axis compensation during
      printing to account for bed irregularities.
    corresponding_v1: leveling-strategy.{name}.enable (three-point-leveling, delta-calibration, delta-grid, rectangular-grid)
    corresponding_v2: zprobe.leveling
    valid_values:
    - value: '"three point"'
      description: ''
    - value: '"cartesian grid"'
      description: ''
    - value: '"delta grid"'
      description: ''
    - value: '"" (no leveling)'
      description: ''
    related_settings:
    - All [three point leveling strategy]
    - '[cartesian grid leveling strategy]'
    - or [delta grid leveling strategy] settings
    related_pages:
    - zprobe
    - three-point-strategy-options
    - rectangular-grid-calibration-options
    - delta-grid-calibration-options
  - name: calibration
    type: string
    default: '"" (none)'
    module: zprobe
    context: Strategy selection
    defined_in: Firmware/src/modules/tools/zprobe/ZProbe.cpp:114
    description: Selects which calibration strategy to enable. Used specifically for delta printer calibration to automatically
      adjust endstop trim values and delta radius. Can be used alongside a leveling strategy for comprehensive delta setup.
    corresponding_v1: leveling-strategy.delta-calibration.enable
    corresponding_v2: zprobe.calibration
    valid_values:
    - value: '"delta"'
      description: ''
    - value: '"" (no calibration)'
      description: ''
    related_settings:
    - All [delta calibration strategy] settings
    related_pages:
    - zprobe
    - delta-calibration-strategy-options
    - delta
  - name: probe_offsets
    type: string
    default: 0,0,0
    module: zprobe
    context: Three-point strategy probe geometry
    defined_in: Firmware/src/modules/tools/zprobe/ThreePointStrategy.cpp:108
    description: Offset of the probe trigger point from the nozzle tip in X, Y, and Z axes. Firmware accounts for these offsets
      when positioning for probe moves and when calculating bed heights. Critical for accurate leveling with offset probes.
    corresponding_v1: leveling-strategy.three-point-leveling.probe_offsets
    corresponding_v2: three point leveling strategy.probe_offsets
    units: mm
    valid_values:
    - value: Comma-separated X
      description: ''
    - value: Y
      description: ''
    - value: Z offsets in format "X
      description: ''
    - value: Y
      description: ''
    - value: Z"
      description: ''
    related_settings:
    - point1
    - point2
    - point3
    related_pages:
    - zprobe
    - three-point-strategy-options
  - name: home_first
    type: bool
    default: true
    module: zprobe
    context: Three-point strategy homing behavior
    defined_in: Firmware/src/modules/tools/zprobe/ThreePointStrategy.cpp:111
    description: Automatically home X and Y axes before running G32 leveling. Ensures consistent and known starting position
      before probing begins. Recommended to keep enabled unless manual homing is specifically required.
    corresponding_v1: leveling-strategy.three-point-leveling.home_first
    corresponding_v2: three point leveling strategy.home_first
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - zprobe
    - three-point-strategy-options
    - endstops
  - name: tolerance
    type: number
    default: 0.03 (mm)
    module: zprobe
    context: Three-point strategy flatness threshold
    defined_in: Firmware/src/modules/tools/zprobe/ThreePointStrategy.cpp:112
    description: If the three probe points differ by less than this amount, the bed is considered flat and no compensation
      is applied. Also used to validate probe repeatability and warn if the first point is not within tolerance of zero.
    corresponding_v1: leveling-strategy.three-point-leveling.tolerance
    corresponding_v2: three point leveling strategy.tolerance
    units: mm
    related_pages:
    - zprobe
    - three-point-strategy-options
  - name: save_plane
    type: bool
    default: false
    module: zprobe
    context: Three-point strategy persistence setting
    defined_in: Firmware/src/modules/tools/zprobe/ThreePointStrategy.cpp:113
    description: Enable saving the calculated plane equation with M500 and restoring it with M561 ABCD parameters. Allows
      reusing a leveling plane without re-probing on each boot. The plane is encoded as four 32-bit integers representing
      the plane equation coefficients.
    corresponding_v1: leveling-strategy.three-point-leveling.save_plane
    corresponding_v2: three point leveling strategy.save_plane
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - zprobe
    - three-point-strategy-options
  - name: x_size
    type: number
    default: 0.0 (must be defined)
    module: zprobe
    context: Cartesian grid geometry (required)
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:158
    description: Width of the rectangular probing area in millimeters. Defines the X dimension of the bed area to probe and
      compensate. Must be set to a non-zero value or strategy will fail to configure.
    corresponding_v1: leveling-strategy.rectangular-grid.x_size
    corresponding_v2: cartesian grid leveling strategy.x_size
    units: mm
    related_settings:
    - y_size
    - grid_x_size
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: y_size
    type: number
    default: 0.0 (must be defined)
    module: zprobe
    context: Cartesian grid geometry (required)
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:159
    description: Length of the rectangular probing area in millimeters. Defines the Y dimension of the bed area to probe and
      compensate. Must be set to a non-zero value or strategy will fail to configure.
    corresponding_v1: leveling-strategy.rectangular-grid.y_size
    corresponding_v2: cartesian grid leveling strategy.y_size
    units: mm
    related_settings:
    - x_size
    - grid_y_size
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: grid_x_size
    type: number
    default: 7
    module: zprobe
    context: Cartesian grid resolution
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:139
    description: Number of probe points in X direction. Must be an odd number for proper grid symmetry. More points provide
      better compensation accuracy but increase probing time significantly.
    corresponding_v1: leveling-strategy.rectangular-grid.grid_x_size
    corresponding_v2: cartesian grid leveling strategy.grid_x_size
    valid_values:
    - value: Odd integers >= 5
      description: ''
    related_settings:
    - grid_y_size
    - x_size
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: grid_y_size
    type: number
    default: 7
    module: zprobe
    context: Cartesian grid resolution
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:140
    description: Number of probe points in Y direction. Must be an odd number. Works with grid_x_size to define total probe
      point count.
    corresponding_v1: leveling-strategy.rectangular-grid.grid_y_size
    corresponding_v2: cartesian grid leveling strategy.grid_y_size
    valid_values:
    - value: Odd integers >= 5
      description: ''
    related_settings:
    - grid_x_size
    - y_size
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: tolerance
    type: number
    default: 0.03 (mm)
    module: zprobe
    context: Cartesian grid quality threshold
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:141
    description: Probe tolerance threshold. Currently used for validation reporting but not for automatic re-probing in v2
      implementation.
    corresponding_v1: leveling-strategy.rectangular-grid.tolerance
    corresponding_v2: cartesian grid leveling strategy.tolerance
    units: mm
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: save
    type: bool
    default: false
    module: zprobe
    context: Cartesian grid persistence setting
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:142
    description: When true, M500 will save an M375 command to config-override, causing the grid to be automatically loaded
      from /sd/cartesian.grid on boot. Enables persistent bed leveling without re-probing every boot.
    corresponding_v1: leveling-strategy.rectangular-grid.save
    corresponding_v2: cartesian grid leveling strategy.save
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: do_home
    type: bool
    default: true
    module: zprobe
    context: Cartesian grid homing behavior
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:143
    description: Automatically home all axes before probing grid with G32 command. Ensures consistent starting position for
      repeatable grid probing.
    corresponding_v1: leveling-strategy.rectangular-grid.do_home
    corresponding_v2: cartesian grid leveling strategy.do_home
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
    - endstops
  - name: only_by_two_corners
    type: bool
    default: false
    module: zprobe
    context: Cartesian grid definition mode
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:144
    description: When true, requires G32 to specify XYAB parameters defining the grid area instead of using configured x_size/y_size.
      X,Y define start position offset, A,B define grid size. Useful for probing arbitrary bed regions dynamically.
    corresponding_v1: leveling-strategy.rectangular-grid.only_by_two_corners
    corresponding_v2: cartesian grid leveling strategy.only_by_two_corners
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: human_readable
    type: bool
    default: false
    module: zprobe
    context: Cartesian grid output format
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:145
    description: Display grid as a formatted table with XY coordinates when using M375.1 instead of raw floating-point values.
      Makes grid data easier to visually interpret and verify.
    corresponding_v1: leveling-strategy.rectangular-grid.human_readable
    corresponding_v2: cartesian grid leveling strategy.human_readable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: probe_offsets
    type: string
    default: 0,0,0
    module: zprobe
    context: Cartesian grid probe geometry
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:171
    description: Probe offset from nozzle tip in X, Y, and Z. Accounts for probe position relative to nozzle during grid probing
      and compensation calculations.
    corresponding_v1: leveling-strategy.rectangular-grid.probe_offsets
    corresponding_v2: cartesian grid leveling strategy.probe_offsets
    units: mm
    valid_values:
    - value: Comma-separated X
      description: ''
    - value: Y
      description: ''
    - value: Z offsets in format "X
      description: ''
    - value: Y
      description: ''
    - value: Z"
      description: ''
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: dampening_start
    type: number
    default: 0 (disabled)
    module: zprobe
    context: Cartesian grid advanced compensation control
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:148
    description: Z height where bed compensation begins to reduce linearly. Between dampening_start and height_limit, compensation
      is scaled from 100% down to 0%. Prevents over-compensation at higher Z heights where bed topology is less relevant.
    corresponding_v1: leveling-strategy.rectangular-grid.dampening_start
    corresponding_v2: cartesian grid leveling strategy.dampening_start
    units: mm
    valid_values:
    - value: 0 (disabled) or > 0 and < height_limit
      description: ''
    related_settings:
    - height_limit
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: height_limit
    type: number
    default: 0 (disabled)
    module: zprobe
    context: Cartesian grid advanced compensation control
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:147
    description: Z height where bed compensation stops completely. Above this height, no compensation is applied. Works with
      dampening_start to create fade-out zone. Useful when bed topology only matters for first few layers.
    corresponding_v1: leveling-strategy.rectangular-grid.height_limit
    corresponding_v2: cartesian grid leveling strategy.height_limit
    units: mm
    valid_values:
    - value: 0 (disabled) or > dampening_start
      description: ''
    related_settings:
    - dampening_start
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: initial_height
    type: number
    default: 10 (mm)
    module: zprobe
    context: Cartesian grid initial probing height
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:167
    description: Height above bed to begin initial probe search. Must be high enough that probe won't crash during initial
      positioning to start of grid. Used to find bed before starting systematic grid probing.
    corresponding_v1: leveling-strategy.rectangular-grid.initial_height
    corresponding_v2: cartesian grid leveling strategy.initial_height
    units: mm
    valid_values:
    - value: '> 0'
      description: ''
    - value: typically 5-20mm
      description: ''
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
  - name: before_probe_gcode
    type: string
    default: '"" (none)'
    module: zprobe
    context: Cartesian grid probe deployment automation
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:178
    description: G-code command(s) to run before each probe point. Used for deployable probes like BLTouch that need to extend
      before probing. Can be a single command or multiple commands separated by semicolons. Executed via null output stream
      (no response shown).
    corresponding_v1: none (new in v2)
    corresponding_v2: cartesian grid leveling strategy.before_probe_gcode
    valid_values:
    - value: G-code command string (single or multiple separated by semicolons)
      description: ''
    related_settings:
    - after_probe_gcode
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
    - sensor-types
  - name: after_probe_gcode
    type: string
    default: '"" (none)'
    module: zprobe
    context: Cartesian grid probe retraction automation
    defined_in: Firmware/src/modules/tools/zprobe/CartGridStrategy.cpp:179
    description: G-code command(s) to run after each probe point. Used for deployable probes like BLTouch that need to retract
      after probing. Paired with before_probe_gcode for complete probe deployment/retraction cycle.
    corresponding_v1: none (new in v2)
    corresponding_v2: cartesian grid leveling strategy.after_probe_gcode
    valid_values:
    - value: G-code command string (single or multiple separated by semicolons)
      description: ''
    related_settings:
    - before_probe_gcode
    related_pages:
    - zprobe
    - rectangular-grid-calibration-options
    - sensor-types
  - name: radius
    type: number
    default: 50.0 (mm)
    module: zprobe
    context: Delta grid geometry (required)
    defined_in: Firmware/src/modules/tools/zprobe/DeltaGridStrategy.cpp:116
    description: Radius of circular probing area from bed center. Should be at least as large as maximum printing radius to
      ensure full bed compensation coverage. Points outside this radius are not probed but are extrapolated from nearby probed
      points.
    corresponding_v1: leveling-strategy.delta-grid.radius
    corresponding_v2: delta grid leveling strategy.radius
    units: mm
    valid_values:
    - value: '> 0'
      description: ''
    - value: typically 50-150mm depending on printer size
      description: ''
    related_settings:
    - size
    related_pages:
    - zprobe
    - delta-grid-calibration-options
    - delta
  - name: size
    type: number
    default: 7
    module: zprobe
    context: Delta grid resolution
    defined_in: Firmware/src/modules/tools/zprobe/DeltaGridStrategy.cpp:112
    description: Grid size (number of points in each direction). Must be an odd number. Creates size×size grid, but only probes
      points within radius. Corner points outside circular boundary are extrapolated.
    corresponding_v1: leveling-strategy.delta-grid.size
    corresponding_v2: delta grid leveling strategy.size
    valid_values:
    - value: Odd integers >= 5
      description: ''
    related_settings:
    - radius
    related_pages:
    - zprobe
    - delta-grid-calibration-options
    - delta
  - name: tolerance
    type: number
    default: 0.03 (mm)
    module: zprobe
    context: Delta grid quality threshold
    defined_in: Firmware/src/modules/tools/zprobe/DeltaGridStrategy.cpp:113
    description: Probe tolerance for validation. Used for quality reporting.
    corresponding_v1: leveling-strategy.delta-grid.tolerance
    corresponding_v2: delta grid leveling strategy.tolerance
    units: mm
    related_pages:
    - zprobe
    - delta-grid-calibration-options
  - name: save
    type: bool
    default: false
    module: zprobe
    context: Delta grid persistence setting
    defined_in: Firmware/src/modules/tools/zprobe/DeltaGridStrategy.cpp:114
    description: When true, M500 saves M375 command to config-override, causing grid to auto-load from /sd/delta.grid on boot.
    corresponding_v1: leveling-strategy.delta-grid.save
    corresponding_v2: delta grid leveling strategy.save
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - zprobe
    - delta-grid-calibration-options
  - name: do_home
    type: bool
    default: true
    module: zprobe
    context: Delta grid homing behavior
    defined_in: Firmware/src/modules/tools/zprobe/DeltaGridStrategy.cpp:115
    description: Home before probing grid. Ensures consistent starting position for repeatable results.
    corresponding_v1: leveling-strategy.delta-grid.do_home
    corresponding_v2: delta grid leveling strategy.do_home
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_pages:
    - zprobe
    - delta-grid-calibration-options
    - endstops
  - name: initial_height
    type: number
    default: 10 (mm)
    module: zprobe
    context: Delta grid initial probing height
    defined_in: Firmware/src/modules/tools/zprobe/DeltaGridStrategy.cpp:120
    description: Starting height for initial bed probe. Should be high enough that probe won't hit bed during initial move
      to center after homing.
    corresponding_v1: leveling-strategy.delta-grid.initial_height
    corresponding_v2: delta grid leveling strategy.initial_height
    units: mm
    valid_values:
    - value: '> 0'
      description: ''
    - value: typically 5-20mm
      description: ''
    related_pages:
    - zprobe
    - delta-grid-calibration-options
    - delta
  - name: probe_offsets
    type: string
    default: 0,0,0
    module: zprobe
    context: Delta grid probe geometry
    defined_in: Firmware/src/modules/tools/zprobe/DeltaGridStrategy.cpp:124
    description: Probe offset from effector in X, Y, Z format. Accounts for probe position relative to nozzle.
    corresponding_v1: leveling-strategy.delta-grid.probe_offsets
    corresponding_v2: delta grid leveling strategy.probe_offsets
    units: mm
    valid_values:
    - value: Comma-separated X
      description: ''
    - value: Y
      description: ''
    - value: Z offsets in format "X
      description: ''
    - value: Y
      description: ''
    - value: Z"
      description: ''
    related_pages:
    - zprobe
    - delta-grid-calibration-options
  - name: radius
    type: number
    default: 100.0 (mm)
    module: zprobe
    context: Delta calibration geometry
    defined_in: Firmware/src/modules/tools/zprobe/DeltaCalibrationStrategy.cpp:31
    description: Radius from center to probe points during calibration. Should be large enough to show tower positioning errors
      but within probe-reachable area. Different from delta-grid radius - this is for calibration, not leveling.
    corresponding_v1: leveling-strategy.delta-calibration.radius
    corresponding_v2: delta calibration strategy.radius
    units: mm
    valid_values:
    - value: '> 0'
      description: ''
    - value: typically 50-150mm
      description: ''
    related_pages:
    - zprobe
    - delta-calibration-strategy-options
    - delta
  - name: initial_height
    type: number
    default: 20 (mm)
    module: zprobe
    context: Delta calibration initial height
    defined_in: Firmware/src/modules/tools/zprobe/DeltaCalibrationStrategy.cpp:35
    description: Height to descend to after homing before starting calibration probe. Must account for probe extension distance
      below effector. Higher than grid strategies due to delta geometry considerations.
    corresponding_v1: leveling-strategy.delta-calibration.initial_height
    corresponding_v2: delta calibration strategy.initial_height
    units: mm
    valid_values:
    - value: '> 0'
      description: ''
    - value: typically 10-30mm
      description: ''
    related_pages:
    - zprobe
    - delta-calibration-strategy-options
    - delta
  - name: tolerance
    type: number
    default: 0.03 (mm)
    module: zprobe
    context: Delta calibration target tolerance
    defined_in: Firmware/src/modules/tools/zprobe/DeltaCalibrationStrategy.cpp:38
    description: Target tolerance for calibration completion. Calibration iterates until probe height differences are within
      this value, or maximum 10 iterations complete. Tighter tolerance improves accuracy but may not be achievable on all
      machines.
    corresponding_v1: leveling-strategy.delta-calibration.tolerance
    corresponding_v2: delta calibration strategy.tolerance
    units: mm
    valid_values:
    - value: '> 0'
      description: ''
    - value: typically 0.01-0.05mm
      description: ''
    related_pages:
    - zprobe
    - delta-calibration-strategy-options
    - delta
- name: Endstops
  description: ''
  setting_count: 71
  settings:
  - name: maxx.axis
    type: string (single character)
    default: none (required setting)
    module: endstops
    context: Module instance setting (associates endstop with machine axis)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:151
    description: Defines which machine axis this endstop controls. The axis assignment determines which motor(s) stop when
      the endstop is triggered and which coordinate is set during homing. Each endstop must be assigned to exactly one axis,
      but an axis can have multiple endstops (min and max, or multiple for limit detection).
    corresponding_v1: Implicit in endstop name (alpha_max_endstop → X axis)
    corresponding_v2: endstops.maxx.axis
    valid_values:
    - value: X
      description: ''
    - value: Y
      description: ''
    - value: Z
      description: ''
    - value: A
      description: ''
    - value: B
      description: ''
    - value: C
      description: ''
    related_settings:
    - maxx.homing_direction
    - maxx.homing_position
    - actuator.<axis>.steps_per_mm
    related_pages:
    - endstops
    - arm-solutions
    - cartesian
    - delta
  - name: maxx.enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (each endstop instance must be explicitly enabled)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:141
    description: Enables this specific endstop instance. When set to true, the endstop becomes active and will be monitored
      during homing operations or for limit detection. When false, the endstop is completely ignored by the firmware regardless
      of other settings.
    corresponding_v1: none (v1 used implicit enable via pin definition)
    corresponding_v2: endstops.maxx.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - maxx.pin
    - maxx.axis
    - maxx.homing_direction
    related_pages:
    - endstops
    - guide-endstops
    - endstops-options
  - name: maxx.fast_rate
    type: number
    default: 100
    module: endstops
    context: Module instance setting (first-pass homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:222
    description: Speed for the initial fast approach to the endstop during the first phase of homing. The two-phase homing
      sequence uses this faster speed to quickly move the axis close to the endstop, then backs off and approaches slowly
      for precision. Higher values reduce homing time but may reduce repeatability due to mechanical momentum and switch bounce.
    corresponding_v1: alpha_fast_homing_rate_mm_s
    corresponding_v2: endstops.maxx.fast_rate
    units: mm/s
    related_settings:
    - maxx.slow_rate
    - maxx.retract
    - maxx.max_travel
    related_pages:
    - endstops
    - endstops-options
    - stepper-motors
  - name: maxx.homing_direction
    type: string
    default: null
    module: endstops
    context: Module instance setting (defines homing behavior for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:197
    description: Specifies the direction the axis moves when homing to this endstop. When a homing command (G28) is issued,
      the firmware moves the axis in the specified direction until this endstop triggers. The direction determines whether
      the axis moves toward the minimum (negative) or maximum (positive) end of travel.
    corresponding_v1: alpha_homing_direction
    corresponding_v2: endstops.maxx.homing_direction
    valid_values:
    - value: home_to_min
      description: ''
    - value: home_to_max
      description: ''
    - value: none
      description: ''
    related_settings:
    - maxx.homing_position
    - maxx.max_travel
    - maxx.fast_rate
    - maxx.slow_rate
    related_pages:
    - endstops
    - endstop
    - guide-endstops
  - name: maxx.homing_position
    type: number
    default: 0 (if home_to_min), 200 (if home_to_max)
    module: endstops
    context: Module instance setting (establishes machine coordinate system origin)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:232
    description: Defines the machine coordinate value assigned to the axis when the endstop is triggered during homing. This
      setting establishes the machine coordinate system by defining where in space the endstop is located. After homing completes,
      the axis position is set to this value, making it the reference point for all subsequent moves.
    corresponding_v1: alpha_max
    corresponding_v2: endstops.maxx.homing_position
    units: mm
    related_settings:
    - maxx.homing_direction
    - common.alpha_trim_mm
    - common.beta_trim_mm
    - common.gamma_trim_mm
    related_pages:
    - endstops
    - gamma-max
    - delta
  - name: maxx.limit_enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (enables hard limit detection)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:180
    description: Enables this endstop as a hard limit switch that triggers an emergency stop if hit during normal operation
      (outside of homing). When enabled, if the endstop is triggered while any axis is moving during normal operation, the
      system immediately enters ALARM state, halts all motion, disables heaters, and flushes the motion queue to prevent crashes
      or damage.
    corresponding_v1: alpha_limit_enable
    corresponding_v2: endstops.maxx.limit_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - common.debounce_ms
    - maxx.pin
    related_pages:
    - endstops
    - emergencystop
    - killbutton
  - name: maxx.max_travel
    type: number
    default: 500
    module: endstops
    context: Module instance setting (safety limit for homing travel distance)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:235
    description: Maximum distance the axis will travel during homing before triggering a timeout alarm. This is a safety feature
      that prevents the machine from moving indefinitely if the endstop fails to trigger due to wiring failure, mechanical
      issues, or incorrect configuration. If the endstop is not triggered within this distance, the system enters ALARM state
      and halts all motion.
    corresponding_v1: alpha_max_travel
    corresponding_v2: endstops.maxx.max_travel
    units: mm
    related_settings:
    - maxx.fast_rate
    - maxx.slow_rate
    - maxx.homing_direction
    related_pages:
    - endstops
    - troubleshooting
    - emergencystop
  - name: maxx.pin
    type: pin
    default: nc (not connected)
    module: endstops
    context: Module instance setting (physical pin connection for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:144
    description: Specifies the GPIO pin connected to the endstop switch signal. The pin is configured as an input and monitored
      for state changes during homing and limit checking. The firmware reads this pin to detect when the endstop is triggered.
    corresponding_v1: alpha_max_endstop
    corresponding_v2: endstops.maxx.pin
    valid_values:
    - value: v2 pin format (e.g.
      description: ''
    - value: PD0
      description: ''
    - value: PD0^
      description: ''
    - value: PD0!)
      description: ''
    related_settings:
    - maxx.axis
    - maxx.homing_direction
    - common.debounce_ms
    related_pages:
    - endstops
    - pin-configuration
    - pinout
    - sensor-types
  - name: maxx.retract
    type: number
    default: 5
    module: endstops
    context: Module instance setting (backoff distance for two-phase homing)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:226
    description: 'Distance to move away from the endstop after the fast approach triggers it, before performing the slow precision
      approach. This backoff ensures the endstop is no longer triggered before the final slow approach begins, allowing for
      accurate position detection. The two-phase homing sequence is: fast approach → trigger → retract this distance → slow
      approach → trigger → done.'
    corresponding_v1: alpha_homing_retract_mm
    corresponding_v2: endstops.maxx.retract
    units: mm
    related_settings:
    - maxx.fast_rate
    - maxx.slow_rate
    related_pages:
    - endstops
    - sensor-types
  - name: maxx.slow_rate
    type: number
    default: 10
    module: endstops
    context: Module instance setting (precision homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:223
    description: Speed for the second-phase precision approach to the endstop after the initial fast approach and retract.
      This slower speed ensures accurate and repeatable homing by reducing mechanical momentum and allowing the switch to
      settle before position is recorded. Lower values improve homing repeatability at the cost of increased homing time.
    corresponding_v1: alpha_slow_homing_rate_mm_s
    corresponding_v2: endstops.maxx.slow_rate
    units: mm/s
    related_settings:
    - maxx.fast_rate
    - maxx.retract
    - common.debounce_ms
    related_pages:
    - endstops
    - endstops-options
  - name: maxy.axis
    type: string (single character)
    default: none (required setting)
    module: endstops
    context: Module instance setting (associates endstop with machine axis)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:151
    description: Defines which machine axis this endstop controls. The axis assignment determines which motor(s) stop when
      the endstop is triggered and which coordinate is set during homing. Each endstop must be assigned to exactly one axis,
      but an axis can have multiple endstops (min and max, or multiple for limit detection).
    corresponding_v1: Implicit in endstop name (beta_max_endstop → Y axis)
    corresponding_v2: endstops.maxy.axis
    valid_values:
    - value: X
      description: ''
    - value: Y
      description: ''
    - value: Z
      description: ''
    - value: A
      description: ''
    - value: B
      description: ''
    - value: C
      description: ''
    related_settings:
    - maxy.homing_direction
    - maxy.homing_position
    - actuator.<axis>.steps_per_mm
    related_pages:
    - endstops
    - arm-solutions
    - cartesian
    - delta
  - name: maxy.enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (each endstop instance must be explicitly enabled)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:141
    description: Enables this specific endstop instance. When set to true, the endstop becomes active and will be monitored
      during homing operations or for limit detection. When false, the endstop is completely ignored by the firmware regardless
      of other settings.
    corresponding_v1: none (v1 used implicit enable via pin definition)
    corresponding_v2: endstops.maxy.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - maxy.pin
    - maxy.axis
    - maxy.homing_direction
    related_pages:
    - endstops
    - guide-endstops
    - endstops-options
  - name: maxy.fast_rate
    type: number
    default: 100
    module: endstops
    context: Module instance setting (first-pass homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:222
    description: Speed for the initial fast approach to the endstop during the first phase of homing. The two-phase homing
      sequence uses this faster speed to quickly move the axis close to the endstop, then backs off and approaches slowly
      for precision. Higher values reduce homing time but may reduce repeatability due to mechanical momentum and switch bounce.
    corresponding_v1: beta_fast_homing_rate_mm_s
    corresponding_v2: endstops.maxy.fast_rate
    units: mm/s
    related_settings:
    - maxy.slow_rate
    - maxy.retract
    - maxy.max_travel
    related_pages:
    - endstops
    - endstops-options
    - stepper-motors
  - name: maxy.homing_direction
    type: string
    default: null
    module: endstops
    context: Module instance setting (defines homing behavior for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:197
    description: Specifies the direction the axis moves when homing to this endstop. When a homing command (G28) is issued,
      the firmware moves the axis in the specified direction until this endstop triggers. The direction determines whether
      the axis moves toward the minimum (negative) or maximum (positive) end of travel.
    corresponding_v1: beta_homing_direction
    corresponding_v2: endstops.maxy.homing_direction
    valid_values:
    - value: home_to_min
      description: ''
    - value: home_to_max
      description: ''
    - value: none
      description: ''
    related_settings:
    - maxy.homing_position
    - maxy.max_travel
    - maxy.fast_rate
    - maxy.slow_rate
    related_pages:
    - endstops
    - endstop
    - guide-endstops
  - name: maxy.homing_position
    type: number
    default: 0 (if home_to_min), 200 (if home_to_max)
    module: endstops
    context: Module instance setting (establishes machine coordinate system origin)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:232
    description: Defines the machine coordinate value assigned to the axis when the endstop is triggered during homing. This
      setting establishes the machine coordinate system by defining where in space the endstop is located. After homing completes,
      the axis position is set to this value, making it the reference point for all subsequent moves.
    corresponding_v1: beta_max
    corresponding_v2: endstops.maxy.homing_position
    units: mm
    related_settings:
    - maxy.homing_direction
    - common.alpha_trim_mm
    - common.beta_trim_mm
    - common.gamma_trim_mm
    related_pages:
    - endstops
    - gamma-max
    - delta
  - name: maxy.limit_enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (enables hard limit detection)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:180
    description: Enables this endstop as a hard limit switch that triggers an emergency stop if hit during normal operation
      (outside of homing). When enabled, if the endstop is triggered while any axis is moving during normal operation, the
      system immediately enters ALARM state, halts all motion, disables heaters, and flushes the motion queue to prevent crashes
      or damage.
    corresponding_v1: beta_limit_enable
    corresponding_v2: endstops.maxy.limit_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - common.debounce_ms
    - maxy.pin
    related_pages:
    - endstops
    - emergencystop
    - killbutton
  - name: maxy.max_travel
    type: number
    default: 500
    module: endstops
    context: Module instance setting (safety limit for homing travel distance)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:235
    description: Maximum distance the axis will travel during homing before triggering a timeout alarm. This is a safety feature
      that prevents the machine from moving indefinitely if the endstop fails to trigger due to wiring failure, mechanical
      issues, or incorrect configuration. If the endstop is not triggered within this distance, the system enters ALARM state
      and halts all motion.
    corresponding_v1: beta_max_travel
    corresponding_v2: endstops.maxy.max_travel
    units: mm
    related_settings:
    - maxy.fast_rate
    - maxy.slow_rate
    - maxy.homing_direction
    related_pages:
    - endstops
    - troubleshooting
    - emergencystop
  - name: maxy.pin
    type: pin
    default: nc (not connected)
    module: endstops
    context: Module instance setting (physical pin connection for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:144
    description: Specifies the GPIO pin connected to the endstop switch signal. The pin is configured as an input and monitored
      for state changes during homing and limit checking. The firmware reads this pin to detect when the endstop is triggered.
    corresponding_v1: beta_max_endstop
    corresponding_v2: endstops.maxy.pin
    valid_values:
    - value: v2 pin format (e.g.
      description: ''
    - value: PD0
      description: ''
    - value: PD0^
      description: ''
    - value: PD0!)
      description: ''
    related_settings:
    - maxy.axis
    - maxy.homing_direction
    - common.debounce_ms
    related_pages:
    - endstops
    - pin-configuration
    - pinout
    - sensor-types
  - name: maxy.retract
    type: number
    default: 5
    module: endstops
    context: Module instance setting (backoff distance for two-phase homing)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:226
    description: 'Distance to move away from the endstop after the fast approach triggers it, before performing the slow precision
      approach. This backoff ensures the endstop is no longer triggered before the final slow approach begins, allowing for
      accurate position detection. The two-phase homing sequence is: fast approach → trigger → retract this distance → slow
      approach → trigger → done.'
    corresponding_v1: beta_homing_retract_mm
    corresponding_v2: endstops.maxy.retract
    units: mm
    related_settings:
    - maxy.fast_rate
    - maxy.slow_rate
    related_pages:
    - endstops
    - sensor-types
  - name: maxy.slow_rate
    type: number
    default: 10
    module: endstops
    context: Module instance setting (precision homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:223
    description: Speed for the second-phase precision approach to the endstop after the initial fast approach and retract.
      This slower speed ensures accurate and repeatable homing by reducing mechanical momentum and allowing the switch to
      settle before position is recorded. Lower values improve homing repeatability at the cost of increased homing time.
    corresponding_v1: beta_slow_homing_rate_mm_s
    corresponding_v2: endstops.maxy.slow_rate
    units: mm/s
    related_settings:
    - maxy.fast_rate
    - maxy.retract
    - common.debounce_ms
    related_pages:
    - endstops
    - endstops-options
  - name: maxz.axis
    type: string (single character)
    default: none (required setting)
    module: endstops
    context: Module instance setting (associates endstop with machine axis)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:151
    description: Defines which machine axis this endstop controls. The axis assignment determines which motor(s) stop when
      the endstop is triggered and which coordinate is set during homing. Each endstop must be assigned to exactly one axis,
      but an axis can have multiple endstops (min and max, or multiple for limit detection).
    corresponding_v1: Implicit in endstop name (gamma_max_endstop → Z axis)
    corresponding_v2: endstops.maxz.axis
    valid_values:
    - value: X
      description: ''
    - value: Y
      description: ''
    - value: Z
      description: ''
    - value: A
      description: ''
    - value: B
      description: ''
    - value: C
      description: ''
    related_settings:
    - maxz.homing_direction
    - maxz.homing_position
    - actuator.<axis>.steps_per_mm
    related_pages:
    - endstops
    - arm-solutions
    - cartesian
    - delta
  - name: maxz.enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (each endstop instance must be explicitly enabled)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:141
    description: Enables this specific endstop instance. When set to true, the endstop becomes active and will be monitored
      during homing operations or for limit detection. When false, the endstop is completely ignored by the firmware regardless
      of other settings.
    corresponding_v1: none (v1 used implicit enable via pin definition)
    corresponding_v2: endstops.maxz.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - maxz.pin
    - maxz.axis
    - maxz.homing_direction
    related_pages:
    - endstops
    - guide-endstops
    - endstops-options
  - name: maxz.fast_rate
    type: number
    default: 100
    module: endstops
    context: Module instance setting (first-pass homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:222
    description: Speed for the initial fast approach to the endstop during the first phase of homing. The two-phase homing
      sequence uses this faster speed to quickly move the axis close to the endstop, then backs off and approaches slowly
      for precision. Higher values reduce homing time but may reduce repeatability due to mechanical momentum and switch bounce.
    corresponding_v1: gamma_fast_homing_rate_mm_s
    corresponding_v2: endstops.maxz.fast_rate
    units: mm/s
    related_settings:
    - maxz.slow_rate
    - maxz.retract
    - maxz.max_travel
    related_pages:
    - endstops
    - endstops-options
    - stepper-motors
  - name: maxz.homing_direction
    type: string
    default: null
    module: endstops
    context: Module instance setting (defines homing behavior for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:197
    description: Specifies the direction the axis moves when homing to this endstop. When a homing command (G28) is issued,
      the firmware moves the axis in the specified direction until this endstop triggers. The direction determines whether
      the axis moves toward the minimum (negative) or maximum (positive) end of travel.
    corresponding_v1: gamma_homing_direction
    corresponding_v2: endstops.maxz.homing_direction
    valid_values:
    - value: home_to_min
      description: ''
    - value: home_to_max
      description: ''
    - value: none
      description: ''
    related_settings:
    - maxz.homing_position
    - maxz.max_travel
    - maxz.fast_rate
    - maxz.slow_rate
    related_pages:
    - endstops
    - endstop
    - guide-endstops
  - name: maxz.homing_position
    type: number
    default: 0 (if home_to_min), 200 (if home_to_max)
    module: endstops
    context: Module instance setting (establishes machine coordinate system origin)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:232
    description: Defines the machine coordinate value assigned to the axis when the endstop is triggered during homing. This
      setting establishes the machine coordinate system by defining where in space the endstop is located. After homing completes,
      the axis position is set to this value, making it the reference point for all subsequent moves.
    corresponding_v1: gamma_max
    corresponding_v2: endstops.maxz.homing_position
    units: mm
    related_settings:
    - maxz.homing_direction
    - common.alpha_trim_mm
    - common.beta_trim_mm
    - common.gamma_trim_mm
    related_pages:
    - endstops
    - gamma-max
    - delta
  - name: maxz.limit_enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (enables hard limit detection)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:180
    description: Enables this endstop as a hard limit switch that triggers an emergency stop if hit during normal operation
      (outside of homing). When enabled, if the endstop is triggered while any axis is moving during normal operation, the
      system immediately enters ALARM state, halts all motion, disables heaters, and flushes the motion queue to prevent crashes
      or damage.
    corresponding_v1: gamma_limit_enable
    corresponding_v2: endstops.maxz.limit_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - common.debounce_ms
    - maxz.pin
    related_pages:
    - endstops
    - emergencystop
    - killbutton
  - name: maxz.max_travel
    type: number
    default: 500
    module: endstops
    context: Module instance setting (safety limit for homing travel distance)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:235
    description: Maximum distance the axis will travel during homing before triggering a timeout alarm. This is a safety feature
      that prevents the machine from moving indefinitely if the endstop fails to trigger due to wiring failure, mechanical
      issues, or incorrect configuration. If the endstop is not triggered within this distance, the system enters ALARM state
      and halts all motion.
    corresponding_v1: gamma_max_travel
    corresponding_v2: endstops.maxz.max_travel
    units: mm
    related_settings:
    - maxz.fast_rate
    - maxz.slow_rate
    - maxz.homing_direction
    related_pages:
    - endstops
    - troubleshooting
    - emergencystop
  - name: maxz.pin
    type: pin
    default: nc (not connected)
    module: endstops
    context: Module instance setting (physical pin connection for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:144
    description: Specifies the GPIO pin connected to the endstop switch signal. The pin is configured as an input and monitored
      for state changes during homing and limit checking. The firmware reads this pin to detect when the endstop is triggered.
    corresponding_v1: gamma_max_endstop
    corresponding_v2: endstops.maxz.pin
    valid_values:
    - value: v2 pin format (e.g.
      description: ''
    - value: PD0
      description: ''
    - value: PD0^
      description: ''
    - value: PD0!)
      description: ''
    related_settings:
    - maxz.axis
    - maxz.homing_direction
    - common.debounce_ms
    related_pages:
    - endstops
    - pin-configuration
    - pinout
    - sensor-types
  - name: maxz.retract
    type: number
    default: 5
    module: endstops
    context: Module instance setting (backoff distance for two-phase homing)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:226
    description: 'Distance to move away from the endstop after the fast approach triggers it, before performing the slow precision
      approach. This backoff ensures the endstop is no longer triggered before the final slow approach begins, allowing for
      accurate position detection. The two-phase homing sequence is: fast approach → trigger → retract this distance → slow
      approach → trigger → done.'
    corresponding_v1: gamma_homing_retract_mm
    corresponding_v2: endstops.maxz.retract
    units: mm
    related_settings:
    - maxz.fast_rate
    - maxz.slow_rate
    related_pages:
    - endstops
    - sensor-types
  - name: maxz.slow_rate
    type: number
    default: 10
    module: endstops
    context: Module instance setting (precision homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:223
    description: Speed for the second-phase precision approach to the endstop after the initial fast approach and retract.
      This slower speed ensures accurate and repeatable homing by reducing mechanical momentum and allowing the switch to
      settle before position is recorded. Lower values improve homing repeatability at the cost of increased homing time.
    corresponding_v1: gamma_slow_homing_rate_mm_s
    corresponding_v2: endstops.maxz.slow_rate
    units: mm/s
    related_settings:
    - maxz.fast_rate
    - maxz.retract
    - common.debounce_ms
    related_pages:
    - endstops
    - endstops-options
  - name: minx.axis
    type: string (single character)
    default: none (required setting)
    module: endstops
    context: Module instance setting (associates endstop with machine axis)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:151
    description: Defines which machine axis this endstop controls. The axis assignment determines which motor(s) stop when
      the endstop is triggered and which coordinate is set during homing. Each endstop must be assigned to exactly one axis,
      but an axis can have multiple endstops (min and max, or multiple for limit detection).
    corresponding_v1: Implicit in endstop name (alpha_min_endstop → X axis)
    corresponding_v2: endstops.minx.axis
    valid_values:
    - value: X
      description: ''
    - value: Y
      description: ''
    - value: Z
      description: ''
    - value: A
      description: ''
    - value: B
      description: ''
    - value: C
      description: ''
    related_settings:
    - minx.homing_direction
    - minx.homing_position
    - actuator.<axis>.steps_per_mm
    related_pages:
    - endstops
    - arm-solutions
    - cartesian
    - delta
  - name: minx.enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (each endstop instance must be explicitly enabled)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:141
    description: Enables this specific endstop instance. When set to true, the endstop becomes active and will be monitored
      during homing operations or for limit detection. When false, the endstop is completely ignored by the firmware regardless
      of other settings.
    corresponding_v1: none (v1 used implicit enable via pin definition)
    corresponding_v2: endstops.minx.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - minx.pin
    - minx.axis
    - minx.homing_direction
    related_pages:
    - endstops
    - guide-endstops
    - endstops-options
  - name: minx.fast_rate
    type: number
    default: 100
    module: endstops
    context: Module instance setting (first-pass homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:222
    description: Speed for the initial fast approach to the endstop during the first phase of homing. The two-phase homing
      sequence uses this faster speed to quickly move the axis close to the endstop, then backs off and approaches slowly
      for precision. Higher values reduce homing time but may reduce repeatability due to mechanical momentum and switch bounce.
    corresponding_v1: alpha_fast_homing_rate_mm_s
    corresponding_v2: endstops.minx.fast_rate
    units: mm/s
    related_settings:
    - minx.slow_rate
    - minx.retract
    - minx.max_travel
    related_pages:
    - endstops
    - endstops-options
    - stepper-motors
  - name: minx.homing_direction
    type: string
    default: null
    module: endstops
    context: Module instance setting (defines homing behavior for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:197
    description: Specifies the direction the axis moves when homing to this endstop. When a homing command (G28) is issued,
      the firmware moves the axis in the specified direction until this endstop triggers. The direction determines whether
      the axis moves toward the minimum (negative) or maximum (positive) end of travel.
    corresponding_v1: alpha_homing_direction
    corresponding_v2: endstops.minx.homing_direction
    valid_values:
    - value: home_to_min
      description: ''
    - value: home_to_max
      description: ''
    - value: none
      description: ''
    related_settings:
    - minx.homing_position
    - minx.max_travel
    - minx.fast_rate
    - minx.slow_rate
    related_pages:
    - endstops
    - endstop
    - guide-endstops
  - name: minx.homing_position
    type: number
    default: 0 (if home_to_min), 200 (if home_to_max)
    module: endstops
    context: Module instance setting (establishes machine coordinate system origin)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:232
    description: Defines the machine coordinate value assigned to the axis when the endstop is triggered during homing. This
      setting establishes the machine coordinate system by defining where in space the endstop is located. After homing completes,
      the axis position is set to this value, making it the reference point for all subsequent moves.
    corresponding_v1: alpha_min
    corresponding_v2: endstops.minx.homing_position
    units: mm
    related_settings:
    - minx.homing_direction
    - common.alpha_trim_mm
    - common.beta_trim_mm
    - common.gamma_trim_mm
    related_pages:
    - endstops
    - gamma-max
    - delta
  - name: minx.limit_enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (enables hard limit detection)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:180
    description: Enables this endstop as a hard limit switch that triggers an emergency stop if hit during normal operation
      (outside of homing). When enabled, if the endstop is triggered while any axis is moving during normal operation, the
      system immediately enters ALARM state, halts all motion, disables heaters, and flushes the motion queue to prevent crashes
      or damage.
    corresponding_v1: alpha_limit_enable
    corresponding_v2: endstops.minx.limit_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - common.debounce_ms
    - minx.pin
    related_pages:
    - endstops
    - emergencystop
    - killbutton
  - name: minx.max_travel
    type: number
    default: 500
    module: endstops
    context: Module instance setting (safety limit for homing travel distance)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:235
    description: Maximum distance the axis will travel during homing before triggering a timeout alarm. This is a safety feature
      that prevents the machine from moving indefinitely if the endstop fails to trigger due to wiring failure, mechanical
      issues, or incorrect configuration. If the endstop is not triggered within this distance, the system enters ALARM state
      and halts all motion.
    corresponding_v1: alpha_max_travel
    corresponding_v2: endstops.minx.max_travel
    units: mm
    related_settings:
    - minx.fast_rate
    - minx.slow_rate
    - minx.homing_direction
    related_pages:
    - endstops
    - troubleshooting
    - emergencystop
  - name: minx.pin
    type: pin
    default: nc (not connected)
    module: endstops
    context: Module instance setting (physical pin connection for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:144
    description: Specifies the GPIO pin connected to the endstop switch signal. The pin is configured as an input and monitored
      for state changes during homing and limit checking. The firmware reads this pin to detect when the endstop is triggered.
    corresponding_v1: alpha_min_endstop
    corresponding_v2: endstops.minx.pin
    valid_values:
    - value: v2 pin format (e.g.
      description: ''
    - value: PD0
      description: ''
    - value: PD0^
      description: ''
    - value: PD0!)
      description: ''
    related_settings:
    - minx.axis
    - minx.homing_direction
    - common.debounce_ms
    related_pages:
    - endstops
    - pin-configuration
    - pinout
    - sensor-types
  - name: minx.retract
    type: number
    default: 5
    module: endstops
    context: Module instance setting (backoff distance for two-phase homing)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:226
    description: 'Distance to move away from the endstop after the fast approach triggers it, before performing the slow precision
      approach. This backoff ensures the endstop is no longer triggered before the final slow approach begins, allowing for
      accurate position detection. The two-phase homing sequence is: fast approach → trigger → retract this distance → slow
      approach → trigger → done.'
    corresponding_v1: alpha_homing_retract_mm
    corresponding_v2: endstops.minx.retract
    units: mm
    related_settings:
    - minx.fast_rate
    - minx.slow_rate
    related_pages:
    - endstops
    - sensor-types
  - name: minx.slow_rate
    type: number
    default: 10
    module: endstops
    context: Module instance setting (precision homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:223
    description: Speed for the second-phase precision approach to the endstop after the initial fast approach and retract.
      This slower speed ensures accurate and repeatable homing by reducing mechanical momentum and allowing the switch to
      settle before position is recorded. Lower values improve homing repeatability at the cost of increased homing time.
    corresponding_v1: alpha_slow_homing_rate_mm_s
    corresponding_v2: endstops.minx.slow_rate
    units: mm/s
    related_settings:
    - minx.fast_rate
    - minx.retract
    - common.debounce_ms
    related_pages:
    - endstops
    - endstops-options
  - name: miny.axis
    type: string (single character)
    default: none (required setting)
    module: endstops
    context: Module instance setting (associates endstop with machine axis)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:151
    description: Defines which machine axis this endstop controls. The axis assignment determines which motor(s) stop when
      the endstop is triggered and which coordinate is set during homing. Each endstop must be assigned to exactly one axis,
      but an axis can have multiple endstops (min and max, or multiple for limit detection).
    corresponding_v1: Implicit in endstop name (beta_min_endstop → Y axis)
    corresponding_v2: endstops.miny.axis
    valid_values:
    - value: X
      description: ''
    - value: Y
      description: ''
    - value: Z
      description: ''
    - value: A
      description: ''
    - value: B
      description: ''
    - value: C
      description: ''
    related_settings:
    - miny.homing_direction
    - miny.homing_position
    - actuator.<axis>.steps_per_mm
    related_pages:
    - endstops
    - arm-solutions
    - cartesian
    - delta
  - name: miny.enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (each endstop instance must be explicitly enabled)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:141
    description: Enables this specific endstop instance. When set to true, the endstop becomes active and will be monitored
      during homing operations or for limit detection. When false, the endstop is completely ignored by the firmware regardless
      of other settings.
    corresponding_v1: none (v1 used implicit enable via pin definition)
    corresponding_v2: endstops.miny.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - miny.pin
    - miny.axis
    - miny.homing_direction
    related_pages:
    - endstops
    - guide-endstops
    - endstops-options
  - name: miny.fast_rate
    type: number
    default: 100
    module: endstops
    context: Module instance setting (first-pass homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:222
    description: Speed for the initial fast approach to the endstop during the first phase of homing. The two-phase homing
      sequence uses this faster speed to quickly move the axis close to the endstop, then backs off and approaches slowly
      for precision. Higher values reduce homing time but may reduce repeatability due to mechanical momentum and switch bounce.
    corresponding_v1: beta_fast_homing_rate_mm_s
    corresponding_v2: endstops.miny.fast_rate
    units: mm/s
    related_settings:
    - miny.slow_rate
    - miny.retract
    - miny.max_travel
    related_pages:
    - endstops
    - endstops-options
    - stepper-motors
  - name: miny.homing_direction
    type: string
    default: null
    module: endstops
    context: Module instance setting (defines homing behavior for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:197
    description: Specifies the direction the axis moves when homing to this endstop. When a homing command (G28) is issued,
      the firmware moves the axis in the specified direction until this endstop triggers. The direction determines whether
      the axis moves toward the minimum (negative) or maximum (positive) end of travel.
    corresponding_v1: beta_homing_direction
    corresponding_v2: endstops.miny.homing_direction
    valid_values:
    - value: home_to_min
      description: ''
    - value: home_to_max
      description: ''
    - value: none
      description: ''
    related_settings:
    - miny.homing_position
    - miny.max_travel
    - miny.fast_rate
    - miny.slow_rate
    related_pages:
    - endstops
    - endstop
    - guide-endstops
  - name: miny.homing_position
    type: number
    default: 0 (if home_to_min), 200 (if home_to_max)
    module: endstops
    context: Module instance setting (establishes machine coordinate system origin)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:232
    description: Defines the machine coordinate value assigned to the axis when the endstop is triggered during homing. This
      setting establishes the machine coordinate system by defining where in space the endstop is located. After homing completes,
      the axis position is set to this value, making it the reference point for all subsequent moves.
    corresponding_v1: beta_min
    corresponding_v2: endstops.miny.homing_position
    units: mm
    related_settings:
    - miny.homing_direction
    - common.alpha_trim_mm
    - common.beta_trim_mm
    - common.gamma_trim_mm
    related_pages:
    - endstops
    - gamma-max
    - delta
  - name: miny.limit_enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (enables hard limit detection)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:180
    description: Enables this endstop as a hard limit switch that triggers an emergency stop if hit during normal operation
      (outside of homing). When enabled, if the endstop is triggered while any axis is moving during normal operation, the
      system immediately enters ALARM state, halts all motion, disables heaters, and flushes the motion queue to prevent crashes
      or damage.
    corresponding_v1: beta_limit_enable
    corresponding_v2: endstops.miny.limit_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - common.debounce_ms
    - miny.pin
    related_pages:
    - endstops
    - emergencystop
    - killbutton
  - name: miny.max_travel
    type: number
    default: 500
    module: endstops
    context: Module instance setting (safety limit for homing travel distance)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:235
    description: Maximum distance the axis will travel during homing before triggering a timeout alarm. This is a safety feature
      that prevents the machine from moving indefinitely if the endstop fails to trigger due to wiring failure, mechanical
      issues, or incorrect configuration. If the endstop is not triggered within this distance, the system enters ALARM state
      and halts all motion.
    corresponding_v1: beta_max_travel
    corresponding_v2: endstops.miny.max_travel
    units: mm
    related_settings:
    - miny.fast_rate
    - miny.slow_rate
    - miny.homing_direction
    related_pages:
    - endstops
    - troubleshooting
    - emergencystop
  - name: miny.pin
    type: pin
    default: nc (not connected)
    module: endstops
    context: Module instance setting (physical pin connection for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:144
    description: Specifies the GPIO pin connected to the endstop switch signal. The pin is configured as an input and monitored
      for state changes during homing and limit checking. The firmware reads this pin to detect when the endstop is triggered.
    corresponding_v1: beta_min_endstop
    corresponding_v2: endstops.miny.pin
    valid_values:
    - value: v2 pin format (e.g.
      description: ''
    - value: PD0
      description: ''
    - value: PD0^
      description: ''
    - value: PD0!)
      description: ''
    related_settings:
    - miny.axis
    - miny.homing_direction
    - common.debounce_ms
    related_pages:
    - endstops
    - pin-configuration
    - pinout
    - sensor-types
  - name: miny.retract
    type: number
    default: 5
    module: endstops
    context: Module instance setting (backoff distance for two-phase homing)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:226
    description: 'Distance to move away from the endstop after the fast approach triggers it, before performing the slow precision
      approach. This backoff ensures the endstop is no longer triggered before the final slow approach begins, allowing for
      accurate position detection. The two-phase homing sequence is: fast approach → trigger → retract this distance → slow
      approach → trigger → done.'
    corresponding_v1: beta_homing_retract_mm
    corresponding_v2: endstops.miny.retract
    units: mm
    related_settings:
    - miny.fast_rate
    - miny.slow_rate
    related_pages:
    - endstops
    - sensor-types
  - name: miny.slow_rate
    type: number
    default: 10
    module: endstops
    context: Module instance setting (precision homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:223
    description: Speed for the second-phase precision approach to the endstop after the initial fast approach and retract.
      This slower speed ensures accurate and repeatable homing by reducing mechanical momentum and allowing the switch to
      settle before position is recorded. Lower values improve homing repeatability at the cost of increased homing time.
    corresponding_v1: beta_slow_homing_rate_mm_s
    corresponding_v2: endstops.miny.slow_rate
    units: mm/s
    related_settings:
    - miny.fast_rate
    - miny.retract
    - common.debounce_ms
    related_pages:
    - endstops
    - endstops-options
  - name: minz.axis
    type: string (single character)
    default: none (required setting)
    module: endstops
    context: Module instance setting (associates endstop with machine axis)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:151
    description: Defines which machine axis this endstop controls. The axis assignment determines which motor(s) stop when
      the endstop is triggered and which coordinate is set during homing. Each endstop must be assigned to exactly one axis,
      but an axis can have multiple endstops (min and max, or multiple for limit detection).
    corresponding_v1: Implicit in endstop name (gamma_min_endstop → Z axis)
    corresponding_v2: endstops.minz.axis
    valid_values:
    - value: X
      description: ''
    - value: Y
      description: ''
    - value: Z
      description: ''
    - value: A
      description: ''
    - value: B
      description: ''
    - value: C
      description: ''
    related_settings:
    - minz.homing_direction
    - minz.homing_position
    - actuator.<axis>.steps_per_mm
    related_pages:
    - endstops
    - arm-solutions
    - cartesian
    - delta
  - name: minz.enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (each endstop instance must be explicitly enabled)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:141
    description: Enables this specific endstop instance. When set to true, the endstop becomes active and will be monitored
      during homing operations or for limit detection. When false, the endstop is completely ignored by the firmware regardless
      of other settings.
    corresponding_v1: none (v1 used implicit enable via pin definition)
    corresponding_v2: endstops.minz.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - minz.pin
    - minz.axis
    - minz.homing_direction
    related_pages:
    - endstops
    - guide-endstops
    - endstops-options
  - name: minz.fast_rate
    type: number
    default: 100
    module: endstops
    context: Module instance setting (first-pass homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:222
    description: Speed for the initial fast approach to the endstop during the first phase of homing. The two-phase homing
      sequence uses this faster speed to quickly move the axis close to the endstop, then backs off and approaches slowly
      for precision. Higher values reduce homing time but may reduce repeatability due to mechanical momentum and switch bounce.
    corresponding_v1: gamma_fast_homing_rate_mm_s
    corresponding_v2: endstops.minz.fast_rate
    units: mm/s
    related_settings:
    - minz.slow_rate
    - minz.retract
    - minz.max_travel
    related_pages:
    - endstops
    - endstops-options
    - stepper-motors
  - name: minz.homing_direction
    type: string
    default: null
    module: endstops
    context: Module instance setting (defines homing behavior for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:197
    description: Specifies the direction the axis moves when homing to this endstop. When a homing command (G28) is issued,
      the firmware moves the axis in the specified direction until this endstop triggers. The direction determines whether
      the axis moves toward the minimum (negative) or maximum (positive) end of travel.
    corresponding_v1: gamma_homing_direction
    corresponding_v2: endstops.minz.homing_direction
    valid_values:
    - value: home_to_min
      description: ''
    - value: home_to_max
      description: ''
    - value: none
      description: ''
    related_settings:
    - minz.homing_position
    - minz.max_travel
    - minz.fast_rate
    - minz.slow_rate
    related_pages:
    - endstops
    - endstop
    - guide-endstops
  - name: minz.homing_position
    type: number
    default: 0 (if home_to_min), 200 (if home_to_max)
    module: endstops
    context: Module instance setting (establishes machine coordinate system origin)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:232
    description: Defines the machine coordinate value assigned to the axis when the endstop is triggered during homing. This
      setting establishes the machine coordinate system by defining where in space the endstop is located. After homing completes,
      the axis position is set to this value, making it the reference point for all subsequent moves.
    corresponding_v1: gamma_min
    corresponding_v2: endstops.minz.homing_position
    units: mm
    related_settings:
    - minz.homing_direction
    - common.alpha_trim_mm
    - common.beta_trim_mm
    - common.gamma_trim_mm
    related_pages:
    - endstops
    - gamma-max
    - delta
  - name: minz.limit_enable
    type: bool
    default: false
    module: endstops
    context: Module instance setting (enables hard limit detection)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:180
    description: Enables this endstop as a hard limit switch that triggers an emergency stop if hit during normal operation
      (outside of homing). When enabled, if the endstop is triggered while any axis is moving during normal operation, the
      system immediately enters ALARM state, halts all motion, disables heaters, and flushes the motion queue to prevent crashes
      or damage.
    corresponding_v1: gamma_limit_enable
    corresponding_v2: endstops.minz.limit_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - common.debounce_ms
    - minz.pin
    related_pages:
    - endstops
    - emergencystop
    - killbutton
  - name: minz.max_travel
    type: number
    default: 500
    module: endstops
    context: Module instance setting (safety limit for homing travel distance)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:235
    description: Maximum distance the axis will travel during homing before triggering a timeout alarm. This is a safety feature
      that prevents the machine from moving indefinitely if the endstop fails to trigger due to wiring failure, mechanical
      issues, or incorrect configuration. If the endstop is not triggered within this distance, the system enters ALARM state
      and halts all motion.
    corresponding_v1: gamma_max_travel
    corresponding_v2: endstops.minz.max_travel
    units: mm
    related_settings:
    - minz.fast_rate
    - minz.slow_rate
    - minz.homing_direction
    related_pages:
    - endstops
    - troubleshooting
    - emergencystop
  - name: minz.pin
    type: pin
    default: nc (not connected)
    module: endstops
    context: Module instance setting (physical pin connection for this endstop)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:144
    description: Specifies the GPIO pin connected to the endstop switch signal. The pin is configured as an input and monitored
      for state changes during homing and limit checking. The firmware reads this pin to detect when the endstop is triggered.
    corresponding_v1: gamma_min_endstop
    corresponding_v2: endstops.minz.pin
    valid_values:
    - value: v2 pin format (e.g.
      description: ''
    - value: PD0
      description: ''
    - value: PD0^
      description: ''
    - value: PD0!)
      description: ''
    related_settings:
    - minz.axis
    - minz.homing_direction
    - common.debounce_ms
    related_pages:
    - endstops
    - pin-configuration
    - pinout
    - sensor-types
  - name: minz.retract
    type: number
    default: 5
    module: endstops
    context: Module instance setting (backoff distance for two-phase homing)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:226
    description: 'Distance to move away from the endstop after the fast approach triggers it, before performing the slow precision
      approach. This backoff ensures the endstop is no longer triggered before the final slow approach begins, allowing for
      accurate position detection. The two-phase homing sequence is: fast approach → trigger → retract this distance → slow
      approach → trigger → done.'
    corresponding_v1: gamma_homing_retract_mm
    corresponding_v2: endstops.minz.retract
    units: mm
    related_settings:
    - minz.fast_rate
    - minz.slow_rate
    related_pages:
    - endstops
    - sensor-types
  - name: minz.slow_rate
    type: number
    default: 10
    module: endstops
    context: Module instance setting (precision homing speed)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:223
    description: Speed for the second-phase precision approach to the endstop after the initial fast approach and retract.
      This slower speed ensures accurate and repeatable homing by reducing mechanical momentum and allowing the switch to
      settle before position is recorded. Lower values improve homing repeatability at the cost of increased homing time.
    corresponding_v1: gamma_slow_homing_rate_mm_s
    corresponding_v2: endstops.minz.slow_rate
    units: mm/s
    related_settings:
    - minz.fast_rate
    - minz.retract
    - common.debounce_ms
    related_pages:
    - endstops
    - endstops-options
  - name: common.debounce_ms
    type: number
    default: 0 (effectively 10ms minimum due to polling interval)
    module: endstops
    context: Global module setting (applies to all endstops)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:290
    description: Debounce time in milliseconds for all endstop signals to filter out mechanical switch bounce and electrical
      noise. When an endstop pin changes state, the firmware waits this duration with the pin continuously in the triggered
      state before accepting it as a valid trigger. This prevents false triggers from momentary contact bounce or electrical
      interference.
    corresponding_v1: endstop_debounce_ms
    corresponding_v2: endstops.common.debounce_ms
    units: ms (milliseconds)
    related_settings:
    - All <name>.pin settings
    related_pages:
    - endstops
    - sensor-types
    - troubleshooting
  - name: common.homing_order
    type: string
    default: none (simultaneous homing)
    module: endstops
    context: Global module setting (defines sequential homing sequence)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:304
    description: Specifies the order in which axes home when multiple axes are requested. When set, axes home sequentially
      in the specified order, waiting for each axis to complete before starting the next. When not set or empty, all axes
      home simultaneously. Sequential homing is necessary for machines where axis homing order matters, such as when Z must
      home first to lift the toolhead before XY homing to prevent dragging across the bed.
    corresponding_v1: homing_order
    corresponding_v2: endstops.common.homing_order
    valid_values:
    - value: Any permutation of axis letters (e.g.
      description: ''
    - value: ZXY
      description: ''
    - value: XYZABC
      description: ''
    - value: YXZ)
      description: ''
    related_settings:
    - common.home_z_first
    - common.corexy_homing
    - common.delta_homing
    related_pages:
    - endstops
    - endstops-options
    - delta
  - name: common.home_z_first
    type: bool
    default: false
    module: endstops
    context: Global module setting (simple Z-first homing mode)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:297
    description: When true, forces Z axis to home before X and Y axes, without requiring full sequential ordering via homing_order.
      This is a simplified alternative to homing_order when you only need Z to go first. After Z homing completes, X and Y
      home simultaneously (or sequentially if CoreXY).
    corresponding_v1: home_z_first
    corresponding_v2: endstops.common.home_z_first
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - common.homing_order
    - common.corexy_homing
    related_pages:
    - endstops
    - endstops-options
  - name: common.corexy_homing
    type: bool
    default: false
    module: endstops
    context: Global module setting (enables CoreXY-specific homing)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:292
    description: Enables CoreXY-specific homing behavior where X and Y axes must home sequentially rather than simultaneously
      due to the crossed-belt kinematics. When enabled, X and Y will never home at the same time regardless of other homing
      settings, because moving both motors simultaneously in CoreXY creates diagonal motion that cannot accurately trigger
      individual endstops.
    corresponding_v1: corexy_homing
    corresponding_v2: endstops.common.corexy_homing
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - motion_control.arm_solution
    - common.homing_order
    related_pages:
    - endstops
    - hbot
    - arm-solutions
  - name: common.delta_homing
    type: bool
    default: Auto-detected from arm_solution
    module: endstops
    context: Global module setting (enables linear delta-specific homing)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:293
    description: Enables linear delta-specific homing behavior where all three towers home simultaneously as a single "Z"
      axis operation due to the delta kinematics. When G28 is issued, all three tower motors move together until their respective
      endstops trigger, and the final position is calculated through forward kinematics to determine XYZ coordinates.
    corresponding_v1: delta_homing
    corresponding_v2: endstops.common.delta_homing
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - motion_control.arm_solution
    - common.rdelta_homing
    - common.alpha_trim_mm
    - common.beta_trim_mm
    - common.gamma_trim_mm
    related_pages:
    - endstops
    - delta
    - arm-solutions
  - name: common.rdelta_homing
    type: bool
    default: Auto-detected from arm_solution
    module: endstops
    context: Global module setting (enables rotary delta-specific homing)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:294
    description: Enables rotary delta-specific homing behavior for delta robots with rotational joints instead of linear carriages.
      Rotary deltas use angular endstops and theta offset calibration (M306) rather than linear position, requiring different
      homing calculations and position tracking.
    corresponding_v1: rdelta_homing
    corresponding_v2: endstops.common.rdelta_homing
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - motion_control.arm_solution
    - common.delta_homing
    related_pages:
    - endstops
    - rotary-delta
    - arm-solutions
  - name: common.scara_homing
    type: bool
    default: false
    module: endstops
    context: Global module setting (enables SCARA-specific homing)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:295
    description: Enables SCARA robot arm-specific homing behavior where the arm homes in actuator space (joint angles) rather
      than Cartesian space. During homing, the arm solution is temporarily disabled, allowing the joints to move directly
      to their endstops without Cartesian coordinate transformation.
    corresponding_v1: scara_homing
    corresponding_v2: endstops.common.scara_homing
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - motion_control.arm_solution
    related_pages:
    - endstops
    - morgan-scara
    - arm-solutions
  - name: common.move_to_origin_after_home
    type: bool
    default: true (for deltas), false (for Cartesian)
    module: endstops
    context: Global module setting (post-homing positioning behavior)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:322
    description: When true, automatically moves the machine to coordinate position 0,0 (and 0,0,0 for deltas) after homing
      completes successfully. This provides a consistent starting position for operations. For delta printers, bed center
      is typically at 0,0, so this centers the effector. For Cartesian machines, 0,0 is usually the homed corner, so this
      move may not be desired.
    corresponding_v1: move_to_origin_after_home
    corresponding_v2: endstops.common.move_to_origin_after_home
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - <name>.fast_rate
    - common.delta_homing
    related_pages:
    - endstops
    - delta
    - cartesian
  - name: common.alpha_trim_mm
    type: number
    default: 0
    module: endstops
    context: Global module setting (X tower/axis trim offset)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:299
    description: Fine-tune trim adjustment for the X tower (on deltas) or X axis (on Cartesian machines) to compensate for
      mechanical variations in tower lengths, carriage positions, or physical construction tolerances. After homing, this
      offset is applied to correct for the difference between ideal and actual endstop positions, ensuring bed levelness and
      print accuracy.
    corresponding_v1: alpha_trim_mm
    corresponding_v2: endstops.common.alpha_trim_mm
    units: mm
    related_settings:
    - common.beta_trim_mm
    - common.gamma_trim_mm
    - <name>.homing_position
    related_pages:
    - endstops
    - delta
    - delta-calibration-strategy-options
  - name: common.beta_trim_mm
    type: number
    default: 0
    module: endstops
    context: Global module setting (Y tower/axis trim offset)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:300
    description: Fine-tune trim adjustment for the Y tower (on deltas) or Y axis (on Cartesian machines) to compensate for
      mechanical variations. Similar to alpha_trim_mm but applies to the Y/beta actuator. Essential for achieving bed levelness
      on delta printers by adjusting effective tower heights.
    corresponding_v1: beta_trim_mm
    corresponding_v2: endstops.common.beta_trim_mm
    units: mm
    related_settings:
    - common.alpha_trim_mm
    - common.gamma_trim_mm
    related_pages:
    - endstops
    - delta
    - delta-calibration-strategy-options
  - name: common.gamma_trim_mm
    type: number
    default: 0
    module: endstops
    context: Global module setting (Z tower/axis trim offset)
    defined_in: Firmware/src/modules/tools/endstops/Endstops.cpp:301
    description: Fine-tune trim adjustment for the Z tower (on deltas) or Z axis (on Cartesian machines) to compensate for
      mechanical variations. Similar to alpha_trim_mm and beta_trim_mm but applies to the Z/gamma actuator. Essential for
      achieving bed levelness on delta printers by adjusting effective tower heights.
    corresponding_v1: gamma_trim_mm
    corresponding_v2: endstops.common.gamma_trim_mm
    units: mm
    related_settings:
    - common.alpha_trim_mm
    - common.beta_trim_mm
    related_pages:
    - endstops
    - delta
    - delta-calibration-strategy-options
- name: Panel
  description: ''
  setting_count: 4
  settings:
  - name: mpg.<name>.enable
    type: bool
    default: false
    module: mpg
    context: Per-encoder configuration (module instance setting)
    defined_in: Firmware/src/modules/utils/mpg/mpg.cpp:41
    description: Enables this MPG (Manual Pulse Generator) instance. The subsection name selects x, y, z, a, b, c, or shared;
      arbitrary names are rejected. Configure separate axis instances or one shared instance, but do not mix both forms.
    corresponding_v1: panel.encoder_a_pin + panel.encoder_b_pin (v1 had unified panel module, v2 separates MPG functionality)
    corresponding_v2: mpg.<name>.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - mpg.<name>.enca_pin
    - mpg.<name>.encb_pin
    - mpg.<name>.mmperpulse
    related_pages:
    - panel
    - panel-guide
    - smoothieboard-v2-prime
  - name: mpg.<name>.enca_pin
    type: pin
    default: '"nc" (not connected)'
    module: mpg
    context: Rotary encoder hardware input (per-instance setting)
    defined_in: Firmware/src/modules/utils/mpg/mpg.cpp:72
    description: Specifies the GPIO pin connected to encoder phase A (channel A) of the quadrature rotary encoder. This pin
      must be interrupt-capable because the encoder uses edge detection on both phases to determine rotation direction and
      count steps. The pin's line number must be unique across all interrupt pins in the system.
    corresponding_v1: panel.encoder_a_pin (v1 unified panel module)
    corresponding_v2: mpg.<name>.enca_pin
    valid_values:
    - value: Pin specification in format PXn^ with pullup
      description: ''
    related_settings:
    - mpg.<name>.encb_pin
    - mpg.<name>.mmperpulse
    - mpg.<name>.enable
    related_pages:
    - panel
    - pinout
    - pin-configuration
    - endstops
    - smoothieboard-v2-prime
  - name: mpg.<name>.encb_pin
    type: pin
    default: '"nc" (not connected)'
    module: mpg
    context: Rotary encoder hardware input (per-instance setting)
    defined_in: Firmware/src/modules/utils/mpg/mpg.cpp:73
    description: Specifies the GPIO pin connected to encoder phase B (channel B) of the quadrature rotary encoder. This pin
      works with enca_pin to determine rotation direction through quadrature decoding. The phase relationship between A and
      B signals indicates clockwise or counter-clockwise rotation. This pin must also be interrupt-capable with a unique line
      number.
    corresponding_v1: panel.encoder_b_pin (v1 unified panel module)
    corresponding_v2: mpg.<name>.encb_pin
    valid_values:
    - value: Pin specification in format PXn^ with pullup
      description: ''
    related_settings:
    - mpg.<name>.enca_pin
    - mpg.<name>.mmperpulse
    - mpg.<name>.enable
    related_pages:
    - panel
    - pinout
    - pin-configuration
    - endstops
    - smoothieboard-v2-prime
  - name: mpg.<name>.mmperpulse
    type: number
    default: Axis motor resolution, rounded to four decimal places
    module: mpg
    context: Per-axis encoder movement distance
    defined_in: Firmware/src/modules/utils/mpg/mpg.cpp:91
    description: Sets the positive movement distance in millimetres for each encoder count on an x, y, z, a, b, or c instance.
      When omitted or non-positive in configuration, Smoothie derives the value from the actuator steps per millimetre and
      rounds it to four decimal places. A shared MPG receives its axis and distance at runtime through M922 instead.
    corresponding_v1: none (v1 panel encoder had no direct axis control)
    corresponding_v2: mpg.<name>.mmperpulse
    valid_values:
    - value: Positive distance in millimetres
      description: Each encoder count requests this much motion.
    related_settings:
    - mpg.<name>.enca_pin
    - mpg.<name>.encb_pin
    - mpg.<name>.enable
    related_pages:
    - mpg
    - button-box
    - motion-control
    - smoothieboard-v2-prime
- name: Network
  description: ''
  setting_count: 13
  settings:
  - name: network.enable
    type: bool
    default: false
    module: network
    context: Global setting (master enable for entire network subsystem)
    defined_in: Firmware/src/modules/utils/network/Network.cpp:90
    description: Master switch to enable or disable all networking functionality. When set to false, all network features
      are disabled regardless of other network-related settings. This is the primary enable that must be set to true before
      any other network features will function.
    corresponding_v1: network.enable
    corresponding_v2: network.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - network.shell_enable
    - network.ftp_enable
    - network.webserver_enable
    - network.ntp_enable
    related_pages:
    - network
    - connecting-smoothie
  - name: network.ip_address
    type: string
    default: auto
    module: network
    context: Global setting (determines DHCP vs static IP mode)
    defined_in: Firmware/src/modules/utils/network/Network.cpp:98-123
    description: Configures the network IP address mode and value. When set to "auto", the system uses DHCP to automatically
      obtain network configuration from a DHCP server on the network. When set to a specific IP address, the system uses static
      IP configuration and requires manual specification of subnet mask and gateway via related settings.
    corresponding_v1: network.ip_address
    corresponding_v2: network.ip_address
    valid_values:
    - value: '"auto" for DHCP mode'
      description: ''
    - value: or valid IPv4 address string for static mode
      description: ''
    related_settings:
    - network.ip_mask
    - network.ip_gateway
    - network.dns_server
    related_pages:
    - network
    - troubleshooting
  - name: network.ip_mask
    type: string
    default: 255.255.255.0
    module: network
    context: Global setting (static IP configuration only)
    defined_in: Firmware/src/modules/utils/network/Network.cpp:102
    description: Specifies the subnet mask for static IP configuration. The subnet mask defines the network portion versus
      host portion of IP addresses, determining which addresses are local versus remote. This setting is only used when network.ip_address
      is set to a specific IP address (not "auto"). When DHCP mode is active, this setting is ignored and the subnet mask
      is provided by the DHCP server.
    corresponding_v1: network.ip_mask
    corresponding_v2: network.ip_mask
    valid_values:
    - value: Valid IPv4 subnet mask in dotted decimal notation
      description: ''
    related_settings:
    - network.ip_address
    - network.ip_gateway
    related_pages:
    - network
    - how-to-wire
  - name: network.ip_gateway
    type: string
    default: 192.168.1.1
    module: network
    context: Global setting (static IP configuration only)
    defined_in: Firmware/src/modules/utils/network/Network.cpp:103
    description: Specifies the default gateway IP address for static IP configuration. The gateway is the router or network
      device that handles traffic destined for other networks or the internet. This setting is only used when network.ip_address
      is set to a specific IP address (not "auto"). When DHCP mode is active, this setting is ignored and the gateway address
      is provided by the DHCP server.
    corresponding_v1: network.ip_gateway
    corresponding_v2: network.ip_gateway
    valid_values:
    - value: Valid IPv4 address string (typically the router IP address)
      description: ''
    related_settings:
    - network.ip_address
    - network.ip_mask
    related_pages:
    - network
    - troubleshooting
  - name: network.dns_server
    type: string
    default: auto
    module: network
    context: Global setting (DNS configuration for hostname resolution)
    defined_in: Firmware/src/modules/utils/network/Network.cpp:125-135
    description: Specifies the DNS (Domain Name System) server IP address for hostname resolution. DNS is required when using
      hostname-based addresses in commands like wget and update that fetch resources from the internet. When set to "auto",
      the firmware uses the DNS server provided by DHCP, or defaults to 192.168.1.1 if no DHCP DNS is available.
    corresponding_v1: none (new in v2)
    corresponding_v2: network.dns_server
    valid_values:
    - value: '"auto" to use DHCP-provided DNS'
      description: ''
    - value: or valid IPv4 address of DNS server
      description: ''
    related_settings:
    - network.firmware_url
    - network.ntp_server
    related_pages:
    - network
    - octoprint
  - name: network.hostname
    type: string
    default: smoothiev2
    module: network
    context: Global setting (network device identification)
    defined_in: Firmware/src/modules/utils/network/Network.cpp:95
    description: Defines the device hostname used for network identification. This hostname is provided to the DHCP server
      during network initialization and can be used for network discovery and identification. The hostname appears in DHCP
      server logs and may be used by some network tools for device identification.
    corresponding_v1: none (new in v2)
    corresponding_v2: network.hostname
    valid_values:
    - value: Valid hostname string
      description: ''
    related_pages:
    - network
    - connecting-smoothie
  - name: network.shell_enable
    type: bool
    default: false
    module: network
    context: Service control setting (enables telnet shell server)
    defined_in: Firmware/src/modules/utils/network/Network.cpp:151
    description: Enables the telnet shell server on TCP port 23, allowing remote command-line access to Smoothieware via the
      telnet protocol. When enabled, users can connect to the Smoothieboard using a telnet client and execute console commands
      as if connected via USB serial. The server supports multiple concurrent connections (up to 3 simultaneous users).
    corresponding_v1: none (new in v2)
    corresponding_v2: network.shell_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - network.enable
    related_pages:
    - network
    - console-commands
    - connecting-smoothie
  - name: network.ftp_enable
    type: bool
    default: false
    module: network
    context: Service control setting (enables FTP file transfer server)
    defined_in: Firmware/src/modules/utils/network/Network.cpp:152
    description: Enables the FTP (File Transfer Protocol) server on TCP port 21, allowing remote file transfer access to the
      SD card filesystem. When enabled, users can connect with an FTP client to upload G-code files, download logs, and manage
      files on the SD card. Uses the FreeRTOS+TCP FTP server implementation.
    corresponding_v1: none (new in v2)
    corresponding_v2: network.ftp_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - network.enable
    - network.webserver_enable
    related_pages:
    - network
    - sd-card
    - printing-from-sd-card
  - name: network.webserver_enable
    type: bool
    default: false
    module: network
    context: Service control setting (enables HTTP web server)
    defined_in: Firmware/src/modules/utils/network/Network.cpp:153
    description: Enables the HTTP web server on TCP port 80, serving static files from the /sd/www directory on the SD card.
      When enabled, users can access a web interface by navigating to the Smoothieboard's IP address in a web browser. The
      web server uses the FreeRTOS+TCP HTTP server implementation.
    corresponding_v1: none (new in v2)
    corresponding_v2: network.webserver_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - network.enable
    - network.ftp_enable
    related_pages:
    - network
    - install-web-interface
    - sd-card
  - name: network.ntp_enable
    type: bool
    default: true
    module: network
    context: Service control setting (enables NTP time synchronization)
    defined_in: Firmware/src/modules/utils/network/Network.cpp:154
    description: Enables the NTP (Network Time Protocol) client to automatically synchronize the Real-Time Clock (RTC) from
      an NTP server during network startup. When enabled, the firmware fetches the current time from the configured NTP server
      and sets the onboard RTC to maintain accurate time. This is useful for timestamping logs, G-code files, and system events.
    corresponding_v1: none (new in v2)
    corresponding_v2: network.ntp_enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - network.ntp_server
    - network.timezone
    - network.dns_server
    related_pages:
    - network
  - name: network.ntp_server
    type: string
    default: pool.ntp.org
    module: network
    context: NTP time source configuration
    defined_in: Firmware/src/modules/utils/network/Network.cpp:155
    description: Specifies the NTP server hostname or IP address for time synchronization. The firmware contacts this server
      when ntp_enable is true to fetch the current time and set the RTC. Using a geographically nearby NTP server is recommended
      for best accuracy and lowest latency.
    corresponding_v1: none (new in v2)
    corresponding_v2: network.ntp_server
    valid_values:
    - value: Valid hostname or IPv4 address of an NTP server
      description: ''
    related_settings:
    - network.ntp_enable
    - network.timezone
    - network.dns_server
    related_pages:
    - network
  - name: network.timezone
    type: number
    default: 0
    module: network
    context: Time localization setting
    defined_in: Firmware/src/modules/utils/network/Network.cpp:156
    description: Specifies the timezone offset from GMT/UTC in hours, which is applied to the time fetched from the NTP server
      to set the local RTC time. The offset includes any Daylight Saving Time adjustment - users must manually change this
      value when DST begins or ends.
    corresponding_v1: none (new in v2)
    corresponding_v2: network.timezone
    units: hours
    valid_values:
    - value: Integer hours offset from GMT/UTC
      description: ''
    related_settings:
    - network.ntp_enable
    - network.ntp_server
    related_pages:
    - network
  - name: network.firmware_url
    type: string
    default: http://download.smoothieware.org/
    module: network
    context: Firmware update system configuration
    defined_in: Firmware/src/modules/utils/network/Network.cpp:96
    description: 'Specifies the base URL for firmware updates used by the update command. The command automatically appends
      the board-specific firmware filename to this URL when downloading updates. Board type is auto-detected and the appropriate
      suffix is added: pr.bin for Prime, nu.bin for Nucleo, or de.bin for Devebox boards.'
    corresponding_v1: none (new in v2)
    corresponding_v2: network.firmware_url
    valid_values:
    - value: Valid HTTP URL
      description: ''
    related_settings:
    - network.dns_server
    related_pages:
    - network
    - flashing-smoothie-firmware
- name: Laser
  description: Laser control module settings
  setting_count: 24
  settings:
  - name: laser.enable
    type: bool
    default: false
    module: laser
    context: Module activation
    defined_in: Firmware/src/modules/tools/laser/Laser.cpp:58
    description: Enable the laser control module. When set to true, the laser module will be loaded and available for G-code
      control. When false, the module is not loaded and its resources are freed.
    corresponding_v1: laser_module_enable
    corresponding_v2: laser.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - laser.pwm_pin
    - laser.maximum_power
    - pwm1.frequency
    - pwm2.frequency
    related_pages:
    - laser
    - laser-options
    - laser-cutter-guide
  - name: laser.pwm_pin
    type: pin (PWM-capable)
    default: nc (not connected)
    module: laser
    context: Hardware pin assignment for PWM laser power control
    defined_in: Firmware/src/modules/tools/laser/Laser.cpp:63
    description: PWM output pin for laser power control with 0-100% duty cycle capability. The firmware validates that the
      specified pin is a valid PWM pin during configuration. If an invalid pin is specified, the module will fail to load
      with error message "Specified pin is not a valid PWM pin."
    corresponding_v1: laser_module_pwm_pin
    corresponding_v2: laser.pwm_pin
    valid_values:
    - value: PWM-capable pin names only
      description: ''
    related_settings:
    - laser.inverted_pwm
    - laser.pullup
    - laser.opendrain
    - pwm1.frequency
    - pwm2.frequency
    related_pages:
    - laser
    - pinout
    - pwm-capable
  - name: laser.ttl_pin
    type: pin (digital output)
    default: nc (not connected)
    module: laser
    context: Secondary control signal for laser enable/safety
    defined_in: Firmware/src/modules/tools/laser/Laser.cpp:78
    description: TTL on/off signal pin that outputs high when laser is firing and low when off. This provides a secondary
      digital signal separate from the PWM control, commonly used for controlling laser power supply enable or external safety
      interlocks. The TTL pin goes high whenever laser power is above 0.00001 (line 308 of Laser.cpp) and low when laser is
      off.
    corresponding_v1: laser_module_ttl_pin
    corresponding_v2: laser.ttl_pin
    valid_values:
    - value: Any digital output pin in STM32 format (e.g.
      description: ''
    - value: PE11
      description: ''
    - value: PI4)
      description: ''
    - value: or nc
      description: ''
    related_settings:
    - laser.pwm_pin
    - laser.enable
    related_pages:
    - laser
    - pin-configuration
    - emergencystop
  - name: laser.inverted_pwm
    type: bool
    default: false
    module: laser
    context: Signal polarity configuration
    defined_in: Firmware/src/modules/tools/laser/Laser.cpp:72
    description: Invert the PWM signal polarity where high duty cycle means laser off and low duty cycle means laser on. When
      false (normal operation), higher PWM duty cycle = more laser power. When true (inverted), higher PWM duty cycle = less
      laser power. This is required for some laser drivers that are active-low.
    corresponding_v1: none (new in v2)
    corresponding_v2: laser.inverted_pwm
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - laser.pwm_pin
    - laser.pullup
    - laser.opendrain
    related_pages:
    - laser
    - pin-configuration
  - name: laser.pullup
    type: bool
    default: true
    module: laser
    context: Pin electrical configuration
    defined_in: Firmware/src/modules/tools/laser/Laser.cpp:74
    description: Enable internal pullup resistor on PWM pin. When true, the pin is pulled high by an internal resistor (typically
      40-50kΩ). This is useful for ensuring a defined signal level when the pin is not actively driven. Disable if using external
      pullup or pulldown resistors to avoid conflicts.
    corresponding_v1: none (new in v2)
    corresponding_v2: laser.pullup
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - laser.opendrain
    - laser.pwm_pin
    related_pages:
    - laser
    - pin-configuration
    - how-to-wire
  - name: laser.opendrain
    type: bool
    default: false
    module: laser
    context: Pin drive mode configuration
    defined_in: Firmware/src/modules/tools/laser/Laser.cpp:75
    description: Configure PWM pin as open-drain output instead of push-pull. In open-drain mode, the pin can pull low but
      cannot actively drive high (requires external pullup). This is useful for logic level shifting or when controlling external
      transistor circuits. Combine with pullup=true for proper operation.
    corresponding_v1: none (new in v2)
    corresponding_v2: laser.opendrain
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - laser.pullup
    - laser.pwm_pin
    related_pages:
    - laser
    - pin-configuration
    - how-to-wire
  - name: laser.maximum_power
    type: number
    default: 1
    module: laser
    context: Power limiting for safety and calibration
    defined_in: Firmware/src/modules/tools/laser/Laser.cpp:93
    description: Maximum laser power as duty cycle fraction where 0.0 = 0% and 1.0 = 100%. This acts as a safety limit and
      calibration factor. The actual laser power is scaled by this value, so setting it below 1.0 limits maximum output even
      when G-code requests full power. Power values are clamped to this maximum in set_laser_power() at lines 303-304.
    corresponding_v1: laser_module_maximum_power
    corresponding_v2: laser.maximum_power
    units: fraction (0.0-1.0 representing 0%-100% duty cycle)
    valid_values:
    - value: 0.0 to 1.0 (fraction of full PWM duty cycle)
      description: ''
    related_settings:
    - laser.minimum_power
    - laser.default_power
    - laser.maximum_s_value
    related_pages:
    - laser
    - laser-warning
    - laser-cutter-guide
  - name: laser.minimum_power
    type: number
    default: 0
    module: laser
    context: Baseline power level for continuous operation
    defined_in: Firmware/src/modules/tools/laser/Laser.cpp:94
    description: Minimum power to keep laser active during cutting operations, also known as "tickle power". This provides
      a baseline power level that the proportional power system scales above. Some CO2 lasers benefit from a small minimum
      power (e.g., 0.05) to maintain plasma stability and reduce startup delay, but most lasers should use 0.
    corresponding_v1: laser_module_minimum_power
    corresponding_v2: laser.minimum_power
    units: fraction (0.0-1.0 representing 0%-100% duty cycle)
    valid_values:
    - value: 0.0 to 1.0 (fraction of full PWM duty cycle)
      description: ''
    related_settings:
    - laser.maximum_power
    - laser.proportional_power
    related_pages:
    - laser
    - laser-cutter-guide
  - name: laser.maximum_s_value
    type: number
    default: 1
    module: laser
    context: G-code S parameter scaling
    defined_in: Firmware/src/modules/tools/laser/Laser.cpp:97
    description: Maximum S value in G-code that represents full power. This setting maps G-code S parameters to laser power
      percentages. For example, with maximum_s_value=1.0, "S0.5" requests 50% power. With maximum_s_value=255, "S127" requests
      approximately 50% power (127/255). The S value is divided by this setting to calculate requested power fraction (line
      256).
    corresponding_v1: laser_module_maximum_s_value
    corresponding_v2: laser.maximum_s_value
    units: user-defined (typically 1.0 or 255)
    valid_values:
    - value: Any positive number
      description: ''
    related_settings:
    - laser.maximum_power
    - laser.default_power
    related_pages:
    - laser
    - g1
    - supported-g-codes
  - name: laser.default_power
    type: number
    default: 0.8
    module: laser
    context: Default operating power when S parameter omitted
    defined_in: Firmware/src/modules/tools/laser/Laser.cpp:99
    description: Default laser power when no S parameter is specified in G-code. When a G1/G2/G3 move is issued without an
      S value, this power level is used. The value is stored in the Robot class via Robot::getInstance()->set_s_value() at
      line 99 and represents a fraction of maximum power.
    corresponding_v1: laser_module_default_power
    corresponding_v2: laser.default_power
    units: fraction (0.0-1.0 representing 0%-100% power)
    valid_values:
    - value: 0.0 to 1.0 (fraction representing power level)
      description: ''
    related_settings:
    - laser.maximum_power
    - laser.maximum_s_value
    - laser.proportional_power
    related_pages:
    - laser
    - g1
  - name: laser.proportional_power
    type: bool
    default: true
    module: laser
    context: Motion-synchronized automatic power scaling
    defined_in: Firmware/src/modules/tools/laser/Laser.cpp:100
    description: Enable automatic power scaling based on actual velocity to maintain consistent cut/engrave depth during acceleration
      and deceleration. When enabled, laser power is automatically reduced during acceleration and deceleration proportional
      to actual speed versus nominal speed, preventing overburning at corners and during speed changes. The algorithm calculates
      power = RequestedPower × (ActualSpeed / NominalSpeed) × Scale (lines 243-261).
    corresponding_v1: laser_module_proportional_power
    corresponding_v2: laser.proportional_power
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - laser.maximum_power
    - laser.minimum_power
    related_pages:
    - laser
    - motion-control
    - laser-cutter-guide
  - name: switch.<name>.enable
    type: bool
    default: false
    module: switch
    context: Instance activation
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:58
    description: Enable this switch instance. When true, the switch is loaded and available for G-code control or input monitoring.
      When false, the switch instance is not created and configuration is skipped. Each switch must have a unique name (e.g.,
      spindle, coolant, fan, dust).
    corresponding_v1: switch.<name>.enable
    corresponding_v2: switch.<name>.enable
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - All other switch.<name>.* settings
    related_pages:
    - switch
    - switch-options
    - spindle-control
  - name: switch.<name>.input_on_command
    type: string (G-code or M-code)
    default: null
    module: switch
    context: Command binding for output control
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:217-229
    description: G-code or M-code that turns this switch ON. When this command is received, the switch activates (turns on
      digital output, starts PWM, or sets high state). The firmware parses the command at lines 218-229 to extract letter
      (G/M), code number, and optional subcode. A handler is automatically registered for this code.
    corresponding_v1: switch.<name>.input_on_command
    corresponding_v2: switch.<name>.input_on_command
    valid_values:
    - value: G-code (e.g.
      description: ''
    - value: G28) or M-code (e.g.
      description: ''
    - value: M3
      description: ''
    - value: M106
      description: ''
    - value: M8)
      description: ''
    related_settings:
    - switch.<name>.input_off_command
    - switch.<name>.subcode
    related_pages:
    - switch
    - supported-g-codes
    - spindle-control
    - m3
  - name: switch.<name>.input_off_command
    type: string (G-code or M-code)
    default: null
    module: switch
    context: Command binding for output control
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:235-247
    description: G-code or M-code that turns this switch OFF. When this command is received, the switch deactivates (turns
      off digital output, stops PWM, or sets low state). The firmware parses the command at lines 236-247 identical to input_on_command
      processing. For spindle control, typically use M5 (spindle stop).
    corresponding_v1: switch.<name>.input_off_command
    corresponding_v2: switch.<name>.input_off_command
    valid_values:
    - value: G-code or M-code (e.g.
      description: ''
    - value: M5
      description: ''
    - value: M9
      description: ''
    - value: M107)
      description: ''
    related_settings:
    - switch.<name>.input_on_command
    - switch.<name>.subcode
    related_pages:
    - switch
    - supported-g-codes
    - spindle-control
    - m5
  - name: switch.<name>.subcode
    type: number
    default: 0
    module: switch
    context: Command disambiguation for multiple switches
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:120
    description: Subcode filter for commands to allow multiple switches on the same M-code. For example, M106.0 and M106.1
      can control two different fans using subcode 0 and 1. The subcode is matched at lines 347 and 354 using gcode.get_subcode().
      This allows disambiguation when multiple switches need to respond to variants of the same command.
    corresponding_v1: switch.<name>.subcode
    corresponding_v2: switch.<name>.subcode
    valid_values:
    - value: 0-255 (uint8_t range)
      description: ''
    related_settings:
    - switch.<name>.input_on_command
    - switch.<name>.input_off_command
    related_pages:
    - switch
    - supported-g-codes
  - name: switch.<name>.output_pin
    type: pin
    default: nc (not connected)
    module: switch
    context: Hardware pin assignment for output control
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:141
    description: Output pin to control for this switch. The pin type and capabilities must match the output_type setting.
      For digital output, any GPIO pin works. For sigmadeltapwm, any GPIO pin works. For hwpwm, must be one of the 8 hardware
      PWM pins. Pin validation occurs at configuration time (lines 146-180) and fails if pin is invalid for the selected output
      type.
    corresponding_v1: switch.<name>.output_pin
    corresponding_v2: switch.<name>.output_pin
    valid_values:
    - value: Any digital pin
      description: ''
    - value: PWM pin (for hwpwm type)
      description: ''
    - value: or nc
      description: ''
    related_settings:
    - switch.<name>.output_type
    - switch.<name>.startup_state
    related_pages:
    - switch
    - pinout
    - pin-configuration
    - pwm-capable
  - name: switch.<name>.output_type
    type: string (enum)
    default: null
    module: switch
    context: Output mode selection
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:135
    description: Type of output control for this switch. Determines how the output pin is driven and what control methods
      are available. Digital provides simple on/off. HWPWM provides precise hardware PWM with configurable duty cycle 0-100%.
      SigmaDelta provides software-based PWM on any GPIO pin with 0-255 resolution but lower frequency and precision.
    corresponding_v1: switch.<name>.output_type
    corresponding_v2: switch.<name>.output_type
    valid_values:
    - value: digital
      description: ''
    - value: hwpwm
      description: ''
    - value: sigmadeltapwm
      description: ''
    related_settings:
    - switch.<name>.output_pin
    - switch.<name>.max_pwm
    - switch.<name>.default_on_value
    related_pages:
    - switch
    - spindle-control
    - pwm-capable
  - name: switch.<name>.startup_state
    type: bool
    default: false
    module: switch
    context: Boot behavior for output state
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:128
    description: Initial state when firmware boots. For digital outputs, this is simply on (true) or off (false). For PWM
      outputs, this determines whether default_on_value or startup_value is used. This setting ensures predictable behavior
      on power-up or reset. For safety-critical outputs like spindles, this should almost always be false.
    corresponding_v1: switch.<name>.startup_state
    corresponding_v2: switch.<name>.startup_state
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - switch.<name>.startup_value
    - switch.<name>.default_on_value
    - switch.<name>.halt_set_to
    related_pages:
    - switch
    - safety
    - killbutton
  - name: switch.<name>.startup_value
    type: number
    default: Depends on output type
    module: switch
    context: PWM initial value at startup
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:192 (sigmadelta), 201 (hwpwm)
    description: 'Initial PWM duty cycle or value at firmware startup. For sigmadeltapwm, this is 0-255 (default: max_pwm
      value). For hwpwm, this is 0-100 percent (default: 0). This value is used when startup_state is false. When startup_state
      is true, default_on_value is used instead (hwpwm only).'
    corresponding_v1: switch.<name>.startup_value
    corresponding_v2: switch.<name>.startup_value
    units: 0-255 for sigmadeltapwm, 0-100 (percent) for hwpwm
    related_settings:
    - switch.<name>.default_on_value
    - switch.<name>.max_pwm
    - switch.<name>.startup_state
    related_pages:
    - switch
    - spindle-control
  - name: switch.<name>.default_on_value
    type: number
    default: 0
    module: switch
    context: Default PWM level when turned on without explicit value
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:202
    description: Default duty cycle when turned on without explicit value (HWPWM only). When the input_on_command is received
      without S or P parameters, this value is used as the duty cycle percentage. This allows simple M3 (spindle on) to start
      at a predefined speed without requiring S parameter every time. Only applies to hwpwm output type.
    corresponding_v1: switch.<name>.default_on_value
    corresponding_v2: switch.<name>.default_on_value
    units: percent (0-100)
    valid_values:
    - value: 0-100 (percent duty cycle for HWPWM)
      description: ''
    related_settings:
    - switch.<name>.output_type
    - switch.<name>.startup_value
    - switch.<name>.startup_state
    related_pages:
    - switch
    - spindle-control
    - m3
  - name: switch.<name>.max_pwm
    type: number
    default: 255
    module: switch
    context: SigmaDelta PWM scaling factor
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:191
    description: 'Maximum PWM value for sigmadelta PWM output, acting as a scaling factor. Values sent via S parameter in
      G-code are scaled: S255 → max_pwm, S128 → max_pwm/2. This allows limiting maximum PWM output or matching external hardware
      expectations. Only applies to sigmadeltapwm output type.'
    corresponding_v1: switch.<name>.max_pwm
    corresponding_v2: switch.<name>.max_pwm
    units: 0-255 (sigmadelta PWM range)
    valid_values:
    - value: 0-255
      description: ''
    related_settings:
    - switch.<name>.output_type
    - switch.<name>.startup_value
    related_pages:
    - switch
  - name: switch.<name>.failsafe_set_to
    type: bool
    default: false
    module: switch
    context: Safety behavior on system fault/debug halt
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:129
    description: State to set output to on system fault or debug halt conditions. When true, output is set high/on during
      fault. When false, output is set low/off during fault. For safety-critical outputs like spindles, this should be false
      to ensure the tool stops on any fault condition. This is distinct from halt_set_to which handles M112 emergency stop.
    corresponding_v1: switch.<name>.failsafe_set_to
    corresponding_v2: switch.<name>.failsafe_set_to
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - switch.<name>.halt_set_to
    - switch.<name>.ignore_on_halt
    related_pages:
    - switch
    - emergencystop
    - killbutton
  - name: switch.<name>.halt_set_to
    type: bool
    default: false
    module: switch
    context: Emergency stop behavior
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:130
    description: State to set output to when HALT condition occurs (M112 emergency stop, limit switch trigger, kill button
      press, etc.). When true, output is set high/on during halt. When false, output is set low/off during halt. Can be overridden
      by ignore_on_halt setting. For spindles, this MUST be false to ensure tool stops immediately on emergency conditions.
    corresponding_v1: switch.<name>.halt_set_to
    corresponding_v2: switch.<name>.halt_set_to
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - switch.<name>.ignore_on_halt
    - switch.<name>.failsafe_set_to
    related_pages:
    - switch
    - emergencystop
    - killbutton
    - m5
  - name: switch.<name>.ignore_on_halt
    type: bool
    default: false
    module: switch
    context: Halt override for specific outputs
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp:131
    description: If true, do not change output state on HALT, ignoring the halt_set_to setting. This allows certain outputs
      (like enclosure lights or alarms) to maintain their state during emergency stop while safety-critical tools (spindle,
      laser) are shut down. When true, the on_halt() handler exits early without changing switch state (line 329).
    corresponding_v1: none (new in v2)
    corresponding_v2: switch.<name>.ignore_on_halt
    valid_values:
    - value: 'true'
      description: ''
    - value: 'false'
      description: ''
    related_settings:
    - switch.<name>.halt_set_to
    - switch.<name>.failsafe_set_to
    related_pages:
    - switch
    - emergencystop
    - killbutton
- name: Spindle
  description: Spindle control in Smoothieware v2 is implemented via the Switch module
  setting_count: 6
  settings:
  - name: switch.spindle.enable
    type: bool
    default: false
    module: switch
    context: Switch module instance for spindle control
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp (via switch module)
    section: '[switch.spindle]'
    description: Enables spindle control via a named switch instance. Unlike v1 which had a dedicated spindle module with PID control, tachometer feedback, and Modbus support, v2 implements spindle as a simple switch instance. This provides basic on/off or PWM control but lacks the advanced features of v1. For simple VFD control or relay-based spindle control, this is sufficient. Configure additional switch settings below to customize spindle behavior.
    corresponding_v1: spindle.enable
    corresponding_v2: switch.spindle.enable
    valid_values:
    - value: 'true'
      description: Enable spindle switch instance
    - value: 'false'
      description: Disable spindle switch instance
    related_settings:
    - switch.spindle.input_on_command
    - switch.spindle.input_off_command
    - switch.spindle.output_pin
    - switch.spindle.output_type
    - switch.<name>.enable
    related_pages:
    - switch
    - spindle-control
    - cnc-mill-guide
  - name: switch.spindle.input_on_command
    type: string
    default: M3
    module: switch
    context: G-code command to turn spindle on
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp (via switch module)
    section: '[switch.spindle]'
    description: G-code command that turns the spindle on. Typically M3 for spindle clockwise. When this command is received, the output pin is activated according to the output_type setting. Can be any G-code or M-code command.
    corresponding_v1: none (v1 used hardcoded M3 command)
    corresponding_v2: switch.spindle.input_on_command
    related_settings:
    - switch.spindle.input_off_command
    - switch.spindle.output_pin
    related_pages:
    - switch
    - supported-g-codes
  - name: switch.spindle.input_off_command
    type: string
    default: M5
    module: switch
    context: G-code command to turn spindle off
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp (via switch module)
    section: '[switch.spindle]'
    description: G-code command that turns the spindle off. Typically M5 for spindle stop. When this command is received, the output pin is deactivated. Can be any G-code or M-code command.
    corresponding_v1: none (v1 used hardcoded M5 command)
    corresponding_v2: switch.spindle.input_off_command
    related_settings:
    - switch.spindle.input_on_command
    - switch.spindle.output_pin
    related_pages:
    - switch
    - supported-g-codes
  - name: switch.spindle.output_pin
    type: pin
    default: nc
    module: switch
    context: Output pin for spindle control
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp (via switch module)
    section: '[switch.spindle]'
    description: Pin that controls the spindle or spindle relay/VFD. Can be a digital pin for on/off control or a PWM-capable pin for variable speed control (when output_type is set to pwm). Connect this to your spindle relay, VFD enable input, or VFD analog input depending on your setup.
    corresponding_v1: spindle.pwm_pin
    corresponding_v2: switch.spindle.output_pin
    related_settings:
    - switch.spindle.output_type
    - switch.spindle.max_pwm
    related_pages:
    - switch
    - pinout
  - name: switch.spindle.output_type
    type: string
    default: digital
    module: switch
    context: Type of output signal for spindle control
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp (via switch module)
    section: '[switch.spindle]'
    description: Determines whether spindle control is simple on/off (digital) or variable speed (pwm). Digital mode provides simple relay control - pin goes high when on, low when off. PWM mode provides variable output for controlling VFD speed via analog input or PWM-capable spindle controllers. Note that v2 PWM mode is open-loop only - there is no PID control or tachometer feedback like v1 had.
    corresponding_v1: spindle.type (partial equivalent)
    corresponding_v2: switch.spindle.output_type
    valid_values:
    - value: digital
      description: Simple on/off control (relay, VFD enable)
    - value: pwm
      description: Variable PWM output for speed control
    related_settings:
    - switch.spindle.output_pin
    - switch.spindle.max_pwm
    - pwm1.frequency
    - pwm2.frequency
    related_pages:
    - switch
  - name: switch.spindle.max_pwm
    type: number
    default: 1.0
    module: switch
    context: Maximum PWM duty cycle for spindle
    defined_in: Firmware/src/modules/tools/switch/Switch.cpp (via switch module)
    section: '[switch.spindle]'
    description: Maximum PWM duty cycle as fraction (0.0-1.0) when output_type is pwm. Acts as both safety limit and calibration. Some VFDs require less than 100% duty cycle for maximum speed. Setting below 1.0 limits maximum spindle speed. Only applies when output_type is pwm.
    corresponding_v1: spindle.max_pwm
    corresponding_v2: switch.spindle.max_pwm
    typical_values:
    - value: 1.0
      description: 100% duty cycle (most VFDs)
    - value: 0.85
      description: 85% for certain controllers
    related_settings:
    - switch.spindle.output_type
    - switch.spindle.output_pin
    related_pages:
    - switch
