TMC2209 VREF & UART Current Calculator

Enter the motor phase-current rating and your driver RSENSE value to get a standalone VREF setting plus UART IRUN and IHOLD register values. The result also shows the rounded current the driver can actually produce.

Your numbers
Enter the per-phase current printed on the motor or stated in its datasheet.
Choose peak for a conventional motor nameplate rating or RMS when the value is already specified as RMS.
Sets the operating current as a percentage of the motor rating; 70% to 85% is a common starting range.
Use the effective RSENSE value for the driver module, commonly 0.110 ohm but not identical across boards.
Sets the desired stationary holding current used to calculate the UART IHOLD register.

What this calculator leaves out

  • The effective sense resistance and current-scaling circuit can vary between TMC2209 carrier-board designs; verify the module schematic or resistor markings.
  • Motor labels do not always state whether the current is peak, RMS, or a DC per-phase rating.
  • This calculation does not account for cooling, airflow, connector limits, supply voltage, motor inductance, or firmware current reduction, so confirm temperatures under real printing loads.

By using this calculator you agree to the Terms of Use. Results are estimates, not professional advice.

Standalone VREF1.2

Target run current (RMS)
0.85
Target peak current
1.2
Recommended UART run setting
VSENSE 0.180 V, IRUN 27
Achieved UART run current (RMS)
0.86
UART current error
0.96%
Recommended IHOLD setting
VSENSE 0.180 V, IHOLD 13
Maximum RMS current at this RSENSE
1.77

Uses the TMC2209 current equations with the entered effective RSENSE value plus the 0.020 ohm internal sense offset.

How to use this calculator

  1. Enter the motor current printed on the label or listed in the motor datasheet.
  2. Choose whether that current is a peak/nameplate value or already an RMS value.
  3. Set the run-current percentage you want to use while the axis is moving.
  4. Enter the effective sense-resistor value for your TMC2209 carrier board.
  5. Set the hold-current percentage to size the UART IHOLD register.

How the TMC2209 current values are calculated

The TMC2209 can be set two different ways. In standalone mode, the analog VREF pin sets the current limit. In UART mode, firmware writes current-scale register values such as IRUN and IHOLD. Both methods depend on the driver board's effective sense resistance, so the same motor can need different settings on different carrier boards.

The calculator first converts the motor rating into the RMS run current target. If the motor rating is entered as peak or nameplate current, it divides by sqrt(2). If the rating is already RMS, it leaves it alone. It then applies the selected run-current percentage:

Irun,rms = motor current × run percent

For a peak/nameplate rating, the motor current term in that formula is M ÷ sqrt(2). For an RMS rating, it is simply M. The matching peak target is Irun,peak = Irun,rms × sqrt(2).

Standalone VREF is solved from the analog-current equation:

VREF = 2.5 × Irun,rms × sqrt(2) × (RSENSE + 0.020) ÷ 0.325

The 0.020 ohm term is the internal sense-path offset used by the Trinamic equation. If the result is above 2.5 V, the requested current is beyond the analog full-scale range for that RSENSE value.

How IRUN and IHOLD are chosen

For UART current, the calculator tries the lower full-scale sense voltage first, VFS = 0.180 V, because it gives finer resolution when the target fits. It computes the raw current scale as:

CSraw = 32 × sqrt(2) × I × (RSENSE + 0.020) ÷ VFS − 1

If that value is at most 31, the calculator uses VSENSE 0.180 V. Otherwise it switches to VSENSE 0.325 V and recalculates. The register value is the nearest integer from 0 through 31. After rounding, the achieved RMS current is recalculated as:

Ia = ((CS + 1) ÷ 32) × (VFS ÷ (RSENSE + 0.020)) ÷ sqrt(2)

That is why the achieved current can differ from the requested current, especially at very low currents where register 0 is still a nonzero current scale. IHOLD is calculated the same way from the requested hold current, using the same VSENSE range as the run-current setting.

What matters most

The RSENSE value moves every result. A board using 0.110 ohm sense resistors will not match a board using 0.150 ohm or 0.075 ohm resistors. The peak-versus-RMS choice also matters: applying the peak-to-RMS conversion to a value that is already RMS will under-set current by about 29%.

What this calculator leaves out

The math is only the current-scaling side of setup. It does not model board cooling, airflow, heatsinks, connector ratings, supply voltage, motor inductance, microstep mode, stealthChop behavior, or extra current reduction done by firmware. Treat the result as a starting point, then confirm the driver and motor temperatures under a representative print.

Worked example

Suppose a stepper motor is labeled 1.5 A per phase, treated as a peak/nameplate rating. With an 80% run-current target and a 0.110 ohm sense resistor, the RMS target is (1.5 ÷ sqrt(2)) × 0.80 = 0.849 A. The target peak current is 1.200 A.

The standalone equation gives VREF = 2.5 × 0.849 × sqrt(2) × (0.110 + 0.020) ÷ 0.325 = 1.200 V. UART mode fits in the lower sense range, so the run setting is VSENSE 0.180 V, IRUN 27, which gives about 0.857 A RMS after rounding. With hold current at 50%, the calculator reports IHOLD 13.

Common questions

Is a stepper motor's nameplate current peak or RMS?

Many small stepper motor labels list a per-phase current without saying peak or RMS, and motor vendors are not perfectly consistent. If the datasheet clearly says RMS, select RMS. If it is a conventional nameplate phase-current value and you want the common 3D-printer current-limit treatment, select peak/nameplate so the calculator converts it to RMS before applying the run percentage.

What RSENSE value does my TMC2209 module use?

Use the effective sense resistance from the carrier-board schematic when you can. Many modules are around 0.110 ohm, but boards can use other values and some published setup guides assume a specific carrier. If you only have the board in hand, check the resistor markings and the module documentation before trusting a default.

What is the difference between VREF, IRUN, and run_current?

VREF is the analog voltage used when the driver is configured without UART current control. IRUN is the TMC2209 current-scale register used in UART mode. Firmware settings such as Klipper run_current or Marlin current commands are usually user-facing current values that firmware translates into driver register settings.

Should TMC2209 current be set to 80% of the motor rating?

Eighty percent is a common starting point, not a rule. Lower current reduces heat and may still hold position on lightly loaded axes. Higher current can improve torque but needs enough driver cooling, motor cooling, and power-system margin.

Why does the calculated UART current differ from the requested current?

IRUN and IHOLD are integer register values from 0 through 31, so the driver cannot represent every possible current exactly. The calculator rounds to the nearest available register value and then reports the achieved RMS current from that rounded value. The difference is most visible at low current targets.

How low should IHOLD be set on a 3D printer?

IHOLD should be low enough to reduce stationary heat but high enough that the axis does not move when idle. Values around 30% to 60% of run current are common starting points, but Z axes, heavy beds, and belt tension can change what is safe. Remember that IHOLD 0 is still the lowest current-scale register, not a guarantee of zero coil current.

Put this calculator on your site

Paste the snippet below where you want the calculator to appear. It stays up to date automatically and links back here.

<iframe src="https://countfolk.com/embed/tmc2209-vref-current-calculator/" title="TMC2209 VREF & UART Current Calculator" width="100%" height="640" style="border:0;max-width:44rem" loading="lazy"></iframe>