ADI Trinamic Blog

We transform digital information into physical motion.

 
  • Newsletter
  • Blog Ethics
  • Legal/Impressum
  • Main Website
Menu
  • Newsletter
  • Blog Ethics
  • Legal/Impressum
  • Main Website
  • 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.

    1040418-2-300x225

    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.

    tos100

    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:

    1. You can power it from an external source with 9 to 40V
    2. 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.

    Share this:

    • Twitter
    • Facebook
    • LinkedIn
    • Pinterest
    • Print
    • Email

    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”

    • Sam says:
      December 16, 2015 at 9:52 am

      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”

    • Jesper Matthiesen says:
      November 16, 2016 at 7:36 pm

      @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

    • Olfried says:
      January 23, 2018 at 10:26 pm

      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] <-

    • Corné Bekkers says:
      February 1, 2018 at 12:07 pm

      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é

    • Marc says:
      May 14, 2018 at 5:09 pm

      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

    • Lars Jaskulski says:
      June 20, 2018 at 9:35 am

      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

    • Marc says:
      June 21, 2018 at 10:53 am

      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

Recent Posts

  • Guest Blog: UBC Thunderbots
  • Guest Blog: TURAG
  • Guest Blog: School of Engineering Telecom Physics University of Strasbourg
  • Guest Blog: STAR Dresden
  • Pushing the Limits of Stepper Motor Control in 3D Printing

Social

  • View trinamic.mc’s profile on Facebook
  • View Trinamic_MC’s profile on Twitter
  • View trinamic’s profile on GitHub
  • View UC4SHA5_GAw1Wbm2T2NWpWbA’s profile on YouTube

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Newsletter

 

Info

Waterloohain 5
22769 Hamburg
+49 40 514 806 40

Tags

3D printer 3d printing arduino BLDC cDriver code code snippet coolStep drive Driver ease of use ethercat eval kit evaluation kit Field Oriented Control FOC GUI guide heliostat How-To IC linear stage motion controller motor driver open source hardware programming rtmi servo servo controller IC setup silentstepstick stealthChop stepper stepper motor stepper motor driver stepper motor driver ic stepper motors technology TMC4671 tmc5130 TMCL TMCL-IDE TRINAMIC TRINAMIC Motion Control tuning

Tag Cloud

    3D printer 3d printing arduino BLDC cDriver code code snippet coolStep drive Driver ease of use ethercat eval kit evaluation kit Field Oriented Control FOC GUI guide heliostat How-To IC linear stage motion controller motor driver open source hardware programming rtmi servo servo controller IC setup silentstepstick stealthChop stepper stepper motor stepper motor driver stepper motor driver ic stepper motors technology TMC4671 tmc5130 TMCL TMCL-IDE TRINAMIC TRINAMIC Motion Control tuning

Pages

  • Blog Ethics
  • Newsletter
  • Player Embed
  • Search Videos
  • User Videos
  • Video Category
  • Video Tag

Categories

  • Competition
  • Guest blog
  • Industry News
  • Jobs
  • Myths about Motors
  • Open Source Hardware
  • Products
  • Projects
    • DIY
    • University Projects
  • Research
  • Social
  • Software
  • technology
  • Trade Shows
  • Tutorial
    • Code Snippet
  • Uncategorized

Copyright © 2015 TRINAMIC BlogTheme created by PWT. Powered by WordPress.org

loading Cancel
Post was not sent - check your email addresses!
Email check failed, please try again
Sorry, your blog cannot share posts by email.