Skip to content
Daniel Frenkel edited this page Apr 24, 2026 · 17 revisions

Welcome to the VAL3000 wiki!

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

The electronic schematic can be found here

Consider downloading this PDF for a more advanced guide on programming stepper motor drivers.

Please reference the datasheet whenever possible here.

Power Requirements

Note: This board does NOT have reverse polarity protection.

Voltage

  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 see 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 a 0.1 mOhm current sense resistor, which allows a maximum current draw of 1.92A RMS (reference section 8, Selecting Sense Resistors, of the datasheet).

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

Because the current draw is Root Mean Square current, it needs to be multiplied by 1.4 to find the maximum current draw. 1.92 x 1.4 = 2.7. If you plan to use the maximum current at very high speed, be sure your power supply can supply 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 turn off the TMC2209. When it gets too hot, it will begin to stutter, it will move a bit, then pause, then move, then pause. Be sure to add additional cooling if required, such as a heatsink or fan.

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

Flashing new firmware

Note: The USB 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 button. After successfully uploading new firmware, you will not need to do this manually again, the Arduino IDE will automatically do it for you.

To enter download mode, press and hold 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

Additional Firmware

Simple firmware for this device can be found in the firmware folder. It's a good place to begin and get familiar with how the TMC2209 works and will have the motor spinning right away.

If you would like more advanced firmware, it's available in the same Firmware folder.

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, the 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 in the firmware, such as driver.VACTUAL(500). To stop the motor, set velocity to zero. To monitor position, the TMC2209 triggers an interrupt on the INDEX pin which the ESP32 registers and counts.

Attaching directly to 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.