Lithium Battery Management System

I am currently working on a project where I use an Arduino Uno to measure the voltage of the battery pack and turn off the Arduino Uno when the voltage gets too low or too high. Each battery pack consists of 4 batteries in parallel. As I am new to using Arduino, I am looking for suggestions to help me get started. Any assistances will be greatly appreciated.

That may take a bit - perhaps a lot - more explaining.

For one - the rationale - you may wish to shut down the Arduino if the battery voltage falls too low, but why too high - and how would it go too high? The Arduino will operate perfectly fine up to 5 volts and the only way the battery would do that would be if the charger had failed and it was dangerously overcharging.

The question is - if it turns off in either case and the Arduino is being used to perform the monitoring, what turns it on again?

I think paralleling individual single LiPo cells is permissible.

Sorry for my lack of explanation. The project I am doing is for a battery management system for a solar car. As I will have 4 batteries connected in parallel as a battery pack. I will have a total of 11 battery packs connected in series. As I am using lithium ion battery, I will not want to over-charge or over-discharge it. Thus, I need to set a maximum voltage of 4.2V and minimum voltage of 2.5V. Each of my battery packs will have 3.6V and 12.40Ah.

Instead of turning off the Arduino, I would like it to turn a relay on to prevent the battery from charging the motor. Sorry that I didn't state properly.

This is the currently what I have programmed.

I have not tried using a battery pack to measure the voltage yet. I only tried connecting it to the computer and using a potentiometer to control the voltage and see if the led is able to turn on at the right voltage.

Is this programming alright or is there some things I have to change?

Please advise, thanks.

See #7 for posting a sketch: http://forum.arduino.cc/index.php/topic,148850.0.html

I would use N.O. contacts on the relay for charge current and drop out the relay to stop charging (turn on the relay for charging). Also N.O. contacts for current out of the battery bank, drop this relay to stop the discharge. Add comments as you write you code.

Your question is a bit vague. If you are going to have 11 battery packs in series , why do you just want to measure one of them. You will need to measure them all , and thats a far bigger exercise than just measuring one. Can you explain a bit more about the project.

mauried: Your question is a bit vague. If you are going to have 11 battery packs in series , why do you just want to measure one of them. You will need to measure them all , and thats a far bigger exercise than just measuring one. Can you explain a bit more about the project.

Thanks, I will take note on the NO contact and I will add comments as I write the code.

mauried: Your question is a bit vague. If you are going to have 11 battery packs in series , why do you just want to measure one of them. You will need to measure them all , and thats a far bigger exercise than just measuring one. Can you explain a bit more about the project.

I am going to measure all of them, but for now I am just trying to measure of them to make sure it is able to work. As I am new to this, I am trying to figure out how to measure all the battery packs at the same time. So I was hoping someone can give me some advise.

Just a note:
Using N.O. contacts. If the signal between the Arduino and the relay fails/is lost, the relay is de-energized and no charging and no discharge occurs.
i.e. the fail safe is a battery disconnect condition.

Measuring 11 battery packs in series is a lot harder than you might think. This is because the arduino can only measure voltages with reference to itself up to a maximum of 5V. Therefore you have to have a whole lot of electronics to isolate the batteries further up the chain. This comes up about once a year and spawns long threads but a satisfactory conclusion is never reached.

For example one option is to have a voltage controlled oscillator on each battery and couple that oscillation into the arduino with a capacitor to isolate the DC voltage. Then use the arduino to measure the frequency and hence the voltage. Another way is to use optically isolated linear transfer. That will involve op amps and a two sensor opto isolator.

This is not a beginners project.

Heres an IC specifically designed for managing 12 series LIPO batteries for the EV market. http://www.intersil.com/content/dam/Intersil/documents/isl7/isl78600.01_product_brief_hr.pdf If you really want to do this , then its best to use electronics specifically designed for the purpose. Theres a lot of energy in a series LIPO battery string, and you sure dont want anything to go wrong. As Grumpy_Mike has indicated, this is not a beginners project.

I think what the OP wants to do is simple enough.

He has a basic 4P11S lipo setup.

each of the 4 packs (assuming all the cells are good) should not be discharged beyond a certain low voltage, or charged above a certain high voltage.

I would have the low at 2.5v myself - far too low for lipos - 3.3v or 3.0v minimum imho.

RC forums will be a great help to you here if you are not on them already - also try pedelec, endlesssphere, etc (electric bike forums).

I have 3 electric bikes, and 2 quadcopters all using lipos so am reasonably competent in this area - and in fact you got me thinking this is a great idea for me to add to my electric bikes (I have low voltage buzzers on them at the moment, but a relay cut out would be much better)

So, yes, I see no problems with yor approach - you use 4 analgoue pins as inputs, each measuring the under load voltage of each for your 4 packs.

If a pack dips below thersholdmin, you flip one of 4 'LOAD' digital output pins high, activating an external relay (of appropriate spec) to cut off power from that pack.

If a pack rises above thersholdmax, you flip one of 4 other 'CHARGE' digital output pins high, activating an external relay (of appropriate spec) to cut off charging to that pack.

This solution I am assuming is not an attempt to allow proper balance charging of your packs, but would do the job I think.

Sorry, just re-reading my reply and it might not be that clear.

On most arduinos you have 8 analogue pins.

you have 4 parallel packs.

so you can 'sample' a maximum of 8 individual cell votages (i.e. 2 per pack) and then decide to cut off that particular pack (from load or charge).

With a decent 11s pack all balanced and no bad cells, this should do the trick ok.

Of course it's no substitute for monitoring every single cell as the other OP suggests (via the IC), but as a quick and dirty way, and a 'better than nothing' approach it will work fine.

Also, if only implemented for discharging rather than charging the worst you can expect is discharging a pack too much if a (non sampled) cell goes bad.

An alternative would be to monitor the total pack voltage (11 cells x 2.5 = 27.5v) and if lower than that, cut it off - this ensures you'll always stop load irrespective of what cell fails - but it is NOT a safe way to control charging (since cells could charge higher than 4.2v if other cells are bad).

Obviously you'd need some extra electronics though to allow the measurement of 27.5v

stu

No offense to arduino, but I would look into automotive quality parts for an automotive application unless you are only building a few of these devices and not trying to go into production. I do not consider Arduino to be automotive quality and I would hesitate if I learned my car was running an arduino board without significant testing. Similarly, I'm hesitant to hook up an arduino to keep me alive in a medical application.

This does not sound like a job for arduino, but a much more custom circuit, possibly an individual uP for each battery with some conglomerating circuit that could be an arduino acquiring the results from each.

Hi, I've been looking for an easy solution to cut out my battery but haven't found anything yet. All the RC stuff seems to work in conjunction with an ESC-which I don't need. I was wondering if a latching relay could be used in conjunction with the audible alarm to isolate your battery. You could have a reset button. If you use a normal relay surely that will be using power when you don't need it to. John.

Take a look at this:

http://www.hobbyking.com/hobbyking/store/__22693__FrSky_Lipo_Voltage_Sensor_FLVS_01.html

I use it to check my LiPo's. You can connect two and measure 12 cells. It also has a kind of serial ouput you could feed into the Arduino. The good thing about FrSky is it is Open Source , so yoy can find the schematic and description of the protocol on their website

https://hobbyking.com/en_us/frsky-flvss-lipo-voltage-sensor-with-smart-port-1pc.html

I read this with great interest just now and despite the thread being old, above is an updated link for the post by Erni : the 6s Lipo voltage sensor.

I have been looking at Lipo and LiFePO4 cells and their respective BMS boards on AliExpress, out of general interest. That is to say, I have numerous interests: at work we use a 50V battery pack in a device a bit like a golf cart, in fairly extreme weather conditions. At home, I have a faulty electric bike plus various ideas for arduino / garden projects and the need for a fairly powerful battery in a remote garage that is far from mains power ( and wind / solar is impossible there ).

sarah87: As I am using lithium ion battery, I will not want to over-charge or over-discharge it. Thus, I need to set a maximum voltage of 4.2V and minimum voltage of 2.5V.

Have you done much research into the use of Lithium batteries ?

2.5V is way to low to allow a lithium battery to go.

3.3V is better or perhaps as low as 3.0V, but since the batteries have a only a small amount of capacity left at these voltages why take the risk of ruining them for the sake of a few extra yards ?