openbms-hardware

Public

@open-batt

Download board files

Files for version 1. Pick what you came for.

Share openbms-hardware

Check access before sharing the link.

Who can open this board

Anyone can open this board. No sign-in is required.

This link opens the latest version. Copying it does not grant additional access.

Loading…

README

OpenBMS

OpenBMS is an open-source battery management system for 2 to 7-cell Li-Ion and Li-Po battery packs. A fully integrated hardware and firmware solution for battery management and protection, providing:

  • Fuel gauge — measure battery capacity, state of charge, and state of health
  • Learning algorithms — learn battery behavior and adjust management accordingly
  • Cell balancing — keep multi-cell voltages in sync to prevent drift over time
  • Protection — guard against overcharging, overdischarging, overheating, and short circuits
  • Communication — talk to chargers, displays, microcontrollers, and other devices

Rev B is out!

Schematic and layout updated, fixes applied

OpenBMS-firmware
OpenBMS-test-bench
OpenBMS-studio

How OpenBMS fits into system?

Battery system consists of:

  • Li-ion/Li-Po battery — your custom 2- to 7-cell battery
  • OpenBMS — battery management system that handles fuel gauging, cell balancing, learning algorithms, overcharge/overdischarge/overheat protection, and communication with chargers and microcontrollers
  • Test Bench — a 600W dissipative resistive load for easier BMS development and testing
  • Host — I2C/CAN interfaces, wake-up signal, can be a microcontroller, computer, etc.
  • Charger — your custom charger, usually a CC/CV charger adjusted to your battery voltage and current
  • OpenBMS Studio — a PC software for configuring and monitoring the BMS, visualizing data, and updating firmware using UART communication

❤️ Funding

This project is funded through NGI0 Commons Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program.

NLnet foundation logo NGI Zero Logo

We are very grateful to the NLnet team for helping us on our path, and we encourage you too to apply and get funds to build your project! 🚀 Learn more at the NLnet project page.

⚠️ Status: Work in progress

ModuleStatus
OpenBMS Schematics & PCB Layout Rev A✅ Done
OpenBMS Test Bench Schematic & PCB Layout✅ Done
Revision B (Hardware improvements)✅ Done
BMS, Test Bench & Battery Tests🚧 In progress
Documentation & Final Release🚧 In progress

Features

  • 🔋 Supports pack voltages up to 30V and continuous currents up to 16A.
  • ⚡ State of Charge (SoC) estimation using coulomb counting
  • 🩺 State of Health (SoH) monitoring with capacity fade tracking and internal resistance estimation
  • 📊 Per-cell voltage monitoring with 24-bit resolution
  • 🔌 Pack and cell overcurrent protection up to 20A hardware trip (adjustable threshold)
  • 🛡️ Overvoltage and undervoltage protection (adjustable thresholds)
  • 🔀 Passive cell balancing for up to 7 cells
  • 🔵 Battery current measurement via precision shunt resistor
  • 🌡️ NTC thermistor input for battery temperature monitoring
  • 🌡️ On-board ambient temperature monitoring via MCU and ADC internal sensors
  • 💾 Non-volatile storage of SoC, SoH, impedance, fault history, and charge profiles (EEPROM)
  • 🚌 CAN bus communication interface (up to 1 Mbit/s)
  • 🔗 I2C communication interface for host integration (SMBus compatible)
  • 🖥️ UART debug interface
  • 🔔 Wake-up input with power-on latch for low-power system control
  • 🔋 Power-down mode quiescent current < 2 µA
  • 🖥️ Based on STM32L431 ARM Cortex-M4 microcontroller

Overview

First, a small introduction to the project structure:

+-------------+       +---------------------------+       +----------------+
|             |       |         OpenBMS           |       |                |
|   Battery   |       | - - - - - - - - - - - - - |       |     System     |
| 2-7S Li-Ion | cells |   +-------+   +-------+   |       |                |
| 2-7S Li-Po  |- - - >|   |  ADC  |   |  MCU  |   |<----->|    host/load   |
|             |       |   +-------+   +-------+   | comms |                |
|             |<=====>|   +-------+   +-------+   |<=====>|     Charger    |
|             |  pwr  |   | Power |   | FETs  |   |  pwr  |                |
+-------------+       |   +-------+   +-------+   |       +----------------+
                       +-----------+--------------+

OpenBMS and the battery are designed to be a single, inseparable unit. Ideally, it is connected on the first day of the battery's life and stays throughout its entire lifetime. This way, OpenBMS learns the battery's characteristics over time and continuously tracks its state of health and other parameters.

It protects the battery from overcurrent, overvoltage, and undervoltage conditions, and balances cells to maximize pack lifetime. State of charge estimation tells you exactly how much energy you have left, while long-term health monitoring tells you when it's time to replace the battery.

The battery communicates with the host system via CAN bus or I2C. Through OpenBMS, the battery can:

  • Give energy to the system (discharge)
  • Take energy from the system (charge)

OpenBMS can be easily described with the following block diagram:

+---------------------------------------------------------------------------------------------------------------+
|                                                  OpenBMS                                                      |
|                                                                                                               |
|  +-----------------------+     power     +-------------------+     power     +-------------------------+      |
|  |    Battery Input      |<=============>|  Switch Circuit   |<=============>|         Output          |      |
|  | - - - - - - - - - - - |               | - - - - - - - - - |               | - - - - - - - - - - - - |      |
|  | + XT60 pwr connector  |               | + Main NFETs      |               | + XT60 pwr connector    |      |
|  | + 8-pin JST (balancer)|               | + Precharge FETs  |               | + JST (I2C,CAN,WAKE_UP) |      |
|  | + 2-pin JST (NTC)     |               +--------+----------+               +-------------------------+      |
|  +-----------------------+                         |                                      ^                   |
|            |                                       | ctr signals                          | can, i2c, wake_up |
|            | cells                                 v                                      |                   |
|  +---------------------+       SPI      +-------------------------+                       |                   |
|  |    Analog Block     |<==============>|     Digital Block       |=======================+                   |
|  |     (ADS131M08)     |                | - - - - - - - - - - - - |                                           |
|  | - - - - - - - - - - |                | + STM32L431 (Cortex-M4) |                                           |
|  | + Cell voltage x7   |                | + EEPROM                |                                           |
|  | + Pack voltage      |                | + LED indicators        |                                           |
|  | + Current           |                | + SWD / UART debug      |                                           |
|  | + PFETs cell switch |                | + I2C / CANinterfaces   |                                           |
|  +---------------------+                +-------------------------+                                           |
|                                                     ^                                                         |
|                                                     | 3.3V, wake_up                                           |
|                                          +----------+---------+                                               |
|                                          | 3.3V Power Supply  |                                               |
|                                          | - - - - - - - - -  |                                               |
|                                          | + Buck converter   |                                               |
|                                          | + Enable latch     |                                               |
|                                          +--------------------+                                               |
|                                                                                                               |
+---------------------------------------------------------------------------------------------------------------+

Characteristics

ParameterValue
Cell count2 to 7 cells
Supported chemistriesLi-Ion, Li-Po
Communication interfacesCAN bus (up to 1 Mbit/s), I2C (SMBus compatible)
Maximum pack voltage30.1V (7 cells × 4.3V)
Minimum pack voltage4V (2 cells × 2V)
Maximum continuous current16A
Maximum peak current20A (hardware trip)
Current consumption (active, 7-cell, max)6mA
Current consumption (active, 7-cell, typ)4mA
Current consumption (active, 2-cell, max)19mA
Current consumption (active, 2-cell, typ)13mA
Power-down quiescent current< 2 µA
Operating temperature range-40°C to 85°C

License

OpenBMS is licensed under the MIT license and CERN OHL-S v2.

Check openbatt.dev for more!

Comments

No comments yet. Be the first to ask about this board.

Ask about this board

Sign in to BoardRepo

New here? Signing in creates your account; there is no separate sign-up.