I'd like to throw into the mix a recommendation to take a look at the existing gas gauges available on the market. I've mentioned this in other threads, and hate to sound like a bad recording here, but TI, Maxim, and others have already done a huge amount of the hard work needed to track capacity accurately.
I've had incredible success with TI's gas gauges (bq78PL114, essentially a one-stop-shop for BMS' modules up to 12S, stackable to any voltage). It has:
- Tracked capacity to better than +/-5% for charge/discharge current levels up to 5C/100C. To better than +/-2% for 5C/10C.
- Only draws 300uA.
- Includes active charge-transfer balancing operating during charge, discharge and rest.
- Has a built in 5-LED SOC display capability.
- Operates standalone (no microprocessor or firmware needed).
- Has incredibly flexible safety settings (almost 200 of them, allowing each user to tailor their BMS without rewriting firmware or using jumpers).
- Protects the cells from a huge range of potential problems.
- Can output a wide range of data for review via a serial port if desired.
Their line also includes single-cell gauges that can be used by stacking them up, optoisolating their serial ports, and reading each one via a micro to get the SOC for each cell. Not as elegant as a multi-cell chip like the bq78PL114, but more modular.
Using any of these off-the-shelf gas gauges lets the designer concentrate on physical implementation of the design (as I've mentioned earlier, IMHO the weakest point in most BMS') like the case, MOSFETs and cooling, and not worry about developing a huge amount of firmware. Some gauges are tied to just the list of specific cells they have developed configuration files for but others are "system side" gauges that are designed to reside outside the pack. These learn on the fly what the capacity of the cells are, some without even going through a complete charge/discharge cycle.
Just tossing out an idea.
