How to Select Your Next Motor Driver

One of the questions that I get the most is how to select a motor driver (AKA Power Stage) from the ocean of available units out there. I am a big fan of TI’s offerings, or a family of devices I like to call the DRV88xx. Two years ago, selecting a driver from this family was a quite simple endeavor as there were really not that many devices to choose from. These guys, however, have been quite busy and as if trying to emulate your favorite savior’s feat of multiplying bread and fish, what was two devices is now much more than 20! As far as I know they are not stopping any time soon, which makes me believe the task to choose a motor driver will not get any simpler. But to be honest, it does not have to be hard, awkward, complex, annoying, or anything like that. In this article I plan on demystifying some of the aspects of motor drive selection which makes people stick to their 100% antiquated 1950’s tube based solution when any of the DRV88xx devices would make your life way much more easier!

Let me start this article by confidently stating I will not even dare to mention the L293, but only to please implore you to let this piece of Flintstone technology finally rest in peace down at the Smithsonian where it belongs today. Yes, it was a cool device shortly after we stopped painting in caves (circa 1986), but there is no reason to downgrade our brain’s potentials by succumbing to such an old contraption. I could write an entire article detailing why I think this way, but I don’t know… Just the fact that L293 is from 1986 should tell us something. Or do you still play King’s Quest in that PC Junior? OK, giving away too much aging information here…

Oh no! Whenever I want to get a motor moving I look into the DRV88xx family of devices as it offers almost any possible driving capability I can think of. Now, I am thinking here about brushed DC motors and steppers. If you are looking for 3 phase BLDC, AC Induction Motors, or Permanent Magnet Synchronous machines (PMSM), we would need to expand the family down to the DRV8xxx and that would take much more than this article. Hence, I want to focus on the two aforementioned motor topologies.

If you need battery voltage, or higher voltages, there is a device. If you need little current or higher current, there is a device. If you need to regulate current or just let current run wild, there is a device. If you want to control speed on a DC motor by PWMing the ENABLE or the PHASE control inputs, there is a device. Or perhaps you prefer the older style, IN1 and IN2, in which you control each H Bridge’s half independently. Well, guess what? There is a device! If you want full step, integrated microstepping, or your own microstepping. If you want bipolar stepper or unipolar stepper. If you want to drive relays, solenoids, lamps, LED’s, the resistor at the hot end melting ABS plastic on your 3D printer hot end… OK, if I were speaking this I would already be losing my breath, so let me just say as you just guessed it: THERE IS A DEVICE!!!!

What you will not see on the DRV88xx devices is the ability to drive motors with more than 60V. But the great majority of our projects do not operate above this range anyway, so not to worry. The only other feature you will not find on any of the DRV88xx is a protection against over voltage. As it turns out, hardly any device offers this protection, due to the increased cost of adding the inherently large block. On the other hand, you will get protection against under voltage (AKA Under Voltage Lock Out or UVLO), Over Temperature Shutdown (AKA OTS) and Over Current Protection (AKA OCP). Notice none of these protection blocks would be present on your beloved L293. Darn it! I promised I wasn’t going to mention that old fossil…

The DRV88xx family is then basically a large collection of H Bridges with some form of control logic to make our lives easier. I will detail the family’s subdivisions and what devices you may encounter within.

H Bridges:

Basically every single DRV88xx device is an H Bridge of some sort. The exception would be the DRV8803/04/05/06 which are basically quad low side drivers. You would use any of these four devices to drive your unipolar stepper, or any load requiring low side actuation. Every other device will fall under the category of H Bridges. That is DRV8800/01/02/11/12/13/14/18/21/23/24/25/28/29/30/32/33/34/35/37/40/41/42/43/44, etc.

Single H Bridges:

This would be the DRV8800/01/28/29/30/32/37/40/42. What you get is the ability to drive either one brushed DC motor, or half of a bipolar stepper.

Dual H Bridges:

This would be the DRV8802/11/12/13/14/18/24/25/33/34/35/41/43/44. You can now drive either two brushed DC motors or a stepper motor, depending on the device. Some devices will only be able to drive steppers (e.g. DRV8811/18/24/25), whereas other devices can drive either topology.

Quad H Bridges:

This would be the DRV8821/23. With these puppies you can drive either two bipolar stepper motors or four DC motors.

Internal Indexer:

The number of H Bridges tell us how many motor windings we can drive. However, the device’s internal logic will tell us which motor topology we can drive. For example, the DRV8811 has two H Bridges but we cannot use this device to drive two DC motors as it is configured to drive stepper motors by using what is called an internal indexer. What this logic does is coordinate all the functions necessary to regulate current across both stepper motor windings applying a sine/cosine waveform which in turn results in microstepping commutation. Or you can do full step which still uses some sort of coordinate quadrature encoding which simply cannot be used to drive DC motors. The internal indexer, however, makes driving a bipolar stepper motor supremely easy! All you need is a square wave at the STEP input, and the stepper will move with a stepping rate directly proportional to the STEP frequency. A logic level at the DIR input will define direction of rotation. It simply cannot be any simpler. This is the topology most CNC machines out there will use, so it is a straight through connection without needing any kind of interpreter in between.

In this subsection of the family you will find: DRV8811/18/21/24/25/34


My favorite control style is to apply a PWM control signal at the ENABLE input of an H Bridge and then use a logic level at the PHASE input to define direction of rotation. What then happens is that as I increase the PWM duty cycle, the motor moves faster and vice versa. H Bridges with PHASE/ENABLE interface allow for this control methodology and make it really easy to code PID loops or simple RC to PWM interpreters.

Another implementation you can follow is to add the PWM into the PHASE input and then leave the ENABLE set as to allow for current flow. In this case, you are now controlling both direction and speed with a single signal. This makes it even simpler to code PID loops as whether the error is positive or negative, all you need to do is add it to the PWM and VOILA! No need to commutate direction.

H Bridges with PHASE/ENABLE interface would be DRV8800/01/12/13/14/28/29/34/35/40

INx Interface:

Before we were packing lots of logic on our driver chips, we needed to skimp as much as possible on features. Hence adding an interface as simple to use as the PHASE/ENABLE was not customary. Instead, we had to deal with the IN1 and IN2 interface in which each H Bridge half is controlled independently. The reason why this interface style is not my favorite has nothing to do with the increased level of complexity as it is really not that hard to deal with it. What bugs me the most is that now you need two PWM channels and I am always running out of real PWM outputs. Some microcontrollers have recognized this problem and they offer the availability of a single PWM resource on two different GPIO outputs. This represents a saving in resources, although you still need to articulate which outputs holds the PWM output.

Where the INx interface is in the application of matched PWM’s. I am not knowledgeable enough to tell you why this PWM style is better than the other, but I have heard the response is just awesome. One of these days I will experiment with it and relay my findings on this blog, In the meantime, however, do notice some people will not even want to deal with the PHASE / ENABLE topology, which is why they are mostly interested in devices such as the DRV8833/34/35/37/41/42/43, etc.

Serial Interface:

Sometimes it makes sense to control a fairly large number of power stages. If this is the case, there is no doubt the number of microcontroller resources will be greatly halved. That is true unless we can reuse the same resource over and over with all of these power stages. The only way to accomplish this is by the usage of a serial interface such as SPI or I2C. In this case, multiple devices can be interconnected to the same serial communication lines, but only the one with the correct address responds. Some DRV88xx devices are designed around a serial interface implementation. For example, DRV8804/06 are quad low side drivers with an SPI like protocol. It is basically a shift register which can be indefinitely cascaded to add as many outputs as you deem necessary with a single SPI port.

DRV8823, on the other hand, is a quad H Bridge driver with an SPI port. In this case, you could have many devices hooked to the same SPI port, but you would need a Slave Select per device. Still, the CLK, MISO and MOSI signals can be shared.

DRV8830 is a single H Bridge with an I2C interface. In this case, you can hook up to 9 different devices to this I2C port.

Current Regulation:

When we control the current, we are basically controlling the torque. Some people confuse current with motor speed because regulating current is done by applying a PWM, which is the same as controlling the voltage. Now, controlling the voltage does control speed! To make matters more confusing, some drives actually take advantage of this concept with speed being controlled by regulating the current giving the impression that current and speed are one thing. No need to trouble our minds with this now, just rest assured that whether you want to control torque or speed, current can be regulated with a good number of the DRV88xx devices. It is easier for me, however, to mention which devices do not have the current regulation engine. These would be DRV8800/01/03/04/05/06/30/32/35/37/44.

Now, when it comes to current regulation, there are two variants. There is the variable current regulation and the fixed current regulation. The variable current regulation devices will have a VREF input which lets you set the actual current trip point (AKA ITRIP). These devices would be DRV8802/11/12/13/14/21/23/24/25/28/29/34/40/41/42/43.

The fixed current regulation devices contain a current regulation engine which you configure by selecting a SENSE resistor. Once you do this, however, the ITRIP cannot be changed in real time. The only device with this definition would be the DRV8833.

Voltage regulation:

There are two devices which offer the ability to regulate voltage instead of current. The reasoning behind this venue only makes sense if we think of battery based applications. Think of a toy using 4 D batteries, or 6V. When the batteries are fresh, the toy moves fast. However, we all know that batteries will not remain fresh forever, so we will eventually feel depression as we see our toy moving slower and slower. To avoid this problem, you could build the toy to operate at 3V. If we still use a 6V battery pack and regulate the voltage down to 3V, then the toy will operate at rated conditions much longer.

In real life you would obtain this behavior if you were looking at motor speed and applying a PWM signal to regulate the duty cycle accordingly. There are two DRV88xx devices which do this internally resembling a buck converter where the motor is the inductor. These two devices are the DRV8830 and DRV8832.

Battery Voltage:

People would want H Bridges to operate from 0V to 600V but that is in essence impossible with today’s technology. Or at least with the cost effective one. When an H Bridge is designed, a voltage range must be selected as the internal components must be rated accordingly. There is no such thing as a 0V to 600V FET as far as I know. Hence, when dealing with battery voltage, we will need to design the H Bridge with battery voltage in mind.Batteryvoltage is anywhere in between 1.5V to 12V. This range is not that easy to obtain either, but DRV88xx offers good compromise and a fairly large number of H Bridges to work on any voltage in between this range.

For example, DRV8830/32 are only rated from 2.75V to 6.8V, whereas DRV8837 can go from 2V to 11V. If you need 12V, you will need to use any of the non battery voltage devices which start working at 8V or above. The battery voltage based devices are: DRV8830/32/33/34/35/37.

 Brushed DC Motor H Bridges:

In essence, any of the aforementioned H Bridges can be used to drive DC motors. Do note, however, that one important aspect of driving a DC motor is the capability of braking or applying a short to the motor winding as to stop the shaft as soon as possible. Some DRV88xx devices may seem suitable to drive DC motors, but since they were optimized for stepper motor commutation, the brake feature could not make it in. These devices are the DRV8812/13/28/29. Luckily all of them (except DRV8828) have an identical counterpart which do holds the braking feature. For example, DRV8802 and DRV8812 are 99.9% identical. The only difference? DRV8802 has brake, whereas DRV8812 does not. The same applies to DRV8813/14 (14 has brake, whereas 13 does not) and DRV8829/40 (40 has brake whereas 29 does not).

Stepper Motor H Bridges:

This can be extracted from the previous discussion. DRV8812/13/28/29 are H Bridges optimized to drive stepper motors as they do not have the braking capability. Why is this important on a stepper? Because when you go to zero current and the H Bridge is enabled on brake, the shaft would cog (i.e. it would be harder to move as it is on brake). This may seem like a trivial detail, but some users would mind. Hence, the difference was implemented in order to give the option.


Well, I think this blog posting is already long enough. I have tried to offer a decoding ring for which DRV88xx device to use under which particular situation. We could of course go on and on and on… But at least this list gives you a few pointers as to which device you should be looking into as you delve into your next motor application!

PS This table should give a little bit better vision as to all the mambo jambo I just typed.

# H Bridges Min Voltage (V) Max Voltage (V) Max Current Per
Indexer PHASE/ENABLE INx Serial
8800 1 8 40 2.8 NO NO YES NO NO
8801 1 8 40 2.8 NO NO YES NO NO
8802 2 8.2 45 1.6 YES NO YES NO NO
8803 Quad Low Side 8 60 1 NO NO NO YES NO
8804 Quad Low Side 8 60 1 NO NO NO NO YES
8805 Quad Low Side 8 60 1 NO YES NO NO NO
8806 Quad Low Side 8 60 1 NO NO NO NO YES
8811 2 8 40 2.5 YES YES NO NO NO
8812 2 8.2 45 1.6 YES NO YES NO NO
8813 2 8.2 45 2.5 YES NO YES NO NO
8814 2 8.2 45 2.5 YES NO YES NO NO
8818 2 8 36 2.5 YES YES NO NO NO
8821 4 8 32 1.6 YES YES NO NO NO
8823 4 8 32 1.6 YES NO NO NO YES
8824 2 8.2 45 1.6 YES YES NO NO NO
8825 2 8.2 45 2.5 YES YES NO NO NO
8828 1 8.2 45 3 YES NO YES NO NO
8829 1 8.2 45 5 YES NO YES NO NO
8830 1 2.75 6 1 NO NO NO YES YES
8832 1 2.75 6 1 NO NO NO YES NO
8833 2 2.7 10.8 2 NO NO NO YES NO
8834 2 2.5 10.8 1 YES YES YES YES NO
8835 2 2 10.8 1 NO NO YES YES NO
8837 1 2 10.8 1 NO NO NO YES NO
8840 1 8.2 45 5 YES NO YES NO NO
8841 2 8.2 45 2.5 YES NO NO YES NO
8842 1 8.2 45 5 YES NO NO YES NO
8843 2 8.2 45 2.5 YES NO NO YES NO
8844 2 8 60 2.5 NO NO NO YES NO


22 comments for “How to Select Your Next Motor Driver

  1. Jeffrey Mercer
    April 10, 2014 at 4:22 pm


    This was very useful article. It helped me to adopt the DVR8835 for my project.

    Could you tell me more about the one pin system?

    Another implementation you can follow is to add the PWM into the PHASE input and then leave the ENABLE set as to allow for current flow. In this case, you are now controlling both direction and speed with a single signal. This makes it even simpler to code PID loops as whether the error is positive or negative, all you need to do is add it to the PWM and VOILA! No need to commutate direction.

    I get speed control in one direction, but can’t reverse. How do you do this?


    • avayan
      April 10, 2014 at 8:48 pm

      Hi Jeffrey,

      Glad this article helped you! If you want to control both direction and speed with the PHASE input, you do this by changing the PWM Duty Cycle. When the Duty Cycle is 50%, the motor will not move. If you increase/decrease duty cycle (from 50 to 100 or from 50 to 0), then the motor will change the speed. Speed will be faster, the farther away you are from 50% duty cycle. Direction is controlled with whether you are higher than 50% (say forward motion) or lower than 50% (reverse motion). Have you been able to play with changing the duty cycle?

      • Jeffrey
        April 11, 2014 at 2:22 am

        Yes, I got it working with the standard setup: PWM to the Enable Input and Digital to the Phase Input. Works fine.

        Then I tried the one-pin setup: logic voltage to Enable Input and PWM to the Phase Input.

        The results were: motor ran in only one direction (of varying speed) no matter what the PWM signal.

        I thought it might be a control as you describe where the range is divided: 0-127 for reverse, 128 – 255 forward, but no joy.

        I’m using a Teensy 3.1 as my Micro Controller.


  2. Jeffrey
    April 11, 2014 at 2:46 am

    A few other details.

    The motor is a basic 6V DC geared motor. Not sure if it’s brushless or not. I’m not sure how I could tell without an irreversable teardown.

    I’m using the Pololu DRV8835 breakout board. Not sure if any of the added circuitry might stand in the way of one-pin mode.

    I do remember the motor stalling out at 50 (in the range of 0-255) as usual.


    • avayan
      April 11, 2014 at 1:28 pm

      If you are using a DRV8835, the motor is brushed. 8835 can’t drive BLDC, I can tell you that. An easier test is to look at how many wires the motor has. If it is 2 wires, it is most likely brushed. If it has three wires, then it is most likely a BLDC. So no need to tear it down 😉

      A 50 from 255 would not be 50% duty cycle. 127 or 128 from 255 would be 50% duty cycle. Can you repeat the experiment with something like 63, 127 and 191? 127 should be no motion, 63 should be reverse at some speed and 191 should be forward at a similar speed.

      I looked at the Pololu board and I don’t see any circuitry that would compromise any DRV8835 feature.

      Now, are you sure you are using the PHASE/ENABLE mode? if the MODE pin is LO, then you will be on IN/IN mode which will not work as explained before.

      • Jeffrey
        April 11, 2014 at 2:35 pm

        ah yes, joy at last. Works exactly as described.

        One caveat, position 127 while motionless, is like a stall with much humming and distress. I’m thinking that’s a necessary tradeoff for this setup.

        Unless you have a remedy?

        BTW, thanks again

  3. Jim
    February 1, 2016 at 11:31 pm

    First of all thank you very much for all the useful information that you put into sensible order. Ti should pay you 🙂 …

    Funny remarks you make about the L293 … those were the days … still feel where I burned my fingers on some of them, hot as they got on my boards 😉 … got some in a brown case that changed color (permanently) when baking – the black ones just cracked open 😉 😉 …

    Was going to use the DRV8823 to control the steppers of an industrial lens … iris, focus, zoom … but THEN came the big surprise … Are these chips REALLY asking for me to do the stepper phasing by hand ???? In this millenium … Frankly my English is to limited to express my feelings … So I have a little controller sitting on my illumination board and that lens motion controller addon has to talk with it through SPI … and now I have to send loads of SPI messages for each of my 3 steppers where I switch halfbridges forward and backward to make the steppers go somewhere. And I have to count where they are and in order to increase and decrease the speed I need to actually TIME the SPI messages … while that controller is running other real time stuff already …

    Sorry, but NO, sorry !

    I found the L6470 from ST (they also got a little chip family together already) … That thing also speaks SPI but controls only one stepper, not two as the DRV8823 would have done … it is also more expensive – like 7:5 or so … But you can tell that chip to seek beginning or end (either by mechanical switch or increased loop current) and then have it go to a given position or at a given speed … and that thing will do just that … and it also supports all kinds of driving schemes and includes boatloads of protections. I may be wrong but as far as I compared both chips the ST device beats the Ti device in (almost) every spec, with the big exception of having only half the bridges.

    After finding that device I went back to Ti and checked their lineup 3 times in detail because I simply couldn’t believe that they made so many of these driver chips without having a single one that includes the full functionality. If the L293 has to go because Ti included various things then I’m afraid the L6470 does more or less the same to the DV8823. The money you loose (if you daisy-chain 2 L6470 … 14$ instead of 5$) per board will be low compared to the amount of programming you have to do – if the controller has enough resources in the first place … So unless you plan for thousands of units …

    Obviously the solution is to dedicate a small microcontroller to the task … but still … it’s not just money – I would hate to program that stepping sequence by hand. Ti should really include this into these chips (I think).

    PS: Kings Quest 🙂 🙂 … bless virtual machines

    • avayan
      February 2, 2016 at 8:30 am

      Hey, thanks for reading my blog and sharing your experience with these drivers! Yes, I agree: DRV8823 is quite the tooth-ache. I think the premise for this part (as well as pretty much any of the other DRV88xx devices) is to couple it with a micro which can control the H Bridges without having to worry about what’s going on. In other words, this is really not about using a portion of your application’s microcontroller to drive the DRV8823, but it is more of taking a simple microcontroller and using it as the “brains” of the DRV8823. The application’s microcontroller would then drive the DRV8823’s microcontroller.

      Sounds ridiculous, but allow me to remind the public the DRV8823 was designed in slightly more ridiculous times. I do not recall exactly when this was, but I assure you it was along time ago! Things have changed a lot since then…

      You pose an intriguing question, though. Why hasn’t TI developed a stepper driver with intelligence inside? I think the premise here is that TI prefers to sell you a driver chip and a microcontroller. Yes, to some people this may seem like an extra chore, but for large companies developing products this is a shore they need to deal with anyway. Plus, if you buy a driver and a microcontroller, then you can do that driver solution do whatever you want, cost as much as you want and modify it as times go by, if needed. That is something you will have a hard time doing with the L6470. But if the L6470 does everything you need, then of course this flexibility is not required at all. With the dual part solution, however, you still get the options of choosing the intelligence level you want for your application and how much you are willing to pay for that. Typical tradeoffs of most design projects.

      BTW, you may also want to check Trinamic as they are another vendor designing stepper drivers with all sorts of intelligence.

      One last detail I want to share. This is highly conjectural so don’t quote me here. But I think one of the reasons why companies prefer to sell you a stepper driver with no intelligence (motion profiles, accel/decel curves, etc) is because there is way much more applications where you don’t need that. Think about a CNC machine or a 3D printer. The commands come from the CNC controller as STEP/DIR pulse trains.

      The great majority of applications out there operate in a similar fashion. Printers (when that was a market about a decade ago), industrial stuff, robotics, they all prefer to have a single processor sending a bunch of pulses to a couple of stepper drivers because this way you can synchronize them better. Imagine if you had a robot (or any multi axial application) which needs to go through some serious motion profile and you just tell the system to move from position one to position two? How do you synchronize their respective pulses? What if one axis decides to take a little bit longer? A motion profile which was clear of hitting something may end up causing some serious havoc! The bottom line is, it is very hard to obtain a deterministic motion profile if each driver has their own intelligence and they all do their thing independently from the others. I am not saying it is impossible, but it is just considerably harder (not to mention scarier!). It may be OK for a pan/tilt camera mount, but it is my impression the number of applications which can benefit from an intelligent stepper driver pale in comparison to the ones which employ “dumb” stepper drivers.

      With regards to your question on chips with dual drivers, I will treat this in a separate blog posting as I think it is a tremendous topic! Thanks for writing!

      • Jim
        February 2, 2016 at 7:24 pm

        Very detailed answer, thanks a lot ! Just to write it out … I have never had any doubt that there’s a market for dumb driver chips 🙂 …

        That said … Maybe it’s not obvious but you cannot get the same functionality with a controller-driver combination as you have with the fully integrated chips. For instance take the detection of the end position (not by switch but by increased loop current). The fully integrated solution accepts a command like “run with 60 rpm until you hit the wall” … the DRV88xx chips with an external controller probably can’t do that or are they flagging a fault when that happens ? Well at least you’ll need an additional wire for it. There are other such functions which are combinations of low level observation and high level abstraction which the controller-driver combo can not (easily) emulate. Well, fortunately there’s more than one company in that business. Thanks for mentioning Trinamic. Missed them somehow and will check them out :-). Keep up the good work ;-).

        • avayan
          March 1, 2016 at 8:04 am

          Hi Jim,

          If the integrated controller can do it, the driver combo should be able to do it as well. For the most part, the integrated driver is set in stone so that is the one at a disadvantage in terms of flexibility. The combo, on the other hand has the flexibility that you can change the configuration as you deem necessary. You could even change the microcontroller if you wanted! I am not saying it is easy or cheap; all I am saying is it can be done. The integrated driver? Only the chip designer can make modifications and even then it will be VERY expensive (as in prohibitively expensive!)!

          But you offer a good example. How do we know the actuator has hit the wall? On some of the DRV88xx device you still have access to the current. You could set the ITRIP parameter to something high and then let the motor take whatever current it needs. At the same time, your MCU would be reading the SENSE resistor’s current (you may need an external amplifier to increase the voltage output) and then the FW would determine whether the motor is moving or the torque has been exceeded. As you said, you would need an extra line for this feature. You may also need extra components in some cases.

          Is this solution elegant? Maybe; it is quite subjective actually. The application will have the last word. In some cases it is, in some cases it isn’t.

          I personally prefer integrated drivers whenever possible. But there are plenty of cases where an integrated driver is just not the best solution.

          Good thing is there is plenty variety of devices out there, so there is pretty much a solution to every problem out there. Whether it is going to be cost effective or painless, that is a completely different question 😉

      • Jim
        February 9, 2016 at 8:33 am

        In the table you made the number of H-bridges is wrong for at least the 8821 and the 8823 as these chips drive 2 bipolar steppers each having 2 coils so these chips have 4 full H-bridges … Hope I didn’t confuse something here …

        • avayan
          March 1, 2016 at 8:06 am

          Hey, thanks for the catch! You are correct; DRV8821 and DRV8823 do have 4 H Bridges each. Have updated the post so I am legal now 😉

  4. Dustan
    June 8, 2016 at 2:38 pm

    Hi Avayan,

    I have a 2 phase, slotless (zero cogging) brushless dc motor with 48 poles per revolution. I’ll be using an absolute optical encoder for feedback. Any recommendations for places to look for a driver? I’m also considering trying to build my own. Any recommendations or feedback are very appreciated.

    Thanks in advance,


    • avayan
      June 8, 2016 at 3:18 pm

      Hi Dustan,

      There are many places to look, but I guess it depends on your application’s requirements. For example, what is the voltage and current? What is the final footprint you want to obtain? Are you looking for an integrated driver or do you need high current (I.e. external FETs)? In the past three years I have been working with the PAC52xx family of devices so this would be what I would recommend if you are dealing with high current (albeit PAC52xx are meant mostly for 3 phase motors, not bipolar steppers). If it is anything like 1 or 2A, then I would look at integrated drivers. There is TI, ST, Allegro, etc.

      But again, it all depends on what is the current and the voltage, as the drive will heavily depend on those two variables.

      For the absolute shaft encoder you will undoubtedly need a microcontroller. The PAC52xx family of devices is already a microcontroller so I have done some shaft encoder drives with it. The trick, however, is how many bits is the encoder. Some encoders are serialized in which case it is just a matter of having the required port (I2C or SPI), but if it is parallel loading, then you need that much GPIO available.

      I think when it comes to steppers with some intelligence, Trinamic would be a provider to check. I have never used their products but I know most of their drivers revolve around some sort of a core, which may support encoders. It is usually Quadrature Encoding (QEPD), as opposed to absolute position. I would check them out, though!

      • Dustan
        June 9, 2016 at 2:51 pm

        Thanks for the quick reply! The voltage and current required are 28 VDC and 1-1.5 Amps respectively. The challenge I’ve been having is finding a driver that supports 2 phase brushless dc motors (most are 3 phase) and absolute optical encoder feedback (with a resolution of 24 Bits/Turn). Any suggestions?

  5. Reza
    August 30, 2017 at 5:37 am

    Hi Dear Avayan,

    Very excellent text about driver selection for Fan application. For higher power PMSM motors, do you have any suggestion for speed control based on FOC(field oriented control or vector control) or DTC (direct torque control) methods?


    • avayan
      September 2, 2017 at 5:19 am

      Hi Reza,

      For pretty much any 3 phase BLDC or PMSM motor, regardless of the algorithm (BEMF, FOC, hall sensors, etc.) the device I can recommend to you is any of the PAC52xx devices. That is the device I am working with at the moment and it is the ultimate in 3 phase driving. It is in essence a 32 bit ARM Cortex M0 with all of the analog circuitry you can possibly need to drive your three phase motor. All you need to add is your power FETs, and a very small number of passives. These devices work on pretty much any voltage from 5V to 600V (depending on the family device, of course). They are being employed in all sorts of applications ranging from white goods, power tools, drones, pumps, intelligent motors, you name it! And because you choose your Power FETs you can scale the drive to whatever you want. Fantastic little guys!

  6. Robotguy
    April 5, 2018 at 5:04 pm

    Just a note about INx vs, Phase/Enable mode:

    Sending a PWM signal to the enable line in P/E mode cycles between driving in one direction and BRAKING. This would be like trying to control the speed of your car by slamming one foot between the gas pedal and the brake. For INx mode, PWMing cycles between driving in one direction and COASTING. This is much preferable for battery powered systems as it’s more efficient on power (although I have heard it’s not as linear in speed vs. duty cycle).

    • avayan
      April 6, 2018 at 5:36 am

      Hi Robotguy,

      Thanks for taking the time to comment, but I must say your assessment is not taking into consideration that Slow Decay current recirculation is not the same as Braking. Hence, your analogy of alternating between the accelerator and brake pedals is not correct. I will need to do a whole write up on the matter, as it is lengthier than a paragraph, but in summary, slow decay IS NOT the same as braking. The same mechanism that is employed for slow decay can lead to braking, but they reside on different segments of the inductive load driving.

      • Robotguy
        April 16, 2018 at 9:55 am

        I would definitely be interested in seeing a writeup if you get a chance. I’m sure there are parts of this that I don’t understand. I was basing my information on this (from the Slow Decay section in SLVA321):

        “On DC motors, where a Back EMF develops as the motor rotates, slow decay mode offers a short to the winding, which in turn shorts (collapses) the Back EMF. This results in a very quick rotor stop.”

  7. October 10, 2018 at 11:11 pm

    This is fantastic! Thank you very much for taking the time to make such a comprehensive guide, I’ve been looking for a motor driver family like this for a long time.
    TI should give you some kind of commission lol.

    • avayan
      October 15, 2018 at 4:24 am

      Thanks for checking the post, Camilo! Turns out I wrote this article while I was the Applications Engineer for this family of motor drivers. In a way, these devices were my babies, so I felt it was my duty to make them justice and put them out there as much as possible. And since TI was in turn helping me feed my family, I think we are even 😉

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.