Hello folks,
I've done some research on arduino BMS and have come across all the posts saying it's not worth it or a fruitless effort.
I'd still like to give it a try because I can't find any of the shelf solution that fits the needs of my project.
I have some ideas on how to overcome the usual challenges ( ground loops, Isolation, etc ) while still completing the task.
There are the details of my project
Battery pack 6 Cell Li-Ion 25.2V
125AH (she's a big pack )
Charging rate ~~40 A
Discharge rate, up to 100A
I don't want to use any relays if avoidable
I dont want to use a Voltage controlled Oscillator as it sounds more confusing than my plan.
Cost is not a significant factor in this project.
My goal is to optimize the cycle life of this battery pack, so i want to utilize 20-80% SOC. I am unable to find an off the shelf solution for programmable battery management that allows me balance cells within the range of 3.4 to 3.9 V. Most BMS systems are hard limited to balance if a cell exceeds 4.2V. The problem for me is if my charge controller is set to CV charging at 23.4V ( 3.9 V per cell) and one cell or a group of cells drift to 4.15 V the pack will be unbalanced, but the BMS system wont begin balancing unless a cell exceeds 4.2V. This will cause the pack to appear artificially charged but have diminished capacity because some cells never reached the desired 80% soc.
Here is what I would like to do.
Arduino Mega 2560
Build a voltage divider circuit that will allow me to measure the 6 individual cells using the analog pins. I understand I will loose resolution due to the voltage divider, but with only 6 cells this is acceptable. 1024/6cells = 170.6 divisions per cell, 4.0v/170.6 = 0.0235V per division. This is acceptable to me since I would be balancing in the range of 3.9V +- 0.1V. So I'll have about 5 ADC counts of variability to maintain my desired +-0.1V balance between all cells.
So the ADC can determine my battery voltages O.K.
Now I need to initial a discharging function of a cell in case the voltage of any one cell exceeds +0.1V of the pack average. ( eventually I would like to also charge an individual cell if it is -0.1v pack average, is is not important at this time )
I'm thinking doing this via optoisolation.
The component I had my eye on for this is the H11LX logic level optoisolator.
Once the Adruino has determined the voltage level of a cell is above spec, it can send a voltage high to the corresponding Opto input. All Optop inputs will be grounded at the arduino and powered of their individual Digital output pin.
Here is where I need help.
The opto's need to be fully isolated to their own cell, otherwise ground loops are again a problem. The opto should be able to be grounded at the - terminal of the cell it is monitoring and feed itself from the + input. So it will only ever see voltages of 3-3.9 V. It's output needs to pull low a BJT or maybe a MOSFET or something to sink some power out of the pack and perform the balancing function.
How do I set this side of the circuit up? The opto can output 50ma, and I want at least 1 amp of balancing power. ( 5 W ), but 5A would be better.
What components do I need to accomplish this aspect? I'm thinking 6 individual transistor discharging circuits?
Does anyone see faults with this plan?
The arduino will also control the main disconnect contractor for the pack in case it is unable to balance a cell and it exceeds 4.2V or discharges below 2.5V
Thanks