Burned Mosfet and popped flyback diode.. help! Big DC motor PWM

Hi,

I'm trying to PWM control a monster DC motor.

Motor (fan) is 30amp continous 12vdc and I'm seeing 100amp on start up.

I was attempting to use a http://www.nxp.com/documents/data_sheet/BUK953R5-60E.pdf mosfet

Vds 60V
Id 120A
Ptot 293W
Rds .003723Ω

Diode was a 1N4004

Schematic less 10k resistor was Didn't seem to want to work with the 10k.

http://bildr.org/blog/wp-content/uploads/2012/03/rfp30n06le-arduino-solenoid-400x218.png

Code

int fan_power = 50;
int fan_commanded;
long time_at_this_power, last_changed_time;
long timer = 60000;

void setup() {
   pinMode(3, OUTPUT);
}

void loop() {
 
  
  fan_commanded = map(fan_power, 0, 100, 0, 255);
  analogWrite(3, fan_commanded);
  
  time_at_this_power = millis()- last_changed_time;
  
  if (time_at_this_power > timer){
   fan_power = fan_power + 25;
   last_changed_time = millis();
   }
   
   if (fan_power > 100){
    fan_power = 50;}
  
}

I'm a novice electrical guy. I'm sure I'm missing something simple. My guess is either PWM freq too high and diode not fast enough or Diode not up to snuff current or voltage wise? This did work A-OK with a 10 amp motor. Would someone please point me in the right direction? Thanks :slight_smile:

When the motor current is turned off, it will generate current of its own of the same amount.
1N4004 is only rated for 1A. Need a bigger diode to shunt that current back into the motor to let it dissipate.

And 100A is too much for a single TO220 package, you'll fuse the bondwires, whatever the
datasheet says.

Think about something like this: http://uk.farnell.com/ixys-semiconductor/ixfn200n10p/mosfet-n-sot-227b/dp/1427322

Is in a rugged enough package. Somewhat more on-resistance alas, but 700W rating and lots of
thermal mass make up for this. Alternatively a pair of TO247 packaged MOSFETs in parallel is
reasonable - soldered onto thick bus-bars preferably.

And at these sorts of power levels a MOSFET driver is a definite requirement - don't imagine a logic level device
driven direct from an Arduino is adequate, get proper 12V powered driver like a MIC4422 to drive the MOSFET
gate.

Add a 15V zener to the gate-source directly on the terminals too to protect the gate from over and reverse
voltage. Layout between MOSFET driver and MOSFET has to be low inductance and short - note this is a
4-terminal MOSFET, one source terminal is used for the load current, one for the gate driver.

Power the driver from a clean filtered 12V, not the main battery, as spikes on the driver supply that will push
right through to the MOSFET gate and pop it, zener or not.

And find at least a 100A peak-rated diode. That will definitely be mounted on the heatsink too, and
be nice and chunky.

Finally remember that difficulty of handling high currents goes up as the square of the current - 100A
is 100 times more tricky than 10A. 100A is well beyond any PCB trace, thick copper wiring
throughout, and ventilate everything, even the wiring can get hot quickly at 30 or 100A.

Thank you guys so much for the help.

last question Would this be handled better with 2-3 of these same mosfets with a good driver in parallel?

I honestly didn't expect this fan to pull so much. We where running another fan before this one but it only pulled 10-12 amps running and would spike maybe 20-30 at start up. The fet was warm but well within specs with just a alligator clipped to the sink (for testing).

You shouldn't be expecting, you should be consulting datasheets and measuring!

If you drive multiple MOSFETs from the same driver chip, add a 10 ohm or so gate resistor
to each MOSFET to damp out any differential oscillation modes.

One thought: are you being careful to ramp up drive PWM on this motor - large motors
can have stall currents that are too large for the motor to handle, even briefly, so normally
have current-sensing driver units to protect against this.

The OP never actually mentioned whether he used a heatsink or not. There are some very substantial TO220 heatsinks available. At 30A, with an RDSon of 3.7 mohms, it should only have dissipated 3.3W (P= I2*R = 302 * 0.0037 = 3.3W). Based on that, I don't think it was the power dissipation that blew the mosfet. I think it was the back EMF . Here's a 30A diode.

Hi..

on start up a dc motor can easily take at least 10x it's running current - and it only takes a millisecond to blow the drive transistor!

get some (much) bigger devices - and follow the rest of the advice above.

regards.

I'm seeing 100amp on start up.

It looks like that's your problem. If you has a "slow start" circuit (inrush current limiting inductor) , you probably would not have blown the mosfet.

Hi..

or a big ntc resistor - can you get them that big?

Don't fancy switching big inductors at that current - the spikes will be energetic and hard to control.

regards Allan

What is the response time of the motor ? (How long does it need to get up to speed)

50 mS ?

Do you know the winding resistance of the motor ?

If the inrush current is 100A with a voltage of 12V, the "shorted" resistance of the motor = 12/100A
(V = I*R =>< R = V/IINRUSH

12V/100A = 0.12 ohms

Assuming a current inrush inductor rated for 30A has a coil resistance of 0.1 ohms, then the inductor and the motor in series would have a resistance of 0.220 ohms.

If the motor startup time (response time) is 50 mS (0.050 S),

the slope of the current on startup with inrush inductor is:

t = L/R => L = t*R = 0.050 S * 0.22 ohms = 0.011 H (11 mH/50A)

I think such an inductor might be expensive.

Have you considered the possibility tgst your code is to blame?

Have you tried just ramping up the duty cycle one count at a time ?

I tested your code and the motor did a sort of slow start but I honestly don't know how gradually you need to ramp up such a large motor.

What is the motor RPM and how long does it take to ramp up to that rpm when given 100% duty cycle command ? ( I suppose that's academic since your mosfet is blown)

And the energy stored in the inductor at switch-off is 1/2 x L x I^2 -> 13.75 joules!

That's big spike. Where will it go?

for comparison they reckon it takes 4mJ at a spark plug in an internal combustion engine to light the mixture.

regards

Allan.

A dc motor turning off is hardly the same as a relay or other device because as you know, when you turn off the motor power the motor does NOT stop instantaneously. The decelerating motor would disipate the energy stored in the inductor because it has such a low resistance. I have not personally tried the proposed circuit but I don't see a problem with such a large rotating mass on turn off.

Hi..

... and a big flywheel shottky diode does the job of dealing with the off spike..... well OK. But I think you'd need some serious snubber components as well.

The OP wants to pwm control the speed... If directly from the arduino with analog.Write this is about a 1kHz
pwm driven by 0..255 giving 0..100% duty cycle - OK?

L di/dt = V.

so if I apply 12v across your 11mH inductor ( taking the motor as a short for now)
current will rise at 1091/amps second . In 1mS ( the pwm period) it will only get to 1.09 amps.

Hence the inductor is far too large by a factor of at least 30 if we want to deal with 30 amp max.
with 1kHz pwm.

Suggest 220uH/ >50 amp rating - a bit more achievable. And ramp up/down the speed gently

regards

Allan.

still think big ntc thermistors might be easier - I know you can get 10 amp ones - siemens, phillips etc make them. Use several in parallel. I've used these to reduce inrush on big toroidal mains transformers.

It's 480 Hz or 960 Hz , depending on which pins you use but this brings us to the question of what iis proper way to ramp up the pwm ? If you send analogWrite(pin, 1); , what is the duty cycle ? (1/255)*100 or 0.392 %.
But why use analogWrite when you can use the PWM Library ? (@16 kHz)

I = V/R
= 12V/0.22 ohms (0.12 + 0.1)

How do you get 1091A/ S ?

Hi Raschemmel...

well ok - use 16kHz if you want, ( this reduces the inductor size by 16X ), but at these frequencies you're going to have worry about full switchmode power techniques - switching losses, even more fussy snubber efficiency/effectivity tradeoffs.. plus a VERY fussy layout which you're unlikely to get right first time. And you can't breadboard crudely - a real layout would be required to have any chance.
And you'd probably be better off with a specialised swmode psu chip from LT, Texas, Maxim etc and programme that from the arduino.

It's not a lashup in an evening job. This is a proper product!

I'd go for my ntc thermistor idea -crude and cheap.

Allan

ps.. just a thought - don't some cars have variable speed big fans for engne cooling ? Could you get a second hand controller cheap from a scrapyard, and drive that somehow?

The motor the OP has is more like a starter motor so a scrap surplus starter would be a good UUT Test Load for a prototype driver.

Sorry R.. missed your question.....

since L di/dt = V, ( standard equation for an inductor. For a capacitor C dv/dt = I .... textbook stuff)

so di/dt = V/L = 12v/0.011H = 1091 A/s .

If you add resistance the current will approach the final dc current such that

I(t) = I ( final ) (1- e^-t/(L/R) . L/R is the time constant , in this case a few tens of ms.

A starter motor can easily pull 500A at switch on.

Not easy to drive . still recommend ntc thermistors and 1kHz pwm with schottky flywheel and suitable snubbers

regards

Allan

I'll send the resultsof simulations in my next post

Please show your work.

1091A/S ?

please show how you obtained this result.

Hi R..

you'lll note in my original sums I said that I presumed the motor was a short. I also assumed the inductor had zero dc resistance. The 1091 A/s then applies.

Even with added resistances , the inital slope will be this.

I enclose PSPICE circuit and resulting waveform, with included resistance. You'll note the risetime is far too slow to use a 1kHz PWM control.

regards.

Allan

ind_transient_1.pdf (14.2 KB)

ind_transient_2.pdf (22.1 KB)

I don't have PSpice so I found this online which only works if you enter the inductance and try increasing values for current until the result = 12.001 V and the value for current that obtains that result is the 1091A you cited.

In all honesty, math was never my strong suit. I learned basic electronics math including algebra but deriviatives is something I studied at DeVry but never mastered and frankly , don't remember.
I did find this, which helps, but frankly I am having a hard time grasping how the math can explain the typical ringing waveform you see across an inductor. I can generate that waveform and observe it on my scope,
(which I have done and taken photos of : see attached) but as yet , I don't understand how the math explains or describes the ringing seen in the photo.

One of the things that I am trying to understand (again) is:

You can see according to this formula that the voltage is directly proportional to the derivative of the current. Since the derivative of a constant is equal to 0, if the current is a direct current (DC), the current across the inductor will be equal to 0. So if the current is a DC current, the current flowing through the capacitor will always be 0. This, again, is because the derivative of a constant is always equal to 0. A constant does not change. So if a user simply enters in a current such as 10A or 20A or 30A, the current will be 0, for all these values. This shows that no voltage can be across an inductor if it is connected to a DC power source. There is only voltage across an inducttor when it is connected to an AC source.

It seems to me the above statement does not take into account the case of turn on and turn off.

Since the OP's motor is a DC motor , Reactance does not apply, and Cos(t) does not apply.

In the attached schematic, how should the diode or diodes be connected ?

@DLoyd,
Sorry about the price tag but this is an old photo taken before I removed the price tag. 8)