Quote:
Originally Posted by Daox
Thanks for finding those chips! I'll have to take a look at them once I get the BMS in the car and running things properly.
|
I was looking for myself - your comment that others have done this and some of the work should be packed into a chip struck a cord. And you were right. It's only fair that I share the info.
I've been looking through the various Battery Management Systems for the past couple of days. The Open source projects I can find seem to use PICs of some sort. A lot of them used quite a few discrete components so they had PCBs fabricated.
Many people seem to find PICs easy to use. I find the code pretty easy to read but have struggled to get anything running in the past. I've had trouble with missing libraries, the wrong version of libraries, with 'examples' that have errors and won't run, with defines for a specific chip that I can't locate so the code does weird stuff, and likely a whole lot of other stuff that I simply have not solved so far .... I must not be bright enough to use a PIC. I need this system to be RELIABLE.
I like the Arduino so far.
I'm not looking for a Management system so much as a Monitoring system. If you monitor each battery in the whole pack you should be able to identify the weakest of the bunch. From there you can deal with it in any way that you like. The key for me is to IDENTIFY it.
I like what you have so far.
*Begin Rant*
The auto-balancing thing scares me a *LOT*. I find that few people know about Failure Mode and Effect Analysis (FMEA). Assuming that parts DO WEAR OUT eventually and designing a system to survive the failure and continue to do safe things in that failure mode seems like an almost-lost art.
It's my family at risk if a Battery Management System fails in some strange way that burns down the garage that my car is in, which is attached to my house. I may be a bit paranoid, but that has worked for me so far.
Heck, installing things backward is pretty common. On most systems, wiring it wrong causes immediate damage to core components - and they recommend throwing it away and ordering a new one. What happened to fuses? And Buffer chips? Having to order another one is a pretty extreme penalty for a simple wiring error, particularly when you are expecting people who don't understand the wiring to paint-by-number it together.
*End Rant*
I am building an experiment platform - SalvageS10 - and it will (at least initially) be running off a mixed bag of batteries. Pretty much anything that I can find and that is cheap. Well, not anything - it has to be safe to bolt onto a moving vehicle. I presently have about 80 old NiCd cells (1.2V each) from an old electrical substation in various states of ill repair (not likely safe to put in a highway vehicle, but OK to use on my yard for testing with some precautions), 4 used deep cycle Lead Acid flooded batteries (12V), an AGM battery (12V), around 40 Panasonic 7.2 Ah Gel-cells from a UPS in pretty bad shape ... and I expect to acquire a couple of large and heavy forktruck batteries that have been traded in for the core refund but *may* still have a couple of hours of running time in them.
So I would like to connect arbitrary batteries of widely differing voltages and chemistries together in any order I like and just monitor the heck out of them. The LTC680x chips allow up to 12 batteries and a total of 60V, so I won't be able to put the batteries in ANY order ... but the chips appear to be pretty flexible.
I would like to have the batteries numbered something like this:
10A1 in the format PPBC
PP -Pack - group of batteries in series. Force 2 digits
B - Battery - one of a series within a Pack, can contain more than one physical battery in parallel - a single Letter gives 26 maximum batteries in a pack
C - Cell - The smallest unit. Not used if there is only 1 battery in parallel. Used if 2 or more are in parallel. Single digit gives 9 maximum cells in parallel to make a battery.
I'd like to start with an Arduino reading a current sensor, like you have, and build from there.
If I can get the Arduino to read a configuration file (CSV file) from an SD card, which labels all of the batteries in all of the packs and specifies minimum, maximum, and alarm voltages ... that should be a good start.
The Arduino would then read all of the information from the LTC6803-2 chips (I will likely have at least 4 of them) and place that information into 4 arrays, I can log that data to csv files on the arduino and alarm when a cell went into alarm and for how long. That gives me history for each battery as long as I track it through whatever location in a pack that I put it. I have a small LCD module that I hope to connect to the Arduino that can give me some information. The alarm values will be guesses to start, but I can use the data to compute averages, show some discharge trends for the batteries and figure out min, max and alarm values (hopefully) pretty quickly.
There is another Arduino that will be connected to the PLC I'm using on SalvageS10 that will be logging speed, tach, amps, pack voltage, motor current, motor voltage, as well as every input and every output. That logging will also be to an SD card as a CSV file. After the test runs I will be loading all of the data together - likely into a spreadsheet - and correlating the timestamps. Weak batteries will be placed in parallel with other weak batteries or simply removed from the packs and replaced with stronger batteries - at least that's the plan.
The LTC680X chips will also measure temperature of the cells, ambient temperature, etc. I'm not interested in thermal management right now but could be in the future.
SOC is an interesting topic. The PLC on SalvageS10 will attempt to count coulombs to determine when it is time to shut down the test and recharge. It will be interesting to compare the coulombs measured by the truck and the coulombs measured by the Arduino.
A mixed set of a specific battery type (Flooded lead acid deep cycle, AGM, Gell cell, NiCd) would not likely work well with series charging of the whole pack since they self-discharge at different rates. Mixing chemistries will make that even more impractical, so I'm not sure how to charge this system. Some experimentation and a lot of manual charging with a maximum timer is likely the ticket initially.
That's where I'd like to be going in the near future. If that fits with your ideas (or at least - MOSTLY fits with your ideas) I can post the information to your thread.