I spent all day today going through those hundred technical articles on SOC (state-of-charge) and SOH (state-of-health) algorithms for lead-acid batteries. They were all fascinating, but the one I really liked involved a Kalman filtering algorithm to constantly estimate the internal parameters of the lead-acid battery.
The algorithm models the battery and samples the current draw and voltage across the pack. Based on the current, it estimates the new voltage for the next sample time. It then compares the actual voltage to the sampled voltage and alters the parameters of the model in real time to match the actual voltage. In a short duration of time (on the order of 4-5 minutes with varied driving) the model parameters converge and prediction of the next voltage becomes remarkably accurate.
Throughout the day, the parameters of the battery change as the algorithm tunes itself and we can directly determine the SOC (state-of-charge) based on the modelled parameters. The parameters even drift very slowly over the lifetime of the battery so we can actually determine the SOH (state-of-health) as well. I'm sure there will be issues given that the pack contains many batteries. The computation also requires a rather powerful DSP (digital signal processing) microcontroller to refine the parameters.
Despite the high compute power, I still think this algorithm is worth pursuing because of its accuracy and the possibility of its use in more mainstream electric vehicles for the average user who doesn't want to know all the details of monitoring a complex battery pack for SOC or SOH. ("Just tell me how much battery fuel I have left and when I need to replace a battery...")
I also spent a few hours researching the CAN (controller-area-network) bus that's used for communications in some automotive applications these days. The CAN bus uses differential signalling, which makes it highly noise immune in automotive environment. This will be important for the battery management system in case I end up using a central controller that talks to mini-controllers on each battery for monitoring. It saves on wiring and allows for many measurements (such as voltage, current and temperature). If I have time, I might even write up code for a PIC microcontroller to convert CAN bus traffic to serial port debugging messages.