TMC2209 stepper driver does not move the motor: enable pin, mode and current

Check the enable pin first. On most boards it must be LOW for the driver to run.

What the message means

The driver can be disabled by the enable pin, by a wrong mode setting or by a missing motor supply. It then shows no motion and little warmth.

Fix it in this order

  1. Connect the enable pin to ground, or set it LOW in code.
  2. Check the motor supply, and fit a capacitor of about 100 µF close to the driver.
  3. Check the step and direction pins against the code.
  4. Set the current with the reference pin or over UART, within the motor rating.
  5. Never connect or disconnect the motor while the driver is powered.
  6. Check that the motor coil wires are paired correctly.

Why it happens

A TMC2209 will not move the motor if its enable pin is not low, if the motor supply is missing, or if logic power is absent. It also works without UART in the standard STEP and DIR mode, so UART is not needed for first motion.

Pull the EN pin low, supply the motor voltage, power the logic supply, and test with STEP and DIR first. Add UART afterwards and set a unique address on each driver if several share the bus.

If you see this, do this

You seeDo this
No motion, no humEnable pin or motor supply.
Hums, does not turnCoil pairing or current.

A4988 or DRV8825 not moving, skipped steps.

Last reviewed: November 2026. These are the usual causes and the order that finds them fastest. Test on your own board; clones and cables differ.

Why this happens

The TMC2209 has several independent conditions that must all be true before the motor moves. The motor supply VM must be present, the logic supply VIO must be present, and the enable input must be pulled low. If any one is missing, the output stage stays off. A driver with only the logic supply powered will respond to a UART query yet never energise the coils, which is a confusing case.

In standard STEP and DIR mode, each rising edge on STEP moves the motor one microstep, and DIR sets the direction. Current is set by the reference voltage on the board’s potentiometer unless you switch to UART control. If the current is far too low, the motor holds weakly or hums and does not follow the steps. If the two wires of one coil are swapped with wires of the other coil, the motor shakes or vibrates in place instead of rotating.

How to confirm the cause

  • With power off, find the EN pin and the GND pin. Switch on and measure EN to GND. About 0 V means the driver is enabled; about the logic voltage means it is disabled.
  • Measure the motor supply across the VM and GND pins of the driver while the supply is on. If it reads 0 V, check the fuse, the switch and the connector. Measure VIO as well.
  • With the board off, measure resistance between motor wires. Wires of the same coil show a low resistance, commonly a few ohms on a NEMA 17. Wires of different coils show no connection. Connect each coil pair to a driver output pair.
  • With the driver enabled and no step signal, try turning the motor shaft by hand. A noticeable holding force means the coils are energised; free spinning means the output stage is off.
  • Watch STEP with a logic analyser or scope if you have one, or temporarily drive an LED from the same pin, to confirm that pulses are actually leaving the controller.

Worked example

This minimal test uses only the STEP, DIR and EN pins, with no UART. The pin numbers are examples; change them to match your wiring:

const int EN_PIN = 8, STEP_PIN = 9, DIR_PIN = 10;

void setup() {
  pinMode(EN_PIN, OUTPUT);   digitalWrite(EN_PIN, LOW);   // LOW = enabled
  pinMode(STEP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);  digitalWrite(DIR_PIN, HIGH);
}

void loop() {
  digitalWrite(STEP_PIN, HIGH); delayMicroseconds(800);
  digitalWrite(STEP_PIN, LOW);  delayMicroseconds(800);
}

Common mistakes

  • Connecting or disconnecting the motor while the driver is powered. This can destroy the driver.
  • Leaving the EN pin floating and assuming it defaults to enabled.
  • Powering VM but forgetting VIO, or the reverse.
  • Setting the current above the motor’s rated current because the motor ‘feels weak’.
  • Sharing one UART line between several drivers without giving each a different address.

If this did not fix it

  • Thermal shutdown: a driver without a heat sink or airflow at higher current can switch itself off and restart. Let it cool and test again at lower current.
  • Step rate too fast from standstill. A stepper that cannot accelerate from 0 at the commanded rate will hum without turning; start slower.
  • A broken motor coil or loose connector. Re-measure the coil resistance with the motor disconnected.