- Name
- TMC2209Stepper
- Version
- 1.0.0
- License
- BSD
- URL
- https://github.com/hjd1964/TMC2209
- Author
- Peter Polidoro, Howard Dutton
- peter@polidoro.io, hjd1964@gmail.com
The TMC2209 is an ultra-silent motor driver IC for two phase stepper motors with both UART serial and step and direction interfaces.
The TMC2209 communicates over a UART serial port using a single wire interface, allowing bi-directional operation for full control and diagnostics. It can be driven by any standard microcontroller UART or even by bit banging in software.
The UART single wire interface allows control of the TMC2209 with any set of microcontroller UART serial TX and RX pins. The single serial signal is connected to both the TX pin and the RX pin, with a 1k resistor between the TX pin and the RX pin to separate them.
The microcontroller serial port must be specified during the TMC2209 setup.
For example:
#include <Arduino.h>
#include <TMC2209.h>
// Instantiate TMC2209
TMC2209Stepper stepper_driver;
HardwareSerial & serial_stream = Serial1;
void setup()
{
stepper_driver.setup(serial_stream);
}
On some Arduino boards (e.g. Uno, Nano, Mini, and Mega) pins 0 and 1 are used for communication with the computer on the serial port named “Serial”. Pins 0 and 1 cannot be used on these boards to communicate with the TMC2209. Connecting anything to these pins can interfere with that communication, including causing failed uploads to the board.
Arduino boards with additional serial ports, such as “Serial1” and “Serial2”, can use those ports to communicate with the TMC2209.
The Teensy boards have 1 to 8 hardware serial ports (Serial1 - Serial8), which may be used to connect to serial devices.
Unlike Arduino boards, the Teensy USB serial interface is not connected to pins 0 and 1, allowing pins 0 and 1 to be used to communicate with a TMC2209 using “Serial1”.
The serial baud rate is the speed of communication in bits per second of the UART serial port connected to the TMC2209.
Baud rates from 9600 Baud to 500k Baud or even higher (when using an external clock) may be used. No baud rate configuration on the chip is required, as the TMC2209 automatically adapts to the baud rate.
The higher the baud rate the better, but microcontrollers have various UART serial abilities and limitations which affects the maximum baud allowed. The baud rate may be specified when setting up the stepper driver.
The maximum serial baud rate on typical Arduino boards is 115200, so that is the default, but other values as low as 9600 may be used.
Arduino Serial Baud Rate Web Page
Teensy UART baud rates can go higher than many typical Arduino boards, so 500k is a good setting to use.
Teensy Serial Baud Rate Web Page
#include <Arduino.h>
#include <TMC2209.h>
// Instantiate TMC2209
TMC2209Stepper stepper_driver;
HardwareSerial & serial_stream = Serial1;
const long SERIAL1_BAUD_RATE = 500000;
void setup()
{
stepper_driver.setup(Serial1,SERIAL1_BAUD_RATE);
}
More than one TMC2209 may be connected to a single serial port, if each TMC2209 is assigned a unique serial address. The default serial address is 0. The serial address may be changed from 0 using the TMC2209 hardware input pins MS1 and MS2, to 1, 2, or 3.
The TMC2209 serial address must be specified during the TMC2209 setup, if it is not equal to the default of 0.
For example:
#include <Arduino.h>
#include <TMC2209.h>
// Instantiate the two TMC2209
TMC2209Stepper stepper_driver_0;
TMC2209Stepper stepper_driver_1;
const long SERIALX_BAUD_RATE = 115200;
void setup()
{
// TMC2209::0 is used by default if not specified
stepper_driver_0.setup(Serial1,SERIALX_BAUD_RATE,0);
stepper_driver_1.setup(Serial1,SERIALX_BAUD_RATE,1);
}