I've now owned four e-bikes, and in the process chewed my way through a dohexen of sealed lead acid batteries, and two LiIon flat-cell packs.
My latest battery pack I've rolled myself from 40 (eventually to be 70) high capacity 16650s assembled as 10 x 7 cell hexagonal bundles with a circular PCB at each end. Taking a leaf from a combi-van conversion project I saw on YouTube each cell has its own .45mm2 (6A) fusible link. Two lots of 5 bundles were then put inside a couple of lengths of PVC pipe. At the same time I had the hub-motor from #3 moved into a Big-Foot frame for the latest rather beastly looking incarnation.
About that time, I was also watching one of the uCurrent videos and started to wonder if it would be possible to use that fusible link as a current shunt for monitoring purposes, since the ESRs of each cell whenever under load or charge should in principle introduce a tiny but measurable current bias relative to each other. Whenever unloaded, any internal discrepancies between cells would also manifest as they settle down and balance themselves over time, as would any self-discharge behaviour. Math. (Integration mostly) should also allow us to ascertain the exact capacity of each individual cell and monitor its state of charge at any given time.
After a bit of back and forth on another forum, I've come up with this:
Loose the fusible link(1) and use a solid spiral trace for each individual cell on the circuit board for the current shunt.
Connect each shunt to one leg of a 4051 analogue multiplexer, the eighth is left open circuit to minimise (already minimal) parasitic loads.
Three legs of a microcontroller address the multiplexer.
On the other side of the multiplexer one half of a dual op amp, (biased 25/75 for charge and discharge) feeds into an ADC of the microcontroller.
The other half of the op-amp divides and biases the voltage across the seven parallelled cells and feeds a second ADC to give 10 bits of resolution between 2.5 and 4.5 volts.
Power for board comes directly from the cell pack being monitored. Which leaves us with 9 floating grounds for a nominal 36 volt, 10 "cell" battery.
So One last leg goes to one side of a bi-directional IR-LED photocoupler for comms. And that's 6 I/O ports, and an 8 legged package for the brains of the outfit.(2)
Each microcontroller monitors its own seven cells every millisecond or so sleeping the rest of the time and integrates the currents in and out over time.
Finally, connect the packs in series electrically, and the comms in parallel with a common 2 wire link to a master controller, probably with a matrix display for graphical visualisation.
2 8 pin and 1 16 pin chips, and a handful of passives (mostly resistors) on a 50mm dia board. Doable, if a little tight with even through hole components if you cheat and fold the legs of the 0.1 inch centipedes under and surface mount them. A breeze with nothing but proper SMDs all round.
$5 bucks or so a board ($50 total) in small to medium volumes is a small price to pay for a 70 (or more with fanout) channel BMS that lets you spot a bad cell in the middle of a $700 pack, the moment it begins to go sour. Another 20 or so $mackers for a Raspberry Pi Bluetoothed to your smart device and Bob's your uncle.
(1) software and a power mosfet can act as a master fuse. Or, with a larger pinout microcontroller mosfets could be placed on each cell to isolate bad cells or even switch between cells on the fly to achieve the high charge and discharge currents upon which the LiIon chemistry thrives.
(2) (Can I get a "YAY!" from Sagan? That's a massive improvement on revision 0.1 which was 8 op-amps (matched in software) monitoring 7 cells in parallel, and a 14 legged PicAxe busting it's hump with unnecessary compensatory math when the poor little thing is already integrating 7 variables against an 8th.