Problems with iTead dual stepper motor driver shield

(1/2) > >>

Hi folks,

I recently bought the iTead dual stepper motor driver shield. Unfortunately, I am experiencing some unexpected behaviour, to which you might know some reason or solution:

Setup 1. When having one stepper connected (Y) and powering the Arduino Uno SMD only by USB, the stepper works as expected, just, that the Arduino gets pretty hot near the power transistor at the external power supply plug (which is not connected).

Setup 2. Adding the external power supply (12V, 1500mA max) to the iTead shield and restarting the Arduino, the stepper starts losing steps. The heat-problem persists. Also, the both chips on the shield get pretty warm (normal?)

Setup 3. When adding the second stepper (not using it) using just the USB as power supply, the Y-stepper loses steps. The heat-problems persist.

Setup 4. When adding power supply to the shield in setup 3., all problems of 3. persist.

Below, you can find my program for testing. I left all the switches and jumpers on the iTead shield unchanged (factory settings: 5V logic, Vref: both middle, all step size jumpers to high).

Note: In my setup, the iTead shield is not short-cut by the USB-connector of the Arduino.

Hope, I'm not doing anything wrong!

Thanks for your help, Stefan.


// ******************************************************
// Micro Robotics
// Test Procedure to test Y channel
// written by : Frikkie du Toit
// For Stepper Shield ver 1.0
//  To test Y Channel         To test X Channel
//  STEP_PIN 6                STEP_PIN 2
//  DIR_PIN 7                 DIR_PIN 3
//  YMS1 8                    YMS1 4
//  YMS2 9                    YMS2 5
// ******************************************************

#define STEP_PIN 6         
#define DIR_PIN 7         
#define YMS1 8             
#define YMS2 9             

void step_mode(byte yms1, byte yms2)
  // Set the pins to select the step mode
  digitalWrite(YMS1, yms1); // Set pin YMS1 to the parameter given
  digitalWrite(YMS2, yms2); // Set pin YMS2 to the parameter given

void step(int steps, float speed)
  // Take the amount of steps specified
  // Negative value for opposite direction
  byte dir;
  float micro_sec_delay;
  if (steps > 0) // If steps are positive
    dir = HIGH; // Set direction
  else // If steps are negative
   dir = LOW; // Set direction

  steps = abs(steps); // Set steps to absolute value
  digitalWrite(DIR_PIN, dir); // Set the direction pin to dir

  micro_sec_delay = 1 / (speed / 100) * 70; // Calculate delay between  step pin toggles

  for (int i = 0; i < steps; i++)
    // Takes all the steps in the specified direction
    digitalWrite(STEP_PIN, HIGH);

    digitalWrite(STEP_PIN, LOW);

void setup()
  // Set all the pin modes
  pinMode(STEP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(YMS1, OUTPUT);
  pinMode(YMS2, OUTPUT);

void loop()
  step_mode(LOW, HIGH); // Set step mode to Quarter Step mode
  step(400, 25);
  step(200, 25);
  step(200, 25);
  step(200, 25);
  step(-800, 10);

Ok, since nobody seems to know my problem: Is there an established alternative to driving two steppers at the same time using a shield? Which one?

We need to know which motors, which shield - if you provide links to the data on these people can have a look at your problem and provide answers.  Without that information there is nothing but guesses.

Sorry about the missing information!

It's this shield:
iTead dual stepper motor driver shield with two A3976-chips

And two of these motors:
2 phase bipolar hybrid stepper
Coil-Current: 0,8 to 1,5 A
42 x 42 mm (NEMA 17)

I translated the post to german also:,111619.msg838488.html#msg838488

There's no real information on that motor alas - 0.8 to 1.5A means almost nothing.   Steppers usually come with a maximum current rating per winding, an a winding voltage and/or resistance, winding inductance and step size.

Certainly the A3976 cannot provide anything like 0.8A though.  Perhaps 0.35A without a large heatsink, upto 0.5A with.

But then I noticed you made a mistake - the chip on that shield is not the A3976 but the A3967, an entirely different beast and designed specifically for bipolar motors (which is good).

Following the link to a catalog, it seems the motor _might_ be one of the QSH4218 series, as described in this manual

These are bipolar motors with winding resistance about 5 ohms rated at 1A.  At 0.75A they will work, but the torque will be lower than specified and there will be a greater tendancy to skip under load.

However the A3967 is limited to 0.75A maximum (not really enough).  To drive two motors takes 4 H-bridges, which means a total of upto 3A at top speed (but less at lower speeds due to the buck-conversion of the driver chips - 1.5A is perhaps the minimum for low speed operation at 12V, your external supply might be struggling - measure the current it is supplying in order to see if this is the case?

You will need to set the current-limit pots to maximum for the shield to give you the 0.75A, it will run very hot (no heatsink - fan cooling would be very useful).  You should set the jumpers for microstepping as this reduces the risk of misstepping (from vibration).

I suggest you first work with one motor.  If that can be got to work well and then the second doesn't, the power supply is inadequate.


[0] Message Index

[#] Next page