High Power Arduino Digital Scalable BMS (Open source)

crissob

1 mW
Joined
Oct 6, 2014
Messages
18
Hello,

I would like to introduce you an open BMS project we are working in. The system is going to be part of a complete project of an universal and small charger, where the BMS acts as master, but we have think that meanwhile the system could be useful for developers, DIY, testing etc, as is affordable (U$D 300 aprox. )
The processor part is interchangeable, so there will be different versions (ARM for complex professional algorithms requiring more computational power, and Arduino for developers, with ATMEGA2560) this Arduino port is already finished, with the drivers for accessing all the BMS Hardware capabilities and data.
 
Thank you!,
yes please, any suggestion, recommendation etc.. is welcome, we need the community feedback for continuing with this project, and we are glad to receive it!
We are planning now the ARM processor board (probably an stm32) with Bluetooth 4.0 connectivity, for example for mobile connection (thinking in accessing all current in/out power rates, estimated battery range, etc.. for example for electric bikes), we think that this would be the next logical step, and for this we need your opinion and collaboration too :)

crissob
 
crissob said:
Thank you!,
yes please, any suggestion, recommendation etc.. is welcome, we need the community feedback for continuing with this project, and we are glad to receive it!
We are planning now the ARM processor board (probably an stm32) with Bluetooth 4.0 connectivity, for example for mobile connection (thinking in accessing all current in/out power rates, estimated battery range, etc.. for example for electric bikes), we think that this would be the next logical step, and for this we need your opinion and collaboration too :)

crissob

How much do you imagine your product costing when completed? Do you have a target price?
 
Bowlofsaldad, the price should be as affordable as possible so the open community can do their projects, test, even as an instrument. As the BMS is scalable, the boards are going to be sold separately, but the full BMS product is going to be under $300. At this moment the main uncertainty is assembly, so in the future we will go to cheaper prices, as low as we can, in a transparent manner. For cheaper prices, for example some simple projects like small bikes, even some modules can be excluded for simplicity and lower prices. For example short circuit detection hardware, load or charger detection, some filtering or protection diodes can be removed for very low price targets.
 
crissob said:
Hi David, thank you for your comments. Yes it's true :), the sources were not ready until a few minutes ago. Now you should find the schematics under Files/Hardware. Software Arduino C++ files of drivers and some basic functionality should be uploaded before the weekend, we need to order and format them a bit. Take into account that these files are going to be very raw for some time, until we have time for good documentation. Meanwhile, advanced user can start discovering how every part work with schematics and Arduino code.

No worries about the raw status, I'm more curious than anything.

I skimmed through the schematics and have a few comments:

1. On your MCU board it looks like you're using a digital isolator to isolate the serial interface so you can program over serial (hence the DTR line). The DTR signal needs to be a fairly strong one, and I think you may have some trouble with driving it directly through the isolator and 100 ohm resistor. Those isolators typically have relatively high output impedance, so you may need to buffer it to get a strong enough signal to discharge C9 and put the MCU into programming mode. If you've already tested it and it works fine then just ignore my comment :)
2. Also regarding the digital isolators, you may want to disconnect them when not in use as the power draw, even when the EN pins are low, is relatively high. Even on large packs they can drain the pack in a matter of months.
3. Why are you using an ATmega2560 when most of the pins are unused? Seems like a smaller/cheaper mcu would do just fine as well.

Overall a great project, good work.
 
Ok, we hope to upload documentation soon.

about the comments:
1.- About DTR and resistor, you are absolutely right. We just put that resistance in case we need to change the voltage ramp in some types of processors, but it actually could be a 0 ohm resistor.

2. About the EN pin, yes this processor board is quite new, so some upgrades are needed. This could be one of them, for example connecting the EN to a MCU pin so when this go sleep, disconnects the optoisolator.

3. This is because we wanted to leave memory room for algorithms. In the past for example we used a 64Kb PIC and we ran out of memory, take into account that as this system is for developers, need space for big algorithms.

Cheers
 
crissob said:
Ok, we hope to upload documentation soon.
about the comments:
1.- About DTR and resistor, you are absolutely right. We just put that resistance in case we need to change the voltage ramp in some types of processors, but it actually could be a 0 ohm resistor.

2. About the EN pin, yes this processor board is quite new, so some upgrades are needed. This could be one of them, for example connecting the EN to a MCU pin so when this go sleep, disconnects the optoisolator.

3. This is because we wanted to leave memory room for algorithms. In the past for example we used a 64Kb PIC and we ran out of memory, take into account that as this system is for developers, need space for big algorithms.

Cheers

1. Even with a 0 ohm resistor there or a direct connection it most likely still not strong enough. Output impedance of the isolators I've used has been too high to drive the DTR pin low for programming. Personally I've used an opto-transistor for the DTR line and a digital isolator for the rest, but you would probably also be fine with just using the isolator to drive the base of a PNP.

2. The EN pin just puts the pins in a high impedance state, it doesn't shut down the internal oscillator or significantly reduce power consumption of the part. You would think that it should, but unfortunately it doesn't in most, if not all parts of this type.

3. I figured it was for the extra memory, I don't know why Atmel doesn't make some of the smaller chips with more memory but it would be helpful at times. An ATmega2568 would be great.
 
1.- Have you used the same type of optoisolator?, because in our case the discharge is pretty fast, we even tested with in Oscilloscope, and discharge curve is fast enough. We are working that way without issues. Have yo tried to use smaller ceramic low ESR cap.? let's keep and eye on this subject to verify if this cause problems in future.

2. Good point. May be a solution can be powering the optoisolator from one MCU pin. What do you think?

3. Exactly :D
 
I've used the Si8641 and ISO7241 isolators, and neither drove the DTR pin hard enough to ensure a reset. I was using good quality 0.1uF ceramic caps, so I don't think that was the problem. I solved it by replacing the DTR line isolation with an opto-transistor.

To disconnect the isolators I would use an N type FET on the ground pins and leave the Vcc and EN pins connected to your supply rail. You'll also want a 10k or so pullup between the ground and Vcc to ensure the whole chip potential stays at Vcc when it's off (assuming the pins it's driving idle high). You might be able to get away with driving it from a mcu pin, but it's close enough to the current limits that you'll get some droop. Pretty much any cheap logic level FET will work for this.
 
If you say that you have a good ceramic cap, with low ESR, don't know what the problem could be. In our case it work perfectly, not any extra opto-transistor or component needed.

About powering the optoisolator, ATMEGA2560 can deliver max. 40mA per I/O pin, in low freq, the SI8442 consumes less that 5.4mA, so you have a good margin.It doesn't seems it needs any extra transistor.

We are focusing now in software and doing some videos with application, to demonstrate how it works.
 
crissob said:
About powering the optoisolator, ATMEGA2560 can deliver max. 40mA per I/O pin, in low freq, the SI8442 consumes less that 5.4mA, so you have a good margin.It doesn't seems it needs any extra transistor.
The voltage drop at 40mA will be significant, those are maximum ratings and not recommended usage. You may be able to get away with it if the peak current is only 5.4mA, but often what's stated in datasheets is RMS current and peak current will be higher. Pretend that there's a ~40 ohm resistor in series with every AVR pin, because that's basically how they operate. Ultimately up to you of course, but if it were my design I would use the pin to turn a supply FET on or off.

See here for a graph of output current vs voltage.
 
Ok David, we will follow your recommendation in the next revision.

About LTC price, yes they are a bit expensive, but if you consider quality and density of cells per chip, it's a very good option. We had good offers from Asia, and in not so big quantities..
 
crissob said:
About LTC price, yes they are a bit expensive, but if you consider quality and density of cells per chip, it's a very good option. We had good offers from Asia, and in not so big quantities..
I'll second that the price is not really that bad, sure it's a few dollars more per cell than an analog BMS, but you have to look at it as part of the total system price. A good BMS will lower your long term operating costs.
 
They make optocouplers that need less than 1mA input but they need power on the output side.

Is there going to be a provision for indicating which cell triggers an alarm condition? Knowing which cell goes low or high first is good for troubleshooting a pack.
 
Could you please give me some references to those optocouplers? can be a good option!

Initially we made a C program running in a PIC, and that had all the functionalities of a SOC based BMS, here you can see all the parameters it show:
http://www.divisek.es/index.php/en/products/monitoring-software
There is one tab that show "Alarms and Status", if some cell go beyond the limits (of soc, calculated with the algorithm that has as inputs voltage, current and temperature) it cuts the correspondent power channel (charge of discharge) and you can check which one was in fault in the "Main parameters" Tab.
Now, as we though that people would like to do several different things with the BMS, we are going to supply basic driver functionality objects and libraries in Arduino C++. It has no sense do very specific task if we don't know what people want to try test or develop, if they want LiFePO4 or LMN, SOC based or just simple Voltage based, application, etc..

The basic Arduino functionalities give access to all hardware functions, read voltages, currents, temperatures etc. Then it provides a Matrix of states variables.. well, better we explain when we publish it.
 
Those resistors go quite warm, but they have a good dissipation pad and polygon behind so there's no problem. It accept even 18.5 ohm, that dissipates about 1W (CRCW251218R2FKEGHP 1.5W), we have tried with that and PCB and system works fine. The PCB temperature can be controlled with the LTC temp sensor, for example (so you don't need the external temp sensors) and as you say, you can cut balancing by software.

Higher powers can be done, but for that the case and heat sink strip will be needed.
 
My experience is those things might get really hot during the first balancing cycle, but once the pack gets balanced, the shunts don't need to do much and don't generate much heat. Pack tends to stay in balance unless a cell fails or you do something external to imbalance it.

Cell capacity is a factor also. My pack is a little 10Ahr bike battery. If you want to balance a big 130Ah Thundersky car pack, you will need a pretty hefty balancing current.

If the temperature is monitored and the current is automatically reduced to keep the temp below a safe level, it will balance as fast as it can for a given amount of heat dissipation.
 
Great stuff, exactly what I was looking for :). Do you plan to add some memory (eg SD card) for logging? Also Bluetooth communication and some mobile app would be nice.
 
Yes fetcher, that's my experience too, it seems that Davide Andrea was right in his book :) , balancing is just for fine tuning, not much energy involved if battery packs are not very big, as you said!

Thank you Jayx, exactly, as the processor board can be exchanged next step is going to be ARM with bluetooth 4.0 for accessing with a mobile app. I'm glad you like the idea, I think it may be attractive to access to SOC info, pack health and failures or detailed power I/O for some applications. The SD card is next in the roadmap too..
 
Back
Top