Open source BMS for 48V to 400V lithium-ion battery pack

ENNOID

100 W
Joined
Dec 1, 2017
Messages
247
Location
Quebec
Update 01/11/2021 : Look on our website for latest hardware and updates:

www.ennoid.me



Hi,

I'm looking for an open source BMS (Battery Management System) which would allow me to develop my own electric vehicle lithium-ion battery pack for voltages range from 48V and up to 400V.

The problem I am encountering right now is the lack of any medium voltage open source BMS with advanced functions available on the market as far as I know. After looking on the internet for documentation and related projects, the closest thing (open source) I have been able to find, is this very cool open source 12 cells BMS :

- https://github.com/DieBieEngineering/DieBieMS

This BMS has several interesting features that I am looking for:
- STM32 MCU configurable through USB with the user interface developed for the VESC-project
- CAN Bus
- Integrated pre-charge and charge/discharge enable circuit.

Despite this, the rest of this BMS is limited to 12 cells /approx 48V and is using an outdated LTC6803 integrated chip.

Considering the voltage limitation of the DieBieMS, I am tempted to start the development of a similar BMS, based on it, but capable of handling a 400V/96S cells battery pack. For this, a Master and some daisy-chained slaves boards will be required instead of just one single board.

Donations:
Open Source R&D isn't free! Any help is appreciated!
https://www.paypal.me/kevindionne

I am open to any suggestions that will help make this BMS great for this community!
 
After looking on the web I found those threads related to BMS:

- https://endless-sphere.com/forums/viewtopic.php?f=14&t=63863
The part used has been discontinued... so that killed the project.

Another user from previous thread listed above "methods" started a thread about the use of an up-to-date LTC6811:
- https://endless-sphere.com/forums/viewtopic.php?f=14&t=88358#p1288949
I personally think this chip is worth to look at, similar to TI bq76PL455, but only 12 cells capability instead of TI's 16 cells, for almost the same price tag. So I still think TI IC is a better choice... ( cheaper and less components for the same pack voltage...)

Another similar approach with outdated LTC6802, but only slave board:
- https://github.com/rickygu/openBMS
Project is quite old and no development since 2014...

Another semi-open source BMS far more advanced and maintained also based on LTC6811 and STM32 is this one:
- https://www.foxbms.org/typo3/index.php?id=4

This foxBMS is exactly what I was looking at and is nearly completed :D
 
This www.foxBMS.org project is similar to what I'm looking for, but too complex for me:

hw_system_overview.png
 
After a thorough inspection of this "FoxBMS", I do really see "german engineering" in this project... "system is over-engineered" :roll:

The redundancy and safety is too much implemented in the hardware. I think their approach is just too expensive. (cells are monitored by two costly IC and two MCU for ensuring safety)
 
So far, it seems that I am alone in this thread. I haven't put much effort so far in this project anyway.

I now bring the fact that I just realized how the development board DC2350A-B and the related DC2026 control board developed by analog device seems to offer a good alternative for developing a proper BMS. It seems like a better starting point than the other development boards.

It is equipped with an LTC6813 which is a next gen IC capable of monitoring & balancing up to 18 cells (72V) with a minimal external circuit. It can communicate through an ISOSPI interface which is apparently way more reliable than what TI is offering.

See doc:
http://www.analog.com/media/en/dsp-documentation/evaluation-kit-manuals/DC2350AF.PDF
 
There isn't much around that can do over 20s cells. Most of them are very expensive. If you look around on DIY Electric car you can probably find various approaches to the problem. https://www.diyelectriccar.com/

Some ES projects:
Speedict viewtopic.php?f=14&t=73354
Tiny BMS viewtopic.php?f=31&t=78552
Bluetooth BMS viewtopic.php?f=14&t=88676&p=1386696&hi ... o#p1386696
Adaptto viewtopic.php?f=31&t=58190&hilit=adaptto

I like the TI chip. There should be a way to daisy chain 16s modules to accommodate higher cell counts.

Way back when, I designed and built my own BMS for LiFePO4 cells, since there was practically nothing on the market at the time. It was good clean fun and I did finally make some boards that worked but it was WAY too much work and too time consuming. Nowadays, I look for inexpensive off the shelf boards that I can combine or modify to meet my needs rather than building from scratch.
 
Hey,
I got linked here from the ennoid-bms git. I'm designing a BMS for the FSAE competition based on the LTC6813 with reliability and low cost in mind. We're in the process of completing testing of the design and would love to share our work if it helps progress this project. Linked below is the git repo where we have the designs. The BMS stuff is being designed in Altium, but Altium has a free schematic viewer and I'd be happy to export it to kicad when we're done developing, I apologise for the badly documented git in advance
https://github.com/Illini-Formula-E...ster/Boards/Tractive System/IFE_BMSSlave_2019

Chai
 
Hi,

Thanks for sharing.
I cloned the complete git repository and had a quick look on the project with altium and eagle this morning.

one interesting thing I observed so far:

-one of the two ltc6813 is used only for temperature monitoring. Maybe it was easier to implement it this way. On my side, I was thinking doing it with only one ltc6813 through the use of the 9 gpio for temp measurement(one temp sensor between 2 cells or with a mux for 18 temp sensor). Is there any specific reason which explain the way your team implemented it throught a dedicated ltc6813?
 
Hi,
If you hadn't gathered already, we're using the BMS in an inter-collegiate competition called FSAE. The rules require us to measure the temperature of every cell which meant that the 9 analog inputs on the LTC 6813 would be far from sufficient. Given that the temperature sensors for a multitude of reasons would be connected directly across each cell's terminals, a solution involving an auxiliary ADC and a bunch of high voltage differential amplifiers started to look very pricey, till we realised that the ltc6813 itself is a glorified high voltage multiplexer, differential amplifier and ADC and I decided to throw on a second one for an overall much lower system price and complexity.
To answer your specific questions -
'sensor between 2 cells' - Each "cell" is actually 7 cells in parallel with some proprietary, fancy way of making the output describe the highest temperature. We could connect multiple in parallel but we'd prefer to have all of them monitored since it wasn't really that much more effort when used with the solution involving a second ltc6813
'multiplexer' - this would still need either a very high voltage multiplexer and a differential amplifier to remove common mode voltage bias, or many differential amplifiers and a regular multiplexer. Either solution would be far more expensive and involve a lot more components on the board than the second ltc6813 would

Chai
 
I've updated the git repo mentioned above with the latest design if you'd like to take a look at how the final design comes together

Sent from my XT1710-02 using Tapatalk

 
Thanks, I will have a look.

Meanwhile, I spent some time on the project last week. I think the schematics are ready and I will start soon with the PCB design. You can have a look to what I have done so far : https://github.com/EnnoidMe/ENNOID-BMS.

Thanks for your feedbacks
 
@c10yas:

Quick observations I made yesterday after looking at your pack assembly:

Is there any issue having the low pass filter (RES 100 & CAP 10nF that far away from the LTC6813? I think there might be some unwanted parasitics inductance generated by the long PCB traces in your design which will affect the voltage readings.

Other topic:
I'm also wondering if there is a real need for an external mosfet in the balancing circuit. LTC6813 can handle current up to 200mA internally. External balancing might be required for bad quality cells or for really huge battery pack assemblies. Example: FOXBMS design doesn't use external mosfet & tesla model 3 80kwh pack neither...
 
I spent some time on the design recently. I will send the gerber for fabrication soon I guess. I will wait for some feedbacks before doing so.

Here is what happened:

- Transfered DieBieMS schematics into kicad
- Switched the balancing circuit to the LTC6813 IC instead of LTC6803
- Adapted the schematics to have isolation on the MCU, Balancing circuit, current & high voltage measurements.
- Removed the high current circuits from the PCB (Traces & FET switches are now removed, the current will flow through external contactor instead. ex: EV-200 contactor)
- Separated Master & slave boards and have been able to put them on a 2 layer 100 x 100 PCB. Prototype PCB fabrication should cost 4.90$...

The result:

Master board
- Isolated voltages measurements for discharge & pack buses
- Isolated bi-directional current monitoring via external delta-sigma current sensor
- Isolated CAN bus interface for cell voltage monitoring and charger detection, status monitoring + much more with future updates (like state of charge / state of health).
- Outputs for charge, discharge & precharge contactors
- USB interface for serial communication and firmware upgrades (no need for a programmer -> HW serial bootloader is used).
- Wireless transceiver
- SDCard for logging (to develop a SoC and SoH algorithm)
MasterPCB.png


Slave boards
- 18 Cells balancing/board
- Cell voltage range 2.5V to 4.5V
- Stackable for up to 1000V packs
- 9 Temperatures sensors/board
- Daisychain Master/Slave ISOSPI communication
- Internal & external balancing circuit mode possible through dedicated jumpers
View attachment 1


Software

- Firmware, bootloader & configuration tool are the same as [DieBieMS](https://github.com/DieBieEngineering).
- Changes from DieBieMS code are only required to support the LTC6813 communication/balancing instead of the LTC6803. (I might design a slave board in the future with the LTC6803 that would not require any changes at all)
- Isolation layer & schematic changes don't require MCU code modifications on Master board.



Any feedback will help.

Thanks
 
ENNOID, you have done a really nice board with starting with this DieBieMS !
That's a nice idea to have jumpers to force balance BMS.
Maybe the slave board can be a bit compact ?

I spent some time on the design recently. I will send the gerber for fabrication soon I guess. I will wait for some feedbacks before doing so.

I think I will try to build one for my ebike after you've tested the 1st version in real life condition! I will test with 2 slave cause I have 20s battery.

Don't hesitate to publish more content about it (also for 1st flashing the chips... this could be really hard!) ;)

>fyi i've found the last doc about the foxbms here : https://media.readthedocs.org/pdf/foxbms/latest/foxbms.pdf
 
Salut Haswell,

I am not sure to understand what you mean by "force balancing"? The jumpers on the slave board have been put in place just for comparing internal vs external balancing. I guess external balancing has more advantage than disadvantages, but I wanted to test both options before creating a compact and nice slave board.

Just to let you know, ENNOID-BMS does not have integrated power supply on master right now. Unlike DieBieMS, it requires an external 12V or 24V input like most other 100V+ BMS. Taking isolated power from one slave is also not a good option, it will unbalance the pack. If someone has a magic solution which is cheap enough to implement, I would be happy...

I haven't created a board for isolated power yet, but there might be a way to get 12V with a separate PCB having this main component and a lot of capacitors for being able to drive contactors: EPM2405SJ (110V to 450V DC in -> 24V DC out 500mA)

Concerning FoxBMS, I think this BMS is just overly complex & expensive for most basic projects. The cost is the major reason why I'm building something different based on DieBieMS.
 
ENNOID,
I'm not entirely sure what you mean by - model 3 does not have balancing. While no one has explained where the circuit is and/or how it works, there's no way they decided to not do balancing at all, unless their manufacturing is so perfect that they don't expect any significant variation. For comparison, with regular cells like the Sony VTC6, I measure around a 5% imbalance. I'm working with a 20Ah battery, so it's a relatively easy problem to deal with. Even assuming they have their manufacturing tolerances down to 1%, that's still 2.3Ah of variation which means almost 400Wh that need to be bled off on average. To keep a reasonable full charge time, they'd have to have external balancing circuitry to handle it, dissipating that much energy through just the 8 BMS chips that they have would put their balancing time well over 15 hours if I'm being optimistic.

Regardless of any of that, since the system you're designing is meant for regular cells, and possibly even LiFePO4 cells which are notorious for having much larger variations, external balancing is almost a must. The Model S and X packs used 4 parallel 2512 resistors as the dissipative element which is probably enough for smaller packs where the tolerances in cell manufacturing are worse. Moreover, since an open source project like this will cater to DIY hobbyists for the most part, the likelihood of the target "customer" using second-hand cells that are a couple hundred charge cycles into their life, the need for balancing is even more prevalent.

Also, the 200mA number you quote is simply the silicon-limited maximum current allowed through any of the internal balancing mosfets. If you really were balancing at 200mA, and only balancing 3 cells at a time, that's still nearly 2.5W! With the more likely scenario being that you balance 7-9 cells on average and at the reduced current rating of 80mA, that's still 3W. Moreover, at 80mA, even a small 5Ah bicycle battery pack with a minimal variation of 5% would take 3 hours to balance, and only get worse with bigger packs and older packs. I would definitely put in at least a single 2512 resistor rated at 1W, ie, 230mA, 18ohms to bring balancing times down to 1hr.

My design that I linked earlier uses TKH45 resistors at 5ohms ~3.5W because I needed relatively quick balancing and I could afford it given the massive board area. Also, the TKH45s are really cheap for how much power they are capable of dissipating.

As someone who's waited for hours to balance a LiFePO4 pack that was only 3Ah because the balancing current was 50mA, trust me, this design needs a higher balancing current if it's going to be used in bigger projects like diy Powerwalls.

Sent from my XT1710-02 using Tapatalk

 
Hi C10yas,

Well I was not saying model does not have balancing. Obviously it has balancing but according to the pictures and the reviews from Munroe & associate, they seems to have very narrow tolerance on the cell voltage. On the PCB no external mosfet for balancing are visible, they seems to use main IC for internal balancing with really low power, but I can be wrong, I havent inspected the board myself.

http://evtv.me/2018/05/tesla-model-3-gone-battshit/
https://www.teslarati.com/wp-content/uploads/2018/05/model-3-battery-pack-bms.jpg

For Foxbms, they are using external balancing circuit, I was wrong in the previous post, i saw it the other day way after the post.

Concerning power dissipation, I know you are totally right, being able to balance faster is better. I realized that last week and need large resistors and via to cool them down, but I had no time to modify anything yet on the design.

Thanks
 
ENNOID

I really like your idea and will follow your progress with interest. I am trying to build an equivalent LTC6811-2 evaluation board to learn how it works. I would like to move to LTC6813 but I am concerned that there are no code examples for this chip yet.
 
Peakon28,

I admit, I haven't looked yet at every details from ltc6813 documentation, but it seems to be very similar to the original ltc6803 from diebiems. Ltc6811 is a good replacement for ltc6803 that I think would not require any coding at all.

Before ordering any PCB, I think i will create another slave board based on ltc6811/ltc6803. It could help me first to make things work and at the end, the user could choose which slave best suit his needs.

I will also create an isolated power supply PCB for master. I think I found a way to get cheap enough" isolated 12v from the HV pack."
 
ENNOID,
why is it necessary to power the master board over an isolated supply from the pack? I would think that any system that has such a high-voltage pack that it needs isolation between the pack and the rest of the electric system, will have some sort of secondary power supply at a lower voltage. Whether it is an RC receiver, or a full-fledged electrical system on a vehicle, there has to be some sort of secondary power domain to be isolated from, right?

Also, if you really do want it to be evenly powered off the HV pack, isolated DC-DC converters from very high voltages down to 5V exist, and are pretty cheap especially since your master board will need barely 100-200mA at most.


 
c10yas,

If you have already a secondary power system in place, you can connect it to master directly and that is the reason why there is a connector for connecting external power on Master PCB. For example, electric car have normally an auxiliary 12v lead acid battery for delivering the power rush for contactors, windows, wipers etc. and is slowly recharged by the hv battery pack through a cheap dc/dc 500mA 12V converter as you mentionned. It's probably the cheapest way to do it right now because those cheap isolated HV DC/DC converter are not enought to drive directly the contactors without a 12V battery.

DieBieMS has a non-isolated system by using power mosfet instead of contactors for precharge, charge & discharge that don't require as much power. Most contactors needs 2 or 3 amps for few milliseconds for closing and just a few milliamps for staying closed.
 
Hello ENNOID,

Recently found this thread and I found it super interesting, thanks for your work! I just had some questions, as this system is more complex than anything I've learned about in school.

Why do you use both the LTC6813 and LTC6811 chips as the slave chips? Do they serve different functions in the system, or would they just be an option to use them in lower/higher cell count systems?

Also, a clarification about the UPS board. Would you be using that board with a smaller external battery to drive the contactors, which gets recharged like a car battery after starting a car? Does the UPS board drive the entire BMS as well?

If your motor controller had the functionality to control/drive the contactors as well, would you still use the charge/pre-charge/discharge outputs for redundancy?

Is the +/- 400A needed on your bidirectional current sensor? I'm assuming you wouldn't normally charge your batteries at 400A. Would shifting the range increase the accuracy? e.g. -50 A to +400A, Or would the improvement be negligible with a 12-bit ADC measurement?

Thanks!
 
Hi VietJr,

LTC6813 or LTC6811 slave board have the same function. The user can pick the board that best fit his pack voltage.

UPS is a small board that makes 12V @ 1 amp peak and can recharge battery (standard automotive 12V lead acid or 3S lithium cells). the battery is required to supply the peak current required for closing contactors and 12V is required by master.

I think it makes more sense to use the BMS brain to switch the contactors instead of the motor controller, but the user can choose whatever best fit his needs. I don't think there is a need for redundancy here, but ideally, both BMS and motor controller should talk to each other via the CAN bus before taking action with the contactors.

For the +-400A current sensor, level shifting by adding some optional resistors on the PCB around OPA376 in master could be a good idea. this way, the user could adjust the accuracy depending of the desired currents.
 
I see, thanks!

Is there a bill of materials I would be able to access? Or would the materials list be contained in the schematics/PCB files?
 
The BOM for LTC6811 is completed and the order on digikey is ready . I can provide a link to share my basket on github ennoid-BMS.

The new LTC6813 IC are still scarse right now on mouser and digikey, and I will wait before working on the board. Anyway for testing LTC6811 will be cheaper and easier.

There is still the BOM for Master if you want to help and the associated digikey or mouser basket to build.

I just placed an order on seeedstudio for all PCBs this morning and will order the required components soon to try those boards. Hope to see something happening soon.
 
Back
Top