Not able to run stepper motor at high rpm


I got a stepper motor, driver and power supply with an Arduino UNO.

Datasheets are attached.

Here are the names -

  1. BH57SH76-2804PL-72kgcm (Motor)
  2. bpd-3a3-s manual (Driver)
  3. 42V/ 2A DC Power Supply
  4. Arduino Uno Rev3

Here is the schematic.

#define		pulse		4
#define		direction	5
#define		enable		8
#define		run		9

void setup(){
    pinMode(pulse, OUTPUT); 
    pinMode(direction, OUTPUT);
    pinMode(enable, OUTPUT);
    pinMode(run, OUTPUT);

    digitalWrite(enable, HIGH);
    digitalWrite(run, HIGH);

    digitalWrite(direction, HIGH);


void loop(){
    digitalWrite(pulse, HIGH);
    digitalWrite(pulse, LOW);    

I am not able to run the motor at high rpms. The vendor demonstrated the purchased components before I bought them. The motor ran at 1600 rpm.

  1. I am calculating rpm like this.
    step_delay = ((60.0f/rpm) * 1000) / steps_per_rev;
    This does not seem to work though and the motor doesn’t rotate.

  2. I found by heuristic that if I go below 150 microseconds for delay then motor stops rotating.

Is the schematic correct? and the code?

Note - I can’t see images in img tag. I have hence attached a file too.

Driver bpd-3a3-s manual.pdf (655 KB)

Motor BH57SH76-2804PL-72kgcm.pdf (132 KB)

Your circuit

circuit schematic.jpg

Your motor has a gear box - and doc does not show 1600 rpm, actually shows that at 350rpm you barely get 1Nm torque and it’s written “Max.RPM At Gear Box Shaft - 200 RPM” and “Gear Box Ratio - 4.3:1”… so 1600 seems out of reach especially if you have a load


I assume that the Vc terminal on the power supply is between 12 and 24V?

Have you got the current limit set to match the stepper?

Your stepper is geared, have you factored the gear ratio in the gearbox?

What speed did you want when you got 1600rpm?

Have you looked at the specs of your stepper, 2,8A and you have a 2A supply.

Tom... :slight_smile:

You will be getting at the OUTPUT shaft.

The motor is 200 pulses/rev
The gearbox is 4.3 : 1

So your output shaft is 200 x 4.3 = 860 pulses/rev

OUTPUT RPS= stepfrequency(Hz) / 860 rev/second

OUTPUT RPM = stepfrequency(Hz) x 60 / 860 ---- (1)

stepfrequency = RPM x 860/60 Hz

stepperperiod = 60/(RPM x 860) seconds


You are using 200microS ON-OFF, so the stepperperiod is;

2 x 200 = 400microS

1/.0004 = 2500Hz.

Using equation (1);

OUTPUT RPM = 2500 * 60 / 860 = 174 RPM

I hope that is correct, someone check my algebra.

The vendor demonstrated the purchased components before I bought them. The motor ran at 1600 rpm.

What did he use to control the stepper driver?

Tom.... :slight_smile: