Once I get that voltage reading I need to convert it into an estimation of the state of charge of the battery. I managed to find a good table that lists state of charge versus voltage and that is temperature compensated. I have a temperature probe on the battery terminal to measure the temperature. As I use the van all-year-round and live in the UK and sometimes go to France, this means the battery temperature could vary from 0 to 30 degrees C.
The table I found is on Battery FAQ and has a spreadsheet that lists no only voltages for normal lead acid batteries, but also those with calcium in. The penny has now dropped that my Lucas LX31MF batteries are calcium batteries. This explains why they settle at 12.80V instead of 12.65V. Also why they seem to need a higher charging voltage. I think for the past few years I have been charging them at too low a voltage and hence their poor performance.
I took the tables in the spreadsheet and ran them through some curve-fitting software to work out an equation that best fits the values. This makes is much easier for me to calculate the temperature compensated voltage and the SoC. The equations I came up with in the end for a calcium battery are:
# Given voltage and temperature return a corrected voltage
def tempcomp(v, t):
return v + (4.775e-05 * t ** 2 + -0.0034 * t + 0.0581)
# Given voltage return an estimate of the state of charge of battery
return (v - 11.76) / 0.0104
Of course these are approximations Even worse they are approximations taken from random data on the internet, and not from data specific to my battery. But then, my battery manufacturer Lucas, doesn't publish battery data. Given that most battery monitors out there don't allow you to input any parameters other than just the battery bank capacity, I think I'm doing at least as good as they are.