loading
Picture of Make an 8-amp Dual Motor Controller For $40
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.




 
Remove these adsRemove these ads by Signing Up

Step 1: FAQ

Picture of FAQ
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:


Step 2: Preparation: Tools

Picture of Preparation: Tools
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.

Step 3: Preparation: Parts List

Picture of Preparation: Parts List
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



Step 4: Make: Caps

Picture of Make: Caps
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.

Step 5: Make: Sockets

Picture of Make: Sockets
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.

Step 6: Make: Terminals

Picture of Make: Terminals
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.

Step 7: Make: Heatsinks

Picture of Make: Heatsinks
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.

Step 8: Make: Socketing

Picture of Make: Socketing
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.

Step 9: Make: Headers

Picture of Make: Headers
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.


Step 10: Using Your New OctoDriver

Picture of Using Your New OctoDriver
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.

Step 11: 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



teknas071 year ago
could it be made as a 12a dual motor driver if yeas wat changes should be made
schel1 year ago

SUH-WEET!!! I'm on it!!! Much Thanks!

wonderin' if this would drive a single 24 VDC scooter motor ? the batteries that run it are 2-12 vdc 10 AH....wuddya think? though I know I dont need the "Octo- " dual aspect of this instructable, I too cant find anything beefy enuff to safely drive that motor. Thanks for ANY input!!

infoseek081 year ago
Great Project!!! I would love to build this project with the PCB you had listed on your website. I signed up to be notified if and when the board will be available. Do you know if we can still purchase it or is it a discontinued item?
MohitJindal2 years ago
I am planning to buy a new DC motor driver board which can run 5amp motor but I don't know how to connect it with Atmega 8A chip. Please see the pdf I attached for Atmega 8A.

Here are the 7 pins in DC motor controller:-

Pin No. Pin Functionality
1 GND Ground
2 IN-1 Logic input for the motor direction.
3 Diagnostic 1
(DG-1) Output pin with logic 1 output in normal operation. Represents side of the internal
H bridge corresponding to IN-1. Pin is pulled to logic low by the motor driver in
case of over temperature or overload due to short circuit.
4 PWM Used to apply Pulse Width Modulation to control motor velocity
5 Diagnostic 2
(DG-2) Output pin with logic 1 output in normal operation. Represents side of the internal
H bridge corresponding to IN-2. Pin is pulled to logic low by the motor driver in
case of over temperature or overload due to short circuit.
6 IN-2 Logic input for the motor direction.
7 CS* Current Sense output to measure the current flowing through the driver
vectorges5 years ago
Questions from a newbie. Would it be possible to increase the amperage  by using something beefier than the TI SN754410? My project is to control a pair of motors (from a scooter chair) to power a small boat.
Gadget Gangster (author)  vectorges5 years ago
At that point, you probably better off using a mosfet powered controller - BJT based H-bridges are going to waste too much heat for your application.  Check Pololu for some nice ones.
guerd875 years ago
Great Project. I have been stuck in the same boat really looking for a motor driver. My next real option for power was to build a H-Bridge circuit from Mosfets, which would give me tons of power but at a high price :(

Im going to run down to Jaycar tomorrow and pick up the parts and get it breadboarded up for my Arduino

Good stuff :)
John
frollard5 years ago
Fantastic project! any thoughts on open-sourcing the complete schematic/board layout files?  Looks complex to diy the circuit board, not not impossible :D

Silly question:  Those traces look a bit small to handle 8amps at 5 volts...I'm guessing that gets proportionally less to suit the max motor voltage (to match the total wattage...)
Gadget Gangster (author)  frollard5 years ago
Thanks! It was a lot of fun putting it together and testing it. I threw some fairly massive softball-sized motors and it worked like a champ.

I'm working on a battery pack for the Propeller Platform, too - so the next step will be to put the OctoDriver in a wheel robot with some UPS batteries, running the Prop logic on a separate battery.

The schematic / layout files are under the MIT license (essentially public domain) - there's a link to download it in PDF or diptrace format on the last step.  Same deal with the Propeller object.

The board uses thicker (taller) traces than usual to support extra current (4 oz instead of 1 or 2) - it will do just fine providing 4 amps continuous to each motor 8 amp peaks are fine, too.
Thanks for the quick reply!  Really neat stuff; I never realised the dip link was another format :) silly me!
Gadget Gangster (author)  frollard5 years ago
No problem!  Diptrace is my favorite program - there's a freeware version that works just fine, too.
milsorgen5 years ago
 Top goal!