Overview

Spin two DC motors or step one bi-polar or uni-polar stepper with up to 1.2A per channel using the DRV8833. This motor driver chip is a nice alternative to the TB6612 driver. Like that chip, you get 2 full H-bridges, but this chip is better for low voltage uses (can run from 2.7V up to 10.8V motor power) and has built in current limiting capability. We set it up for 1A current limiting so you don't get more than 2A per chip, but you can also disable the current limiting, or change it to a different limit!

We solder on DRV8833 onto a breakout board for you here, with a polarity protection FET on the motor voltage input. Each breakout chip contains two full H-bridges (four half H-bridges). That means you can drive two DC motors bi-directionally, or one stepper motor. Just make sure they're good for about 1.2 Amp or less of current, since that's the limit of this chip. They do handle a peak of 2A but that's just for a short amount of time, if you turn off the current limiting we set. What we like most about this particular driver is that it comes with built in kick-back diodes internally so you dont have to worry about the inductive kick damaging your project or driver! You also don't have to worry as much about burning out the chip with overdriving since there is current limiting.

There's two digital inputs per H-bridge (one for each half of the bridge), you can PWM one of the inputs to control motor speed. Runs at 2.7V-10.8V logic/motor power. The motor voltage is the same as the logic voltage, but logic voltage from 2.7V or greater will work so no need to worry if you are powering the motors from 9V and using 3.3V logic. For higher voltages, check out the TB6612. For much higher voltages and currents check out the DRV8871!

Comes as one assembled and tested breakout plus a small strip of header. You'll need to do some light soldering to attach the header onto the breakout PCB. Arduino, motors, and power supply not included.

Pinouts

Power Pins

  • Vmotor - This is the voltage for the motors, not for the logic level. Keep this voltage between 2.7V and 10.8V. This power supply will get noisy so if you have a system with analog readings or RF other noise-sensitive parts, you may need to keep the power supplies seperate (or filtered!). The terminal block has a simple polarity protection on the + pin that feeds into VM. The VM pin is not protected, but VMotor is!
  • GND - This is the shared logic and motor ground. All grounds are connected

Signal in Pins

These are all '2.7V or higher logic level' inputs

  • AIN1, AIN2 - these are the two inputs to the Motor A H-bridges. If you want to use speed control, PWM the pin that is normally high. If you dont need PWM control, connect them to logic high/low.
  • BIN1, BIN2 - these are the two inputs to the Motor B H-bridges. If you want to use speed control, PWM the pin that is normally high. If you dont need PWM control, connect them to logic high/low.
  • FLT -This is the Fault output, which will drive low if there's a thermal shutdown or overcurrent. Note it is open drain so connect a pullup resistor to your desired logic voltage!
  • SLP - this is the sleep pin for quickly disabling the driver. By default it is pulled low with an internal 500K resistor, so the chip is not active! Connect to a logic high pin either directly or via a pullup resistor to enable the motor control!

Current Limit Pins

The DRV8833 can perform current limiting for each motor H-bridge. Basically a resistor is connected between Asen and ground to set the Motor A limit (ditto for Bsen and Motor B)

The current limiting rule is: LimitCurrent (amps) = 0.2 V / RSENSE

By default, there are two 1206-sized 0.2Ω resistors on the board for both motors. That means you have a limit of 1 Amp per

If you'd like to raise the limit, you can put a 0.2Ω ohm from Asen to ground, which will then make the RSENSE equal to 0.1Ω (2 parallel 0.2Ω resistors) for a limit of 2A.

You can also totally disable current limiting by soldering closed the two jumpers on the back.

If you want a lower current limit, remove/destroy the 0.2Ω resistor on the board and add your own resistor value between Asen or Bsen and ground.

Motor Out Pins

These are motor power outputs

  • Motor A - these are the two outputs for motor A, controlled by AIN1 and AIN2
  • Motor B - these are the two outputs for motor B, controlled by BIN1 and BIN2

Assembly

The assembly images below show the similar TB6612 instead of the DRV8833 breakout but the procedure is identical!

Prepare the header strip:

Cut the strip to length if necessary. It will be easier to solder if you insert it into a breadboard - long pins down

Add the breakout board:

Place the breakout board over the pins so that the short pins poke through the breakout pads

And Solder!

Be sure to solder all pins for reliable electrical contact.

(For tips on soldering, be sure to check out our Guide to Excellent Soldering).

Stepper Motor Usage

In this example we'll wire up and use a bi-polar stepper motor with recommended 9V motor voltage, and 200 steps per rotation.

Wiring

We'll wire it to a Metro, but you can use any microcontroller you like!

Connect:

  • Vmotor to 9V (red wire)
  • GND to ground
  • SLP to > 2.7V power pin
  • AIN2 to Digital 4
  • AIN1 to Digital 5
  • BIN1 to Digital 6
  • BIN2 to Digital 7

Then hook one stepper motor coil to Motor A (red and yellow) and the second coil to Motor B (green and gray/brown). If you have another motor, you'll need to experiment a little to figure out which wires are which coil. Check any documentation you have! You can use a multimeter to measure between wires, the ones with a small resistance between them are a pair to a coil, for example. If the motor is vibrating but not spinning, check all wires are connected and try flipping around a pair or rechecking the wire pairs.

If you have a unipolar motor, there will be a 5th or 6th wire that is the 'common' wire. Connect these wires to the GND pins in between the Motor A and B outputs on the breakout.

Software

We'll use the built-in Arduino Stepper library, but you can manually toggle the AIN1/AIN2/BIN1/BIN2 pins with your own favorite microcontroller setup

Download: file
#include <Stepper.h>

// change this to the number of steps on your motor
#define STEPS 200

// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 4, 5, 6, 7);


void setup()
{
  Serial.begin(9600);
  Serial.println("Stepper test!");
  // set the speed of the motor to 30 RPMs
  stepper.setSpeed(60);
}

void loop()
{
  Serial.println("Forward");
  stepper.step(STEPS);
  Serial.println("Backward");
  stepper.step(-STEPS);
}

Basically after you make the Stepper object with the 4 control pins, you can set the rotational speed (in RPM) with setSpeed(rpm) and then step forward or backwards with .step(steps) where steps is positive for 'forward' and negative for 'backward'

For more details, check out the Stepper library

Downloads

Files

This motor driver is a fairly simple breakout of the DRV8833 motor chip, so do check out the datasheet for the DRV8833 for any details you need about pin voltage limits, capacitance, etc!

Schematic

Fabrication print

Dimensions in inches

This guide was first published on Oct 26, 2016. It was last updated on Oct 26, 2016.