-
Notifications
You must be signed in to change notification settings - Fork 3
Home
If any information is missing here, please update the wiki or create an issue.
Quick links
- Electronic schematic (PDF)
- TMC2209 datasheet — please reference it whenever possible
- Firmware options and StallGuard tuning guide
- Consider downloading this PDF for a more advanced guide on programming stepper motor drivers
Note: This board does NOT have reverse polarity protection. Double-check that your supply is center positive before plugging it in.
The recommended supply is 12–24V on the 2.1mm x 5.5mm barrel connector. The component limits are:
- The TMC2209 has a voltage range of 4.75V–29V
- 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 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.
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.
| 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 |
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.
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)
There are two ways to drive the TMC2209:
- STEP/DIR interface
- Internal pulse generator
In short: it's recommended to use the internal pulse generator, otherwise the ESP32 cannot be used for any other function.
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.
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.
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.