BMSOne – the universal BMS

This BMS is very flexible and universal, you can fly any 4-cell battery chemistry/capacity that the Solo can handle in terms of voltage & weight, anything that produces 10-20v(I did not actually research/test Solo’s upper voltage limit)

The PCB is less than 50x40x9mm (balancing connector is the highest component) The weight is only 7.6g

There are three mounting holes that should enable nice mounting inside the GPS bay (I did not test it, just measured it.)

Important information: The BMSOne comes configured for Li-Ion cells, (down to 2.5v/cell) – watch the cell/voltage pack reading unless you are sure you did configure it properly for Li-Po

Operation modes:

The device can provide remaining capacity information based on a known full-capacity and mAh spent (mode 1), and also provide a remaining capacity estimate based on voltage under load. (mode 0) Out-of-the box, it will provide voltage and cell voltages, which is the most important information, along with a Li-ION voltage based SoC.

Firmware upgrades:

It can be fully configured using a FTDI cable (or any USB<>Serial cable with RX,TX and DTR signal- DTR is only used to enter the bootloader, and only useful for flashing, although it is possible to flash it without DTR too)

This image has an empty alt attribute; its file name is BMSOne11top-2.jpg
BMSOne $35

BMSOne w/XT60 $40

20cm balancing cable JST-HX $1


This is the BMSOne:

On top, balancing connector, FTDI(configuration) on the left, Solo connector on the right, with the option to solder battery wires directly.
The backside. B+/− is where you connect the battery, if you do not use a Solo power connector, (or not a Solo) – then output is +/- and SDA/SCL is clearly labeled.

BMSOne+XT60 connector

The Silicone wires are 5cm long (measured from PCB to where they enter the XT60)

You can extract the gray power connector from a dead battery: Instructions here: https://madhacker.org/simple-desoldering-of-the-solo-battery-connector/

Direct connection to Solo motherboard. Instead of moving a Battery-Connector the BMSOne, you can remove the Solo’s male battery connector, and just solder in the BMSOne permanently.

Plug’n’Play:

A few people asked whatever BMSOne is “plug’n’play”.
Yes, it is kind of that, the simplest job is done right out of the box, once you connect a battery thru it, you will see the battery, and cell voltage, which is the most important information.
That is the configuration it is delivered in.
To have a nice, linear, SoC based on voltage or current used, some configuration is required, there is no “one setup fits all” configuration, if there were, it would be a default.

Configuration:

When you connect to it and power it up, you will see:
BMSOne v1.00
Set the capacity of the battery in mAh using the command:
SM10000
it will respond:
Set capacity: 10000
Now, you have defined a 10Ah full capacity.

You can type:
S0 //Select voltage-based SoC (State Of Charge)
S1 //Select capacity-based SoC
SW //write configuration to flash – until you do this, all your changes/calibration are temporary and can be reverted by rebooting the device.
SR //read config from flash (it happens on every boot)
SS //Show config

Displaying Configuration:
Voltage table: 104, 110, 113, 116, 119, 122, 126, 129, 132, 135, 138, 142, 145, 148, 168,
Capacity table: 0, 4, 12, 20, 29, 37, 45, 53, 62, 70, 78, 86, 95, 99, 100,
SoC by Voltage
Cell voltages(mV):3727,3731,3739,3744
Pack voltage(mV):14941
Current (mA):-152
Full capacity: (mAh)10000
Remaining capacity by Voltage: (mAh)9900
Remaining capacity by Current: (mAh)10000


SD //Show internal data

You can also perform AD calibration.
When calibrating voltages/current sensor, it is important NOT to provide power from the FTDI connector. (otherwise, the precision will suffer.)
On the solder side of the PCB, there is a solder jumper “JP1” – to ensure a correct calibration, you can remove its solder blob – OR, simply disconnect the +5v pin from the FTDI connector.

With a battery hooked up, you can measure its cells, then provide a command like this: the numbers are voltages in millivolts.
let’s say you measured 3.256v, 3.231v , 3.255v and 3263v then enter:
SC3256,3231,3255,3263 // calibrate cell voltage in millivolts for 4 cells.
If you can’t measure with 3 digits, – let’s say you can measure with lower precision “3.21v” then enter “3210”

SI10220 //Calibrate current sensor, value in mA “SI10220” = 10.220A
Again; with a known current flowing through the device, enter the current. It is better to calibrate while sensing 10A than the mA range.

Capacity by voltage linearization table:

SV10.4, 11.0, 11.3, 11.6, 11.9, 12.2, 12.6, 12.9, 13.2, 13.5, 13.8, 14.2, 14.5, 14.8, 16.8 //set 15-point percent linearization table
SP0, 4, 12, 20, 29, 37, 45, 53, 62, 70, 78, 86, 95, 99, 100 //sets 15-point percent table.

So by the example above 11.3v (third value) equals to 12% , (while 11.5v will be interpolated to a little less than 20%.

ArduPilot battery safety settings:

If you use S0 mode(default), set low and critical-voltage thresholds:
BATT_LOW_VOLT
BATT_CRT_VOLT
If you use S1 mode(capacity based), also set low and critical-capacity thresholds:
BATT_LOW_MAH
BATT_CRT_MAH
Finally, these parameters define what action is taken:
BATT_FS_LOW_ACT
BATT_FS_CRT_ACT

SoC Voltage mode explained:

State-of-Charge by Voltage.
This mode is beautifully simple and reliable, as you can use any number of battery packs, with same cells, and have perfectly fine SoC estimation (see battery percentage drop)
Advantage of this mode is that it works by voltage under load, so you can have one BMSOne, any number of packs, and any state of charge on those, and still, it will “just work”

We all remember how fast the remaining capacity drops on a Solo battery at the end, 15 to 1% can be done within one minute.

The first graph is made using these packs’ first flight.
It estimates energy as consumed a bit fast in the beginning, then just a little faster after 19/20 minutes.

Then the voltage/capacity table is corrected.. and watch the second graph, beautiful linear estimation, no surprises there even as the battery gets to 2.5v/cell.

Another aspect of SoC by voltage, is that it is most accurate when at normal cruise/hover, during a fast climb, the voltage will drop, and while climbing, you will see a lower estimate, and during a fast descend, you will see a higher estimate.

21minute flight example:

(I flew in bad wind conditions, now I see that the flight had the 4.0.3 PID issue that surely affected the flight time in a bad way)
4S3P Samsung INR18650-30Q (12 cells) 620grams with BMSOne.
GoPro Gimbal with Gopro 4 Black. AUW 1950g
Cells bought from Banggood (please observe that this is not a referral link, I get no kickback, nor can I guarantee the authenticity of a later batch).

1297 sec (21min) long flight in light rain and 2-4m/s wind.
I landed at 2.6v/cell, yet the manufacturer’s datasheet use 2.5v as the cutoff.