A Simple Dual H-Bridge

Not rated 23,318

Circuit Image

An H-bridge is commonly utilized for controlling DC motors and stepper motors. When managing a bipolar stepper motor, two complete H-bridges are required. Numerous H-bridge integrated circuits (ICs) such as the L298, MPC17529, and SN754410 (a quad half H-bridge) are available for this application. However, for budget-conscious projects, constructing a dual H-bridge using discrete components is a viable option. The schematic provided illustrates a straightforward dual H-bridge design employing eight general-purpose transistors (2N3904 and 2N3906). With a maximum collector-emitter current (Iceo) of approximately 200mA, this circuit is suitable for driving small bipolar stepper motors operating within a voltage range of 5V to 12V, similar to those found in floppy drives and CD/DVD drives. The four control inputs (1, 2, 3, 4) can be directly controlled by the digital pins of an Arduino (specifically pins 2, 3, 4, and 5). The accompanying program demonstrates how to signal the four leads of a bipolar stepper motor to facilitate rotation. A dedicated stepper motor library is available for this purpose, but the provided code serves as a useful reference for understanding the pulse sequence required by bipolar stepper motors. The code initializes the control pins and defines a loop to manage the sequence of digital signals sent to the motor.

The dual H-bridge circuit configuration allows for bidirectional control of the stepper motor, enabling it to rotate in both clockwise and counterclockwise directions. Each transistor in the H-bridge acts as a switch, controlling the current flow to the motor coils. The transistors 2N3904 (NPN) and 2N3906 (PNP) are used to form the H-bridge, where pairs of transistors are activated in sequence to energize the coils of the stepper motor. This sequential activation creates a rotating magnetic field, which causes the motor to step through its phases.

The Arduino program initializes the control pins as outputs and enters a loop that cycles through a predefined sequence of HIGH and LOW signals. The delays between state changes are crucial for ensuring the stepper motor operates smoothly and accurately. Adjusting the delay values can modify the motor's speed, allowing for fine-tuning based on application requirements.

In practical applications, this setup can be employed in various devices where precise motor control is needed, such as in robotics, automated systems, or any project requiring controlled movement. The simplicity of using discrete transistors combined with the accessibility of Arduino programming makes this dual H-bridge design an excellent choice for hobbyists and engineers alike. The inclusion of an LED indicator in the circuit provides visual feedback of the power status, enhancing usability during development and testing phases.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. 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).

🔗 External reference