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

This is excellent! I've been looking for something like this for quite a while.

Does anyone know of an equivalent project for high voltage MPPT? (up to 600-900V solar in, and 120S battery?)

And anyone know of an equivalent project for high voltage Pure Sine Wave Inverter that is parallelable and will scale with battery voltage?

And AC/DC Charger for backup?

What my ultimate goal is, is to use this on basically a LiFePO4 Powerwall, that can scale over time. I.e. I have 64 batteries right now but will get it up to 120/124 as I have funds. This is ideal because I can just add another slave controller and viola, more power. But without the MPPT that can handle that, it becomes really difficult to create a complete configuration. I've honestly thought about building my own dual stage GanFET design for it but I'd rather someone with more EE do the design and I'll do the software.

And then there is the inverter. Sadly, lots of stuff can't be run from DC (although lots can just accept DC if you give it the right voltage which is a lot easier with 384VDC from the battery available because that just happens to work well with most DC inverter high power devices like heat pumps etc.)

It seems like the approach for this BMS is ideal for both of these, because tapping 12V from the battery pack to power them means that you can scale the battery size nicely and the solar input size without having to worry about deriving the voltages necessary for the controller and fets etc. from the full voltages. Same for the inverters. In both cases it means that you can scale without issue. The pure sine wave inverter would be slightly more difficult, but is really just a GanFET H-Bridge with the right software doing PWM with the right time slices and an inductor. The trick is parallelizing slave units from the central controller to scale the Wattage available, but using this same design as the BMS, it seems very doable just using a feedback circuit to sync the PWM to the existing signal.

The last component of such a system would be a DC EV charger with boost/buck support so that you didn't need to use the costly inverters with all of the waste that that entails to charge your EV and instead could use DC and of course a scalable voltage and amperage AC/DC charger for backup charging from the grid and then software to intelligently power the DC bus this creates from the various sources based on charge state, weather forecasts, current solar input and EV charge state. (i.e. you want to only use AC charging from the grid as a backup, but you want to never run out and want to opportunistically charge when rates are lowest during the day and support remote turn off like some states have for AC charging which means an algorithm that understand weather, usage, and charge states to identify when and how much AC charging will be required and where to shunt power.


As an aside, it would be ideal to have a 24S version of the slave controller which I believe the chip handles, because then a 120S 384V pack nominal for LiFePO4 is just 5 slaves and you can buy in 24s.


I'm a casual EE designer and have done some of my own boards etc. But I'm a very good computer programmer and am comfortable with C/Arduino/C#, PWMing with 180 degree out of phase for half bridges, etc. and with Flutter for building apps and code to manage all of this and have built an IOT platform that is serverless but allows IoT devices to interoperate using mDNS discovery, identity certificates (that are issued into esp32s at time of adoption), and WebRTC. If I can help out some expert EE people and we can get something going to build a POC with open source free to use for personal use and licensed for commercial use and resale with some great software across all 6 platforms that builds out all of these components, I'd love to talk to everyone that's interested and get this going.
 
Sounds like discussion of your ideas and possible projects deserves its own thread
 
I'm receiving several requests related to solar. There is a need for having high voltage, high current capable BMS with solid state switches to minimize power consumption I think.

The inverter/sine wave part + MPPT is another big project on its own.

I remember good old Jack Rickard did something similar a couple of years ago before passing away.
You can see his setup on www.evtv.me "Selfish solar" as he called it was a great idea on its own. He was not using open source inverter, but you get the global idea.
 
ENNOID said:
I'm receiving several requests related to solar. There is a need for having high voltage, high current capable BMS with solid state switches to minimize power consumption I think.

The inverter/sine wave part + MPPT is another big project on its own.

I remember good old Jack Rickard did something similar a couple of years ago before passing away. You can see his setup on evtv.me. "Selfish solar" as he called it was a great idea on its own. He was not using open source inverter, but you get the global idea.

I'd love to see your thoughts on my proposal on the link I shared: https://endless-sphere.com/forums/viewtopic.php?f=41&t=114918

I really think there is a business model there.
 
Sure, but a lot of effort is needed to get there my friend. I have enough work at the moment with my EBMS stuff and keeping this going forward. I made a lot of fine tuning lately related to filtering & current measurement precision.
 
ENNOID said:
Sure, but a lot of effort is needed to get there my friend. I have enough work at the moment with my EBMS stuff and keeping this going forward. I made a lot of fine tuning lately related to filtering & current measurement precision.

Definitely takes a team... As I said, I'm happy to help with software.
 
I'm working with INV (out of China) to see about using their MPPT/Inverter/AC Charger system. The nice thing with their system is that it works from 32S to 112S on LiFePo4 and 12kW per inverter. It seems like an almost ideal fit with this BMS. Are there definitions for the RS485 or Can interface for this BMS that I can provide them so that we can get this added as a compatible BMS?
 
CAN interface is present on all EBMS hardware and firmware code is available on github.
Quite a very straightforward CAN implementation IMO, but some might get lost because there is no "dbc" for EBMS by default.

Although, on github there is a "dbc" file targeted for electric formula SAE competition that some implemented for their own custom firmware last year. It can be compiled easily in the firmware if needed and can get used as a basis to get CAN working with other devices.

Otherwise, just look at the CAN code to understand how to read either VESC or DieBieMS protocol emitted by default by EBMS.
 
ENNOID said:
Some new features for 2022:

- Delta Q charger support over CAN bus
- Elcon/TC charger support over CAN bus
- VESC & VESC-tool CAN & USB compatibility for firmware updates , data monitoring & parameters configuration
- State of charge tracking is now possible even with charge only BMS (XLITE) when using VESC CANbus

More details are available on our website:

https://www.ennoid.me/bms

The Eltek 1800W Flatpack rectifier CAN support would be a great thing especially for eBikes and eSk8.
Eltek has a document with details of their CAN protocol.
 
Will have a look eventually for sure. I'm normally focusing on systems that operates at higher voltages than 48VDC, but I understand the need. Do you know if all Eltek share the same CAN bus protocol?

I quickly found some official CAN bus protocol info for the "3kW valere" ones:
https://www.rec-bms.com/datasheet/EVPowerchargerCANprotocol.pdf
https://www.elithion.com/lithiumate/php/eltek.php

Otherwise, there are many githubs and threads on this forum about those eltek flatpack2:

https://endless-sphere.com/forums/viewtopic.php?t=71139&start=200
https://github.com/The6P4C/Flatpack2
https://github.com/tomvanklinken/Flatpack2
 
Hello,
I compiled and uploaded BMS FW to NUCLEO-F303RE for testing.
Seems that everything fine, but after updating FW version does not changing.
 

Attachments

  • FW.jpg
    FW.jpg
    130.2 KB · Views: 1,128
Thanks for answer.
As I know, the only differences between STM32F303CCT6 in your design and STM32F303RET6 in Nucleo-F303RE are memory and pincount sizes.
It could not be the reason.
 
ENNOID said:
All registers & peripherals are exactly the same?
No principal differences.
STM32F303RET6 include all the STM32F303CCT6, plus extra components.
 
ENNOID said:
Nice!

Using SPI directly instead of ISOSPI? Only one slave board is possible in this configuration.

Only SPI. Board is set as ENNOID-XLITE. ENNOID-Tool stil report about available update, but in attempt to upgrade refused:
"This version of DieBie does not include any firmware for your hardware version"
 
Do a manual firmware update with the binary on the website.

XLITE firmware was previously common for both hardware XLITE-24 and XLITE-12.
Now they each have their own dedicated default with those new firmwares.

You still have a few things missing I guess using the EVAL board unless you have found a way to tweak it somehow: current sensing, voltage sensing, CAN bus, etc.
 
ENNOID said:
You still have a few things missing I guess using the EVAL board unless you have found a way to tweak it somehow: current sensing, voltage sensing, CAN bus, etc.

Certainly. I'm working on it.
 
Sorry if I misssed.
What hardware could be used for USB-CAN PC connection?
 
Hello there,

I'm thinking of using your SS-BMS for a 48V/100Ah solar battery because it looks rather well engineered compared to what one finds on the interwebs nowadays :). Also, finally, someone implemented a proper pre-charge feature. *thumbs up*. Yes, I have seen JohnGalt171's plan to build an entire new solar + heating + car charging system. But this is way out of scope for my needs.

I'd like to connect a (small) VictronMultiplus (combined AC charger and inverter) to the mentioned battery as well as an MPP tracking charger. The latter of course via the charging port. As far as I can read the block diagram, there is no way the BMS could prevent the MultiPlus from charging the battery via the load+ connector being connected to it? As is has no clue about single cell voltages I'd rather like to command it to charge or not charge instead of leaving it up the device to decide based on total battery pack voltage only.
I do have some more questions and I hope you don't mind me listing them here. Maybe some of them could be useful for other readers at some point in time:

  • I wonder if there is some 2nd unused UART to talk to each of those external devices? ("VE.direct" seems to be relatively simple). I know you do offer a CAN-bus interface... which would not help me out much here.
  • Digital IOs would have to be realized using an i2c expander?
  • I like the use of press-fit connectors for the high current connections. I wonder what the temperature rise of the 4-layer 1 oz cooper might be at 150 A continuous? Did you do thermal tests on this?
  • Which PTCs would you recommend for pre-charging? Or is there one already mounted on the PCB?
  • Can the current firmware support more than one current measurement with minor adjustments? Externally maybe?
  • I realized the Littelfuse BF1 fuse form factor is rated for 32 VDC? How is this fuse supposed to ever stop arcing in an actual 18-24s system? Arc burning voltage might be reached already within these configurations.
  • BF1 size rupture capacity is between 1 kA and 2 kA (depending on fuse current). Have you tested the occuring currents in relatively low voltage but high operating current environments? Short circuit currents of 20C are not uncommon, so maybe a 100Ah battery exceeds this BMS's capabilty?
  • What lead inductance can the SS-BMS safely withstand while disconnecting the load at excess current conditions?
  • As far as I understand the HD version uses double sided load also for the load+ switching transistors? I could not find the schematic (I suspect they are not open source anymore?). Can you share what FET you used for switching and what gate drive current and/or voltage slope you are using? This way one could simulate what voltage spikes one would have to expect.
  • I have not taken time to explore the source code deeply, but I wonder: Does it execute the LTC68xx safety measures demanded by the safety manual on a regular basis? To detect loose wires, stuck ADCs, register checks, etc.? (not that any of asian BMS would do...)

I do absolutely not want to sound be disrespectful by asking so much stuff at one. Those are just some things that came to my mind when looking at this project :). The more I think about it, it seems that I should think about going for the SS-lite version which seems not to be available anymore…?

Thank you in advance and best regards,
 
Back
Top