-
Getting started with the TOS-100 Arduino Stepper Motor Shield
The TOS-100 is an Arduino compatible Shield capable of driving one stepper motor up to to 1.7A that utilizes the Trinamic Motion Control TMC260 motor driver chip. For added compatibility with other arduino shields, the TOS-100 allows you to choose nearly any pin for any signal.
TOS-100 Arduino Stepper Motor Shield is developed by Marcus from Interactive Matter.
Assembling the TOS-100 Stepper Driver Shield
The TOS-100 shield comes assembled with all SMD parts. The through the hole parts represent various options to assemble the shield and therefore do not come pre-soldered. To get the shield up and running you have to decide how you would like to assemble the shield and solder the appropriate parts:
- The stacked headers for Arduino can be replaced by normal headers if you are sure that this is the topmost shield in your stack. In most cases you want to solder the normal stacked headers for flexibility.
- The pin connections between the TMC260 driver control pins can be either soldered with wires or with headers for flexibility. The DC connector can be used to provide external power for your motor (recommended – or use the Input power of the Arduino (not recommended, but the far simpler setup).
- The motor connector can either be soldered as screw terminals for a flexible connection or with Molex KK headers (e.g. Molex 22-05-7048) for easier motor connection. Or with anything else that you can fit into the 2,54mm or 3,0 mm connections. Be aware that the connectors or cable should withstand the maximum motor current (1.7A as absolute maximum).
Connecting the TMC260 pins with your Arduino
All control pins of the TMC260, which are not defined by the Arduino standard (e.g. the SPI connection) is not connected on the TOS-100 shield to give your a greater flexibility to suit the shield to your application. The configurable pins are located on the left side of the shield. To connect any pin of the TMC260 you can use the holes next to the Arduino headers. In the above picture the TMC260 pins are soldered with sockets and cables are used for an on-the-flywiring. The option to use headers may be the best way if you want to use the shield as an experimental shield in various configurations. If you want to use the shield permanently in one of your project it may be easiest to connect the pins with wires soldered in.
The TMC260 is configured via SPI. The MISO and MOSI pins for SPI are already connected. You need to connect the CS pin to a pin on the Arduino. You can choose any digital output pin you like. Check first for compatibility with other shields you want to use.
The example programs assume that you connect the CS pin to the Arduino digital output pin 2.
The easiest way to drive the stepper motor is to use the step and direction pins. In order to use those pins you need to connect those pins to Arduino digital output pins. The TMC260 stepper motor driver can be used solely over SPI (but this is not yet supported by the provided library).
The example programs assume that the step pin is connected to Arduino digital output 7 and the direction pin is connected to Arduino digital output pin 6. If you want you can also connect the EN enable pin with an Arduino digital output pin. This is not strictly necessary. The default configuration ensures that the TMC260 stepper driver is permanently enabled and you can disable it in software.
The example programs expect the enable pin to be connected to digital output pin 8 on Arduino, but this connection is optional.
You can also the connect the Stall Guard output pin to an digital input pin on Arduino to react faster on motor stall situations. But you can also access the stall guard value via software. So this connection is optional, but provides a faster reaction on stall situations.
You may have noticed that there are not connections for the digital pins 0 and 1 of the Arduino. Those pins are used as RX/TX for the serial connection – most probably you will need that in your project. They were not made available in order to prevent errors.
Providing power to your TOS-100 Arduino Stepper Driver Shield.
The TOS-100 Arduino Stepper Driver Shield supports two power options:
- You can power it from an external source with 9 to 40V
- You can use the Arduino input voltage which should be 9-12V
It is recommended to use the external DC connector to provide 12-24V externally (or more or less, depending on your motor specifications, the maxmum rating of the TMC262 is 40V).
As a rule of thumb for selecting the correct input voltage you can use this formula:
Rcoil * Icoil << Motor Voltage < 25*Rcoil*Icoil
Rcoil and Icoil are the coil resistance and current as given in the datasheet of your motor. The motor voltage must be considerable higher than the the multiplication of these two values. For most Stepper motors something between 12V and 24V is a good value. The TMC262 ensure that your motor only sees the current you specify in software regardless of the voltage supplied.
If you want an extremely easy setup you can add a blob of solder to the solder jumper SJ1, located between the Arduino power and analogue input headers:
This connects the supply power of the TOS-100 to the input voltage of the Arduino. By that you have to power your Arduino externally from 9-12V. The TMC260 chip requires a minimum input voltage of at least 9V and the Arduino regulators have a maximum input voltage of 12V. You can see from those numbers and the recommendations above that this is normally not the optimum
power condition for normal stepper motors. Additionally the linear regulator on the Arduino can get considerable hot. So this setup is not recommended, but can make your project significantly easier if 9-12V is enough for the motors you are using. You can solder in the DC barrel connector on the TOS-100 shield and use that to power your motor and your Arduino or use the DC Barrel connector on the Arduino to power your system. Be careful though: The PCB traces on the TOS-100 shield are quite robust to carry a good amount of current and considerable bigger than the VIN connection on the Arduino. So if your motor takes a good amount of power you are advised to use the DC barrel connector on the TOS-100 shield, for small stepper motors the VIN Pin of the Arduino may be sufficient.Related
February 1, 2013 / Jonas P. Proeger / 7
Categories: Open Source Hardware
Tags: arduino, arduino stepper motor shield, coolStep, shield, stepper motor, stepper motor driver
Open Source StepRocker Programming Tool Kritzler App showing TOS-100 Arduino Stepper Motor Shields in Action
Comments are currently closed.
7 thoughts on “Getting started with the TOS-100 Arduino Stepper Motor Shield”
The TOS-100 TMC26XMotorTester does not work. If this is a how-to it would be useful to know what has to be done beforehand in order to run the client application which uses the Processing language. It isn’t enough to simply download Processing and run the .pde that is in Github for this board. When I tried to run the client app in Processing several errors came up mainly “.name() does not exist”
@Sam
I fixed the “name()” and a couple of other issues, and it works for me now.. You can wait for it to be merged into upstream, or get it from my repository here: https://github.com/matthiesenj/TMC26XStepper
Hi there,
time fades away… I tired to get the TMC26XMotorTester work with an actual ubuntu 16.04 LTS , Arduino 1.6.10 and processing 3.3.6, but several problems appear. Beginning with “compilation error” in the arduino part (worked to be compiled on win7) to errors (no selectable gui) in the processing user interface. My main motivation was to get my motor better adjusted. I didn’t find a how-to adjust values in the TMC26XExample.ino. As I’m only a user with little knowledge of “close hardware”-programming, I’d like to ask if it would be possible to upgrade the software or to provide a how-to adjusting the values in the TMC26XExample.ino.
This is the error I got from arduino compilation -> /home/olfried/snap/arduino-mhall119/3/.arduino15/packages/arduino/tools/avr-gcc/4.9.2-atmel3.5.4-arduino2/bin/../lib/gcc/avr/4.9.2/../../../../avr/bin/ar terminated with signal 31 [Bad system call] <-
Hello Olfried,
Our apologies for the late reply. Could you please write a ticket for our support system? That way, our engineers will immediately be notified and will get in touch with you.
Best,
Corné
Hello,
I try get going with the TOS-100. I’m using an Arduino Uno. The TMC26XExample is running. I can also compile and upload the TMC26XMotorTester. However nothing happens i.e. the motor is not moving. On the serial monitor I see a constant stream of the following message
#s,d1,c515,S10,m32,t4,f0,Ke-,Kl0,Ku0,Kn0,Ki0,Km0,a-,b-,x-,e1,Cm0,Co2,Cb24,Cs8,Ce6,Cd0,
I see not step signal on the led on the board.
I have also written my own little program that looks like this:
#include
//you may adapt this to your shield or breakout board connection
#define CS_PIN 2
#define EN_PIN 3
#define DIR_PIN 6
#define STEP_PIN 7
#define ENABLE_PIN 8 //if it is not connected it won’t be a problem
#define SG_PIN 4
#define TIMER_CLOCK_FREQ 2000000.0 //2MHz for /8 prescale from 16MHz
#define INITIAL_CURRENT 500 //in mA
#define MAX_SPEED 1500
TMC26XStepper myStepper = TMC26XStepper(200, CS_PIN, DIR_PIN, STEP_PIN, INITIAL_CURRENT);
int sg_read, tmp_read, sg_tres;
void setup() {
Serial.begin(115200);
myStepper.setMicrosteps(1);
myStepper.setSpeed(100);
myStepper.setStallGuardThreshold(10, 0);
myStepper.start();
}
void loop() {
myStepper.step(30);
sg_read = 0;
while (myStepper.move()) {
tmp_read = myStepper.getCurrentStallGuardReading();
if (tmp_read > sg_read) {
sg_read = tmp_read;
}
}
Serial.print(“Position: “);
Serial.print(myStepper.getMotorPosition());
Serial.print(“; StallGuardTreshold: “);
sg_tres = myStepper.getStallGuardThreshold();
Serial.print(sg_tres);
Serial.print(“; StallGuardReading: “);
Serial.print(sg_read);
Serial.print(“; StallGuardReached: “);
Serial.println(myStepper.isStallGuardReached());
delay(1000);
}
The stepper is moving as expected and with the configured stallguard value the red SG led on the TOS-100 lights up when I stall the stepper. However on the serial I get constantly only this message:
Position: 0; StallGuardTreshold: 10; StallGuardReading: 0; StallGuardReached: 0
Why is position always 0?
Why ist the StallGuardReading always 0 even when I completely stall the stepper and the red SG led is lighted?
Why the StallGuardReached is always 0?
Best regards,
Marc
Hi Marc,
This might be related to the constant development of the Arduino IDE and it’s libraries. Please furthermore check out the getting started here: https://media.digikey.com/pdf/Data%20Sheets/Trinamic%20Motion%20Control%20PDFs/TOS-100_QSG.pdf
Please let us know if you already solved it in the mean time or the additional information did. If not please get back to us.
Best regards,
Lars
Thanks for the feedback. Effectively it turned out that the board has an issue. I ordered a second one and this one is working more or less as expected.
The only issue I’m currently still struggling with is to set the stallguard threshold to a meaningful value. I try to use stallguard to detect endstops on both sides. However in one direction a value of 10 works fine and in the other direction a value of about 15 is required to detect the endstop reliably.
Where is this asymmetry coming from? is it related to the motors I’m using (cheap chinese NEMA17)?
Best regards,
Marc