Make an 8-amp Dual Motor Controller for $40

by Gadget Gangster in Circuits > Microcontrollers

26946 Views, 59 Favorites, 0 Comments

Make an 8-amp Dual Motor Controller for $40

4306347372_62abcfecae.jpg
The OctoDriver is an open-source 8-amp Motor controller. Connect it to your Arduino, Propeller, or PICAxe to control more powerful motors!

I've been working on a dogie door for a while - while the software is straightforward, finding a suitable motor controller has been more difficult.

The problem is that a lot of the inexpensive motor control shields are just too meager to control anything but the most dinky motors.  ladyada's Arduino shield only does 600mA continuous, 1.1A peak . Pololu makes beefier motor controllers, the DMC 01 can do 13 amps, but it's pretty expensive (about $100). 

So I've been on the lookout for a high power, inexpensive, and easy to control circuit - I was flipping through starlino's website and I spotted exactly what I was looking for. His idea is pretty simple: why not combine 2 motor controller IC's to split the load?

He calls the circuit the 'OctoDriver', it combines 2 h-bridges to provide 8 amps peak, 4 amps continuous. I asked him if I could put it on a PCB, and he thought it was a great idea. I couldn't think of a better name, so I call my version "The OctoDriver".

I also put it on a Propeller Platform compatible footprint, so it can be used on a breadboard, perfboard or with a Propeller microcontroller. The design is available under the MIT license, so anyone is free to hack away.

The OctoDriver is also available as a kit from Gadget Gangster.


Flip to the next step and I'll give you some more technical details on the OctoDriver and show you how to use it.




FAQ

servo.jpg
What are the Specs?
The OctoDriver is an 8 amp motor controller, capable of controlling 2 motors @ 8 amps. It uses four TI SN754410 (datasheet) Quad Half-H drivers, 2 per motor. The SN754410 is 'juiced-up' version of the classic L293D. Here are the key specs of the OctoDriver

OctoDriver Specs  
Peak Current: 8A
Continuous Current: 4A
Motor Voltage: 4.5V - 36V
Logic Voltage: 5 Vdd, inputs will accept 2.0v - 5.5v
Operating Temp:  -40c to 85c (-40f to 176f)
Motor Support:
2 Bi-directional DC motors / linear actuators, or 1 stepper
Other Features: ESD Protection, Thermal Shutdown, No 'Power Up Glitch'
Connectivity: .1" pin spacing for Breadboard / Protoboard. 2 OctoDrivers can be stacked on a single Propeller Platform, as well.

I didn't include servo headers because it's super easy to connect a servo to a Prototyper module and controlling servos with a Propeller is easy, too.

Do I really need that much power?
When you check out the specs on a standard servo, it's often something like 150mA. So what's the point of a 4+ amp motor driver?

Here's the deal - that 'current-draw' number is at NO LOAD. In other words, if you actually wanted to move something with the motor, your current-draw will be higher.  How much higher depends on your load, but the highest draw would be if the motor were stalled (Stall Current).

Take this typical servo. With a 6V power source, no-load draw is a measly 220mA... until you actually make it move something! Maxing it out brings you to 1.3 amps of current draw. And that's a ONE standard servo.

Moving anything but the smallest motor requires real power, and 800mA bridge doesn't cut it.

Will the OctoDriver work with Arduino / PICAxe / Workbench 1.3?
Yes. Using it is super-simple. At the end of this howto, I'll show you how it's done.

Is it hard to build?
No - it's really easy to put together. If this is your first time soldering, it will probably take 15 minutes. If you're a seasoned pro, it should take longer for your soldering iron to warm up than assemble.

Here's a video demo of Starlino's OctoDriver in action:


Preparation: Tools

tools.jpg
This is a great project to learn how to solder. There are a ton of great instructables on how to solder, I also did a little demo video here.

Tools
You'll need a few tools to assemble the project;

1 - Soldering Iron and solder. Leaded solder is easier to work with, and a 15-40 watt iron is just fine. A conical or chisel tip works well.

2 - Dikes. Diagonal cutters are used to trim the excess leads from components after soldering them down. 

If this is your first electronics project, I suggest you start with an inexpensive soldering iron. Why? Because you'll be able to get a feel for doing electronics projects without spending a lot of money. If you enjoy yourself, then you can upgrade to better equipment and give your 1st iron to someone else who is just starting out. I offer an Elenco kit that includes a 25 Watt iron, stand, wick, and a solder sucker for $25 (pictured below). You can also get a pretty nice Weller iron on Amazon that includes extra tips and solder (but no wick or solder sucker) for $15.

Preparation: Parts List

4305602119_f04c451976.jpg
Flip on your soldering iron and let it warm up! While it's warming up, check to make sure you have the following parts. If you've ordered a kit, double check to make sure your package has all the parts listed. If there's anything missing, just email us at info@gadgetgangster.com;

2 position Screw Down Terminals
Mouser Part 538-39880-0302
Qty: 3
A lot of folks use cheaper terminal blocks (like the square blue ones).  But I prefer to use the higher quality Molex brand blocks - they have a higher rating and the screw can't fall out.

16 pin DIP socket
Digikey Part 2-641262-1-ND
Qty: 4

14-16 pin DIP heatsink
Jameco Part 1115900
Qty: 4
I didn't see these at Digi-key or Mouser, but Jameco is a great vendor & they're in the Bay Area.

40 pin header strip
Qty: 1

33pF Ceramic Capacitor

Mouser Part 140-50N5-330J-TB-RC
Qty: 2

47uF Electrolytic Capacitor
Mouser Part 140-L25V47-RC
Qty: 2

OctoDriver PCB
Source: Gadget Gangster or download the design & make your own (diptrace format)

SN754410 Quadruple Half-H Driver
Mouser Part 595-SN754410NE
Qty: 4



Make: Caps

4305602407_166c91c19e.jpg
4305602605_a933c2d6c7.jpg
Add the Electrolytic Caps (47uF) at C3 and C4. The caps are polarized - the longer lead on the cap goes through the hole closer to the '+' marked on the pcb. The stripe on the body fo the cap goes on the opposite side from the '+'.

Add the ceramic caps at C1 and C2. They aren't polarized, so it doesnt' matter which way it goes.

Make: Sockets

4306346188_6a668e4201.jpg
Add the sockets for the IC's. Note the notch on the socket - it should line up with the notch printed on the circuit board.

Make: Terminals

4305602897_04c4d92bbe.jpg
4305602265_810371d671.jpg
4305602233_87cbc25aa8.jpg
4305602193_7673e816b9.jpg
There are 3 screw-down terminals, on one side of each is a notch, and on the other is a groove. Slide them together so they form a contiguous strip, insert the strip into the PCB and solder them in.

Make: Heatsinks

4305602961_b9db97c024.jpg
4306346388_842dfe24d5.jpg
Be sure to note where the notch (the indent) on the IC is, and slide the heatsinks on them. The heatsink has 2 'flaps', the first flap goes under the IC and the second flap slides over the PCB.

Make: Socketing

4305603099_83c4e25fd4.jpg
Now, put the IC's in their sockets. Make sure the notch on the IC lines up with the notch on the PCB and the notch on the socket.

Normally, putting an IC in a socket is very easy - but this takes a little more effort because the heatsinks are on top of the chips. Just take your time and wiggle them in.

Make: Headers

4306346688_846fa67d0f.jpg
4306346972_e237bb609a.jpg
Let's add the pin headers so we can connect it to the Propeller Platform / protoboard / breadboard.

The easiest way to do that is to take the pin headers and insert them into a breadboard / Propeller Platform, then drop the OctoDriver PCB on top. This will ensure the pin headers are lined up and straight. But before you solder the pin headers to the OctoDriver, it's time to make a decision:

If you want the Vin on the Propeller Platform to also power the motors: keep the 1st pin header on (it's the first pin on the 4 pin block, marked 'Vin') on

If you want to use a separate power supply: omit the 1st pin (Vin) on both sides of the OctoDriver.

You can also keep the Vin pin on for now and clip it off later with your dikes.

This decision depends on the power supply you're planning on using. If it's a really meaty power supply that will maintain voltage when switching motors, you might want to keep the Vin pin. Most folks will probably want to use separate power supplies, however.

Also, if your motor voltage is greater than 12V, you'll definitely want separate power supplies - the Propeller Platform is happiest with power sources of 12V or less.


Using Your New OctoDriver

4305603725_2c82e2950d.jpg
Using the OctoDriver is simple (I promise!), here's how to use it for each microcontroller, some usage notes, and a generic truth table.

Propeller

Instead of re-inventing the wheel, just grab this Motor Driver from the Obex. Here's a complete program to show you use it:

CON

_clkmode = xtal1 + pll16x
_xinfreq = 5_000_000

OBJ
  pwm1  :  "PWMMotorDriver"

PUB Main | i
pwm1.start(28,27,26,40000) ' or for motor 1, (0,1,2,40000)
repeat
repeat i from -100 to 100
pwm1.SetDuty(duty) ' duty = -100 for %100 left, and 100 for %100 right. 0 for brake
waitcnt (clkfreq *2 + cnt)

And that's it!  Very simple to use.  With the Propeller Platform, you can stack 1 octodriver on top and another under by flipping it over, too.

Arduino

The OctoDriver uses standard .1" spacing, so it won't fit directly on an Arduino, but you can connect it through a protoboard / breadboard.  Once you've got it connected, here's how you use it:

 const int EN = ;     // whatever you've connect each to
 const int ina = ;      
 const int inb = ;
void setup() {
   // make each pin an output
   pinMode(EN, OUTPUT);      
   pinMode(ina, OUTPUT);     
   pinMode(inb, OUTPUT);     
 }
 void loop(){
   // COAST
     digitalWrite(EN, LOW);  // when EN is low, ina and inb states don't matter     
     digitalWrite(ina, LOW);  
     digitalWrite(inb, LOW);  
   // BRAKE!!!
     digitalWrite(EN, HIGH);  // ina and inb either both high or both low     
     digitalWrite(ina, LOW);  
     digitalWrite(inb, LOW);  
   // Clockwise
     digitalWrite(EN, HIGH);  
     digitalWrite(ina, HIGH);  
     digitalWrite(inb, LOW);  
   // Counter-clockwise
     digitalWrite(EN, HIGH);  
     digitalWrite(ina, LOW);  
     digitalWrite(inb, HIGH);  
 
 }

Other or No Microcontroller

Using the OctoDriver with any other microcontroller (or even just some switches) is simple, refer to the truth table below:

Motor 1
To Make the Motor...
P28 (EN) P27 (InA) P26 (InB)
 Brake High High High
 Go Clockwise High High Low
 Go Counter-Clockwise High Low High
 Coast Low irrelevant irrelevant

Motor 2
To Make the Motor...
P0 (EN) P1 (InA) P2 (InB)
 Brake High High High
 Go Clockwise High High Low
 Go Counter-Clockwise High Low High
 Coast Low irrelevant irrelevant

Usage Notes

Just a few things to keep in mind when using the OctoDriver, and a few potential upgrades,
1 - You might want to use an inline fuse to protect the power supply. I haven't had any problems with this, but it's up to you.

2 - The SN754410 has built-in clamping diodes, and they've worked just great for me, but some people will suggest adding a clamping diode.

3 - I used 2x 47uF Electrolytic Caps on the OctoDriver for a little bit of power smoothing. Depending on your needs, you might want to increase the value of those.

4 - The OctoDriver will work without the IC heatsinks, but output is reduced to 1A per chip ( 2A per motor).

4 - Make sure not to hurt yourself! Of course, you should avoid getting pinched / whacked by powerful motors, but also pay attention to electrical safety. There's a decent little guide here.

Downloads

I hope you enjoy the OctoDriver! Let me know what you think by commenting on this instructable or sending me an email at nick@gadgetgangster.com.

Schematic (.png)

Layout (.dip) (.png)

Propeller PWM Motor Control Library


Hi-res photos

Buy the kit from Gadget Gangster;
http://www.gadgetgangster.com/255