I am an embedded software engineer and have a background in EE. However, I have a personal project idea that may require many products that I am only superficially acquainted with. I am looking for guidance on which components will allow me to meet my design goals. I am hoping to avoid many days of on-line research by relying on your expertise. I have done some reading on this forum to see if any previous topics were close enough to be helpful. My project is not radically new, but the configuration and application I have in mind is different enough that I feel justified in starting this new topic.
The project is a battery management system (BMS) used to manage a personal energy storage system. I will use a series stack of 40 AH lithium ion battery cells. The series stack consists of 16 cells. Thus, the DC output if the stack is approximately 50 volts. I will use an inverter to produce 110 VAC to power small appliances and lights in areas where there is no power, such as when I am camping in the mountains.
I like the idea of using Arduino compatible products to implement the BMS because they are inexpensive and highly supported by the huge open source development community. However, I am new to this community and don't know what all is available. One of my goals is to use libraries, apps, boards and shields that are already developed and proven, so I can minimize my personal development time and avoid a lot of customization for the project.
These are the specifications and goals of the BMS design.
- I need to sample the cell voltage of each battery cell in the series stack. I could treat the stack as a stack of clusters of cells. I could use an Arduino mini, as a cluster manager, to sample the cell voltages in a cluster of 6 cells. Using this approach, I would configure the stack as 2 clusters of 6 cells and one cluster of 4 cells. Each cluster would use its own cells to provide power for the Arduino mini cluster manager board. With this approach, I have the challenge of gathering the cell voltage data with some form of isolated data bus. Perhaps a sensor array approach using Blue Tooth LE would work to send the data to one of the Arduino mini boards, which acts like the master controller. I like the idea of using the BLE approach to also transmit the data to an iPhone or IPad and use one of the many apps that are available for monitoring and controlling such a system.
Alternatively, I could just use an Arduino Mega based board that has enough analog inputs to directly sample all the cells itself. By adding a BLE shield to this board I could accomplish the same monitoring and control interface as above.
Another approach would be to use a single Arduino Uno or Mini and add a custom sampler board that employs an analog mux. Then all cells could be sampled by using a single analog input.
This is one area where I am looking for guidance. Of the 3 approaches I described, which would be the least expensive and easiest?
I need to use a digital output for each cell to control a FET that would connect a balancing resistor across the cell. Again, I could use a single serial output to set the bits in a 16 bit shift register to accomplish this functionality. It looks like the trade-off is using the expensive high I/O Arduino board versus having to build the custom circuit to do the balancing with a minimal I/O Arduino controller.
I need to control 2 relays (or contactors), one to connect the battery stack to the inverter and one to connect the battery stack to a charger. Theoretically, I could get away with using only 1 relay at the output of the battery stack to protect the batteries from being over-charged or over-discharged. However, 2 relays gives me more flexibility and would be preferable. At any rate, I need to use an additional 1 or 2 digital outputs to control these relays.
Possibly, I could see the need to use another analog input to measure the temperature of the inverter. If the inverter gets too hot, I could use another digital output to turn on a cooling fan. These are peripheral issues that I will investigate further as I specify the inverter for the project.
So there you have it. These are the broad strokes of the design concept. I am leaning toward using an Arduino Mini with a Red Bear BLE Mini and bread-boarding the sampler and balancing functions. The BLE will allow me to monitor the system status and override the relay controls if my battery management algorithms allow the system to get into a corner case it can't get out of.
I would appreciate any discussion of pro and cons or reasons why my preferred implementation would not work.