High impedance inputs are bad
At times, we have referred to our MX-5 conversion as a test bed for the Battery Management System (BMS). BMS design (two main ones, analogue and digital, many revisions of each), testing, and building has consumed some three years (at the rate of about 1 day per week for two people).
One feature that we were quite proud of, because no-one else seems to have thought of it, is our ability to measure the voltage drop across the battery links. This allows us to find out in advance when a link is developing (relatively) high resistance. High resistance is bad, because it limits power, and causes local heating. In severe cases, it can melt battery terminals or even start a fire. This is relatively less serious with a higher voltage pack (and more to the point, the consequent lower current draw). But it's still important.
It's a simple enough idea. You have a spare analogue to digital converter port (the MSP430 chips we are using have 8 I/O lines that can be configured as analogue inputs), and you measure the voltage across the link. One end of the link is the negative terminal of your Battery Management Unit (BMU) (you could also do it on the positive end). So that means one extra wire to get to the other end of the link. With the squiggle joins, these are mostly "for free".
The problem comes about if the link is ever very high resistance, or worse, completely open circuit. This even happens deliberately at battery breakup contactors, but you can just choose not to try to measure the voltage across those links. But unexpected high resistance or open circuit links cause the entire pack voltage to appear across the link. We were designing for a peak pack voltage when charging of 820 V, so the circuit has to be able to withstand (for a short time at least) that voltage, while normally measuring a few millivolts. The protection diodes in the microprocessor are capable of handling only about 2 mA. That implies a high resistance; ohms law say R = E/I = 820 / 2e-3 = 410 k. The power in that resistor is E*I = 820 x 2e-3 = 1.6 W, way more than a small surface mount resistor can handle.
There are also difficulties attempting to contain 820 V safely on a very small printed circuit board, where clearances are necessarily small. A single 0805 resistor, for example, won't withstand more than a few hundred volts; it's just too small.
We ended up with a megohm of resistance, split over 6 0805 resistors, limiting the current to 820 uA (= 0.82 mA), so the highest value resistors (180k) end up dissipating a power of I^2.R = (.82e-3)^2 x 180e3 = 120 mW. They are rated at 125 mW, so they won't burn the house down if the link opens circuit in the middle of the night while charging.
The circuit we have has a voltage divider made up of this 1 megohm resistor with another megohm resistor to ground. So the input impedance is half a megohm.
But half a megohm of impedance is substantial. A really high link resistance might cause 100 mV of voltage drop, so that might be the highest limit you'd want to set. The current needed to cause 100 mV into the voltage divider is I = E/R = 100e-3 / 500e3 = 0.2 uA, or 200 pico-amps. Is it possible that electromagnetic interference (EMI) from the motor controller might induce that sort of current? It turns out that it is, especially for battery boxes near the motor controller and motor. We now find that every link that needs an explicit wire longer than about 75 mm (basically, at the end of every row of cells, and in other boxes where there are sets of cells split to clear various interferences), we get nuisance stress from the BMUs.
We thought we tested the BMUs pretty thoroughly; progress on the conversion stalled for many weeks when we were chasing noise. It's still not obvious to me how we missed this. I guess at the time of testing, we weren't looking at the link voltages much, except for a few spot checks. Now we are using them to contribute towards cell stress, which cuts back the motor current.
We also don't know what impedance would be acceptable; all we know is that half a megohm is too high. We'd like to "fix" this problem some time, but it's also not obvious how to do this without needing a board full of resistors to handle the power dissipation, which will only be seen under fault conditions.
So maybe the reason that no-one else's BMS (that we know of) has link voltage measurement is that it's harder than it seems?
In summary, we failed to consider how sensitive to noise our circuit would become as a result of high resistor values. Perhaps also, if no-one else implements an apparently useful feature, maybe there's a good reason for it.
Edit: moved here unchanged from the "Some don'ts"
topic, to keep technical discussion out of that topic.