Skip to content
This repository was archived by the owner on Jul 20, 2026. It is now read-only.
Daniel Frenkel edited this page Jul 16, 2026 · 18 revisions

Welcome to the VAL3000 wiki!

If any information is missing here, please update the wiki or create an issue.

Quick links

Power Requirements

Note: This board does NOT have reverse polarity protection. Double-check that your supply is center positive before plugging it in.

Voltage

The recommended supply is 12–24V on the 2.1mm x 5.5mm barrel connector. The component limits are:

  1. The TMC2209 has a voltage range of 4.75V–29V
  2. The DC/DC switching regulator has a voltage range of 3.8V–32V

For stepper motors, higher voltage allows for more torque at higher speeds, as can be seen in Lin Engineering's torque curve calculator. A stepper motor can run at 5V with maximum torque, but the speed must be kept very low.

Current

Current draw is based on the IRUN setting of the TMC2209. This board uses 0.1 Ω (100 mΩ) current sense resistors, which allow a maximum motor current of 1.92A RMS (reference section 8, Selecting Sense Resistors, of the datasheet).

Using higher voltage will result in a lower current draw from the supply. At 24V, the maximum draw will only be around 1A at slower speeds.

Because the current setting is a Root Mean Square (RMS) value, multiply it by 1.4 to find the peak current: 1.92 × 1.4 ≈ 2.7A. If you plan to use the maximum current at very high speed, be sure your power supply can deliver at least 2.7A.

Heat

More current = more heat. While the TMC2209 can operate at 2A, it will likely trigger the built-in over-temperature alarm and shut down. When it gets too hot, the motor will begin to stutter: it will move a bit, then pause, then move, then pause. Add additional cooling if required, such as a heatsink or fan.

It's recommended to run at 24V with the current below 1A, which keeps heat generation much lower.

Pinout

Function ESP32-C3 GPIO
TMC2209 UART RX 5
TMC2209 UART TX 6
TMC2209 STEP 10
TMC2209 ENABLE 8
TMC2209 DIAG (StallGuard) 1
TMC2209 INDEX 0
Button 1 3
Button 2 4
Button 3 (Wi-Fi reset) 7

Flashing New Firmware

Note: The USB port is connected directly to the ESP32 and uses USB CDC mode. There is no USB-to-UART bridge (like the CP2102). When flashing the ESP32 for the first time, you need to manually enter boot/download mode using the BOOT and RESET buttons. After successfully uploading new firmware once, the Arduino IDE will do this automatically for you.

To enter download mode: press and hold the BOOT button, then press and release the RESET button, then release the BOOT button.

To use the Serial Monitor in Arduino, set Tools → USB CDC on Boot → Enabled.

Firmware

All firmware lives in the firmware folder:

  • VAL3000-simple — a good place to begin and get familiar with how the TMC2209 works; it will have the motor spinning right away
  • VAL3000-esphome — Home Assistant integration via ESPHome
  • VAL3000-api — standalone web UI + HTTP API
  • VAL3000-matter-arduino / VAL3000-matter-esp-idf — Matter window covering (the ESP-IDF version is recommended)

Driving the TMC2209

There are two ways to drive the TMC2209:

  1. STEP/DIR interface
  2. Internal pulse generator

In short: it's recommended to use the internal pulse generator, otherwise the ESP32 cannot be used for any other function.

STEP/DIR Interface (Not Recommended)

The ESP32 is connected to the STEP and DIR pins of the TMC2209. If you would like to use these pins for a different purpose, two 0R resistors have been placed. Remove these resistors to disconnect the pins from the STEP/DIR interface. You can then use the large vias as GPIO pins.

When using the STEP pin, a quick HIGH/LOW pulse is required to make the TMC2209 move one microstep. This pulsing uses the entire CPU cycle, therefore the ESP32 cannot be used for any other task — including Wi-Fi, as that will cause stuttering in the motor.

Internal Pulse Generator (Recommended)

To use the pulse generator, simply set the velocity you would like to move at in the firmware, such as driver.VACTUAL(500). To stop the motor, set the velocity to zero. To monitor position, the TMC2209 triggers an interrupt on the INDEX pin, which the ESP32 registers and counts.

Attaching Directly to a Motor

The four mounting holes are designed to fit a NEMA 17 motor. 3D print the standoffs and remove 2 of the M3 screws from the stepper motor. Find two screws that are about 7mm longer than the screws you removed.