Overheating Mosfet on Cell Balance Module

I am developing cell balance modules for use on very large lithium cells. They work well apart from the mosfet overheating even when mounted to a heatsink. The mosfet I used is STD12NF06L and it has 2.42 amps flowing through it when the balancer is active. The mosfet heatsink still gets roasting hot within a few minutes of operation. I have attached images. The mosfet is not being switched at high frequency. It is on when the cell voltage is over 4v.

Hi,
Welcome to the forum.

Please read the first post in any forum entitled how to use this forum.
http://forum.arduino.cc/index.php/topic,148850.0.html then look down to item #7 about how to post your code.
It will be formatted in a scrolling window that makes it easy to read.
OPs circuit.
eccf3d963bf26c79681d915960e1c9b4426389b2.png

Thanks for the circuit, do you have a DMM, what is the voltage across the MOSFET, Drain to Source when it is operating?
The RdsON of the MOSFET is only 0.1 Ohms, so 2.42A will give.
P=IIR= 2.42 * 2.42 * 0.1v = 0.58 Watts

Tom… :slight_smile:

Hi,
Are you powering the Arduino from the cell you are trying to balance?
If so and you are using PWM to regulate the current I don't think the Arduino likes having its supply modulated by PWM.
What is the Vcc value?

Tom... :slight_smile:

I am getting exactly 0.2v across the mosfet and I am powering the arduino off the cell that is being balanced. I intend to make 8 of them for each cell of a 500ah lithium battery bank. I am using the internal reference so that varying battery voltages do not cause undesired operation. The arduino I am using is the 5v one.

//The following implements a basic adjustable balancing module for various lithium batteries.
//A potentiometer is connected to A0, B+ and B- for adjusting the balance voltage.
//Put together by Shaun Dobbie
//Uses code from the blink without delay example

const int ledPin =  8; //Pin for the flashing green LED to show the system is alive
const int dischargePin = 9; //Pin to the gate of the mosfet for the discharge resistors
int ledState = LOW;           
unsigned long previousMillis = 0;     // will store last time LED was updated
const long interval = 1000;           // interval at which to blink the green LED (milliseconds)

void setup() 
{
  
  pinMode(ledPin, OUTPUT);
  analogReference(INTERNAL);          //We need to use the internal 1.1v reference so that changes in battery voltage do not affect operation.
  for(int i=0; i<8; i++) analogRead(A0); //We take a few readings from A0 to allow it to stabilise
  pinMode(dischargePin,OUTPUT);
  digitalWrite(dischargePin,LOW);
  int battery = 0;
}

void loop() 
{
int battery = analogRead(A0);

  if (battery > 900) 
    {
      digitalWrite(dischargePin,HIGH);
      delay(100);
    }
  else
    {
      digitalWrite(dischargePin,LOW);
    }
delay(1);
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) 
  {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) 
    {
      ledState = HIGH;
    } 
    else 
    {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

Hi,

What is the Vcc value?

Tom... :slight_smile:

3.95v currently.

Hi,

The arduino I am using is the 5v one.

That may be one problem, have you any bypassing caps on the Vin pin of the promini?

Can you post a picture of your project please so we can see your layout?

Thanks... Tom. :slight_smile:

I have added images.

I have checked te datasheet. The internal resistance is 0.1 Ohms. At 2.42 Amperes it will not heat up the MosFET.

Probably the gate voltage is not correct, so you are unvoluntarily in the linear range which each MosFET has.

The two 3.3ohm resistors should get hot, not the mosfet.
Could be switching losses.
Is there some delay in the code that stops the mosfet from switching the load (resistors) on/off 100,000x per second?
Leo..

arduinoaleman:
Probably the gate voltage is not correct, so you are unvoluntarily in the linear range which each MosFET has.

Good thought, gate threshold is 2V, so 3.95V or less because it is an output, may have the MOSFET in linear region.

Wawa:
The two 3.3ohm resistors should get hot, not the mosfet.
Could be switching losses.
Is there some delay in the code that stops the mosfet from switching the load (resistors) on/off 100,000x per second?
Leo..

Yes, 3R3 // 3R3 = 1.65 Ohms
P = I * I * R= 2.42 * 2.42 * 1.65 = 9.66306 Watts
Those resistors should be very warm, what power rating are the resistors.
What is the volt drop across the resistors?
Thanks.. Tom... :slight_smile:
PS It would be wise to make your first prototype on a bigger piece of vero so you can see and test everything.

I am getting 3.73v across the resistor.

Hi,
What is the watt rating of you 3R3 resistors, and where are they in your picture?

Thanks.. Tom.. :slight_smile:

The resistors are 5 watt and they are underneath the black heatsink. I may have to use a larger heatsink on both the mosfet and the resistors.

Hi,
How can you be sure its the MOSFET generating the heat, when more power is dissipated in the resistors that are situated UNDERNEATH the heat sink as well?

Have you used Heatsink compound on the metal tab of the MOSFET?

Tom... :slight_smile:

It seems the resistors are heating up the mosfet.
Proper 5watt cement resistors don't need a heatsink.
Just mount them on ceramic standoffs (to protect the board), and let them get stinking hot.
Leo..

The mosfet is definitely generating a large amount of heat on its own. There is no way the heat from the resistors is going to conduct all the way through the resistor wires and up through the mosfet leads. I have ordered Fqp30n06l mosfet which has a lower on resistance and I will give that a try as well as redesign the layout.

Hi,

There is no way the heat from the resistors is going to conduct all the way through the resistor wires and up through the mosfet leads.

The resistors are designed to radiate the heat energy out through the ceramic surface, the resistor is a coil of resistance wire sealed in the ceramic case.
Where do you thinks the energy goes that is dissipated in the resistors.
All of it is converted to heat.

Now you have already shown that the resistors are dissipating more energy than the MOSFET.

Have you left an air gap between the resistor body and the board it is mounted on to let AIR circulate?

Can you post some side view pictures of your project to show how you have mounted the MOSFET, resistor and heatsink please?

Thanks.. Tom.. :slight_smile:

That mosfet in that package should get ~50C over ambient without heatsink at that (2.5A) current (hope I have done the calculations right). I think a small field of copper/circuit board as heatsink is required.
Leo..

Hi,
OP measured

0.2V Drain to Source with 2.42A Drain current
so 0.2 * 2.42 = 0.484 Watts

Resistors
3R3 in parallel

3.3/2 * 2.42* 2.42 = 9.66W

So resistors dissipating 9.66/0.484 = 19.95 times the MOSFET dissipation.

Tom... :slight_smile: