Earth Notes: LiFePO4 Battery Integration with Off-grid Solar PV System

Shuffling in alongside existing gel lead-acid system...


I started a thread on Fieldlines (2010/08): some of the text below is extracted from there and edited.

(See how this panned out five years on.)

I'd been having another serious think about boosting my off-grid storage from ~0.25kWh (with a ~0.1kWh/d steady load) and experimenting with Lithium-chemistry batteries, such as LiFePO4 (aka Lithium Iron Phosphate aka LFP), for better round-trip efficiency too. (A whole-house load-shifting experiment that I'm plotting as a follow-on probably isn't much worth doing with a whole-cycle battery efficiency anywhere less than 90% for example.)


The thousandsuns 'LiFePO4_-_12v_30A_Battery' pack as was (link dead as of 2012/08/29): claimed to have an integrated BMS*, and from its 10V--14.6V range looks as if I may simply be able to drop it in instead of my 40Ah SLA gen with one of my Morningstar PWM solar controllers.

(*Unlike SLA, Lithium-chemistry batteries always require some sort of smart Battery Management System (BMS) for safety, eg avoiding fires, as well as to get the best performance out of them.)

Has anyone done this? Am I (or the battery) going to die horribly if I do this?

Also, for Li packs with integrated BMS is it likely to be safe to parallel them up to increase the storage at a given voltage, eg I'd like to get 3x30A 12V to give me ~1kWh of usable storage.

I'm itching to do it, but if it goes wrong it may (a) fry my server and (b) my family since these things would be in the kitchen by the exit door unless I take steps to relocate them...


I visited Thousand Suns office on 2010/10/04 and bought a 12V 20Ah prismatic battery pack (so ~0.25kWh usable or a bit more) at ~£200+VAT. Not advertised on their site, and considerably more compact than the 20Ah shown.

It looks like a bomb all bound with tape and with wires hanging out, and I've worked out a way to hook it into my system to sorta kinda double up storage capacity.

It's about 1/3rd the size and weight of my 12V gel SLA 40Ah (ie same usable capacity), so I was able to plonk this in my backpack with my laptop.

But it's an odd one, with a common +ve rail for its separate charge and discharge connections...

Basically I'm going to detach a small portion of my off-grid PV and use it to directly charge this pack via its BMS, then preferentially power my server from this falling back to the SLA c/o a couple of Schottky diodes.

I shall be keeping it at a very low SoC in this config, and primarily relying on the SLA for system stability for now.

The new battery should take all the load from the SLA until the LiFePO4 (LFP) is virtually exhausted or the SLA is floating nicely.

It should test how well the Li battery copes with being completely drained, and should keep the Li battery in a low-ish SoC and the SLA in a high-ish SoC, which should suit both of them.

initial sketch schematic of integration

Installed the morning of 2010/10/05.

The SLA solar controller LVD was about to operate anyway (flashing red this morning), so this is a 'just-in-time' lash-up.

Already the now-unloaded SLA was recoving noticably within an hour of the LiFePO4 battery taking the strain. Given the approx day's worth of energy in the new battery, the SLA has a day to build up some charge...

After half a day the LiFePO4 battery on-load voltage has declined from about 13.4V to 13.3V and then stayed fairly flat overnight.

After most of two days on load (minus a few hours when there was enough sunshine to bring the SLA voltage above the LiFePO4 voltage, so the SLA would have been powering the load) voltage was about 13.1V.

After another half day, though with the load mainly supported directly through the SLA side, the LiFePO4 battery was still at about 13.1V. The SLA voltage is high enough after a thorough charge that load is likely to be shared between them.

I note that after dark the charge input from its private set of panels is showing 13.1V also and allows enough current to light a 3W LED for example, and thus might allow charge leakage at night and/or cause hot-spots on parallelled panels. At the very least if connecting panels directly to the input a blocking diode should be used. The panels in this set already contain one, but would not protect me from loss due to (say) damp getting in external wiring.

Morning of 2010/10/08, LiFePO4 output voltage still ~13.1V, carrying the entire load as the SLA at ~12.8V! Evening of 2010/10/08, back carrying the load after about 4 hours' break, and still ~13.1V!

On the morning of 2010/10/09 the voltage had dropped to match that of the SLA, ie with the SLA now taking the load.

Some Early Suggestions For Possible Product Improvement

Early days yet, but some small changes that might help a lot:

  • Switch to a common negative bus for easier integration with other systems.
  • Have some mechanism to prevent current flow from the charge leads, eg to a non-diode-blocked panel at night.

Some possible more radical changes:

  • Make the device MPPT or at least DC-to-DC step down to recover full available power when the Voc/Vmppt of the charging source is well above the current battery voltage.
  • Switch to a two-terminal model and emulate an SLA battery more closely to play well with existing infrastructure.

Hardware Refactoring and Another Panel

2010/10/11: I took delivery of another (100Wp, mono-crystalline) panel, to put south-facing and plumb into the main MPPT/SLA circuit.

I also took the opportunity to re-arrange the system substantially to shift some of the panels from the back garden to charge the LiFePO4 battery (bringing its input up to about 110Wp, though no more than about 70Wp at once), and to add the MotorWind turbine with its crowbar overvoltage protection to the LiFePO4 inputs.

The MPPT/SLA system has about 180Wp total with the new panel. All loads except the SheevaPlug server remain on the SLA.

very gloomy day with almost no charging, following previous less-gloomy day

Importantly, this means that both batteries have some south-facing panels to get reasonable input even mid-winter.

The two systems are entirely isolated until the negative/0V outputs are connected together for delivery to the rest of the house.

If the LiFePO4 battery had a common-negative rail, then I'd interconnect the negative/0V rail at other points too.

fully charged system on sunny autumn day

See the LiFePO4 battery start charging in earnest around noon UTC (blue line) as about 70Wp+ of panel is connected to it with the sun shining brightly! Unexpectedly good sunshine the following day boosted charge of both batteries again. And the system still seemed to 'break even' on the following mainly-overcast day. The following day was even more gloomy, below average for mid-winter, but a small boost can be observed.

A few days later there seems to be a fairly fully charged system with both batteries pulled down to ~13V off-charge, falling ~0.1V overnight, and the SLA being pulled up in sunshine to "absorption" at ~14.4V falling after about 3 hours to a float of maybe 13.9V, and the LiFePO4 battery peaking at around 13.6V (3.4V/cell, vs 3.25V at night). Having looked at the weather forecast (for some sunny-ish days ahead) I'm using 12V desk lighting rather than mains, thus the downwards spikes on the measured SLA voltage after about 17:00 GMT, as the lamp I'm currently using draws about twice the power of the server!

LiFePO4 voltage leaps to 15.5V

Another few days and another surprise: in good sunshine the voltage leapt from about 14.4V to 15.5V when I'd expect the BMS to disconnect from its input (charge source) when full, capping the output voltage at somewhere around 14V. The battery was warm (not hot) to the touch as it was climbing past 15V. (See similar the next day.)

I had to adjust the upper bound on the graph to 16V, and I'll have to check that everything upstream of the DC-to-DC converter whose maximum input voltage is 28V is good to something similar, certainly over 16V which was nearly reached today and also over the 21Voc of the UniSolar panel. I may also have to move the small amorphous panel with a potentially higher Voc back to the SLA string. The cap on the input of the DC-to-DC converter is rated 25V.

After several very dull days in early November the batteries largely recover on one sunny day.

After a very dismal and cold end of November the batteries conk out after dusk with the LiFePO4 moments after the SLA LVD, supporting the notion that below ~13V the LiFePO4 has very little energy left. The next day the LiFePO4 voltage was rising quite rapidly but the SLA SoC (11.96V after dark) was still too low for the LVD to reset and so was still showing solid red on the solar controller and OV on the graph. The following day I'm still letting the batteries recover with some unexpected sunshine though I did put a small load on the SLA when the sun was out. Still recovering very slowly in dull conditions; the SLA charge controller has been back on amber for over a day after a brief period of 'green'. Recovered after some sunshine: SheevaPlug going back off-grid after 6 days.


Huge SLA Upgrade

The ageing 40Ah gel SLA seemed to be performing very poorly in December 2010, not helped by very poor insolation (less than half of that expected), so I took the decision to upgrade the SLA side with 400Ah of SLA (purchased as 4x100Ah@12V so could be re-arranged into a 24V or 48V system).

20110101: proposed upgraded off-grid power system circuit diagram .SHX, PDF.

The LiFePO4 battery has the capacity for a couple of days' server consumption, and with it being discharged preferentially, ie should be exhausted before the SLA starts being significantly discharged, the LiFePO4 should take away a lot of the need to cycle the SLA daily, at least when there is significant sunshine at least every other day. This may prolong the SLA life significantly.

The system still takes its main view on storage state-of-charge (SoC) and thus available energy reserves primarily from the SLA, but as of January 2010 now also is forced into 'very low power' mode if the LiFePO4 battery seems exhausted regardless of the SLA state. This basically indicates that we've had no decent sunshine for a couple of days.

See the k8055 poll script as of 20110103.

2011/01/14: 400Ah@12V of new SLA (gel) integrated into the system.

Jan/Feb with SLA upgrade a fortnight in

2011/01/16: watching the voltages seen on the graph, close to the load, as the LiFePO4 battery is exhausted and the SLA takes on the load at about 8am, suggests that the voltage drop from SLA to load is ~0.2V--0.3V, or that taking off the "surface charge" with a light load accounts for that, and indeed at ~16:30 (after dusk) measuring close to the battery gives 12.46V while close to the load shows 12.40V and is read by the k8055 at 12.4V. (The LiFePO4 had taken the load for about 1.5 days from only partially full.)

2011/01/18: after some decent sunshine, both LiFePO4 and SLA are much better, with the SLA measuring 12.80V close to the battery a ~18:30. At since the LiFePO4 did not charge enough to get above the SLA voltage they are sharing the load staying close in voltage with a slow drift down. The LiFePO4 will probably need to get a full charge to take all the load/cycling from the SLA. (Next day, more sun.) (A relatively healthy couple of days in Feb.)

2011/01/28: with the sun up and the battery charging, at 08:44 the MPPT controller's LVD suddenly cut off the power from the SLA having read 12.0V. The system coasted long enough on the LiFePO4 for me to switch to mains. A little after 11:12 and some deent charging on both batteries, the LVD disengaged and I was able to go off-grid again. I speculate that the new battery connection was a little flaky (high resistance) and the controller saw a problem and played safe. I tightened all the connections in the system, especially between battery and controller, and have not had a repeat up until 2011/02/23.

2011/03/05: adjusted the internal power-level thresholds so that LiFePO4 below 13.2V is regarded as 'low' and forces the system into low-power mode. It often hovers for a while after dusk at ~13.1V when it's had a good charge, so this tweak is to better detect sun-down in practice. See the k8055 poll script as of 20110305.

2011/03/07: replaced the Si diode (with a Schottky) that piggybacks the LiFePO4 to the 36Wp amorphous panels at the front of the house to in effect give the LiFePO4 priority charging until it is completely full, leaving little charge current for the old 40Ah gel SLA unless relatively empty. The batteries are getting tip-top full in good sunshine, even competing with the laundry hanging out to dry in front of the panels!

2011/04/15: adjusted MotorWind turbine crowbar trip to 18V (by putting a 10k 22-turn pot in parallel with the voltage divider), ie above max output voltage from LiFePO4 battery and below Voc of the PV inputs, so presumably 'safe' for the BMS input, to try to reduce spurious and potentially-damaging repeated operation a little when the battery is full. (Will soon be adding dump load down-stream of battery to help soak up excess input energy more aggressively so the crowbar should never activate at all.)

2011/04/16: wired in dump load (currently only ~16R/15W) for the LiFePO4 battery (c/o ghurd). Can increase load with another FET and/or more resistors (more than 50W to hand) with proper heat sinking and dissipation. LiFePO4 battery reaching ~15.5V and SLA 14V+ nearly every day, and SLA overnight voltage mainly below 13V after ADSL load (>12W) was moved to it off-grid on the 10th.

2011/04/17: dump load operating from around solar noon but not able to hold voltage down to 15V with ~70Wp+ of PV working, so may need to add extra load. Current load making system warm but not unreasonably so; however any significant extra dump load should be sited better and heatsinked.

2011/04/22: moved 12Wp panel from LiFePO4 to SLA input so former is dumping less and latter is full more, ie better balancing.

2011/07/25: current upgraded off-grid power system circuit diagram .SHX, PDF. Simplified the system and moved input from 36Wp amorphous panels at front to main battery bank to help support the off-grid ADSL and brings the input to the main controller to just less than 180Wp nominal.

2011/09/15: note that as the LiFePO4 voltage rises and passes the SLA here, the SLA voltage apparently suddenly rises about 0.2V as the LiFePO4 takes over supplying current to the server via the diode-OR and eliminates the voltage drop in the SLA route. More generally, this tends to yoke the output voltages of the two batteries together, sharing the load, unless being driven otherwise by large charge currents.

2011/12/31: the SheevaPlug has been off-grid since the battery upgrade, with no sign of the controller's amber or red status lights even this month. I have also tweaked software settings to reduce work done in 'extreme' shortage as measured by either battery (Li or LA) not being fairly full. In December the Li battery is usually low enough to trigger 'extreme' mode. The main server now also regards any period over about 48 hours without reaching a 'good' power level as similar to 'extreme' shortage for most purposes. 14:20 UTC: voltage measured at main LA battery bank terminals 12.70V, in (astonishing) agreement with 12.7V as seen by k8055 at SheevaPlug.

2012/01/07: made it into January in spite of sunless interval from before Christmas into the New Year: see the lack of lead-acid spikes to over 14V and the sub-13V state of the LiFePO4 battery.

2012/02/02: Li battery up to 15V, balancing, for first time for a couple of months at least!

2012/08/29: Li battery has regularly gone over 15V (but below 16V), though runs of gloomy weather clearly show up as days in a row without. Generally the Li battery subsystem continues to 'just work' well.

2013/06/24: reconnected after major kitchen works, assuming C- is charge (-ve) and D- is discharge!

2014/04/27: ADSL auto-off-grid hardware finally wired up today after keeping an eye on software/w control behaviour for a while. Battery levels seem to be more stable and healthier of late. The ADSL is perhaps 50% off-grid at the moment, including in evening peak demand time. If the ADSL were off grid 100% of the time, given a measured 7.7W consumption, savings (ie extra energy not taken from the grid) would be ~67kWh/y. ~20kWh/y (ie ~30%) off-grid may be realistic, ie 1.5% of total gross household consumption (~1500kWh/y), which starts to be noticeable!

2015/05/04: MacBookAir running directly from Li battery via custom adaptor lead works well and can run indefinitely off-grid given current levels of sunshine.

2016 Expansion Thoughts

2016/05/17: I'm puzzling though a possible reconfiguration to help keep more load off-grid since fitting more grid-tied PD would now be a G59 expensive and paperwork-heavy nightmare. An aspriation is to get 500Wh/d load off-grid mid-winter since grid-tied generation sags to only ~1.5kWh/d. Getting load off-grid at night or when otherwise importing is especially good, as it effectively maximises self-consumption. The main off-grid load, the RPi, is only directly responsible for ~50Wh/d, but other things around it, such as controller self-consumption, probably bring that back to ~100Wh/d. The current optional off-grid load (network connection and Loop monitor somewhat inefficiently powered) account for ~15W or ~360Wh/d. (Note: our cable TV box uses 15W on standby!) Being able to keep it off-grid most of every day including mid-winter would be a big chunk of that aspriation, but at ~1 sun-hour per day then, that implies nearly 500Wp of panels if the system is optimised for winter (and assumed able to cope the rest of the year), and with a rather optimistic take on likely storage round-trip losses. If the main target is to kep the optional load off-grid at night (~16h) then the target is 100Wh (RPi) + 240Wh, ie 360Wh + losses per day. Note that for the 4x12Vx99Ah battery bank, the efficiently-available 30% of DoD (between 50% floor and 80% absorb) is ~1400Wh, of which 360Wh is ~25%, thus reasonable.

The Unisolar (60Wp) panel + LiFePO4 as RPi power backup + resistive 30W dump load (+ optional Mac dump load) seems to work quite well and is probably safe in terms of maximum voltage and current flows in and out, so I'd like to leave it as-is. I am considering converting the LA solar string to a nominal 24V (~30Vmp) in, though probably remaining a 12V battery system for now (with the SS-MPPT-15L controller operating at 15A/200W max), and significantly over-powered on the PV side at say 250Wp--350Wp nominal, to allow the panels to be tidily vertically mounted and still provide ~250Wh/d sufficient for the RPi always, and other grid-optional loads mostly. Switching to 24V nominal will mean doing without current unmatched 12V panels, though they could be optionally connected to the LiFePO4 input when it is (say) < 14V to bolster in mid-winter.

The easily-available unobstructed south-facing wall space sections are ~1320mm+ vertically (with some ground clearance), E to W:

(obscured by bushes)
set back, 1150mm x 1320mm+, could accommodate 40W panel
could accommodate 100W panel horizontally at top
(set back, tree in front)
1120mm, currently has 40W panel + 20W at foot
set back, 1150mm, barely shaded, currently has 100W, + part of 60W
~800mm, ~1420mm height, currently has part of 60W, + 20W panel, will get little mid-winter or pre-noon sun

Set back sections are by ~105mm.

Some panel dimensions:

  1. The 40W amorphous panel currently mounted on the E-most section (e) is 650mm x 1250mm (with 330mm to its E free in its section).
  2. The 100W panel currently resting in the middle section (f) is 540mm x 1330mm.
  3. The Unisolar 60W panel at W (f/g) (directly connected to the LiFePO4) is 790mm x 1270mm.
  4. A typical 250W+ 60-cell ~30Vmp panel is 1000mm x 1650mm.
  5. A typical 150W+ 60-cell ~19Vmp panel is 1000mm x 1350mm.

There are also free-standing 20Wp mono and amorphous panels connected to the LA solar controller input.

Mounting brackets, to be used on the long side of a panel, probably take 50mm.

If the current E-section-mounted 40W panel were replaced with the 60W Unisolar, and a new 250+W panel mounted horizontally to W (ignoring suitable mounting points for now), that would take 50 + 790 + 50 + 1650 + 50 = 2590mm, leaving LiFePO4 input as is now, and make a net addition for the LA system of 250+ - (100+40+20+20) = 70W. A 315Wp panel such as the MonoX NeoN brings the nominal gain to 135W. Although the system will be heavily limited by the controller when sunny (it will ignore extra available power that it cannot use without harm) a little extra solar on the other side of the house could get to nearly 360Wp, or nominally the target 360Wh/d ignoring losses. (Alternatively, the 40W E panel can be left as-is and ~20W put up elsewhere to power the LiFePO4 and ensure that ~50Wh/d can be delivered to the RPi via it.) PVGIS suggests that a vertically-mounted 315W panel would generate 330Wh/d in December which requires an average of ~80W over half an 8-hour day, well within controller spec. For a 250W panel, December gets 260Wh/d generated according to PVGIS. (It would be possible to upgrade the solar controller later, or run another in tandem, though that risks them confusing one another.)

Realistically even a 315W panel is not going to keep the small network load off-grid all night in the depths of winter, but it might get close. Saving 15W from existing grid load (from the ~40W other than the fridge-freezer) should be easier, eg upgrading a few lamps to the most efficient available.

See the Morningstar String Calculator with 315W "Neon2" 60-cell and 260W 60-cell and 1200W (4x) LG NeON 2 Black LG300N1K-G4 300W panels.

Another plan, by section, abandoning a separate feed to LiFePO4, and paralleling feed wires back in one low-power 12V nominal system, but allowing for a split to separate MPPT feeds later (eg 140W+350W):

40W panel vertical
100W panel horizontal at top
175W vertical
175W vertical
(possible 20W vertical)

For a nominal ~500Wp (490W + optional 20W + ~20W at front). 20160518 config is nominal 240Wp + ~20W at front. Potentially it then may be possible to, for example, use a 12V Victron Easy Solar 1600W All-in-one Solar Solution with Inverter and MPPT controller or similar (with mains charger possibly disabled to prevent extra grid imports) to take lighting circuits and select sockets off-grid when the batteries are reasonably full to trim winter grid demand. Further panel upgrades (eg 330W in place of 175W) are also possible.

2016/05/22: my current thinking is to simplify the system somewhat and remove the (+ve ground) LiFePO4 (LFP) from the system entirely, allowing rather more cycling on the 12V gel bank than previously. I am concerned that I am maltreating the LFP, discharging it to low and risking over-charging it given the undocumented BMS system. Not using my current menagerie of 12V panels feels uncomfortable even if the proposed new panels are (a) maybe 20% of the price per watt, and (b) as much as 3x the output per unit area which is important for my very limited space. I may retain one or more separate 12V-nominal strings with separate small MPPT charge controllers feeding into the one bank, eg a 24V nominal (30Vmp) and 12V nominal (~19Vmp) round the side of the house.

Goodbye To Lithium, for now

2016/05/22: LiFePO4 battery removed and all PV feeding to gel LA bank. The 'test' is done after ~5 years! The observation is that the combination works well, but the complexity and partioning of available energy may not be worthwhile.

See Expanding the Off-grid System.

Other Products

At the same time as I contacted thousandsuns I emailed M2Power about its SLA-emulating 2-terminal batteries, eg the 12.8V 40Ah 0.3C-charge-rate device, with BMS built-in.

I'd already bought my thousandsuns battery by the time M2Power responded, but M2Power confirmed that:

  • it ships to the UK
  • unit cost (as of 2010/10/13) is EUR319 for the 12.8V 40Ah
  • the batteries can be parallelled
  • maximum usable capacity for the 40Ah device is 512Wh
  • the packs need to be charged through a CC/CV (constant current/constant voltage) profile, to a voltage of 14.6V at a maximum current of 1/3C, thus 13A for a 40Ah pack, 26A for a 80Ah system
  • lead time is 6--8 weeks for large quantities, smaller volumes and samples can have a shorter lead time

In particular M2Power confirmed that "An external BMS is not needed, it is integrated in our battery packs. The only requirement is that [the battery] is charged to 14.6V."

I imagine that an existing SLA controller/charger could be adjusted for an 'absorption' voltage of 14.6V and duration of ~3 hours, a little high for a flooded cell, and it might work well.