# How to make a high current bi-directional motor driver circuit

I have a 14.4V DC drill motor that can draw 10 amps when under full load. I need a circuit that can control the speed and direction of the motors, using an Arduino with PWM. We are using relays instead of a H bridge is because of the high current. My first attempt at a circuit is shown bellow:

Ignore the yellow pen, this was a suggestion by someone else. Pin 1 and pin 2 of the relay are connected to the same digital-out pin on the arduino. The relay module I have has built in optocouplers and pull down resistors for the direction switching.

The FET is a IRL3705N. It has a threshold voltage of min 1V and max 2V. It has a sufficient heat sink attached to it, as shown in the picture, along with the motor and gear box bellow.

Issues with this circuit

The FET acts strangely. In my very first attempt at this circuit RG was 100 ohm and I had another 900 ohm resistor between the optocoupler and the 12V source. This potential divider meant that the gate to ground voltage was a 10th of the 12V, i.e 1.2V, which according to the datasheet should be sufficient to create a conducting path between the source and drain, however it didn't. We removed the 1K resistor so that the gate gets the full 12V and it then worked. Our guess was that this is because the Gate to Source voltage needs to be at least 1V higher than the voltage across the motor, and not just 1V higher than ground. But we are not sure. Is the left half (the gate turn on circuit) of my schematic correct?

The other issue is that we have blown a few of the MOSFETs, and I'm not sure if its because the diode is in the wrong place. When the motor is a generator, the diode is initially reverse biased. This is because the position of the relay switches when driving the motor determines the polarity the generator will be, and this position always means the diode is reverse biased when the motor is a generator. Therefore in the code we have it set so that every time the speed becomes zero, the relays change position. This then allows the energy in the circuit to be returned to ground. The problem is that this does not work when the motor is quickly reduced from full speed to low speed.

Is there a better circuit that will not have these issues? If my circuit is fine, please also leave a comment.

Thanks!

• Vgs (gate voltage) has nothing to do with the voltage across the motor. The threshold voltage is the voltage at which the MOSFET will start conducting at all, and varies between devices in a range from 1V to 2V. The MOSFET is far from being fully on at threshold voltage. Your mosfet will tolerate a Vgs range from -16V to +16V, and will conduct best at +16V, but will do fine at 12V.
– jms
Jun 3, 2015 at 0:13
• Are you saying it is conducting at 1.2V, but only very slightly? If this is the case, is it in saturation at 12V? I.e, even if I increase the gate voltage more, the MOSFET will not conduct more? Jun 3, 2015 at 0:21
• Yes, the MOSFET might conduct slightly at 1,2V, but is guaranteed to do so only at 2V. Look at fig. 3 in the datasheet, it tells the relationship between Vgs and Ids. MOSFETs do not saturate, unlike bipolar transistors, instead they usually conduct best at the maximum permissible voltage. However, you get diminishing returns, and going beyond a Vgs of ~7V does not offer significant gains.
– jms
Jun 3, 2015 at 0:36
• Ah yes I see. I'm getting mixed up between gate-source and drain-source voltage. As long as drain-source voltage is high enough, the MOSFET should be in saturation mode, like shown here i.stack.imgur.com/v2nzn.png, correct? Jun 3, 2015 at 0:41
• Oops, I meant to write "do not saturate like bipolar transistors". Yes, for Ids of 10A even a Vgs of 3V is enough.
– jms
Jun 3, 2015 at 0:47

The FET is a IRL3705N. It has a threshold voltage of min 1V and max 2V.

Threshold voltage is just the point at which the FET starts to turn on. To be fully turned on it needs 5V or more (see datasheet fig 1. and fig 2.). A 14.4V drill motor can easily draw over 30A at startup, so the FET needs to turn on as hard as possible to maintain a low Drain-Source resistance.

If the FET is only partly turned on then it will drop more voltage and heat up. This also applies when switching it on and off. If you are applying PWM then you must ensure that the Gate voltage rises and falls quickly. Each transition causes the FET to heat up a little. As PWM frequency is increased there are more transitions and the FET will get hotter, so the rise and fall times need to be shorter.

Your circuit shows the Gate being driven by an optocoupler switching +12V to a (1k?) resistor. With this driver circuit the Gate voltage should rise reasonably quickly (assuming the optocoupler is being driven hard enough) but will fall quite slowly due to the large amount of charge stored on the Gate. To improve the switching speed you could add a push-pull driver using an NPN and PNP transistor, like this:-

Both transistors are connected in 'Emitter Follower' configuration, so they amplify the current by about 100 times (Hfe of the transistors) and reduce switching time by about the same amount.

For efficiency the PWM frequency should be high enough (>3kHz) that motor inductance smooths out the current, but low enough to not cause too much switching loss. At this frequency the flyback diode needs to be a fast switching type, preferably a high current Schottky type to keep voltage drop down.

When the motor is a generator, the diode is initially reverse biased.

If throttle is reduced quickly then the motor will continue to generate voltage until it stops, but as that voltage is the same polarity it won't hurt the rest of the circuit. If you switch direction while the motor is spinning the diode will become forward biased and 'brake' the motor. After switching direction You should not apply PWM until the motor is stationary, else a very high current will flow through the FET. With the diode providing braking the motor should stop quickly.

• In addition, what kind of diode do you use? The motor has a significant inductance, and every time your transistor switches off during PWM a large voltage spike is generated. Without a working diode the spike can hurt or overheat your mosfet. A non-heatsinked 1A silicon rectifier is likely to quickly overheat and fail open circuit, causing the MOSFET to die too. Test the diode, and if necessary try a faster, lower voltage drop diode, such as a schottky diode.
– jms
Jun 3, 2015 at 1:10
• @jms The diode is a 10 A4 PEC8253. It is the one that was inside the drill I dissembled for parts. Jun 3, 2015 at 1:17
• Thanks for you answer. I will make these changed to the left half of the circuit. "You should not apply PWM until the motor is stationary, else a very high current will flow through the FET". Is there any way I can remove this problem by changing the circuit instead of doing it in software? The PWM signal is generated with a precise control algorithm on the Arduino, which I'd rather not change. Jun 3, 2015 at 1:21
• If the motor is rotating slowly it should not matter if you apply PWM in the reverse direction, but if you run the motor at full speed and then switch direction you will likely break things. The diode should be good enough, but I would check if it still works after doing all this experimentation.
– jms
Jun 3, 2015 at 1:25
• Without a delay the FET has to handle at least twice as much current (too much for the IRL3705) and you need a delay anyway because the relay will take some time to switch over. Your diode is a standard silicon rectifier, not suitable for high speed switching. If the PWM frequency is >100Hz then you should use a high current Schottky diode. Jun 3, 2015 at 1:38