The drive circuits for Unipolar stepper motors are usually very simple. In its simplest form, a transistor or MOSFET is used to drive each section of the windings. With this design, the control signal must be supplied programmatically to the four windings of the unipolar stepper motor via an MCU. The programming can become quite complex when the stepping mode (e.g. half stepping/full stepping), stepping direction and rotation speed all need to be controlled.

The programming burden can be shifted to a dedicated stepper motor controller such as L297 and thus free up the MCU for other tasks.

The following circuit diagram shows one such design:

Unipolar Motor Controller Using L297 and ULN2003
Unipolar Motor Controller Using L297 and ULN2003

Basically, the L297 is used to generate the stepping signals needed by the stepper motor. The SENSE, CONTROL, INH and VRef pins can be used in tandem to provide finer PWM current control and faster decay. But in all but the most strict applications, these features are rarely needed. So I omitted these features by tying CONTROL and SENSE pins to the ground and set VRef to Vcc. The INH pins are left unused. This way the complexity of the circuit is greatly reduced. If you intend to use these pins, please refer to the following application note (AN470).

To test this circuit, I used an Arduino MCU board and used digital pin 10 to generate the required clock signal. For simplicity, the step mode pin and the direction pin are grounded (full step, counter clockwise) as seen in the picture below, but these two pins can also be controlled programmatically.

Unipolar Motor Driver
Unipolar Motor Driver

The actual program is very simple, all we needed to do is to provide a clock signal. The following code used the bit-banging method to generate the clock signal at roughly 250 Hz.

int PIN_CLK = 10;

void setup()
{
  pinMode(PIN_CLK, OUTPUT);
  digitalWrite(PIN_CLK, LOW);
}

void loop()
{
  digitalWrite(PIN_CLK, HIGH);
  delay(2);
  digitalWrite(PIN_CLK, LOW);
  delay(2);
}
Be Sociable, Share!