Voron V0.2 Motor Current Tuning — Stepper Driver Optimization Guide
V0.2 Calibration Stepper Motors Klipper
The Voron V0.2 is a compact 120mm-cube printer that packs impressive speed and precision into a tiny footprint. But its small size makes it particularly sensitive to stepper motor tuning — incorrect motor currents can cause missed steps, excessive motor heating (which in a 60-70°C enclosed chamber can push motors past their thermal limits), or unnecessarily loud operation. Getting the run_current and hold_current values right for your specific V0.2 motors is one of the most impactful tuning steps you can take. Last updated: May 2025.
This guide covers everything you need to optimize stepper motor currents on the V0.2: understanding TMC2209 driver settings, finding the correct run_current for your specific motors, tuning hold_current to reduce heat, identifying missed steps, and advanced settings like stealthChop vs spreadCycle for the V0.2's high-speed motion system.
V0.2 Stepper Motor Overview
The V0.2 uses three or four stepper motors depending on your extruder configuration:
- X-axis (stepper_x): NEMA 14 (35mm square) or NEMA 17 (42mm square) depending on your build. The Mini-Stealthburner toolhead is lightweight (~180g), so the X motor does not need high torque. Stock motors are usually LDO-35STH26-1004A (NEMA 14, 0.18 Nm) or a small NEMA 17 like the LDO-42STH20-1004A (0.22 Nm).
- Y-axis (stepper_y): Same as X. Because the V0.2 uses a bed-fixed design (the bed does not move), the Y motor only moves the gantry extrusions and the toolhead. Total moving mass is approximately 400-500g.
- Z-axis (stepper_z): NEMA 14 or NEMA 17 (typically the same size as X/Y). The Z motor drives a single leadscrew that lifts the X/Y gantry. The bed is fixed — only the gantry moves up and down. Total Z load is approximately 800-1000g (gantry + toolhead).
- Extruder (stepper_e): Part of the Clockwork 2 extruder on the Mini-Stealthburner. Uses a small NEMA 14 pancake motor (LDO-35STH26-0504A or similar, rated at 0.5-0.8A). The extruder motor must be tuned separately from the axis motors because it has different thermal and torque requirements.
Most V0.2 kits from Formbot, LDO, Fysetc, and MagicPhoenix use LDO motors with specific rated currents. The kit documentation often provides starting values for run_current, but these are conservative and may leave performance on the table — or they may be too aggressive for your specific build.
Understanding TMC2209 Driver Settings
The V0.2 uses TMC2209 stepper drivers (or occasionally TMC2240 on higher-end builds). Two parameters control motor current:
- run_current (A RMS): The current delivered to the motor while it is moving. This determines the motor's available torque. Higher run_current = more torque = less chance of missed steps, but also more heat generated in the motor and driver. The TMC2209 can deliver up to 2.0A RMS (with appropriate cooling), but most V0.2 motors are rated at 1.0-1.5A and should be driven at 60-85% of their rated current.
- hold_current (A RMS): The current delivered when the motor is stationary but powered (holding position). This is typically set to 50-70% of run_current. During a print, the X and Y motors spend most of their time either moving or holding — reducing hold_current keeps the motors cooler without affecting print quality. The Z motor holds position during the entire print, so its hold_current matters most.
The TMC2209 also has operating modes that affect motor current requirements:
- StealthChop2: Quiet mode. The driver uses a spread-spectrum voltage regulation technique to nearly eliminate motor whine. StealthChop is slightly less efficient than spreadCycle at high speeds (above 60-80 mm/s), meaning the motor may need slightly more run_current to maintain the same torque at fast travel speeds.
- SpreadCycle: Traditional chopper mode. More efficient at high speeds, noisier at low speeds. SpreadCycle can deliver more torque per amp of run_current compared to StealthChop at speeds above 100 mm/s. For the V0.2's typical print speeds (60-120 mm/s), the efficiency difference is small.
Finding the Correct run_current
Step 1: Identify Your Motor's Rated Current
Check the motor datasheet or the label on the motor. LDO motors have the rated current printed on the side (e.g., "1.0A" or "1.5A"). Common V0.2 motor rating scenarios:
- LDO 35STH26-1004A (NEMA 14): Rated 1.0A. Starting run_current: 0.70-0.80A.
- LDO 42STH20-1004A (NEMA 17 short): Rated 1.0A. Starting run_current: 0.75-0.85A.
- LDO 42STH40-1684AC (NEMA 17 standard): Rated 1.68A. Starting run_current: 1.2-1.4A.
- Generic NEMA 14 (no-name): Assume 0.8A. Starting run_current: 0.55-0.65A.
Step 2: Set a Conservative Starting Point
Start at 60% of the rated current. Edit your printer.cfg:
[tmc2209 stepper_x] uart_pin: PD11 tx_pin: PD10 uart_address: 0 run_current: 0.600 # 60% of 1.0A rated hold_current: 0.400 # 66% of run_current sense_resistor: 0.110 interpolate: True
Step 3: Perform a Stress Test
Run the V0.2 through a series of demanding moves that stress each axis. Use the Klipper console:
# X-axis stress test - rapid back-and-forth across full range G91 G1 X-100 F6000 G1 X100 F6000 G4 P2000 G1 X-100 F12000 # Fast travel speed G1 X100 F12000 G4 P2000 # Y-axis stress test G1 Y-100 F6000 G1 Y100 F6000 G4 P2000 G1 Y-100 F12000 G1 Y100 F12000 G4 P2000 # Diagonal test (both axes) G1 X-100 Y-100 F8000 G1 X100 Y100 F8000 G4 P2000 G1 X-100 Y100 F10000 G1 X100 Y-100 F10000
Listen for missed steps — they sound like a brief grinding or clicking noise, or you may see the toolhead vibrate without moving. If you hear missed steps, increase run_current by 0.05A and repeat. Continue until the motor runs all stress tests without skipping.
Step 4: Check Motor Temperature
Immediately after the stress test, measure the motor temperature with an IR thermometer or thermocouple. The motor surface temperature should be below 70°C. TMC2209 drivers can handle up to 85°C ambient, but the motor itself should ideally stay under 65°C for long-term reliability.
- If the motor is below 55°C after a full stress test, you can increase run_current by 0.05-0.10A for more torque margin.
- If the motor is 65-70°C, you are at the maximum safe current. Consider improving cooling (add a small heatsink or direct airflow) or reduce current by 0.05A.
- If the motor exceeds 75°C, reduce run_current immediately. High temperatures demagnetize the rotor over time, permanently reducing motor torque.
Optimizing hold_current
Hold_current can be reduced significantly without affecting print quality because the V0.2's lightweight gantry does not back-drive the motors easily. The Z motor, which holds the gantry in position throughout the print, benefits most from reduced hold_current.
[tmc2209 stepper_z] uart_pin: PD11 tx_pin: PD10 uart_address: 2 run_current: 0.850 hold_current: 0.300 # Reduced from default 0.500 sense_resistor: 0.110 interpolate: True
Testing hold_current: After reducing hold_current, move the gantry to a specific Z height, then power off the motors with M84. The gantry should not drop more than 0.1mm under its own weight. If it drops more, increase hold_current by 0.05A and re-test. The V0.2's lightweight gantry can often hold position with as little as 0.2-0.3A on the Z motor.
X and Y hold_current: These can be as low as 0.2-0.3A. The only requirement is that the motors hold the toolhead in place when the printer is idle. If you notice the toolhead drifts during long printed bridge moves (where XY motors are stationary), increase XY hold_current slightly.
stealthChop vs spreadCycle on V0.2
The V0.2's small size means motor noise is more noticeable than on larger Vorons. The choice between StealthChop and SpreadCycle affects both noise and motor current requirements.
| Parameter | StealthChop2 | SpreadCycle |
|---|---|---|
| Noise level | Nearly silent below 80 mm/s | Audible whine, especially at low speeds |
| Torque efficiency | Good at low speeds, drops above 100 mm/s | Better at high speeds (120+ mm/s) |
| Motor heating | Slightly more heat at the same run_current | Slightly less heat at the same run_current |
| Microstep accuracy | Excellent — smoother motion | Good — slightly more vibration at low speeds |
| Best for V0.2 | Printing (40-80 mm/s) | Fast travel moves (120-200 mm/s) |
Recommendation for V0.2: Use StealthChop for all axes during printing and SpreadCycle for very fast travel moves. Klipper can switch between modes automatically based on speed. Configure it in printer.cfg:
[tmc2209 stepper_x] # ... other settings ... stealthchop_threshold: 150 # Use StealthChop below 150 mm/s # Above 150 mm/s, driver automatically switches to SpreadCycle
A stealthchop_threshold of 100-150 mm/s works well on the V0.2. Your print speeds (perimeters, infill, etc.) are typically 40-80 mm/s, so they stay in StealthChop mode. Travel moves (which may reach 150-200 mm/s) switch to SpreadCycle automatically, giving you the best of both worlds: quiet printing with reliable high-speed travel.
Extruder Motor Current Tuning
The V0.2 extruder motor (part of Clockwork 2) deserves special attention because it operates in a hot environment (the Stealthburner toolhead, which is inside the enclosed chamber at 50-65°C) and must handle high backpressure from the hotend.
- Clockwork 2 stock motor: LDO-35STH26-0504A, rated 0.5A. Starting run_current: 0.35-0.40A.
- Galileo 2 conversion: Uses a larger motor, typically LDO-42STH20-1004A (1.0A rated). Starting run_current: 0.70-0.80A.
- Orbiter 2.0 on V0.2: Internal motor, typically 0.8-1.0A rated. Starting run_current: 0.55-0.70A.
Test extruder current by performing a cold extrusion test:
- Heat the hotend to printing temperature (220°C for PLA/ABS, 260-290°C for nylon/PC).
- Command 100mm of extrusion at 5 mm/s:
G1 E100 F300. - The extruder should feed smoothly without clicking or skipping. If you hear clicking (the extruder gear slipping on the filament), increase run_current by 0.05-0.10A.
- Perform a retraction test: 10 retractions of 2mm at 35 mm/s:
G91 ; G1 E-2 F2100 ; G4 P100 ; G1 E2 F2100 ; G4 P100. Repeat 10 times. The extruder should retract and re-prime consistently without grinding the filament. - Measure the extruder motor temperature. On the V0.2, the extruder motor is close to the hotend heatsink — it may read 50-65°C during printing. If it exceeds 70°C, reduce run_current by 0.05A and increase the extruder heatsink fan speed, or add a small heatsink to the extruder motor itself.
V0.2-Specific Current Table
| Motor | Typical Motor | Rated Current | Starting run_current | Optimal run_current | hold_current |
|---|---|---|---|---|---|
| X-axis | LDO 35STH26-1004A | 1.0 A | 0.60 A | 0.75-0.85 A | 0.30 A |
| Y-axis | LDO 35STH26-1004A | 1.0 A | 0.60 A | 0.75-0.85 A | 0.30 A |
| Z-axis | LDO 35STH26-1004A | 1.0 A | 0.70 A | 0.80-0.90 A | 0.25-0.35 A |
| Extruder (CW2) | LDO 35STH26-0504A | 0.5 A | 0.35 A | 0.35-0.45 A | 0.20-0.25 A |
| X/Y (NEMA 17) | LDO 42STH20-1004A | 1.0 A | 0.70 A | 0.80-0.90 A | 0.35 A |
| Z (NEMA 17) | LDO 42STH20-1004A | 1.0 A | 0.80 A | 0.85-0.95 A | 0.30-0.40 A |
Thermal Management in the V0.2 Enclosure
The V0.2's enclosure is small (approximately 5 liters internal volume) and reaches 55-70°C during ABS or nylon printing. At these temperatures, the stepper motors are at a significant disadvantage because they cannot shed heat to the surrounding air as effectively as they can in an open frame.
- Motor heatsinks: Adding small aluminum heatsinks to the X, Y, and Z motors reduces operating temperature by 5-10°C. Use adhesive-backed heatsinks sized to fit the motor face (20mm x 20mm for NEMA 14, 40mm x 40mm for NEMA 17). Install them on the back face of the motor (opposite the shaft).
- Enclosure fan circulation: The Nevermore filter fan or an additional chamber circulation fan helps move hot air away from the motors. Even a small 40mm fan running at low speed inside the enclosure can reduce motor temperatures by 8-12°C.
- Electronics bay separation: The V0.2's electronics are mounted on the back panel, outside the main enclosure chamber. Ensure the electronics bay has its own ventilation to the outside air — do not let the electronics bay heat up from motor and bed radiation.
- Current reduction during chamber heating: If you print at high chamber temperatures (65-70°C for nylon), consider reducing run_current by 5-10% for the XY motors. The reduced torque is acceptable because the V0.2's light gantry requires very little force to move, and the reduced current keeps the motors from overheating.
Identifying Missed Steps on the V0.2
Missed steps on the V0.2 are harder to detect than on larger printers because the errors are smaller. Here are the telltale signs:
- First-layer squish inconsistency: If the first layer is perfect on one side of the bed and too high on the other, Z steps may be missed during the initial descent. Run a Z repeatability test: move to Z0, mark the position, move up 100mm, move back to Z0, and check if the nozzle returns to the exact same height. Repeat 5 times. The deviation should be under 0.01mm.
- Part dimensions are consistently undersized on one axis: If your 120mm calibration cube measures 119.5mm on X but 120.0mm on Y, the X motor has missed steps during the print. This is common on the V0.2 because the X belt path has more friction than Y due to the toolhead cable chain.
- Artifacts that repeat at the same layer height: If a band of artifacts appears at the same Z height in every print, the Z motor is likely missing steps at that specific position due to a leadscrew defect or binding.
Fix for missed steps: Increase run_current by 0.05-0.10A on the affected axis. If the problem persists, check for mechanical binding (tight belts, misaligned rails, dirty leadscrew) before increasing current further. Mechanical binding that causes missed steps cannot be solved by current alone — you must fix the mechanical issue.
Advanced: Sensorless Homing on V0.2
Many V0.2 builds use sensorless homing (stall detection) for X and Y, eliminating physical endstop switches. Sensorless homing relies on the TMC2209's ability to detect motor stall by monitoring back-EMF. The technique is sensitive to motor current settings:
- run_current must be high enough for the stall detection to work reliably. If run_current is too low, the motor may stall without the driver detecting it, causing the toolhead to crash into the frame.
- The driver_stregth parameter (in the
[tmc2209]section) controls the sensitivity of stall detection. A value of 0-255, where higher = more sensitive. Start at 80 and adjust up if the motor does not detect the stall (crashes into the endstop), or down if false stalls occur during normal movement. - Test sensorless homing by commanding G28 X repeatedly (5-10 times). The toolhead should stop at the same position within 0.01mm each time. If the stopping position varies by more than 0.1mm, adjust driver_stregth or increase run_current slightly.