H-bridge is frequently used to control DC motors and stepper motors. When controlling a bipolar stepper motor, two full H-bridges are needed. There are many H-bridge ICs (like L298, MPC17529 and SN754410 which is a quad half H-bridge) for just that purpose. But if you are on a budget, you may want to consider building a dual H-bridge yourself.

The following schematic shows a simple dual H-bridge using eight general purpose transistors (2N3904 and 2N3906). Given the maximum Iceo of roughly 200mA, this circuit can be used to drive a small bipolar stepper motor operating between 5V and 12V, such as the stepper motors found in most floppy drives and CD/DVD drives.

A Dual H-bridge
A Dual H-bridge

The four control inputs (1,2,3,4) can be driven with Arduino‘s digital pins (i.e. 2,3,4,5) directly. The following program illustrates how to signal the four leads of a bipolar stepper motor for it to rotate. Of course, there’s already a stepper motor library built for this purpose. The program below is helpful when learning the sequence of the pulses required by bipolar stepper motors.

int coila1 = 2;
int coila2 = 3;
int coilb1 = 4;
int coilb2 = 5;

void setup()
{
  pinMode(coila1, OUTPUT);
  pinMode(coila2, OUTPUT);
  pinMode(coilb1, OUTPUT);
  pinMode(coilb2, OUTPUT);
}

void loop()
{
  digitalWrite(coila1, HIGH);
  digitalWrite(coila2, LOW);
  digitalWrite(coilb1, LOW);
  digitalWrite(coilb2, LOW);
  delay(10);

  digitalWrite(coila1, LOW);
  digitalWrite(coila2, LOW);
  digitalWrite(coilb1, HIGH);
  digitalWrite(coilb2, LOW);
  delay(01);

  digitalWrite(coila1, LOW);
  digitalWrite(coila2, HIGH);
  digitalWrite(coilb1, LOW);
  digitalWrite(coilb2, LOW);
  delay(10);

  digitalWrite(coila1, LOW);
  digitalWrite(coila2, LOW);
  digitalWrite(coilb1, LOW);
  digitalWrite(coilb2, HIGH);
  delay(10);  
}

Here is a picture of an Arduino controlled CD-ROM stepper motor (the one controlling the tray mechanism) powered by the above dual H-bridge (with an added LED for power).

A CD-ROM stepper motor driven by Arduino
A CD-ROM stepper motor driven by Arduino

Update

The PNP transistors in the original schematics had C and E swapped. This has been corrected with the latest schematics update.

Be Sociable, Share!