![](https://madhacker.org/wp-content/uploads/2019/11/20191105_200736.jpg)
Related product: https://madhacker.org/bmsone/
—–now back to what this page is all about:
This is the original Battery tool;
- more information
- more features
- better understanding of the battery
- firmware upgrades for all (and no incompatible versions)
Buy boxed version ($35 +worldwide Shipping $4)
3DR Solo battery packs have lots of information that the average user will never see, they are also very nicely calibrated for voltage (cells and pack) as well as current.
Some of the information, like capacity, cell voltages, cycles, past low voltage condition, cell voltage difference, and manufacture date may be very useful.
Health data is very useful as well.
Below: two devices, one as delivered, the other with an XT60 connector for charging.
It’s easy to solder on XT60, charger cables, or other connectors right on the main connector. The XT60 is there just for illustration purposes, it’s easy to solder on most of the typical connectors (XT60, EC3) directly, the rest can be soldered on with wires.
“Hard” edition means it comes in a nice case designed by Purplemon on Thingiverse:https://www.thingiverse.com/thing:2841916
The device is not doing any calculations on it’s own, data is read from the battery, and presented.
Values and information details:
Pack Voltage
Charge level in %
Remaining capacity
Internal temperature.
Charging current. (Negative value indicate discharging current)
Cell voltages for cell 1…4 – should be self-explaining, any healthy pack will have very similar voltages after a flight.
Design capacity is what the pack was designed to be.
Actual capacity is shows the actual capacity as the pack ages.
Relative charge level is based on actual capacity of the pack.
Absolute charge level is based on design capacity of the pack.
Manufacturing date in Y-M-D format.
Made by BMTPOW
The device name is MA03, serial number follows (not the same as the barcode on the pack)
TTF: Time To Full, if not charging, will display “-1”
Cycles: how many times have this pack been used. This is increased when discharged_capacity_since_last_increase > design_capacity.
The status word is bitmapped at least two bits we know are used, one indicating charging/discharging, the other tell if the factory calibration data is OK.
Should factory calibration data ever be corrupted, then you can never know if a reported voltage/current (used for capacity calculation !) is correct, and it’s dangerous to fly with such a pack. A very clear warning will be displayed.
Firmware >=1.5 say “Initialized” when BMS is calibrated&configured properly, or “NOT” initialized” if not.
There is also a warning for internal resistance deviation.
There is a “Cell Change” warning, I do not know what can cause it, or what exactly it means – both warnings above are for illustration purposes, I have no packs with such condition.
Status is expected to be 128(charging) or 192(discharging) , 16608 is a fully charged battery. (Thanks to Bob that found that).
Since firmware 1.5, status understanding is much better, and most data is presented as text.
Health is 18 for all good packs (I do not have one that is bad) , but there are 16bit of data that can indicate quite a lot…
I’ll update this page based on user reports.
Lowest voltage record.
– Displays eight last low voltage records, some values are initialized as 3.5v, but it is the lowest values that indicate if the battery has ever been close to deep-discharge.
If the battery pack is connected, but not charging – after 180seconds, the DONE message will show, two minutes later the battery will switch off.
(Shutdown feature is inhibited at any time by pressing battery button to toggle screen.)
Serial output:
This dataset is being outputted to FTDI interface at 115200baud, one at 1hz.
The device will not go to sleep once you used the battery button to select an screen.
This allows for nice graphing of charging/discharging, and full monitoring using DataExplorer with the plugin I’ve made: Solo_Batt_Tool
Of course, you are free to do whatever logging you wish, the format is basically semicolon delimited, and temperature, cell voltages are multiplied with 100/1000 so you don’t need to parse thru commas.
The data format is:
$1;state(int);time(ms);voltage;current;rel_cap;abs_cap;rem_cap;temp_c;c1;c2;c3;c4;ser1;ser2;ser3;ttf;cycles;checksum(LF)
example:
$1 ;1 ;20988; 1550; 0; 52; 52;2724;2445;3874;3874;3875;3876;105;26;76;-1;8;0
How-To:
Plug into battery , switch on battery.
or:
Plug into battery , and provide charging current. You can use any standard charger, select Li-Po 4cell program with no balancing (the battery have internal balancing circuit)
Firmware upgrade:
There is an custom bootloader on the device, so when I figure out more about the battery, it’s possibly to upgrade it using a standard FTDI cable and the avrdude tool (for Linux,Mac,Windows).
FTDI cable, with an extra pin header.
Insert pin header into FTDI cable, the protruding, short pins will fit into the SoloBatt_OLED’s six pins on the edge of the PCB. You will need to cut away or puncture a little bit of shrink-wrap to access the edge.
The upper & lower of the six pins on PCB are marked BLK (black) and GRN(green) – make sure that matches the orientation of the FTDI cable. (reversing does no damage)
Observe that there are two files in the firmware package:
“VG” is for displays with pin order: “VCC, GND, SCL, SDA”
“GV” is for displays with pin order: “GND, VCC, SCK, SDA”
To write the new firmware you will need the avrdude application.
On Linux, it’s installed by: “sudo apt install avrdude”
The firmware upload command is:
avrdude -patmega328p -carduino -P /dev/ttyUSB0 -b115200 -D -Uflash:w:SoloBatt_OLED.1.1.hex :i
/dev/ttyUSB0 is most likely correct, the number will be higher if you have more than one USB serial device
If you are using windows, replace /dev/ttyUSBx with COMx , also, in windows, you’ll need some FTDI drivers.
Please note that the programming protocol is Arduino compatible just enough to make it work with avrdude, but it’s not really Arduino.
Firmware 1.1
- Longer auto-off delay (was 2min , now 4min)
- Longer time per screen 3s->6s
- Serial output using FTDI cable at 115200 baud
Firmware 1.2
- Warning if the battery has detected uneven internal resistance.
- Warning named “change cell” (not sure when that is supposed to kick in)
- Low voltage records.
- Three digits in cell voltages.
- Fahrenheit & Celsius temperature.
Firmware 1.3
- Serial logging for Dataexplorer plugin (and any other data collection).
- Shorter splash screen timeout.
- Cosmetic fix for long status numbers on OLED display.
- manual page flip. lets user skip forward to a certain page, and stops automatic rotation. (connect a momentary switch between pin8 and pin9 – or – if you are using a microcontroller , just pull pin9 low.)
Download: SoloBatt_OLED_v1.3
Firmware 1.4
- Pressing the power button on the Solo battery jumps to next screen, pressing button loads next screen, and disables the default time-based change. (you can watch one as long you want).
- Manual page change disables auto-off.
- Displayed data is updated at 0.5Hz
Download: SoloBatt_OLED.1.4
Firmware 1.5
- Found out more about battery status, and presenting it as text. , among others, you may see “Fully Charged”, “Fully Discharged”, “Charging”, “Discharging”, “Initialized” “NOT initialized”, “Term.Disch.Alarm” and “Terminate Charge”
- The old status “Calibrated” is now replaced by “Initialized” – which means not only that the voltage/current sensors are calibrated, but also that the BMS is configured for proper operating limits and parameters. A “NOT initialized” battery means improperly set/default BMS configuration.
Download: SoloBatt_OLED.1.5
Firmware 1.6
- Moved the splash screen to back, now you see voltage & SoC om the first screen, no unnecessary delay.
- Faster startup.
- More (odd) errors are reported as text, most error codes & bits are known.
- Cosmetic fixes.
Firmware 1.7
- Cosmetic fixes
- No shutdown while current >0.1A