a BMS (Battery Management System) which is what we are about to describe
an IO board (optionally) that offers a human interaction (through leds and buttons) but also some features that we thought had no place on the BMS itself (accelerometer, pressure sensor etc).
Gouach BMS presentation
Once on a printed circuit, it looks like this. On both sides you can see the golden plates that fit inside edge connectors of the contact plates.
The main functions of a BMS are:
to protect the lithium-ion cells from abusive usage (short circuit, over discharge, operating the battery in extreme temperatures)
balance the cells so they keep the same voltage over time
communicate with the machine it is powering
This high level representation, shows the following blocs:
the MCU (in our case an ESP32 from Espressif) is the brain of the battery ensuring all the calculation, the communication in wifi and ble.
Battery IC (in our case a Texas Instrument chip from BQ family) whose role is to ensure the main safety parameter of the battery even if the MCU is asleep.
the Poser Supply is a switching power supply that will produce 5V from the battery pack voltage. Then a LDO will produce 3,3V from the 5V.
MOSFETs controlled by the Battery IC are basically switches that can isolate the battery from the machine and thus cut any current input or output
Precharge circuit is here to charge cell very slowly in case their voltage is very low.
Pre-discharge circuit ensures that the battery can charge a capacitive load before opening the MOSFET otherwise the high current would trigger a shortcut detection
CAN transceiver will create a nice CAN frames
Level Shifters are used for UART communication
the fuse is here as a second protection in case the MOSFET fail to stop the current
the Shunt resistor enbale a precise measurment of the current flowing in and out of the battery
The MCU we chose is unusual for BMS and can add the following features:
communication (Wifi and Bluetooth Low Energy)
encryption (to protect the code as well as the communications)
compute power and memory (in order to do high level tasks like over the air updates and advanced SOC & SOH computations)
being able to deal with any battery pack from 4 to 16 cells in series.
Different Gouach BMS versions
Gouach BMS v4.1.3 (The versatile)
This is the BMS that we produced the most and running on Pony bikes. It can accept multiple types of contact plates (from 4 to 16s) and with automatically configure itself once it has read the parameters of the contact plates (number of cells in series and parallel etc)
This BMS is the one we have run most of the following tests on. It’s only problem is to be quite packed because of:
the use of 0604 components
the fact that it can accept up to 16s
all components are on one side
This packing makes it difficult to ensure the most conservative isolation, thus this BMS is quite sensitive to migration phenomenon and should not be used in humid or polluted environments.
Pinout of BMS v4.1.3
The connection to the contacts are ensured by edge connectors (Samtec HSEC-8). The pinout is described by the following table:
Gouach BMS v5.0.0 (The rugged)
This BMS was done from the Versatile but with the aim of putting as much distance between the high potential traces to remove any possibility of migration even in extreme environments. To keep the same size, we had to:
put components on both sides
limit its usage to 10 cells in series
separate BAT+ and BAT- on two different edge connectors
Power consumption
Even if the BMS is quite advanced, it should not drain the batterie especially when unused.
The BMS can be in different state:
Discharge state is when current is drawn from the battery (same in charge) and when every component is powered up.
Idle: is when MOSFETs are shut but the MCU is powered up
Power off: the MCU is shutdown
Wake-on-CAN: the MCU as subpart that constantly monitors the CAN and can wake up the MCU in case a message arrives.
Always-on: is a mode where the MCU is shutdown but the MOSFET are opened. The Battery IC monitors the current and can wake the MCU depending on configurable thresholds.
UVLO: is a mode that is triggered when one or more cells are bellow a certain voltage: in order to protect the cells, everything is shutdown even the battery IC resulting in virtually no more consumption. in this case the battery can only wake up by a charger.
Mode
Power Consumption
UVLO
930 nA
OFF (no Wake on Can, no always-On
160µA
OFF
2 mA
ON
25.3 mA
ON with IO
26.8 mA
Discharge at high currents
Test-00: Discharge 20A, open case: stabilises at 85°C
Test-01: Discharge 25 A, open case
Current
Duration (s)
BMS T (°C) Flir
BMS T (°C) Flir corrected
BMS ΔT (°C) Flir
25A
0
29.5
26.5
0
25A
30
51
49
22.5
25A
60
56.5
53.5
27
25A
90
60.9
57.9
31.4
25A
120
67.6
64.6
38.1
25A
150
71.2
69.2
42.7
25A
180
74.4
71.4
44.9
25A
210
75.6
72.6
46.1
25A
240
80.3
77.3
46.8
25A
270
83
80
49.5
25A
300
84
81
50.5
25A
330
86.7
83.7
53.2
25A
360
88.8
85.8
55.3
Test-02: Discharge 30 A, open case
Current
Duration (s)
BMS T (°C) thermistor
BMS ΔT (°C) Flir thermistor
30A
0
18.8
0
30A
30
38.3
20.5
30A
60
56.7
37.9
30A
90
67.7
48.9
30A
120
76.3
57.5
30A
150
83.6
64.8
30A
180
89.8
71
30A
210
95
76.2
30A
240
99
80.2
30A
270
101
82.2
30A
300
105
86.2
Safety functions (ISO 13849)
The Gouach BMS has validated ISO 13849 standard with SGS. Here is summary of these tests.
Over Voltage Protection (OVP)
➡️ ACCEPTANCE CRITERIA
Ensure the battery doesn’t go in charge with a too high voltage charger.
➡️ TEST SET UP
Assembly
BMS
Cells
Charger
Power supply
Validation by
Devkit V1.0
V4.1.0
10s3p 18650
13s4p 18650
MDA BC238360020 50.5V 2A
MDA BC311480020 65.5V 2A
TENMA 72-2720
Test
➡️ TEST PROTOCOL
Setup a power supply TENMA 72-2720 to 50.5V 2A
Start battery.
Wait 1mn.
Plug charger.
Battery should not go in charge.
Wait 1mn.
Unplug charger.
Wait 1mn.
➡️ TEST RESULTS
Test is performed the 06/10/2022 at GOUACH, Bordeaux with Mr Lucak using power supply TENMA 72-2720.
Charger stops giving voltage in rebalance mode after 30s.
Protections
Argue
Conclusion
OC
No current is drawn
OK
OV
Battery is in voltage range. 40-42 V
OK
SC
No SC is detected
OK
Reverse Pol
Fets are OFF. Should not happen
OK
Precharge CC-CV
No current flows. Back or forward
OK
Recharge
No current flows. Back or forward
OK
✅ Battery charge was stopped
Under Voltage Protection (UVP)
➡️ ACCEPTANCE CRITERIA
Ensure that the battery stops discharge if voltage is inferior to 2.5 * number of cells in series.
➡️ TEST SET UP
Assembly
BMS
Cells
DC electronic load
Validation by
10s4p
V4.1.0
10s3p 18650
13s4p 18650
Kunkin KP184 DC
Test
➡️ TEST PROTOCOL
Once in UVLO, we must plug a charger to reboot the battery. It turns on the BQ & the BMS.
ESP is in light sleep
Wake from SHUTV in light sleep
Get wakeup reason
Detect false positive
If it was ⇒ go back to sleep
Otherwise ⇒ UVLO
ESP is in deep sleep
Wake up every X hours in deep sleep
Detect SHUTV in ON state
Detect false positive
If it was ⇒ go back to sleep
Otherwise ⇒ UVLO
ESP is on
Detect SHUTV in ON state
Detect false positive
If it was: swallow
Otherwise ⇒ UVLO
➡️ TEST RESULTS
Test is performed the 06/10/2022 at GOUACH, Bordeaux with Mr Richard.
Measurements
Measurements with brown out activated
State
Light sleep
Bootloader DS → Awake
Voltage
3.0 V
2.2 V
Duration
Until wake up
12 ms
Source
BQ
BQ
According the picture of oscilloscope, when battery is on light sleep and detect a UV, BQ send alarm to the ULP.
The BMS opens the MOSFETs on detection of the UVP threshold.
✅ Battery turns off when UVP is detected.
Over Temperature Protection in Charge (OTPC)
➡️ ACCEPTANCE CRITERIA
- The battery shall not charge if temperature is superior or equal to OTPC threshold.
- No leakage
- No gas venting
- No busting
- No rupture
- Batterie voltage no less than 90% of initial SOC
- No trace of corrosion
Test is performed the 28/02/2023 at GOUACH, Le Haillan with Mr Jungo using Contact temperature chamber.
➡️ TEST SET UP
Assembly
BMS
Cells
Charger
Contact temperature chamber
Validation by
10s4p-18-C7R2
V4.1.2
Samsung 35E
MDA BC238360020 50.5V 2A
TOB-80C
Test
Test is performed the 28/10/2022 at le Haillan
Battery:
Battery ID: 0000000527
BMS: tPrDXXUDyNWRm5ae9KVU
Firmware: v3.12.0-rc4-0g93465454-always-on
➡️ TEST PROTOCOL
Put battery in discharge in climatic chamber and set T°C to 72°C in 1 hour
Maintain 72°C for 1h
➡️ TEST RESULTS
When the temperature is 50 °C, the battery cuts the charge.
✅ Battery charge was stopped
Over Temperature Protection in Discharge (OTPD)
➡️ ACCEPTANCE CRITERIA
The battery shall not discharge if temperature is superior or equal to OTPD threshold.
➡️ TEST SET UP
Test is performed the 28/02/2023 at GOUACH, Le Haillan with Mr Jungo using Contact temperature chamber.
Assembly
BMS
Cells
Contact temperature chamber
Validation by
10s4p-18-C7R2
V4.1.2
Samsung 35E
TOB-80C
Test
Test is performed the 28/10/2022 at le Haillan
Battery:
Battery ID: 0000000527
BMS: tPrDXXUDyNWRm5ae9KVU
Firmware: v3.12.0-rc4-0g93465454-always-on
➡️ TEST PROTOCOL
Put battery in discharge mode in climatic chamber and set T°C to 72°C in 1 hour
Maintain 72°C for 1h
➡️ TEST RESULTS
When the temperature reached 60 °C, the battery cut the discharge.
✅ Battery discharge was stopped.
Under Temperature Protection in Charge (UTPC)
➡️ ACCEPTANCE CRITERIA
The battery shall not charge if temperature is inferior or equal to UTPC threshold.
- No leakage
- No gas venting
- No busting
- No rupture
- Batterie voltage no less than 90% of initial SOC
- No trace of corrosion
➡️ TEST SET UP
Assembly
BMS
Cells
Contact temperature chamber
Validation by
10s4p-18-C7R2
V4.1.2
Samsung 35E
TOB-80C
Test
Battery:
Battery ID: 0000000527
BMS: tPrDXXUDyNWRm5ae9KVU
Firmware: v3.12.0-rc4-0g93465454-always-on
➡️ TEST PROTOCOL
- Put battery in climatic chamber and set T°C to -10°C.
- Maintain -10°C for 4h.
➡️ TEST RESULTS
Test is performed the 28/02/2023 at GOUACH, Le Haillan with Mr Jungo using Contact temperature chamber.
Test is performed the 28/10/2022 at le Haillan by Mr Jungo.
When the temperature goes down under 0 °C, the battery in charge cuts the charge.
✅ Battery charge was stopped
Under Temperature Protection in Discharge (UTPD)
➡️ ACCEPTANCE CRITERIA
Ensure that battery shall not discharge if temperature is inferior or equal to UTPD threshold.
➡️ TEST SET UP
Assembly
BMS
Cells
Contact temperature chamber
Validation by
10s4p-18-C7R2
V4.1.2
Samsung 35E
TOB-80C
Test
Test is performed the 28/10/2022 at le Haillan
Battery:
Battery ID: 0000000527
BMS: tPrDXXUDyNWRm5ae9KVU
Firmware: v3.12.0-rc4-0g93465454-always-on
➡️ TEST PROTOCOL
- Put battery in climatic chamber and set T°C to -40°C.
- Maintain -40°C for 4h.
➡️ TEST RESULTS
Test is performed the 28/02/2023 at GOUACH, Le Haillan with Mr Jungo using constant temperature chamber.
When the temperature goes down under -15 °C, the battery cuts the discharge.
✅ Battery discharge was stopped.
Short circuit in discharge
➡️ ACCEPTANCE CRITERIA
Ensure that battery shall stop discharge after SC detection.
➡️ TEST SET UP
Assembly
BMS
Cells
Workstation
Validation by
10s4p
V4.1.0
Samsung 35E
Liba Workstation S
Test
Firmware: v3.10.4-en62133-0-g5b810e6-ots
➡️ TEST PROTOCOL
Have the BMS connected to a battery pack.
Cells should be well-balanced and fully charged (≥ 4.15V).
Use a vice to hold PACK- & PACK+ cables close to each other.
Use appropriate PPE (safety glasses at the very least).
Clear the working area, as well as a few meters around it from anything unnecessary.
Perform the test in the LiBa Workstation.
Have an F-500 fire extinguisher next to you.
Connect an oscilloscope to the output of the battery.
Perform the test with cable lengths ranging from 0.5 to 2m, with 50cm increments.
Check the MOSFETs temperature rise using a thermal camera.
Test conditions:
Pack used is BlackPack 10s4p Samsung 35E with an IO board to turn the pack ON manually
The BMS used is BMS_1865_F_v4.1.1 with 5x parallel (10 total) SIR826LDP-T1-RE3 MOSFETs
The short is done using a metallic screwdriver, by touching the two exposed wire ends held in the vice
The cable used is multi-strand 1.5mm² electrical wire, so about 1.6mm diameter
We measure about 33mOhm for the 1m cable tightly shorted with the screwdriver, from its XT60
One end of the cable is held in a vice. The rest is loose on the table
➡️ TEST RESULTS
Test is performed the 14/10/2022 at Gouach, Bordeaux with Mr Thiriet in the Liba Workstation S, using 10s4p packs.
We short the two output wires
The output then goes to 0V, as can be seen on Channel 3 (pink) of the oscilloscope:
We observe that the total duration is about 550µs from the short to when the MOSFETs are fully open. This timing comprises:
The time the BMS takes to detect there is a short circuit
A programmed delay of 500µs here
The MOSFET’s turn-off time
As the output is 0V after SC detection, the battery stops discharge
We measure the short circuit current by measuring the resistance of one shorting wire, and placing the + and - of a differential probe at each end of it. We obseve the voltage across the wire during the short circuit, and calculate the current using the formula I = U / R
Here, for 50cm wires, the resistance is ~6.5mOhm
At the beginning of the short circuit, we can see a peak voltage of ~5.8V, so a peak current of 900A during a few µs
Then, as the cells voltages fall due to the extremely high current, the current reduces, down to a steady ~300A, as measured on Channel 4 (~2V):
No damage to the battery is observed. After a programmed delay, it can be turned ON again if the short circuit is removed
The operation is repeated with 50cm, 100cm, 150cm and 200cm shorting wires, with the same results
✅ Battery discharge stopped after short circuit detection
Overcurrent
➡️ ACCEPTANCE CRITERIA
The goal of this test is to characterize the high current discharge behavior of batteries, determine max discharge current over time.
➡️ TEST SET UP
Assembly
BMS
Cells
Workstation
Thermal camera
Validation by
10s4p
V4.1.1
Samsung 35E
Liba Workstation S
FLIR E8-XT
Test
➡️ TEST PROTOCOL
Have the BMS connected to a battery pack
Cells should be well balanced and fully charged (≥ 4.0V)
Connect the battery to one (or multiple) electronic loads
Configure the load in constant current by 5A increments
Do not perform the test with ambient temperatures above 35°C
For each test, measure the temperature (using a thermal camera) at:
The BMS.
The contact plate.
The cells.
The cables & connectors.
End the measurement when one of the following happened:
Temperature stabilized.
One of the component reaches a ΔT of 50°C.
➡️ TEST RESULTS
Test is performed the 21/11/2022 at Gouach, Bordeaux with Mr Jungo in the Liba Workstation S, using 10s4p packs, and Flir E8.
Thermistor accuracy
Around 80°C measured on the FETs, the thermistor displays about 10°C less than reality
Max current vs time (define a max BMS ΔT)
If we use the (more accurate) ΔT measured using the thermal camera,
If we take 40°C as a max ΔT (60°C starting temperature → 100°C),
We observe that the BMS can supply:
20A: indefinitely (limited by the heating of the cells)
25A: during 180sec (3min)
30A: during 90sec (1min30)
Notes:
Those are the limits of the BMS. It does not take into account the cells heating
The temperature rise steepness depends mainly on the thermal inertia of the BMS, because it has low dissipation capability (only its surface, + it’s enclosed when inside the battery case).
The test here is out of the case, so the BMS could dissipate more than in real use.
The 25A and 30A tests are a bit biased due to the fact the BMS had not totally cooled down before the tests.
Discharge performance regarding discharge current
➡️ ACCEPTANCE CRITERIA
The goal of this test is to characterize the discharge characteristics of our batteries regarding temperature.
➡️ TEST SET UP
Test is performed the 19/08/2022 at Gouach, Bordeaux with Mr Com-Nougue in the Liba Workstation S, using 10s4p packs.
Assembly
BMS
Cells
Workstation
Validation by
10s4p
V4.1.1
Samsung 35E
Liba Workstation S
Test
➡️ TEST PROTOCOL
Have the BMS connected to a battery pack.
Cells should be well-balanced and fully charged (≥ 4.0V).
Connect the battery to one (or multiple) electronic load.
Configure the load in constant current by 5A increments.
Do not perform the test with ambient temperatures above 35°C.
For each test, measure the temperature (using a thermal camera) at:
The BMS.
The contact plate.
The cells.
The cables & connectors.
End the measurement when one of the following happened:
Temperature stabilized
One of the component reached a ΔT of 50°C
➡️ TEST RESULTS
Table of temperature result according to the discharge current:
Current
Duration
BMS ΔT (°C)
Cells ΔT (°C)
Contact ΔT (°C)
Cables ΔT (°C)
5A
NA
<5°C
<5°C
<5°C
<5°C
10A
NA
5°C
5°C
7°C
7°C
15A
NA
19°C
10°C
13°C
23°C
20A
NA
32°C
≥ 10°C
16°C
30°C
25A
7 min (FOT)
67°C
≥ 20°C
32°C
57°C
✅ The security temperature of 60 °C wasn’t exceed, the test is validated.
TVS versus charger
➡️ ACCEPTANCE CRITERIA
The goal of this test is to determine if the TVS on PACK+/PACK- is sufficient to protect the pack when a charger is plugged in reverse.
➡️ TEST SET UP
Test is performed the 31/05/2022 at Gouach, Bordeaux with Mr Carayon in the Liba Workstation
BMS
Workstation
Charger
Validation by
V4.1.1
Liba Workstation S
MDA BC238360020 50.5V 2A
Test
➡️ TEST PROTOCOL
On BMS 4.0.0 we added a charger reverse protection.
Test it and measure:
Voltage at LOAD+ measurement GPIO on the ESP with reverse charger.
➡️ TEST RESULTS
The TVS resisted to the test, the TVS is thus resistant and protects well the battery, the test is validated.
✅ TVS resisted to the test.
SOP for precharge
➡️ ACCEPTANCE CRITERIA
The goal of this test is to check & characterize the pre-charge circuit.
➡️ TEST SET UP
Assembly
BMS
Cells
Power supply
Validation by
Devkit V1.0
V4.1.0
10s3p 18650
TENMA 72-2720
Test
➡️ TEST PROTOCOL
Set Precharge Start Voltage when cell voltage is at 2.7V.
Stop Precharge Stop Voltage when cell voltage is at 3.0V.
➡️ TEST RESULTS
Test is performed the 02/09/2022 at Gouach, Bordeaux with Mr Com-nougue using cell Samung 35E.
✅ Results were: about 14mA and ~13°C elevation after 15 minutes
We have a consumption of 25mA during the precharge state, we put one cell at 2.56v and try to charge the pack.
Balancing
➡️ ACCEPTANCE CRITERIA
The goal of this test is to check the balancing function of the BMS.
➡️ TEST SET UP
Assembly
BMS
Cells
Validation by
1p
V4.1.0
10s3p 18650
13s4p 18650
Test
➡️ TEST PROTOCOL
Connect the BMS to a 1P pack, with one cell 100mV below the others.
All the cells should be ≥ 3.7V.
Balancing should turn on.
Resistor ΔT ≤ 50°C
BQ ΔT ≤ 50°C
➡️ TEST RESULTS
Test is performed the 31/08/2022 at Gouach, Bordeaux with Mr Thiriet using BMS v4.1.0 connect to 1P.
Measured around 50-60mA peak, 40-50mA average when including duty cycle.
Measurement at cell voltage ~3.85V.
This leads to ~55-65mA peak at 4.2V / cell
3.85/0.06 = 64R
64R ⇒ 66mA
✅ Design is in the range of 60 - 120mA. We’re on the low-end, but within specs.
BMS test bench
When designing a BMS for production, one should care also about the testing equipment. We designed our own that has the following tasks:
Right after production:
Test the hardware of a BMS
Calibrate the BMS readings
Write fabrication data into the BMS internal EEPROM
Burn the EFuses of the BMS
Program the BMS battery chip
Program the BMS with the expected firmware
After a defect on a battery:
Test the hardware of a BMS
Calibrate the BMS readings
Program the BMS with the expected firmware
To test it, the operator performs the following steps:
Scans the BMS label with the data-matrix reader
Puts the BMS onto the test bench
Starts the test suite (using the tester’s touchscreen and/or buttons)
Waits for the test result
If all tests passed, puts the BMS in a OK bin, for pack assembly
Otherwise, puts the BMS in a KO bin, for later analysis and/or reworks
Once a test suite is started, the following behaviour is expected
sequenceDiagram
participant DB as Backend
participant TST as Tester
participant BMS as BMS
actor OP as Operator
OP->>+TST: Scan the label
TST->>DB: Get BMS ID from label
DB-->>TST:
TST->>DB: Retrieve Batch & Type informations
DB-->>TST:
TST->>DB: Retrieve desired firmware
DB-->>TST:
TST->>BMS: Flash BQ & EFuses
TST->>BMS: Flash "test" firmware
activate BMS
TST->>BMS: Perform tests
BMS-->>TST:
deactivate BMS
TST->>BMS: Flash EEPROM
TST->>BMS: Flash "desired" firmware
TST->>DB: Send tests results
TST->>OP: Show tests results
deactivate TST
DB->>DB: Store tests results
alt all tests passed
OP->>OP: Send BMS to pack assembly
else
OP->>OP: Send BMS to later review / rework
end
The results of the tests are sent to our backend:
So that we have traceability on what tests were performed on each BMS
So that we can do quality analysis on our production:
What are the most common production defects
So that we can do analysis on our defective BMSes:
What are the most common causes of errors / issues