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.
@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
battery_info.model_name.data = (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
@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
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.
yes, ArduPilot supports Dronecan smart batteries. For CUAV smart batteries, we have not found a good universal adaptation framework. We have used it in the XUNWING X2 multi-rotor (12S solid state battery form).