BMS

Hello,

I want to make a simple BMS using arduino.. The goal is to monitor, and if possible balance up to 12 cels lipo connected in series..
I understand that i must use some extra "hardware" to do that, but i need help with that hardware...

The things that i want this bms to do is to monitor each cell voltage, and balance them if and when necessary i suppose by connecting some resistor to the cells with the highest voltage, and that way emptying them till they are equal to the lowest cell... this is the basic task, and when this is working it is easy to tell the bms what is the lowest voltage to empty the cell and other safety things... and if one is reached to react in some way...

The goal would be to have one arduino based BMS which i can use on different battery packs(up to 12cels) and on different battery types by only changing the arduino code...

thanks for your time,
teo

It might be blinding obvious to you but what is a BSM?
A link would be good.

sorry...

BMS - battery management system

There have been a few epic threads on this topic, but no great conclusion.

The problem is that the arduino's inputs can not be greater than 5V. So if you want to measure voltages of cells in series the higher voltage cells, those at the high end of the chain, present some difficulty.
The simple solution is to provide a potential divider for each voltage point you want to monitor. The problem with this is that you loose resolution of the readings when you do this.
So what is the voltage of each cell and how many do you have in series.

Hello, I happen to have purchased a BMS system which uses an Arduino to control balancing boards and display data on an LCD.
I can tell you that the balance boards contain the resistors and voltage monitoring which you would need.
Those boards then have ribbon cables running to the Arduino board which computes which cell is to be balanced.
The balancing boards can each manage 12 cells each.
If you like I can try to get you in contact with the person making them.
I do not however have the source code.

JamesR:
If you like I can try to get you in contact with the person making them.
I do not however have the source code.

That would be more than great.. :wink: And some more info about this boards from you would be great..

Grumpy_Mike voltage divider is not a good solution for me, i need something more accurate, and reliable, and if using divider there is still a problem of balancing the cells... It could be done but is not a good and quality solution.

the voltage of the cells is between 3,2v and 4,2v, and there would be up to 12 cells in series. and possibly two packs of 12 cells parallel connected to achieve more capacity...

I'm running 32 LiFe cells and using 3 of the balance boards attached to the Duemanilove.
So I'm also looking at voltages around 3.0 - 4.2 and monitoring temps of the resistors.
This system also has a run mode so it monitors and cuts back the throttle accordingly if a cell goes below a certain voltage.
This system is installed on my electric motorcycle.
I'll try to get a hold of the guy who gave me mine today.

voltage divider is not a good solution for me,

I know that is why I said it has been an epic thread in the past. You need to measure the voltage of a cell that has a DC offset of 50V.

This is not a trivial thing to do.
One 'solution' had an isolated arduino across each cell, others did it with a small 8 pin processor on each cell. My preferred solution was to have a voltage controlled oscillator on each cell and capacitavly couple the signals into an arduino where it measured the frequency.

I talked to person who is making them. He said to contact him through his website : alliancerenewableenergy.com
Good luck with your project.

A voltage divider can be very precise -- certainly as precise as the ADC in the Arduino.
The question is how to read each of the batteries. One option is to put switches between each measurement point, and use digital pins to control those switches.
If you can use all analog ins, you'll need only a few digital pins to be able to isolate all 12 cells and measure them one at a time, even though they are in series.

Grumpy_Mike:
My preferred solution was to have a voltage controlled oscillator on each cell and capacitavly couple the signals into an arduino where it measured the frequency.

this solution sounds very interesting.. I would really like some more info, and the help needed to really understand this, and even build one of this..
One more thing, i am using the same battery pack to power the arduino, using a voltage regulator(dc/dc converter) so the ground of the battery is the same as the ground of arduino... I suppose that this can still work when using voltage controlled oscillator on each cell..

the ground of the battery is the same as the ground of arduino.

Yes that is what it needs to be.

I would really like some more info, and the help needed to really understand this

Well it is just an idea of how I would tackle the problem, I don't have a circuit or anything.

You need a voltage controlled oscillator, that is a circuit who's output frequency is proportional to the voltage driving it. That would then be powered by one cell. So that is the main challenge getting that circuit.

This gives you a frequency proportional to the voltage of the cell. To get that down to the arduino you would connect it through a capacitor. That passes the AC signal but blocks the DC signal. You would have to have a zenner diode and series resistor to protect the arduino from any switch on transients, but you could then use the pulseIn() function to measure the period, and hence the frequency and hence the voltage. Because the capacitor blocks the DC you don't need to worry about the fact that the voltage is sitting up at a high voltage.

Another system that might work is to use a linear opto isolator. The main problem is that right out of the packet an opto isolator is not very linear. You can get them with dual transistors and use one to provide a feedback to linearise the response. Again it is just an idea.