MOSFET Frying

Well, more simmering than frying, but running much hotter than expected. Using NDP6060L logic-level N-MOSFETs to drive several 10W LEDs from Arduino PWM outputs. Rds is 25 mOhms when full-on, so the FETs don't get very hot. When driven with PWM however they get pretty hot. Circuit is basically Arduino driving the Gate through a 150Ohm resistor with a 10K and Zener from the Gate to grounded Source. From the Drain is a 1.5 Ohm 3W resistor to the LED cathode, and LED anode to 12V. THe LEDs are spec'd at about 10 - 11V forward voltage and 1A current.

DC operation (full-on) have voltages and currents pretty much as expected. PWM operation however is puzzling. THe waveform at the Drain is fairly sharp, although there is a little rounding at the top rising edge. THe MOSFETs get really hot but I don't have the space to heat sink them very easily, and don't think I should need to.

I realize clean drive signals at sufficient voltage are important to keep the MOSFETs saturated and appears I have both, but still more heating than desired. What am I missing?

but still more heating than desired. What am I missing?

Your just missing the normal transition losses the mosfet suffers as it spends time moving from full on to full off at the PWM switching frequency. The higher the switching frequency the higher the heat dissapation from these losses.

What can you do?

  1. Live with it, if the MOSFETS don't burn up in an hour of continious operation then they probably can handle the heat dissapation.

  2. Add a heatsink (but you said you have no room)

  3. Try to speed up the transition period by driving the gate with purpose designed 'mosfet gate driver' chip. These chips can sink and source several amps of current to quickly charge and discharge the gate capacitance of the mosfet. This is standard method of driving high power mosfets in professional equipment. The arduino 40ma output pins are pretty husky compared to most logic drivers but they don't compare to a true mosfet gate driver chip. But recall your driving the gate through a series 150 ohm resistor to protect the output pin, but at the same time slowing the switching speed due to this added time constant of that R and the mosfets gate C. These can be had in small 8 pin dip packages.

  4. Find a PWM library code that can operate at a much slower switching frequency. For visual dimming of LEDs you only need 50hz or so to avoid seeing flicker instead of the 500 or 1000 hz the arduino PWM operates at.

  5. Operate two mosfets wired in parallel, this spreads the heat dissipation across two devices.

  6. Operate the whole assembly in a fish aquarium filled with mineral oil

Lefty

Thanks Lefty!

  1. I may just live with it... while designing a better circuit to use when this one dies.

  2. I could fit in a heatsink, it's just involves some detailed work and careful measuring. I'd like to conclude there's no magic bullet I'm missing (or maybe a bunch of little bullets) before taking that step.

  3. May consider a gate driver chip or perhaps a line driver (I'm outa' space there too!) as final implementation is driving the Arduino's PWM signals through 25' of CAT5 cable. Hate to think what the raw signal will look like at the end of the line!

  4. Think I'll see much of a difference at 50Hz. vs. 500Hz? That'll mess up all my timers.

  5. Definitely no room for parallel MOSFETs. I may re-design the PCB to use CAT4101 LED Drivers that I can properly heat sink.

  6. Don't think the fish would survive for very long in hot mineral oil!

Another option is to use a MOSFET with less capacitance. Farnell doesn't let me search by capacitance and I don't have encyclopedic knowledge of available MOSFETs but I know you can do better than the NDP6060L, eg. IRLU8721 (though I wouldn't know where to get one of those).

The problem is that gate threshold voltage is inversely proportional to capacitance so you need to sit for a day looking at datasheets to find one the MOSFET that best matches your needs for voltage/current/capacitance. I'm sure there's a perfect MOSFET out there waiting for you. :slight_smile:

PS: I think there's also a tiny bit of wiggle room in your base resistor. 130ohms is still within Arduino spec. and will charge 14% faster...worth having!

When driven with PWM however they get pretty hot.

Due to switching losses: the mosfet is turned on/off too frequently, and/or not fast enough (limited drive capabilities).

You don't need to drive an led at 10khz, first of all. Secondly, for this type of mosfet, you don't want to put a gate resistor of 150ohm: less 11ohm maybe. That means a dedicated gate driver.

So your choices are either to slow the pwm frequency (down to 100hz for example), or to use a driver on the gate.

dhenry:
Due to switching losses: the mosfet is turned on/off too frequently, and/or not fast enough (limited drive capabilities).

You don't need to drive an led at 10khz

Good idea. The fix might be as simple as changing the prescalar of the Arduino timers:

TCCR0B = (TCCR0B &0xf8) + 5; // Slow down PWM on pins 5+6
TCCR1B = (TCCR1B &0xf8) + 5; // Slow down PWM on pins 9+10
TCCR2B = (TCCR2B &0xf8) + 7; // Slow down PWM on pins 3+11

nb. Changing pins 5+6 will also affect time functions like "millis()"

dhenry:
Secondly, for this type of mosfet, you don't want to put a gate resistor of 150ohm: less 11ohm maybe.

11 ohms will allow 454mA to pass at 5V - ten times more than an Arduino pin is rated for.

Arduino driving the Gate through a 150Ohm resistor

That is your problem. A 150R resistor will cut that down.
Do not use an 11R resistor, dhenry delights in giving wrong or misleading information, sorry about that but there is little we can do to educate him.

Grumpy_Mike:

Arduino driving the Gate through a 150Ohm resistor

That is your problem. A 150R resistor will cut that down.

What's the difference between 150 Ohm and 150R?

  1. Get rid of the zener on the mosfet gate, you don't need it and it will slow down the switching.

  2. Take the 10K resistor off the gate and connect it to the Arduino pin instead. As you have it now, it and the 150 ohm resistor form a voltage divider that slightly reduces the gate drive voltage.

  3. Reduce the 150 ohm gate resistor to 100 ohms.

  4. If the mosfets still get too hot, use a lower PWM frequency. But I don't think it should be necessary at the default PWM frequency of 490Hz.

  5. Post a photo of your setup so we can see how the grounds are wired. Inappropriate ground wiring can increase switching times.

  6. As you evidently have an oscilloscope, look at the signal on the gate, and post a photo of it if you can.

What's the difference between 150 Ohm and 150R?

150 Ohm is what babes say, 150R is what professionals say. The resistor value of course is the same.

  1. I wanted the zener for ESD protection of the MOSFET gate. Suppose I can look at with and without.
  2. Doesn't the gate need the 10K to help pull it back to GND when the Arduino output shuts off?
  3. 100 Ohms would do, just that I thought that might help suck too much current from the digital output.
  4. 490 Hz should be fine.
    5., 6. I'll try to post a photo...

"That is your problem. A 150R resistor will cut that down."
What does "cut that down" mean... lower the value of remove it completely? If 150 isn't good and 11 isn't either, should the Arduino output tie directly to the gate? I though that in conjunction with the gate capacitance will cause a brief bunch of (over)current to be sucked from the output.

rickso234:

  1. I wanted the zener for ESD protection of the MOSFET gate. Suppose I can look at with and without.

Esd vulnerability is mostly at external connector inputs that might be 'floating' when something is disconnected. If you have a permanent connection from the arduino output pin to the gate, that isn't a participially vulnerable position plus the internal clamping diodes on the arduino pin give you a little clamping protection for free.

  1. Doesn't the gate need the 10K to help pull it back to GND when the Arduino output shuts off?
    Typically it is a safety component if the arduino is ever powered off but the Mosfet drain circuit is still powered up, it forces the mosfet off rather then allowing the gate to 'float'.

  2. 100 Ohms would do, just that I thought that might help suck too much current from the digital output.
    The current drawn from the output pin is just short duration pulses of current to charge or discharge the gate capacitance, once the mosfet is fully turned on or off there is no current flow from the output pin. I suspect you could get by with no series resistor as the output pins are pretty husky, but it's the proper thing to do to try and offer come current limiting resistance.

  3. 490 Hz should be fine.
    5., 6. I'll try to post a photo...

"That is your problem. A 150R resistor will cut that down."
What does "cut that down" mean... lower the value of remove it completely? If 150 isn't good and 11 isn't either, should the Arduino output tie directly to the gate? I though that in conjunction with the gate capacitance will cause a brief bunch of (over)current to be sucked from the output.

It will, but a brief 'bunch' may be OK for the output pin, they aren't your aunts feeble output pins, it depends on the specific capacitance of your mosfet and working the math. Me, I would try a 50 or 100 ohm if I could find one, or none if I couldn't as I have a bunch of spare blank 328p chips around here somewhere. :wink:
Lefty

Grumpy_Mike:

Arduino driving the Gate through a 150Ohm resistor

That is your problem. A 150R resistor will cut that down.
Do not use an 11R resistor, dhenry delights in giving wrong or misleading information, sorry about that but there is little we can do to educate him.

If you read dhenry's post you'll find this:

you don't want to put a gate resistor of 150ohm: less 11ohm maybe. That means a dedicated gate driver.

Not misleading at all.

For switched 1A it's worth finding a MOSFET with a lower gate capacitance, but higher on-resistance (0.1 ohm sort of value). On resistance and gate capacitance are inversely correlated. Alternatively a MOSFET driver like a MIC4422 will get it switching snappily. Decoupling for such drivers has to be good (order of magnitude larger than the MOSFET gate capacitance)

rickso234:
2. Doesn't the gate need the 10K to help pull it back to GND when the Arduino output shuts off?

It is needed to hold the gate at ground level when the circuit is powered up but the pin mode has not yet been set to OUTPUT. But it will do that equally well if you connect it between the pin and ground.

Changed to a 100R to the gate which made a significant difference in the sharpness of the rising edge made the falling edge look better as well.

Disconnected the zener on the mosfet gate, made no difference in the gate waveform. The Arduino will be mounted away from the MOSFETS with a cable/connector in between which at times will be disconnected so want some ESD protection for the FETs.

WHen full on, the D-S voltage is about 0.03V so resistance is truly about 0.025 Ohms as advertised for the part.

Even with cleaner gate signals the FETs still get pretty hot with PWM. Oddly the FET driving the blue LED is significantly cooler than say the one driving the green LED even though the voltage drops and waveforms are the same. The blue doesn't seem as bright so perhaps it's running cooler just because its internals are a little different. Also, the green FET is sandwiched between hot limiting resistors (going from 12v to LED) so maybe some of the extra heat could be convection from the resistors?

I think heatsinks on the FETs are the short term solution and a different driver circuit, perhaps using the CAT4101, is the long term solution.

What is the approximate fall time of the signal at the drain?

That mosfet has rather high gate charge, 36nC typical. To get faster switching, you could substitute a mosfet with half that gate charge or less, even at the expense of higher Rds(on).

Disconnected the zener on the mosfet gate,

I would keep the zener in but get rid of the 10k resistor in serial with it: that resistor defeats the purpose of having the zener there.

Even with cleaner gate signals the FETs still get pretty hot with PWM.

It will get warmer if you keep on using a larger value gate resistor.

So I built up the circuit on a breadboard powered by a bench supply driven by a function generator. Voltages are close to those in the problem circuit but the MOSFET stays cool. The variables are the supply and the PWM source (function generator). I plan to substitute the supply brick and Arduino one at a time to determine what's causing the overheating. Appears there is hope!

rickso234:
So I built up the circuit on a breadboard powered by a bench supply driven by a function generator. Voltages are close to those in the problem circuit but the MOSFET stays cool. The variables are the supply and the PWM source (function generator). I plan to substitute the supply brick and Arduino one at a time to determine what's causing the overheating.

?

If your PWM source can supply/sink more amps the MOSFET switches faster and stays cooler. That's all there is to know...and it's what this entire thread has been about.

BTW:

  1. You never answered my question about the fall time of the signal on the mosfet drain.

  2. Are you quite sure that the mosfet gate resistor really is 100 ohms? Check it with a meter to be sure, it's easy to get confused between 4- and 5-band resistor colour codes.