Users of BMSOne can find it hard to remove the special Solo battery connector from a dead battery, this is a guide on how to do it, with a focus on simplicity.
No desoldering vacuum station, preheater, or reflow oven required. 🙂
Safety First :
People are afraid of the dreaded thermal runaway, where the Lithium-Polymer/ion battery spew gasses & fire when shorted/damaged.
Basic physics tells us that the energy to do that, must be available, or else, there will not be smoke/fire hence:
Drain the battery – method 1:
Connecting a small 12v ,5-10W bulb to a bad battery (no reason to open it like I did in the photo below)
DO NOT think a 50W bulb will drain it better, it will make the voltage drop faster(and battery will switch off) – in the end , slower discharge is better.
In this case, I stuck the wires into the +/- connector. Switched on the battery, and let it sit on a concrete floor until it dies.
Drain the battery – method 2:
You may as well hover the Solo till it can’t fly no more, then let it be on until the battery dies completely
The BMS will fail to keep the FET’s on at somewhere around 5.7v or so, When the pack voltage falls that low, it will switch off, .. feel free to let it recover for a while then switch it on again..
When the battery is empty:
Solo Battery tool tells me that this battery is drained, no cell is even near 3.0v even an hour after it switched off I have seen the voltage drop far enough to it to switch off more than once. A properly drained battery, where all cells are low, do not have the energy to cause any fireworks, let me prove it to you.:
Opening the battery shell:
(will describe the process later – many have already done it.. if YOU did a video on it, feel free to let me embed it here.)
Extracting the connector:
I used an electronic hotplate, set to 300°C You can use a cooking plate just fine. The plate should not be red hot, let the PCB sit there for a few minutes, then start pushing the PCB down (so that the pins get a better thermal connection, and get pushed thru in the end.)
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
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.
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)
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.
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.
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).
It’s working as expected. (The balancing connector header had 2mm pitch on PCB (my bad), therefore, this test version got a wire.)
All Calibration/setup/programming and firmware updates are done over the FTDI header.
Please do not think much about the poor flight time I got during early tests, the cells had a bit too high internal resistance and produced heat/dropped voltage too much. Better cells could be used.
11 January 2020:
Preliminary documentation for configuration over Serial port (serial port is used for configuration and firmware updates): Example commands in bold.
SC3256,3231,3255,3263 // calibrate cell voltage in millivolts for 4 cells. Users can also omit any cell to if one-by-one calibration is desired for some reason, like SC,,3300, – this may be useful if calibrating by a single, precise voltage standard source.
SI10220 //Calibrate current sensor in mA “SI10220” = 10.220A
GV //get firmware version SW //write valibration/linearization tables to flash
5 January 2020: designed some initial PCB’s – now with individual cell measuring and current sensing.
(I hope to start selling them as a product before March 2020)
15 December 2019:
Currently handled I2C requests (all that Solo is requesting:)
0x08 TEMPERATURE 0x10 FULL_CHARGE_CAPACITY 0x1C SERIAL_NUMBER 0x0F REMAINING CAPACITY 0x23 MANUFACTURER_DATA 0x28 CELL_VOLTAGE 0x2A CURRENT
This is an early version of a BMS for any 0-5v/cell chemistry 4-cell pack for ArduPilot.
Right now, it is more correct to call it an BMS emulator, than a BMS. A final product would measure individual voltages and the actual current. I started this way because it does not require a custom PCB and a minimum of discrete components.
This early version does handle all the communications, and makes the autopilot set the actual capacity (9Ah), reports voltage, and calculated individual cell voltages.
It does also calculate and report remaining capacity by doing a 15-point linearization and then interpolating a “voltage_to_capacity_table”. This method is good enough once one knows the battery characteristics and fly at about the same current later.
I did not wait for the 4S3P Li-Ion pack to charge fully. (Samsung 3Ah 18650-30Q cells) The outdoor temperature was about -5°C, batteries. Flight time was 17 minutes. With GoPro4Black + the brushless 3DR Gopro gimbal. The battery pack was 677gram. Included in that weight is 22gram that is the BMS microcontroller PCB, Solo battery connector and wires/connectors to battery.
The predicted SoC percentage (blue) is clearly not perfect (yet) it was good at the end, not at the beginning, but that is not a problem, as it is easy to change by modifying the table.
Notice that it can still climb at as low as 10.5v , not exceeding 70% of throttle.
Post-flight thermal image: (somewhat affected by some kapton tape on the battery pack.)
TODO / Future:
Given enough interest, I plan to make a fully standalone BMS that can be user-customized to any chemistry, (min/max voltages) and so on. With balancing, real current sensing, fuel gauge etc.