A LiFePO4 solar battery that will not charge is usually being refused by its own BMS, not dead: too cold (Victron allows charging only from +5°C), one cell at its high-voltage limit, or a low-voltage disconnect after deep discharge. Next come a lead-acid charge profile on the controller and PV voltage below the controller’s start threshold.
The instinct to start by swapping components is expensive and usually wrong. A bank that stops charging is far more often a protection device doing its job, a set point that does not match the chemistry, or a connection that has quietly turned into a resistor.
What follows is a diagnostic order. Work it top to bottom and stop at the first thing that explains the symptom, because these faults stack and fixing the second one while the first is still present looks like the fix failed.
Step zero: read the controller before touching anything
Every modern charge controller reports its own state, and that report narrows the search immediately. Note four things: the reported charge stage, PV voltage, PV current, and battery voltage as the controller sees it.
| What the controller shows | What it usually means |
|---|---|
| Float or storage, near-zero current, bank voltage high | Nothing is wrong. The bank is full. |
| No PV voltage at all | Array-side open circuit: breaker, fuse, connector, or a disconnect switch |
| PV voltage present, zero PV current | Controller is not starting, or the battery side is open |
| Bulk with low current in full sun | Array underperformance: shading, mismatch, soiling, or a dead string |
| Cycling in and out of charge every few seconds | Protection tripping and resetting, usually BMS or over-voltage |
| Bank voltage on the controller different from bank voltage at the terminals | Voltage drop or a bad connection between them |
| Battery reads 0 V, or close to it, at its own terminals | BMS low-voltage disconnect after a deep discharge |
That table resolves a large share of cases before a meter comes out.
Error codes narrow it further. On Victron MPPT chargers, Error 2 is battery over-voltage and Error 33 is PV over-voltage, both self-clearing. Error 67, BMS connection lost, mimics a dead bank: the charger drops its output to the battery’s base voltage. A BMS switching the charger off through its remote on/off terminal, because the bank is full or below about 5°C, is normal operation, not a fault.
The bank may simply be full
Worth stating plainly because it accounts for a surprising number of reported faults. An MPPT controller that has moved through bulk and absorption into float will taper charge current to almost nothing, and a lithium bank at rest will sit near its float voltage. Zero charge current at midday with a full bank is correct behaviour, not a failure. Check state of charge, not current, before concluding anything.
Low-temperature charge cutoff
This is the classic winter failure and it looks alarming. Lithium iron phosphate must not be charged below roughly freezing; plating damages cells permanently and the damage is not recoverable. Victron’s lithium battery documentation treats cold charging as a hard limit rather than a preference.
Where the line sits depends on the manufacturer, so use the figure in your own battery’s manual:
| Source | Charging blocked below | Upper limit |
|---|---|---|
| Victron Lithium Battery Smart | +5°C; charging below that voids the warranty | +50°C |
| Battle Born, unheated models | About 25°F (about -4°C) | About 135°F (57°C) operating |
| LiTime charging guide | 0°C (32°F); its 20 A charger resumes at 5°C (41°F) | 45°C |
Battery management systems therefore block charge current below a temperature threshold. From outside, the symptom is a bank that refuses charge on a cold clear morning and starts accepting it in the afternoon once the enclosure warms, with no fault indication that obviously names temperature. Discharging in the cold is a much smaller problem, so the bank continues to power the load normally, which makes the fault look intermittent and voltage-related.
Fixes are enclosure heating, self-heating cells, relocating the bank, or a controller that honours a temperature sensor. A bank in an unheated shed or garage at latitude will hit this every year.
Heat blocks charging too. Victron’s BMS disables charging at its over-temperature threshold (Victron troubleshooting), so a bank shelved beside a warm rack or in an unventilated closet can stop charging on a summer afternoon. Moving it indoors fixes winter; check it does not create the summer problem.
Battery reads 0 V and will not wake: low-voltage disconnect
A battery reading 0 V or close to it at its own terminals has usually not lost its cells; the BMS has opened the circuit after a deep discharge. Battle Born’s BMS does this below 10 V on its 12 V batteries (Battle Born). The controller then sees no battery, and LiTime notes that lead-acid chargers in particular may read 0 V and refuse to start.
In a homelab the usual triggers are a cloudy week or an inverter low-voltage cutoff set below the BMS cutoff. Battle Born’s recovery procedure for its 12 V batteries:
- Disconnect every connection from every battery, including links between paralleled batteries.
- Wait 30 minutes, then measure and label each battery on its own.
- Above 11.5 V: charge it alone with a lithium charger.
- Below 11.5 V: connect it to a running car as for a jump start, idle 15 minutes and recheck.
- Still below 11.5 V: stop and contact the manufacturer.
- Charge each battery fully on its own; it should rest above 13.4 V after 30 minutes before rejoining the bank.
Act quickly. Battle Born says to wake its batteries within five days (Battle Born troubleshooting tips). Victron treats terminal voltage below 10 V (20 V on 25.6 V models), or any cell below 2.5 V, as permanent damage that voids the warranty, and its recovery procedure is a supervised, staged charge that starts as low as 0.1 A (Victron troubleshooting).
The lasting fix is upstream: shut the lab down from the battery monitor or inverter well above the BMS cutoff, which is why LiFePO4 battery bank sizing plans a 20% reserve. Repeated disconnects mean the bank is too small for the load.
Cell imbalance and the high-voltage cutoff
The other BMS-side cause is imbalance. A series pack is only as charged as its highest cell. If one cell reaches the per-cell maximum while the pack as a whole is still well short of full, the BMS opens the charge path to protect it. The pack voltage looks mid-range, the controller sees the charge path disappear, and charging appears to stop for no reason.
Symptoms that point here: charging cuts out at a consistent, repeatable pack voltage that is below the configured absorption target; capacity has been drifting downward over weeks; the cut-out happens sooner each cycle. Per-cell voltages are the diagnostic, and if the BMS exposes them, read them at the end of a charge rather than at rest. Balancing current in most passive BMS designs is small, so a badly drifted pack needs a long deliberate top balance rather than one more cycle.
Victron publishes the numbers for its own BMS: as soon as one cell reaches 3.75 V it disables the charger, re-enabling only when the highest cell falls below 3.6 V, and rebalancing can take a long time, up to a few days (Victron troubleshooting). Victron says a well-balanced battery is never disabled this way. Balancing happens only in absorption, so it recommends 4 to 8 hours of absorption a month for off-grid systems (Victron operation). A controller that cuts absorption short every day starves the balancer.
Charge profile set for the wrong chemistry
A controller configured for flooded or AGM lead acid will do several unhelpful things to a lithium bank: hold an absorption voltage that is wrong for the chemistry, run absorption far longer than needed, float the pack at an elevated voltage indefinitely, apply temperature compensation that lithium does not want, and in the worst case run a periodic equalisation cycle that deliberately overcharges the bank.
The failure mode that looks like “not charging” is the opposite one: an absorption target set too low, so the pack never reaches the point where the BMS considers it full, state of charge estimates drift, and usable capacity quietly shrinks. Check the configured absorption voltage, absorption time, float voltage, temperature compensation and equalisation setting against the battery manufacturer’s documented values. The profile differences between chemistries, and which controllers even let you change them, are covered in MPPT vs PWM charge controllers for homelab solar.
For reference, these are Victron’s recommended charger settings for its Lithium Battery Smart:
| Setting | 12 V (12.8 V nominal) | 24 V | 48 V |
|---|---|---|---|
| Absorption voltage | 14.2 V | 28.4 V | 56.8 V |
| Absorption time | 2 h per cycle | 2 h per cycle | 2 h per cycle |
| Float voltage | 13.5 V | 27.0 V | 54.0 V |
| Temperature compensation | Off (0 mV/°C) | Off (0 mV/°C) | Off (0 mV/°C) |
Other manufacturers sit nearby: Battle Born gives 14.2 to 14.6 V as a typical charging voltage for 12 V batteries (Battle Born), and LiTime charges to 14.4 V, or 3.6 to 3.65 V per cell, with no float stage (LiTime). Treat the table as a sanity check against a lead-acid preset, not a substitute for your battery’s manual.
Array voltage below the controller’s start threshold
An MPPT controller cannot buck a voltage it does not have. Manuals document a minimum PV voltage relative to battery voltage that the controller needs before it will begin charging, commonly expressed as the array voltage needing to exceed battery voltage by a margin at start-up and to stay above battery voltage thereafter. Victron’s is typical of the form: charging starts when PV voltage is 5 V above battery voltage and continues while PV stays at least 1 V above it (Victron MPPT troubleshooting). A 12 V bank sitting at 13.3 V therefore needs 18.3 V from the array before anything happens, and a 48 V bank at 53 V needs 58 V.
An array whose string voltage was designed with too little headroom will start late, stop early and drop out under cloud. The tell is PV voltage present but sitting close to bank voltage, with no PV current. The fix is a longer series string, subject to the cold-morning open-circuit voltage limit that constrains string length from the other direction, and to the array sizing worked through in solar panels for a homelab: how many do you need?.
Array-side faults: shading, strings and soiling
If PV voltage and current are both present but production is a fraction of expectation, the problem is upstream.
- Partial shading. One shaded module drags its entire series string. Bypass diodes limit the loss without removing it. Shadows move seasonally, so an array that was clear in July can be shaded at 11am in December.
- One dead or disconnected string. In a parallel-string array, losing one string halves or thirds output while everything still reports as working. Compare per-string current if the controller or a clamp meter allows it.
- Soiling. Dust, pollen, salt, snow. Cheap to rule out.
- A failed bypass diode or a water-ingressed connector. Both present as one string performing far below its siblings.
Voltage drop, connections and protection devices
The unglamorous causes, and the ones that turn dangerous. Victron’s Wiring Unlimited covers the underlying rules in detail, and the practical checks are:
- Measure at both ends under load. With meaningful charge current flowing, compare voltage at the controller’s battery terminals with voltage at the battery terminals themselves. A significant difference is cable that is too thin, too long, or a bad joint. The controller then thinks the bank is fuller than it is and terminates charge early.
- Inspect every crimp and lug. A high-resistance joint gets hot. Discolouration, softened insulation or a smell is a fault to fix immediately, not later.
- Check the DC protection. A tripped breaker or blown fuse between controller and bank presents exactly as “not charging”. Battery banks can deliver enormous fault current, so overcurrent protection belongs as close to the battery terminal as practical and must be correctly rated. This is a safety item, not an optimisation.
- Confirm polarity and grounding after any rework. Reverse polarity on the PV or battery side damages controllers, and ground faults on the array can disable charging entirely.
When the telemetry is the thing that is lying
A battery monitor reading from an unconfigured or wrongly configured shunt will report a state of charge that has no relationship to reality, and it will drift further every cycle until it is synchronised at a known full state. Before concluding that capacity has been lost, confirm that the shunt’s capacity, efficiency factor and charged-voltage parameters match the bank actually installed, and that the monitor has recently synchronised at full charge.
On a Victron SmartShunt, the monitor resets to 100% only when voltage exceeds the charged voltage setting, which Victron says should sit 0.2 to 0.3 V below the charger’s float voltage, and current has stayed under the tail current (default 4% of capacity) for 3 minutes by default (SmartShunt settings). Set it above anything the controller delivers and the monitor never synchronises.
Where to stop
Anything involving conductors that must be rated, permanently mounted arrays, or bonding and grounding falls under local electrical code, and in many jurisdictions requires an inspection or a licensed electrician. NFPA 70 governs this in the United States and equivalents exist elsewhere. Diagnosis and configuration are one thing; rewiring a DC system carrying thousands of amps of available fault current is another.
If the diagnosis ends up being that the system was never large enough for the load in the first place, the sizing order is in sizing an off-grid solar system for always-on homelab loads, and the solar and battery sizer will produce the array and bank figures to compare against what is installed.
This guide is compiled from manufacturer documentation and published battery handling references rather than from installed hardware. Confirm every set point and limit against the manuals for the specific battery, BMS and controller in your system.
FAQ
can you charge a lifepo4 battery below freezing?
Not safely without heating. Victron allows its Lithium Battery Smart to charge only between +5°C and +50°C, Battle Born puts the floor at about 25°F (-4°C) for unheated batteries, and LiTime’s charger pauses below 0°C. The BMS normally blocks charge under those limits, so a cold bank refusing solar in the morning is protection, not a fault.
what voltage should a 12v lifepo4 battery charge at?
Typically 14.2 to 14.6 V, per Battle Born. Victron specifies 14.2 V absorption for two hours and 13.5 V float on its 12.8 V batteries, while LiTime charges to 14.4 V. Double the figure for a 24 V bank and multiply by four for 48 V, and use your own battery’s datasheet value over any generic number.
why does my solar charge controller show float but the battery is not full?
Usually because charging ended early or the monitor is wrong. Voltage drop in the battery cable makes the controller read higher than the battery, so it hits its absorption target too soon. An absorption voltage or time set below the battery’s figures does the same, and an unsynchronised shunt can report a full bank as partly empty.
can a lead acid solar charge controller charge a lifepo4 battery?
Only if its set points can be made to match lithium. LiTime’s guidance on lead-acid chargers allows short-term use when there is no desulfation or repair mode, maximum voltage is 14.6 V or lower, there is no float stage and voltage detection can be disabled. Equalisation and temperature compensation must be off, or the BMS may trip.