Stepper Motor Current Chopper Drive

I generally use stepper motors as actuators in my robots. They are easy to drive, easy to control and very lazy. To make my robots (aka mice :-P) go fast, I thought that making some improvements with the software was good enough. But as it soon turned out, much effort was required in the hardware department.

It didn’t took much time to make me realize that I needed to design a current chopper drive for my steppers. The concept of current chopper drives and how they make the steppers go ‘really’ fast is simple,

Without going into the details of stepper motor’s functionality, first thing that you need to know is that the coils inside a motor are essentially inductors (all coils are inductors…eh!). Now, in order to rotate a stepper motor, you charge one coil, discharge it and charge the coil next to it and keep on following the pattern. The motor shaft has permanent magnets, which simply keep on following the charging/discharging magnetic field. To rotate the shaft quickly, you need to quickly charge and discharge the coils. But as stated earlier, the coils are inductors and it takes a finite amount of time to charge and discharge them. If you try to charge them faster than their time constant, the current will simply not reach its rated value. With less current flowing through the coils, the magnetic field will also be less strong and the result will be a sharp decrease in torque with the increase in RPM, which is a characteristic of stepper motor. Increasing the rotation speed too much often results in very less torque which leads to a stall and the motor going out of sync.

To maintain the torque, one way out is to reduce the time constant. A simple method is to attach a few high watt resistors in series with the motor coils. Time constant is given by L/R, increasing R will obviously reduce the fraction. But you must understand that in this method, your stepper motor driving circuit could double up as a room heater too :-D! They have given a very obvious name to this method, L-R drive. Simple but inefficient.

A more intelligent method can be figured out, if we go into a bit of maths (forgive me for the equation, I pledge this is going to be the only one in this article :-P).

When the voltage is applied to the motor coils, the current rises according to the equation:-

Initially, the current rises at a rate of:-

which decreases as the current approaches final level (I = V/R). OK OK, I understand, but don’t you think that its too small an equation to be even called an equation?? 😀

The initial current rise is given by V/L, now if we can increase this fraction, we can successfully increase the rate of current rise in the coil and hence, the speed of rotation of the motor shaft. Simply put, we need to increase the voltage a few times above than the rated value.

Increasing the voltage would result in a current flow a few times above the rated value which would certainly result in deep fried motor coils! The solution to this could-be calamity is to control the current through the motor coils by using a simple power supply controlled by Pulse Width Modulation (PWM) or by a Current Chopper. During the time the current through the motor winding is increasing, the current chopper system leaves the supply attached with a 100% duty cycle. Once the current is up to its rated value, the chopper system changes the duty cycle to that required to maintain the current. Have a look at the figure given below:-

from Wikipedia

Here, as soon as the current reaches its rated value of 1A, the duty cycle of the power supply is changed in such a way that the average value of current stays at 1Amps.

So, we can finally conclude that the chopper allows us to increase the applied voltage more than its rated value while saving the motor coils from burning up, eventually resulting in a higher operating speed for stepper motors.

How I did it?

When I first read about this method I was thinking of designing the whole circuitry from basic components and found the task to be overly complex. Thankfully though, a little googling reveals that there quite a few integrated solutions out there which make the job damn easy. I used the pretty much defacto L297-L298 combination to get the job done.

The L297 is a sequencer with a PWM chopper circuit built-in while L298 is a high voltage and high current dual full-bridge driver. Both can be used in conjunction with each other to implement a stepper motor current chopper drive. The circuit for the same is pretty much straight forward and is explicitly mentioned in the data sheet and elsewhere on the internet.

from the Datasheet

For some unknown reason, the L2610 was unavailable in the local markets here in New Delhi, so I had to go for the ultra fast diodes (UF4001) which made the whole thing look a bit messy. There are two steppers in a micromouse, that’s why the final board had two such identical circuits.

Here’s how it looked,

This is how the whole micromouse looked, big n bulky n heavy…..

Did it work?

Yes…..and No! 😀

Yes →

You can check out the video of a single stepper motor running(pretty fast!) through the bread board prototype of this circuit by clicking on the link given below:

No →


The general purpose PCB version suffered from some strange problems. Not only the batteries in the pack were discharging unequally, but also the torque of one of the stepper motors was significantly low from the other one. The problem was discussed here at length in the Micromouse Online Forum of which I am a pretty frequent user.

As advised by Peter Harrison and ‘slurp’, the actual fault lay in the battery pack itself. One of the cells were indeed faulty. The cells were connected in series by me to make a battery pack and at that point, I did not know how to make battery packs properly. You can go to this website to check out how to make good battery packs, the key lies in bringing up the charge present in each cell in the pack up to exactly the same level.

The Eagle file of the circuit can be downloaded from the link given below (also included are the Eagle 3D and POV Ray files) :-                                                                                             Click to Download circuit files for the Stepper Motor Current Chopper Drive

Further Improvement…..

As is very visible from the pictures that the circuit was big and bulky. My next improvement to the chopper drive came as a more integrated solution based on Allegro’s A3982 Stepper Motor Driver IC. This time, a proper PCB was fabricated with the controller (ATMega128) and chopper living on the same circuit board.

Creative Commons License
Stepper Motor Current Chopper Drive by Pranjal Chaubey is licensed under a Creative Commons Attribution 3.0 Unported License.

About Pranjal Chaubey

An engineer, who believes in 'Being Wise, b.i.t.Wise!™'
This entry was posted in AVR, Extra-Curricular, Motor Control, Motor Driver, Robotics, Third Year, Undergrad Projects and tagged , , , , , , , , , , , , . Bookmark the permalink.

5 Responses to Stepper Motor Current Chopper Drive

  1. Pingback: Micromouse and Me | Pranjal Chaubey b.i.t.Wise

  2. kiran says:

    is a3982 has internal pwm technique or current chopping?if it is how it will know current in motor reached it’s max reading?can u help me plz……

    • The A3982 has internal PWM generator by which it does the current chopping.
      If you look at the datasheet, there’s a current sense resistor by which the IC senses current flowing in the motor windings.

  3. abd-ulrhman says:

    Thanks u ,,, it was very useful ,
    but I have a small question ,, if my stepper motor was small and it’s current just 250 mA , and I need a little torque , does I need current chopper ???
    thanks in advance

    • That depends on the speed at which you want to drive it, the RPMs that is. Try running them using the simple L293Ds, if you are happy with the speed then its all fine, if not, you need a chopper drive.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s