Servers by jDrones

Smart battery project from CUAV

CUAV has spent several years developing smart batteries. Through continuous testing and improvement. I am very happy to share CUAV Smart Battery with you in the new year.
We have made it into a 7S10400mah battery pack and conducted a lot of tests; but it still has many functions and styles that need to be improved. It would be great if you can provide me with advice.

Key data


Flight test

We loaded it into the CUAV X4 helicopter and conducted a flight test. It can provide 52 minutes of flight time for the aircraft.


Looks very interesting, so what battery information is passed over the canbus ?

Is there a SN sent as well ?

@MadRCIt follows UAVCAN’s battery message, but some messages may not be used by ardupilot. Is SN the battery serial number? It is included in the message, but it is still an engineering test sample so it is not used for the time being.
battery_info.temperature = bat_msg.gauge.temperature / 10.0; // [Kelvin]
battery_info.voltage = bat_msg.gauge.voltage / 1000.0; // [Volt]
battery_info.current = abs(bat_msg.gauge.current) / 1000.0; // [Ampere]
battery_info.average_power_10sec = bat_msg.gauge.available_power / 1000.0; // [Watt] Average power consumption over the last 10 seconds
battery_info.remaining_capacity_wh = (bat_msg.gauge.remaining_capacity / 1000.0) * 3.6; // [Watt hours] Will be increasing during charging
battery_info.full_charge_capacity_wh = (bat_msg.gauge.full_charge_capacity / 1000.0) * 3.6; // [Watt hours] Predicted battery capacity when it is fully charged. Falls with aging
battery_info.hours_to_full_charge = bat_msg.gauge.average_time_to_full / 60.0; // [Hours] Charging is expected to complete in this time; zero if not charging
battery_info.status_flags = 1; // The battery is currently used as a power supply
battery_info.state_of_health_pct = bat_msg.gauge.state_of_health; // Health of the battery, in percent, optional
battery_info.state_of_charge_pct = bat_msg.gauge.state_of_charge; // Percent of the full charge [0, 100]. This field is required
battery_info.state_of_charge_pct_stdev = 5; // SOC error standard deviation; use best guess if unknown
// battery_info.battery_id = bat_msg.gauge.serial_number; // Identifies the battery within this vehicle, e.g. 0 - primary battery
battery_info.model_instance_id = bat_msg.gauge.serial_number; // Set to zero if not applicable
battery_info.model_name.len = strlen(CAN_BATTERY_MODEL_NAME); // Battery model name length = (uint8_t *)CAN_BATTERY_MODEL_NAME; // Battery model name


There are additional fields you may want to consider sending especially since you are using NCR18650s. Minimum discharge volts, Design Voltage, cycle count, and maximum discharge current

Are there not cell voltages available?

See the MAVLink message SMART_BATTERY_INFO for other fields.

I’m not sure if those fields are available in UAVCAN?

Also do I see solder on the black lead connecting to the battery? Is there no strain relief for the leads?

Why you do not use vendor section and infest blog with adv??

@Corrado_Steri I approved it. It’s a fine balance but there’s active work in mavlink and ArduPilot for smart batteries, so visibility and discussion is useful

Thank you for your suggestion. It’s just an engineering test board. I’m still optimizing it.

Please do not focus on the manufacturers, since the solo discontinued, the open source community lacked smart battery solutions. I just want it to work better with ardupilot, so I initiated this discussion. In fact, we don’t have a sales plan for this battery for the time being, and you can’t see any sales information about it.

Servers by jDrones