Cold Weather and LiPO Charging

If you live in the US, you are probably noticing the very low temperatures we are experiencing across most of the country. For the last couple weeks, I have been preparing for this first big cold snap by implementing something I should have done a long time ago - Temperature limits on LiPO battery charging. In searching the forum, I have seen this issue raised but I did not see anyone share their approach so, I thought I would post mine. As always, please weigh in with questions or - hopefully - suggestions on how to improve.

Requirement: Don’t allow the Electron to charge the LiPO battery when it is below 0°C or over 45°C according to this and many other references.

I put a simple and cheap temperature sensor (TMP-36) on the carrier board inside the enclosure as the Electron does not expose the thermister from the charge according to @rickkas7 in this post.

My device sleeps during the hour, waking only for a second or so to count a car / person who triggers a hardware interrupt. My current plan is to measure the temperature at the top of the hour when the device wakes to send data to Particle / Ubidots. I use a 3.5W 6V Voltaic panel and a 460uF capacitor to smooth things out.

I am using @rickkas7’s PowerCheck class which I got from this post and the temperature from the TMP-36. Here is the code:


// These are the functions that are part of the takeMeasurements call
void takeMeasurements()
{
  if (Cellular.ready()) getSignalStrength();                          // Test signal strength if the cellular modem is on and ready
  stateOfCharge = int(batteryMonitor.getSoC());                       // Percentage of full charge

  getTemperature();                                                   // Load the current temp

  if (temperatureF <= 32 || temperatureF >= 113) {                      // Need to add temp charging controls - 
    snprintf(powerContext, sizeof(powerContext), "Chg Disabled Temp");
    power.disableCharging();                                          // Disable Charging if temp is too low or too high
    waitUntil(meterParticlePublish);
    if (Particle.connected()) Particle.publish("Alert", "Charging disabled Temperature",PRIVATE);
    return;                                                           // Return to avoid the enableCharging command at the end of the IF statement
  }
  else if (powerCheck.getIsCharging()) {
    snprintf(powerContext, sizeof(powerContext), "Charging");
  }
  else if (powerCheck.getHasPower()) {
    snprintf(powerContext, sizeof(powerContext), "DC-In Powered");
  }
  else if (powerCheck.getHasBattery()) {
    snprintf(powerContext, sizeof(powerContext), "Battery Discharging");
  }
  else snprintf(powerContext, sizeof(powerContext), "Undetermined");

  power.enableCharging();                                               // We are good to charge 
}

This works well with the devices disabling charging when it is freezing and then re-enabling charging at the next hour if it has warmed up. Here is a view of the past week across a group of devices, as you can see the cold does have a significant impact on the batteries but they do bounce back once they can charge.
14%20AM
as you can see, it is currently still cold so charging is disabled across most of the group now. I added this information to my Ubidots webhook so now I can see the battery level and the context.

I do have a couple ideas for improvement (such as checking temp during the hour if charging is disabled) which I will test. But, this works well enough that I thought I would share.

One question prompted by the dip in battery charge: When charging is disabled using the power.disableCharging(); command, does the electricity from the solar panel still get used to power the Electron? Please chime in if you know.

Thanks, Chip

6 Likes

Yes the power on VIN should offset the power pulled from the battery when the charging disabled command is being used.

2 Likes

Does this issue apply to a Boron as well?

Yes, same PMIC chip on both.

1 Like

Just some cold background info:
I’ve been running a LoPo in northern Minnesota for 2 years (2 winters). It’s charged with a solar panel regardless of the temperature. At times it gets below -30C. I haven’t seen any problem with charging at those low temperatures. However, below -20C the voltage reported by fuel.getVCell() drops to about 3.6v and I have code that puts the unit to sleep for a few hours.

11 days in February of air temp. and Voltage from fuel.getVCell(). Ubidots screen capture.

The battery voltage drop when below -20 causes some problems for the analog water sensors I have connected but the unit fully recovers when temps rise above -20.
In any case over two winters with a different 2,000mAh LiPo battery each winter and temps. down to -34C I haven’t seen any problem with charging at very low temperatures.

@colemanjj,

Wow, that is cold! I was wondering myself if implementing this capability was necessary. It certainly has lead to slowing charging times on cold days but I have enough buffer that this is not a big issue for me.

For now, I think I will error on the side of caution but , given your experience, perhaps I will do some more cold weather testing in the future.

Thanks, Chip

If you normalize that voltage graph in reference to ambient temperature, you will likely notice several important aspects that are not apparent.

One is that the Temperature is having much more of an impact on the Cell Voltage than you’d think.
Secondly, the is not much energy is being stored in the Li-Po when attempting to charge below 0C.

I performed several rounds of tests for a Client (paid work so I cant publish the results here). I was surprised at the outcome.

You can measure the voltage of a Resting Li-Po throughout your operating temperature range as a baseline. After the temperature correction for your re-charging graph, you should notice that adhering to the Industry (and manufacturer) Standards for Li-Po charging doesn’t really hurt the performance.

I can’t see any good reason to not play it safe with Li-Po’s.

I wasn’t suggesting that abuse of a LiPo was a good idea. Just that they seem more rugged than the specs would suggest. In particular, they seem to provide dependable power for my electron down to about -20C and survive to see the new day even when running at -34C :slight_smile:
john

1 Like

A year later and at -43C the LiPo finally died see:Solar Electron on lithium at -43C
So now I’m finally getting around to the responsible thing and turning off charging at low temperatures. However, since the unit on a LiPo that failed at -43C is inacessable 'till late spring, I still don’t know if it was failure of the LiPo or of the electron. I’m assuming it was the LiPo.

And questions remain: will not charging at low temperature save the LiPo or would -43C kill a LiPo even if it wasn’t charging? and where the heck do I find -40 to -50C for test my new setup :slight_smile: