RevDon
100 W
You people are amazing
Let me know when you have a finished product :wink:

bquick said:These are also the cells physically closest to the motor (one inch away). So, they may be getting bombarded with noise from the motor. Maybe I should try wrapping the pack with aluminum foil?
swbluto said:It would seem like there should be. As a part of my study into electronics, I'm getting into digital electronics and I should be able to delve into this topic soon, especially as I have some future interest in an "effective" BMS.
I don't understand what's so hard about it, either. The bare-bone logic and the digital sampling seems like it should be easy.
rf said:swbluto said:It would seem like there should be. As a part of my study into electronics, I'm getting into digital electronics and I should be able to delve into this topic soon, especially as I have some future interest in an "effective" BMS.
I don't understand what's so hard about it, either. The bare-bone logic and the digital sampling seems like it should be easy.
With a bit more thought it turns out the simple subtraction approach is good enough for my purposes. Don't need a huge amount of accuracy. The 10-bit A/D on the MCU (the Atmega168 I have) should yield about 2% or 3% accuracy per cell, worst case. Readings of lower cells being more accurate, of course. Just need a 20-way multiplexer to connect to all the cells.
More accuracy can be had with higher resolution A/Ds or electrical prescaling. The whole thing seems much simpler today. Hmm. Time to glue something together.
Richard
I should read the previous posts. :lol: (Suspects everything has been thought out)
So you're sampling individual cell voltages using a 20-to-1 mux and comparing it to "ground"(or the ground part of the battery pack), storing the results cumulatively and using subtraction for each cell-sample to find the approximate cell voltage? Is this data being used for just LVC? Or are you also using it to detect unbalanced cells? I was thinking about adding a piezo-electric buzzer and use differently-numbered "buzzes" to distinguish the problem and avoid cutout altogether for just LVC(over-current cutout would still be there.). I originally thought of using a 20-to-2 mux to detect the individual cell voltage but that gets a little bit more complicated.
I'm getting an Arduino Diecimila(sp?) which is based off the Atmega168, so I'll be experimenting soon.
Yes it was. We're not talking about a differential mux here. Simpler. Scale the whole pack voltage down to fit within the A/D's range, then isolate the cell we want to measure. Sacrifices resolution, but there's still enough to work with. (If not just use a better A/D.)lostcoyote said:nevermind.... wasn't the differential MUX explored on page 1 already?
No plans of volume manufacturing. So use average parts and align everything once with a decent meter. Store the offset and scaling factors into the EEPROM. With enough consistency and resolution the MCU can easily make up for lots of things.lostcoyote said:any temperature coefficient induced errors to worry about?
would have to calibrate the initial resistor network but maybe the high precision's not a requirement either if using 1% 10ppm metal film. at least all the resistors would track over temperature provided you don't have them sitting on any hot spots on the PWB.
Calibration is expected. Suspect one-time will be sufficient. The initial application is monitoring and logging, so this is a non-critical application.Randomly said:There are a few problem areas to the approach.
If you need a 20:1 divider to scale the voltages to the A/D range you end up reducing your A/D resolution by 20, you amplify the effects of thermal drift by 20, even the resistor voltage coefficient amplified by 20 starts to be a noticeable error term. 20x multiplication of the resistor tolerances means you absolutely MUST calibrate every single divider stage and store the gain errors in the MCU for correcting readings.
Charge balancing is not my goal at this point. Though if you use this system as a charge limiter I suspect 0.1V should be fine. If you charge each cell separately to a 0.2V tolerance it should be possible to realize close to 100% capacity by modifying the charge protocol accordingly. (I'm still using per-cell chargers with my bike. The voltage tolerance on the cheap Voltphreaks chargers is wider than this. No problem.) But I'm a resolution junkie, so will probably be looking for ways to increase it.0.1V resolution is sufficient for a LVC system, but it's not sufficient resolution for decent charge balancing.
I'm a programmer. My knowledge of electronics is more limited. Voltage dividers seem an acceptable tool to scale the pack voltage to fit the A/Ds range. That essentially maps 80-volts of input (my 20-cell A123 pack) to the smaller 5-volt range (negotiable) of the A/D on my Atmega168 MCU. Roughly, 80-volts in equals 5-volts out. 40-volts equals 2.5-volts. 20-volts in from the battery pack equals 1.25-volts at the A/D. Simple division.You can go to 13-14 bit A/D to try and make up for it but now you really have to start battling with the thermal drift problems. A 14 bit A/D has 60ppm resolution (roughly 250 uVolt per count), that's only 6 degrees of temperature on a 10ppm thermal coefficient resistor. Unfortunately 10ppm resistors also cost about $1 a piece. More reasonable costing parts are 25ppm which is only 2 degrees per count of your A/D. Intrinsic thermocouple junctions between the PCB and resistors will be in the range of 40 uV per degree. Resistor voltage coefficients can be in the 5-10ppm range. You also have to deal with noise and ground loop errors at these high resolutions so careful PCB layout becomes important.
Calibration is expected. Low precision parts should be fine if they don't impart additional drift of some sort.The second issue is that those high precision resistors don't come in any larger values than 0.5 M - 1.0 M. [...]
Not a concern at the moment. But will be, should this pan out for other functions.You have a voltage divider hanging off each cell, the top cell is going to be constantly drained by ~70uA, but the bottom cell has to supply current for all the dividers connected above it which will be on the order of 1.5 mA. This situation constantly unbalances the battery pack to the tune of 1 Ah a month. Not to mention the danger of undervolting the cells if you leave the dividers connected and don't charge the thing regularly. It might be prudent to implement some way of disconnecting those dividers when you don't need to read the cell voltage.
Cool!Other than that it should work.
I think I have some of those. Will probably play around with the onboard 6-channel mux to start though.lostcoyote said:maxim makes a 16:1 or dual 8:1 MUX which handles rail to rail input voltages as well as a supply voltage of +/-20v.
http://datasheets.maxim-ic.com/en/ds/DG406-DG407.pdf
going with something like that, one could use a much smaller divider network (not 20:1) and tap near the middle of the battery pack network as virtual ground (or at the most negative if desired). [...]
simplified schematic:
(note that the MUX enable pin can be used to shut off the divider chain when not in use) [...]
Randomly said:You are going to have to watch out for the Common mode voltage rejection errors of your diff amp from resistor mismatching.
Also the matching of the Mux channel resistances.
You're also going to have more than 45V across your bottom MUX from Ch1b to ch16b when those channels are off. Similar problem for the top mux.