Monday, July 13, 2020

Lithium (LFP) battery update

I kind of left everyone hanging last year when I put my LPF batteries in service.  In fact, I don't think I even reported that they had gone on line.  Well they did, and they have been running flawlessly for the past 18 months.  I absolutely love them, and will never build a lead-acid house bank again unless there is some extenuating circumstance.  They just work SOOO much better.  No more worrying about when they last reached full charge.  No more long drawn out absorption cycles, and when needed, no more long, lightly loaded generator runs.

"Andy" asked a couple of questions in the comments for this post on the BMS design, and I thought I'd answer them here since they are of general interest to anyone messing with this stuff.

The first question was about cell balancing, and whether I had automated it somehow.  The answer is, just the opposite.  What I actually did is completely counter to every guide on how to commission and run an LFP battery bank, but I did it in the name of science.  I had heard recommendations stressing the importance of regular balancing, making it sound like the batteries would fail spectacularly if you let them drift even the slightest.  And I heard reports of people who had run for months and months without having to re-balance.  So I decided I'd find out for myself.

But before getting in deeper, let me review quickly what this "balancing" thing is all about.  To make any battery bank, you need to wire some number of individual battery cells in series to get the voltage you are looking for.  My system is nominally 48V.  Lead battery cells are 2V each, so you need 24 of them in series to get 48V.  LFP cells are 3.2V, so you need 16 of them in series to get 48V (or close enough).

Batteries get charged by the current that you push through them, and when a bunch of cells are wired in series, each gets the same amount of current.  If all the cells are at exactly the same charge level, then as you apply a charge current, they will all fill up by exactly the same about, and they will all reach full charge at exactly the same time.  That's in a perfect world, and I haven't seen one of those yet, so let's look at reality.

Reality is that variations in each cell's construction and chemistry causes each to charge/discharge by slightly different amounts even though they see the same current.  So in reality, when charging, not all cells will reach full charge at the same time.  With lead batteries, we just ignore this and keep on charging because a little overcharging is pretty benign.  So the cells that reached full charge first you just allow to overflow a bit until all the other cells are full too.

But LFP cells are not at all tolerant of overcharging, and can actually be damaged quickly and irreversibly if over charged too much.  There are a variety of ways to deal with this, but my system simply monitors individual cells, and sends an alarm when any cell starts getting too full.  And if any really get too high such that damage may occur, my BMS disconnects the batteries.  As you identify cells that are more charged, or less charged than the average, then you need to do some combination of adding extra charge, or bleeding off some charge from individual cells.  That's balancing.

OK, now that you understand balancing, what did I do.  Well, nothing.  I just put the batteries together and started the system.  Then I monitored it looking for alarms on cells that were too high or too low.  I got none.  In fact the cells all operated within about 5mv of each other, and that continued for about the first year of operation.

But slowly I did see some drift, and after a while I got my first alarm.  My chargers charge to a nominal cell voltage of 3.45V, and my "high voltage" warning alarm goes off at 3.50V.  No action is taken other than to send me an email.  Now, 6 months later, I get warnings pretty regularly, especially if it's a really sunny day and the batteries have charged quickly.  Here's one from today:

Bank  55.519V, On line

Min Spread Max
Present  3.424  0.087  3.512
Min/Max  3.110  0.148  3.555

Cell Voltage Status
1  3.441 Ok
2  3.455 Ok
3  3.455 Ok
4  3.428 Ok
5  3.500 High
6  3.460 Ok
7  3.466 Ok
8  3.446 Ok
9  3.488 Ok
10  3.509 High
11  3.500 High
12  3.486 Ok
13  3.424 Ok
14  3.484 Ok
15  3.459 Ok
16  3.512 High

This is at it's worst, just before the charger switches to float.  This whole process of warnings triggering, then going away lasts maybe 2-3 minutes.  As you can see, cells 5, 10, 11, and 16 are high.  Also notable is that cells 4 and 13 have fallen behind the pack.  These are at the point where I want to take some action.

You can balance my adding charge to low cells, removing charge from high cells, or a little bit of both.  My plan is to address this step-wise, and the first will be to add charge to the low cells (4 and 13).  That will catch them up with the rest of the pack, and will also partially address the cells that are high too.  With the low cells brought up to around the nominal end-of-charge voltage of 3.45, the overall pack will reach it's final voltage sooner, and stop charging before the high cells get as high as they are now.  Then I'll monitor, and continue to add charge to the lower cells until they all get back into a reasonable range of each other.  Now there's no reason why I couldn't drain some charge from the high cells, except I have a charger, and not a suitable load.

One question is how much charge to add, and I really don't know.  Each "cell" is actually two 180Ah cells bolted together, so 360Ah.  My power supply can put out 6A, so I figured I'd start with 6A for 1 hrs, so adding 6Ah.  Then see how much it changes.

OK, that's a long answer to Andy's first question.  Now on to the second, which was whether I am doing any sort of Ah counting to figure out state of charge.

The answer is no.

First, counter to what everyone says, I think battery bank voltage is a sufficiently close indicator of SOC.  People say it's a much worse indicator for LFP vs Lead, but I disagree.  My lead bank was 50.4 volts when fully charged, and 48.0V when is was 50% empty and the generator started.  That's a spread of 2.4 volts.  In contrast, my LPF bank is full at 53.6V, and ready for recharge at 50.4V.  That's a 3.2V spread and is 30% more voltage swing than lead.  The difference, though, is that in the mid area of charge, the LFP voltage doesn't vary much, so there isn't as much differentiation between 60% and 50%.

But the other side of it is, who cares?  In many ways, I don't care what my battery charge state is.  All that really matters is that if it gets low, the generator will start and run through a recharge cycle.  And if they get full, the chargers stop.  And all that is automatic.  So there is no action for me to take based on charge state, so why worry about it.

What I DO monitor are my every 6 hour health reports like the one above.  I do keep an eye on the current voltage, current spread in cell voltage, highest cell voltage ever seen, lowest cell voltage ever seen, and largest cell voltage spread ever seen.  That tells me about the health of the bank, which is much more important than it's current full/empty level.


  1. Thanks for the update, Peter. Good to hear from others that are actually using these batteries, as opposed to just develop lengthy ideas of how they need to be babied.

    As you, I didn't pre-balance my CALB CA-180 cells, and there's no automated balancing. In my nominal 12V system, they stay perfectly balanced (to the nearest mV) until they reach around 3.388 (I don't yet have a logger), which is about 13.55V for the bank. My "cells" consist of 5 of the CA-180 cells in parallell.

    I usually cycle between roughly 10% and 95% SOC, and base it all on voltage. It sometimes takes more than 10 days before a new charge cycle is initiated. I only have solar (1200 watt), so it takes me 2-3 days to achieve a full charge again.

  2. You add to the low cells using a standard 110v charger on the individual cells?

  3. Thanks for update.

    I might consider adding a small resistor/lamp/load connected to each cell via a small NO relay and control these from the PLC. This way would be easy to bleed a bit of extra charge from the top cells.

    In your use case, I fully agree it might not be worth it to track the exact SOC of the battery, if you tend to cycle it between 100% full and almost empty. I guess it only becomes kind of necessary if you want to do much shallower cycling - in order to maximise the lifetime of the battery - as you said the voltage curve in the mid part of the charge region is very flat. I myself plan to have my battery most of the time between 30% - 80% SOC just to maximise the lifetime and charged by relatively modest solar panel setup, this is not so easy with the voltage alone.

    But I think your setup is very solid and you can always add the charge/current -counting afterwards!

    1. Yes, adding switching leading to a resistor or a charger is certainly an option, and something I might do if balancing becomes more commonplace.

      Regarding cycling, I think my cycling is very much like you have planned, and certainly not 0-100%. My cells are full at 3.60vpc (volts per cell), and I only charge to 3.45vpc which is somewhere between 80-90% full. And discharged is 2.8vpc, and I start my generator at 3.15vpc. So I'm operating somewhere in the 10-20% low end, and 80-90% high end, and is meant to extend batter life vs using the full battery range.

      In practice, the cycling range is all over the place. Daily consumption varies seasonally and based on what we are doing. Charging is principally solar which also varies seasonally and daily with weather. All that's certain is that at night the sun goes down and the batteries discharge until it comes back up. With few exceptions, the generator never runs from March through October.

    2. I would most definitely add the relay switched resistors, to keep the battery automatically balanced. You already have the expensive part, the PLC, quite easy to add this and prolong lifetime of the battery.

      Another, more exotic option is to add smaller battery cells, maybe 1%-10% of the capacity of the larger cells, and connect them to _two_ cells with a DPDT relay. Then you just flip this relay maybe once every hour. No tracking voltages, no charge lost.

      As for the tracking the charge state, I would add a current shunt and then just track voltage of it with the same ADC you are tracking the cells with. Even crude tracking would give a reasonable good estimate on charge going in/out and could be reset every time battery reaches full.


Make comments here