Voron TMC Stepper Driver Guide — TMC2209 vs TMC2240 vs TMC5160
Electronics Motion Calibration
The Role of Stepper Drivers in a Voron
Stepper drivers translate digital step and direction signals from the Klipper MCU into the precise current waveforms that drive stepper motors. Choosing the right driver affects print quality (layer lines, resonance), maximum speed and acceleration, motor temperature, and overall reliability. Voron builds commonly use Trinamic (TMC) drivers because of their advanced features: microstepping interpolation, smooth current control, sensorless homing, and quiet operation.
Driver Types Overview
TMC2209 — The Voron Standard
The TMC2209 is the most popular stepper driver in the Voron community. It is a 2-phase stepper driver rated for up to 2A RMS (peak 2.8A) with built-in UART interface for configuration. Key features: stealthChop2 (quiet, smooth motion), spreadCycle (high torque, fast acceleration), sensorless homing (StallGuard), microstepping up to 1/256, and short-to-ground protection. The TMC2209 communicates via UART (single wire), allowing Klipper to configure run_current, hold_current, microsteps, and other parameters without external potentiometers. It is sold as a standalone module (STEP/DIR + UART) and also integrated into many Voron mainboards (Octopus, Manta M8P, SKR 3).
TMC2240 — Higher Current and 0.9° Motor Support
The TMC2240 is a newer driver that supports higher current (2.1A RMS, peak 3A) and includes features for 0.9° stepper motors. It also has ADC-based current sensing (no Vref potentiometer needed), making configuration purely digital. The TMC2240 is used in builds with large stepper motors (NEMA 23, large NEMA 17) or in high-torque extruder applications. It supports both spreadCycle and stealthChop, StallGuard2 for sensorless homing, and shaft driver diagnostics. The mainboard must have TMC2240-compatible footprints (e.g., Octopus Pro, Manta M8P with 2240 slot).
TMC5160 — High Voltage, High Performance
The TMC5160 is a high-end driver that uses external MOSFETs to handle higher voltages (up to 48V) and currents (up to 20A peak with appropriate MOSFETs). It is used in 48V Voron builds where rapid acceleration and high top speeds are required. The TMC5160 has the same feature set as the TMC2209 but scaled up: stealthChop, spreadCycle, StallGuard, and cold-start diagnostics. However, it is more complex to wire (external MOSFETs, larger PCB footprint) and significantly more expensive. For most Voron builders, the TMC5160 is overkill — the TMC2209 handles 24V builds perfectly well.
TMC2209 In-Depth
Run Current Settings
The TMC2209's run_current is configurable via UART. For Voron builds, the recommended run_current values are:
- X motor (typical 42mm NEMA 17): 0.6A to 0.8A RMS. Higher values reduce skipped steps but increase motor temperature.
- Y motor: 0.7A to 0.9A RMS. The Y axis carries the gantry weight and needs slightly more torque.
- Z motors (V2.4, four motors): 0.4A to 0.6A RMS each. Z does not need high torque during printing but must hold position reliably.
- Extruder: 0.6A to 1.2A RMS depending on the extruder type. Direct drive (LGX, Sherpa Mini) needs 0.6-0.8A. High-flow extruders (Orbiter, Galileo) may need up to 1.2A. The extruder driver needs a heatsink and fan at higher currents.
In Klipper, the config block looks like this:
[tmc2209 stepper_x]
uart_pin: PD11
run_current: 0.800
hold_current: 0.500
interpolate: True
microsteps: 16
Hold Current
Hold current is the current applied when the motor is stationary. It can be set lower than run_current to reduce motor heating and power consumption. For X and Y, a hold_current of 0.5-0.6A is typical. For Z, hold_current can be as low as 0.2A since the Z leadscrews or belts hold position mechanically. However, too low of a hold_current can cause the motor to back-drive if the printer is bumped.
Vref Formula (Standalone Mode Only)
If using TMC2209 in standalone mode (no UART — rare in Voron builds), the current is set via a potentiometer (Vref). The formula is: Irms = Vref / (1.77). For 0.8A RMS, set Vref to 1.416V. In UART mode (standard for Voron), Vref is ignored — current is set entirely via Klipper config.
UART vs Standalone Mode
UART mode allows Klipper to read and write driver registers: current, microsteps, stechChop/spreadCycle, diagnostic flags, and stall detection. Standalone mode hard-codes these via hardware pins and potentiometers. Voron always uses UART mode. Ensure the UART pin is correctly assigned in Klipper config and wired to the PDN/UART pin on the driver module.
StealthChop vs SpreadCycle
StealthChop2 is the quietest operating mode, using voltage PWM to create smooth, sinusoidal current waveforms. It is ideal for low-speed operation where noise matters. SpreadCycle uses a more aggressive current regulation scheme (constant off-time) that delivers higher torque at speed but produces audible noise. Klipper can switch between them dynamically using the hybrid threshold (TPWMTHRS setting). Below the threshold speed, stealthChop is used (quiet); above it, spreadCycle takes over (high torque). For Voron, a hybrid threshold of 100-150 mm/s is a good starting point. Default is typically 0 (always stealthChop) or disabled (always spreadCycle).
TMC2240 In-Depth
When to Use TMC2240
The TMC2240 is beneficial in these scenarios:
- Large stepper motors: If using NEMA 17s with high inductance (40mm+ length) or NEMA 23 motors on the Z axis, the TMC2240's 2.1A RMS rating provides more headroom than the TMC2209's 2.0A.
- High-torque extruders: Extruders with heavy gearing (e.g., Bondtech LGX, Sherpa Mini with high gear ratio) benefit from the TMC2240's ability to handle higher back EMF and inductive loads.
- High-acceleration builds: Printers targeting 20,000 mm/s² or more benefit from the TMC2240's faster current ramp and higher peak current capability.
- 0.9° motors: The TMC2240 has native support for 0.9° stepper motors (400 steps/rev), which provide finer positioning resolution. The TMC2209 works with 0.9° motors but the TMC2240 handles them more efficiently.
The TMC2240's configuration in Klipper is similar to the TMC2209 but with additional parameters for ADC current sensing and coolant/fan control.
TMC2240 Specific Klipper Config
[tmc2240 stepper_x]
uart_pin: PD11
run_current: 1.000
hold_current: 0.600
interpolate: True
microsteps: 16
driver_TPFD: 4
TMC5160 In-Depth
48V Builds
The TMC5160 is the driver of choice for 48V Voron builds. At 48V, stepper motors produce significantly more torque at high speeds because the current ramp rate (di/dt) is proportional to the supply voltage. The TMC5160 handles up to 48V and provides the same stealthChop/spreadCycle modes as the TMC2209. However, it requires external MOSFETs (typically two per driver), making the PCB footprint larger and the wiring more complex. Most mainboards with TMC5160 support have dedicated sockets for the driver modules with integrated MOSFETs.
TMC5160 Klipper Config
[tmc5160 stepper_x]
cs_pin: PD11
spi_bus: spi1
run_current: 1.200
hold_current: 0.600
interpolate: True
microsteps: 16
driver_TPFD: 4
Note: TMC5160 uses SPI communication (not UART), so the config requires cs_pin and spi_bus instead of uart_pin.
Common Driver Issues and Troubleshooting
Driver Overheating
Stepper drivers dissipate heat proportional to the current they deliver. At 0.8A RMS, a TMC2209 without heatsink can reach 80-100°C. Solutions:
- Install a heatsink on each driver (typically the aluminum fin type).
- Ensure the electronics bay fan blows across the drivers.
- Reduce run_current if the printer does not need the torque.
- For extruder drivers, always use a heatsink and direct fan airflow.
Current Too Low — Layer Shift
The most common symptom of insufficient run_current is layer shifting during fast acceleration. The motor loses steps because the torque cannot overcome the inertia. Increase run_current in 0.1A increments until the shifting stops. If the motor gets too hot (>70°C surface temperature), the problem is elsewhere (binding rails, high friction, excessive acceleration).
Current Too High — Motor Overheating
Motors running above 70-80°C surface temperature can demagnetize the rotor over time, causing permanent torque loss. Reduce run_current or improve cooling (fan on the motor). NEMA 17 motors can typically handle up to 70-80°C safely. If the motor is too hot to touch (above 70°C), reduce current.
Driver Failing — Dead Stepper Axis
A completely non-responsive axis (motor does not move, no holding torque, no sound) usually indicates a dead driver. Common causes: short circuit on the motor wires, ESD damage, overheating, or manufacturing defect. Replace the driver module. When replacing, ensure the same driver model and orientation. Check the mainboard's driver socket for bent pins or debris.
Sensorless Homing Setup
Sensorless homing (StallGuard) uses the TMC driver's ability to detect when the motor has stalled (hit the endstop) by monitoring the back EMF. This eliminates the need for physical endstop switches on X and Y axes. Setup steps:
- Ensure the driver is in spreadCycle mode during homing (stealthChop does not support stall detection).
- Set
driver_SGTHRSto a value between 0 and 255. Lower values = more sensitive (detects stall earlier). Start at 80 and adjust. - Set
homing_retract_dist: 5so the motor backs off after detecting the stall. - Adjust
homing_speed— slower speeds give more reliable stall detection. Start at 20-50 mm/s. - Test homing: the axis should stop a few mm before the actual mechanical stop. Adjust SGTHRS up (less sensitive) if it stops too early, down (more sensitive) if it crashes into the stop.
Example Klipper config for sensorless X homing:
[stepper_x]
endstop_pin: tmc2209_stepper_x:virtual_endstop
homing_speed: 50
homing_retract_dist: 5
[tmc2209 stepper_x]
run_current: 0.800
hold_current: 0.500
interpolate: True
microsteps: 16
diag_pin: PD2
driver_SGTHRS: 80
Hybrid Threshold Tuning
The hybrid threshold (TPWMTHRS) sets the speed at which the driver switches from stealthChop to spreadCycle. Below the threshold, the motor runs quietly but with limited high-speed torque. Above the threshold, it switches to spreadCycle for higher torque at speed. Tuning steps:
- Run a speed test print. At low speeds (30-60 mm/s), stealthChop should work fine.
- If you hear motor skipping or see missed steps at high speeds, the threshold is too low (motor is still in stealthChop at high speed where torque is insufficient). Increase the threshold value (in velocity units, mm/s).
- For most Voron builds, a threshold of 100-150 mm/s works well. The printer operates in stealthChop for most normal printing (60-120 mm/s) and switches to spreadCycle for travel moves and infill at higher speeds.
Set the threshold in the Klipper driver config:
driver_TPWMTHRS: 100
SpreadCycle vs StealthChop — Practical Summary
- StealthChop: Quiet operation, lower acoustic noise. Ideal for extruder (reduces clicking sound) and low-speed printing. Slightly less efficient at high speed. Use for Z axis (quiet holding).
- SpreadCycle: Higher torque across the speed range, more efficient at high speed, louder. Essential for sensorless homing. Use for X and Y axes if you want maximum acceleration reliability.
- Hybrid mode: Best of both worlds. StealthChop at low speeds (where noise matters), spreadCycle at high speeds (where torque matters). This is the recommended configuration for Voron X and Y axes.