Arduino Motor Control Circuit with Power Transistor and H-Bridge

controlmicrocontrollermotorpowertransistors

I'm new to motor control, and I'm trying to create a circuit to control this motor: http://www.robotshop.com/en/banebots-rs-550-motor-12v-19300rpm.html

The key electrical characteristics for my application is that it uses a 12V supply, and at I need to be able to hit the operating point of 40A to get the resulting torque.

I am planning to use an Arduino microcontroller, and some googling led me to this schematic:

Schematic example

The particular motor they are driving is much lower power, it's 9V/100mA. So my question is if I can modify this circuit to use a larger power transistor for my application, and if so, how I should pick one. For example, I found this: http://www.digikey.ca/product-search/en/discrete-semiconductor-products/fets-single/1376381?k=power%20mosfet%2040%20amp and I don't know how to tell if a particular transistor would be appropriate or not.

After that, my next step is to add bidrectional control, and research tells me I need an H-Bridge. What does the circuit look like with an H-bridge added in? What sort of specifications do I need for the H-bridge? Does it have to handle similar current as the power transistor? For example, I found this: http://www.digikey.ca/product-detail/en/VNH7013XPTR-E/497-13076-1-ND/3455766 and have no idea if it's appropriate, or how to use it; to be honest all I know is that I want an H-bridge.

Some further background on my project: I am looking to build a relatively high powered robot actuator. The application is extremely price sensitive, so I'm looking to build out a circuit as inexpensive as possible as opposed to buying some pre-made motor controller, which I've seen can be >$50.

Best Answer

You have the right idea using a MOSFET, but since your motor can draw up to 85A you need a more powerful FET. Also you must put a high current Schottky diode across the motor (cathode to +12V) to prevent voltage spikes when the motor is switched off, particularly if you are using PWM to control motor speed. As well as suppressing the back-emf caused by inductance in the motor windings, the diode also improves efficiency by recirculating current through the motor during PWM off time.

You should aim for a voltage drop of less than 0.1V at maximum normal operating current, so the FET needs an Rdson of 0.0025 Ohms or less. If a single FET can't do it then you can put several in parallel. Two STP180NS04ZC's in parallel might seem to be enough, but they have another problem - they need 10V on the Gate to turn on, but the Arduino only puts out 5V. You can get around this issue by adding a Gate driver circuit that boosts the PWM signal from 5V to 12V, or you can choose 'Logic Level' FETs that turn on with 5V or less.

One advantage of a Gate driver is that it isolates the Arduino's output port from potentially damaging high voltages and currents (if the FET broke down from Gate to Drain it could put 12V into the Ardiuno, which would almost certainly destroy it). Another advantage is higher drive current, allowing you to put more FETs in parallel without compromising switching speed.

Gate drivers are also essential if you want to make a bridge, because the high-side FETs need a higher voltage gate drive (exceeding the supply voltage if you use all N Channel FETs). You can make a simple gate driver circuit with a few bipolar transistors and resistors, or you can use an IC such as TC4427 or IR2101.

At the high currents you want to switch it is probably better to make a bridge with discrete FETs rather than an IC. High current integrated bridges are usually very expensive, and if one transistor blows you have to replace the whole module.

For a bridge You don't want a schottky diode across the motor (since it would short out in one direction) but in this configuration the FETs' built-in body diodes are normally enough to do the job. You will want to add 200uF or more of low-ESR electrolytic capacitors across the motor supply to suppress voltage ripple, and you must be careful to avoid ground loops between the bridge and Arduino. You might even consider using opto-couplers to provide isolation between them.