Skip to the content
PCBKitNew board
4 layers68.4 × 52.4 mmOpenbms, the printed circuit board in 3D

OpenBMS - Open Source Battery Management System Hardware

Size
68.4 × 52.4 mm
Copper layers
4
Thickness
1.6 mm
Parts
220
Nets
172
Pads
680
Tracks, vias
2,002, 418
Pours
906
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
16 Apr 2026
Updated
25 Sep 2026

Overview

Openbms is an open-source printed circuit board by open-batt, from the open-batt/openbms-hardware repository on GitHub, published under the MIT licence. It is a 4-layer board of 68.4 × 52.4 mm with 220 parts on 172 nets, routed with 2,002 tracks and 418 vias.

It is built around the TPS12000QDGXRQ1, 2N7002KW and BSS84AKW,115-VB, with the NTMFS5C612NLT1G and BAT54J among its other parts. Its parts include 119 resistors, 45 capacitors, 21 ICs, 15 diodes and 7 transistors. It belongs with the power boards and the STM32 boards of this library.

Main components

5

README

README.md

OpenBMS

Hardware Firmware License License

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
OpenBMS v3OpenBMS v4

Rev B is out!

Schematic and layout updated, fixes applied

Related repositories

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:

text
+-------------+       +---------------------------+       +----------------+
|             |       |         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:

text
+---------------------------------------------------------------------------------------------------------------+
|                                                  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                                           |
|                                          +----------+---------+                                               |

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!

Parts

220
QtyValueFootprintReferences
38100kResistor_SMD:R_0402_1005MetricR1, R2, R3, R14, R21, R22, R25, R29, R30, R102, R109, R110, R111, R112, R116, R119 +22
24100nCapacitor_SMD:C_0402_1005MetricC1, C2, C10, C11, C12, C13, C15, C17, C18, C20, C21, C22, C23, C25, C29, C30 +8
1510kResistor_SMD:R_0402_1005MetricR18, R19, R52, R53, R70, R71, R72, R75, R76, R78, R86, R99, R101, R117, R118
131k,0.1%Resistor_SMD:R_0402_1005MetricR17, R20, R23, R24, R26, R32, R33, R43, R45, R48, R51, R55, R59
100RResistor_SMD:R_0402_1005MetricR81, R87, R100, R104, R105, R106, R107, R108, R113, R114
8DMP68D1LVQ-7custom_library:SOTFL50P162X60-6NU1, U2, U4, U6, U8, U9, U10, U18
72k,0.1%Resistor_SMD:R_0402_1005MetricR15, R16, R36, R37, R60, R61, R73
750RResistor_SMD:R_2512_6332MetricR10, R11, R41, R42, R67, R68, R74
768k,0.1%Resistor_SMD:R_0402_1005MetricR12, R13, R27, R28, R56, R57, R69
7DMN601VK-7custom_library:SOTFL50P162X60-6NU3, U7, U11, U12, U13, U14, U22
610uCapacitor_SMD:C_1206_3216MetricC36, C37, C38, C40, C41, C42
6TVS diode DBLC03CIQ-7Diode_SMD:D_SOD-323D8, D9, D10, D11, D12, D13
54.7kResistor_SMD:R_0402_1005MetricR82, R83, R84, R88, R89
4100RResistor_SMD:R_0402_1005MetricR5, R8, R46, R47
410nCapacitor_SMD:C_0402_1005MetricC7, C24, C35, C44
418pFCapacitor_SMD:C_0402_1005MetricC14, C16, C27, C28
41uCapacitor_SMD:C_0402_1005MetricC5, C9, C26, C34
433RResistor_SMD:R_0402_1005MetricR38, R39, R40, R44
4SBAT54CWT1GPackage_TO_SOT_SMD:SOT-323_SC-70D1, D2, D3, D14
32N7002KWPackage_TO_SOT_SMD:SOT-323_SC-70Q4, Q5, Q7
2470RResistor_SMD:R_0402_1005MetricR79, R80
2600R @ 100MHzInductor_SMD:L_0402_1005MetricL1, L2
2BSS84AKW,115Package_TO_SOT_SMD:SOT-323_SC-70Q3, Q6
2NTMFS5C612NLT1Gcustom_library:ONSemi_SO-8FL_488AAQ1, Q2
2TVS diode P4SMA33A-QDiode_SMD:D_SMAD6, D7
10RResistor_SMD:R_0805_2012MetricR115
1100RResistor_SMD:R_2512_6332MetricR90
1100pCapacitor_SMD:C_0402_1005MetricC3
1120RResistor_SMD:R_0402_1005MetricR85
1137kResistor_SMD:R_0402_1005MetricR97
12-pin JST connectorConnector_JST:JST_XH_S2B-XH-A_1x02_P2.50mm_HorizontalJ4
1220nCapacitor_SMD:C_0402_1005MetricC19
1220nCapacitor_SMD:C_0603_1608MetricC33
125A FuseFuse:Fuse_1206_3216MetricF1
1261kResistor_SMD:R_0402_1005MetricR95
12mcustom_library:3920R103
13-pin JST connectorConnector_JST:JST_GH_BM03B-GHS-TBT_1x03-1MP_P1.25mm_VerticalJ1
132kbit EEPROM memoryPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU17
1330R,0.1%Resistor_SMD:R_0402_1005MetricR77
17-pin JST connectorConnector_JST:JST_XH_S7B-XH-A_1x07_P2.50mm_HorizontalJ7
18-pin JST connectorConnector_JST:JST_XH_S8B-XH-A_1x08_P2.50mm_HorizontalJ3
18.192MHzcustom_library:ECS81921230QENTRY1
18MHzcustom_library:ECS81921230QENTRY2
1ADS131M08xPBScustom_library:TQFP-32_5x5mm_P0.5mmU5
1BAT54JDiode_SMD:D_SOD-323FD15
1Green LEDLED_SMD:LED_0603_1608MetricD4
1LMZM23600V3custom_library:Texas_SIL0010A_MicroSiP-10-1EP_3.8x3mm_P0.6mm_EP0.7x2.9mm_ThermalViasU20
1Red LEDLED_SMD:LED_0603_1608MetricD5
1STM32L431CCUxcustom_library:QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mmU15
1SW_Pushcustom_library:435451019820SW1
1TCAN3413DRBRcustom_library:TCAN3413DRBRU16
1TPS12000QDGXRQ1custom_library:VSSOP19_DGX_TEXU19
1TagConnect_TC2030Connector:Tag-Connect_TC2030-IDC-FP_2x03_P1.27mm_VerticalJ2
1XT60PW-F connectorcustom_library:AMASS_XT60PW-F_1x02_P7.20mm_HorizontalJ6
1XT60PW-M connectorcustom_library:AMASS_XT60PW-M_1x02_P7.20mm_HorizontalJ5

Questions

How big is the Openbms PCB?

It measures 68.4 × 52.4 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Openbms use?

220 parts, built around the TPS12000QDGXRQ1, 2N7002KW, BSS84AKW,115-VB and NTMFS5C612NLT1G. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Openbms KiCad files?

From the open-batt/openbms-hardware repository on GitHub, at the commit this page was made from: the board is openbms/openbms.kicad_pcb and its schematic openbms/ADC.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Openbms design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers135.1 × 56.9 mmAfterburner, the printed circuit board in 3D

    Afterburner

    CelestineOverflow/Afterburner_PCB

    PCBA Files

    144 partsGPL-3.0
  • 12 layers165 × 102.7 mmData center rdimm ddr5-tester, the printed circuit board in 3D

    Data center rdimm ddr5-tester

    antmicro/rdimm-ddr5-tester

    FPGA-based DRAM tester supporting RDIMM DDR5 memories

    797 parts44Apache-2.0
  • 8 layers227.5 × 104 mmCom express-7-baseboard, the printed circuit board in 3D

    Com express-7-baseboard

    antmicro/com-express-7-baseboard

    This project contains open hardware design files for a baseboard supporting COM Express 7 modules. The board breaks-out major communications and peripheral interfaces provided by the standard.

    815 parts12Apache-2.0
  • 6 layers111 × 111 mmLed panel, the printed circuit board in 3D

    Led panel

    antmicro/programmable-led-panel

    LED matrix controlled with iCE40 FPGA or RP2040 MCU for benchmarking and integration of video systems

    315 parts2Apache-2.0
  • 8 layers424.5 × 336.3 mmBarebones, the printed circuit board in 3D

    Barebones

    nzevh/barebones

    fully open source laptop based on the RK3588 Soc

    1,033 parts23CERN-OHL-S-2.0
  • 2 layers101.6 × 78.7 mmBADGER v41, the printed circuit board in 3D

    BADGER v41

    wyolum/BADGEr

    EReader badge and shield

    117 parts2
  • 4 layers55 × 72.1 mmMain unit, the printed circuit board in 3D

    Main unit

    HyFiVeUser/HyFiVe

    For this use case we developed a very flexible autonomous measuring system, which can be deployed on fishing gear to collect data in an affordable and scalable way.

    132 partsCC-BY-SA-4.0
  • 2 layers85 × 53 mmSBuCa, the printed circuit board in 3D

    SBuCa

    michelangelo/SBuCa

    SBuCa, the Smart Business Card: hardware designs

    43 partsMIT