I upgraded my battery in 2024 to a larger 230Ah prismatic DIY pack with JK-BMS between the battery and the BMV shunt, on the assumption that the BMS shutdown of battery in case of issue is most important. Our use case is essentially as backup/emergency power, but we charge laptops and phones from it daily, with very occasional inverter use, and we use it for camping. Generally low periodic discharge rates of less than 110W, frequently just ~10W, with limited daily solar charge during spring and summer months of up to about 300Wh daily.
A while back we hit LVP at 11.5V when the BMV-712 still thought we had 57% SOC left after about 40 days. The JK-BMS (active balance) thought we had 85% SOC! The charger (Blue Smart IP67/25A) pushed in close to 230Ah, so the battery really was empty, and still healthy. A discharge test at high rate showed the cells behaving as expected (they were new in May 2024). Cells are balanced.
There has always been a significant discrepancy between JK-BMS SOC and BMV-712 SOC that I haven’t bothered to chase down yet. The fact that the BMS is between the battery and the shunt means of course that its consumption is not included in the BMV-712 SOC calculation. Its rated consumption is 15mA, which adds up to 0.360A per day, or about 14.4A over 40 days–a far cry from 131A (57% of 230A).
What should I be looking at to achieve better SOC accuracy over long periods of time, given these factors? Thanks for any suggestions!
The jks are notoriously bad at low drain soc accuracy.
And as you say it was left at a lower soc and the shunt wont be able to read the bms self consumption. You will also need to add the shunt consumption to the bms consumption as it was also a small drain on the bank.
100AH of self consumption in 40 days is fairly high though. Has it been set to be balancing all the time or just at higher voltages?
It should also go into a low power state or sleep mode how is that set.
It doesn’t see any charge/drain below about one amp. The RPi control system draws about 0.4amp this is ignored by the BMS SOC but not by the Smart Shunt. Consequently I can have up to a 60% differential between the two readings.
Having contacted Fogstar about this there is no way to alter the sensitivity of the BMS so I am stuck with it.
My solution is to ignore the SOC from the BMS and rely on the Smart Shunt, this works very well😉
From experience I’d say disregard any JK SoC readout completely and focus on getting the BMV Smartshunt set up correctly to synchronize at 100%, preferably combined with a balancing charge cycle, once in (very) while, months rather than weeks or days. The BMV in combination with lithium batteries can achieve extremely accurate SoC tracking that way. JK no way, same goes for pretty much any other internal and or diy BMS as far as I know.
Pro tip: use Node-RED to create a virtual battery, combine data from the JK and the BMV and calculate your own SoC% based on ‘consumed Ah’ values of the BMV.
About the same situation here: 24 V 280 Ah battery, JK BMS , Victron Shunt, only 720 W of panels. Regular load of 8 till 12 W, ocassionaly 350 W when the sun cooperates.
The SOC was forcefully set equal at the beginning (about 5 months ago).
It started to differ after a week, after a month the SOC from BMS was stuck at 100%, with short drops after discharges with 350 W load.
What I found is that BMS is highly ignorant to small currents: it was calibrated at 5 A, but at currents < 1 A the error is up to 50%. The smallest step is 0.2 A, so for ex at 0.6A current reading from shunt BMS often reads 0.2A. Right now 0.4 on shunt gives 0 on BMS.
My solution at the moment is to disregard BMS SOC and use the SOC from shunt when discharges are significant.
In parallel of that I made Node Red flow which calculates SOC from battery voltage at 2:00 at night, when battery is at rest, stores it and uses Wh from Shunt during the day to ad/substract % of SOC. I won’t use Ah (or Wh) from BMS due to zero point error and granularity.
In case of serious difference I correct the SOC on Shunt.
At the moment my solution due to simple approximation is meaningful at % from 20 till 80, working fine. I’m collecting data to work on better formula for voltage/SOC approximation to widen the % window.
As SOC is a calculated, not measured parameter, it is notoriously inaccurate. It is calculated from an integration of current over time, and a small current error over a long time can lead large discrepancies. These errors are normally kept in check by either synchronising to 100% at full charge or by Voltage steering (only in some systems). The main source of error is in very low current measurements, and also the frequency of the current measurements. For example, a 500A shunt, read by a 12 bit A/D, has only a resolution of 122mA. add into that an uncertainty of +/-1 bit, and the lowest current that can be measured is about 250mA.
250mA over 7 days gives 42Ah as an error. As recommended above, concentrate on making the Victron shunt readings more accurate, as there is not much you can do for the BMS readings.
Not sure what the ADC precision is of the BMV Smartshunt but (with a 500A shunt) it has no issues to accurately (coulomb)count an average 0.1 Ah charge or discharge over a single hour. I suspect it uses at least a 16 bit ADC if not higher even. And if not they’ll have to come out with one soon because 20bit coulomb counting chips have been mainstream for some time now. INA229 and INA228 for instance. But from real world experience I can say the smartshunt is pretty darn accurate doing a full 2000Ah discharge / charge cycle hitting 100% SoC (0.0 consumed Ah) right at the end of the CC-CV curve.
Only used 12 bit as an example. Victron shunt is better than that. giving +/-10mA resolution for the 500A model. What I find most affecting accuracy, other than basic settings is: Frequency of measurement and charge efficiency settings. The latter can be manually trimmed to offset long term drift. frquency of measurement needs to be high - typ <25mS interval, in order to catch spikes and noisy current waveforms accurately. Else good analogue averaging needs to be done before the A/D based on Nyquist sampling.
Our lithium batteries have a cycle efficiency of around 99.95% (Ah, not kWh) so efficiency is set to 100% and peukert to 1.00. Goes real well with charging 200A flat and discharging 150A average with peaks upto 400A. 50Hz ripple from the MultiPlus doesn’t seem to impact anything and neither do the primary loads (MP, other inverters, motorcontrollers). Not having any nasty high power AC or DC loads (low frequency pwm heaters, triacs etc) helps as well. Come to think of it, the only directly noticeable source of SoC deviations come from the use of the (passive) lithium cell balancers. And even that rarely happens, mostly in the build and test phase of a new battery.
PS that 10mA resolution is on the digital communication end, I’d be surprised if it’s not better internally. I think the limiting factor could well be those long analog cables from shunt to ADC that nobody seems to shorten to correct length, twisted pair or not, 10 meter is a lot for measuring microvolts. We always cut those cable to length and crimp a new RJ12(?) on, maybe that explains a part of our good experience as well?
It’s a long-standing problem. SOC values for any BMS are just rubbish and add more confusion than they do any good. I completely ignore these values. A properly calibrated shunt is much more helpful.