mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
battery: separate out publishing from updating
to allow smart battery drivers to use the battery class and filling in additional information in case it makes sense.
This commit is contained in:
parent
e70d70468a
commit
fdc40880d0
@ -406,7 +406,7 @@ Syslink::handle_message(syslink_message_t *msg)
|
||||
|
||||
_battery.setConnected(true);
|
||||
_battery.updateVoltage(vbat);
|
||||
_battery.updateBatteryStatus(t);
|
||||
_battery.updateAndPublishBatteryStatus(t);
|
||||
|
||||
// Update battery charge state
|
||||
if (charging) {
|
||||
|
||||
@ -86,7 +86,7 @@ INA226::INA226(const I2CSPIDriverConfig &config, int battery_index) :
|
||||
_battery.setConnected(false);
|
||||
_battery.updateVoltage(0.f);
|
||||
_battery.updateCurrent(0.f);
|
||||
_battery.updateBatteryStatus(hrt_absolute_time());
|
||||
_battery.updateAndPublishBatteryStatus(hrt_absolute_time());
|
||||
}
|
||||
|
||||
INA226::~INA226()
|
||||
@ -229,7 +229,7 @@ INA226::collect()
|
||||
_battery.setConnected(success);
|
||||
_battery.updateVoltage(static_cast<float>(_bus_voltage * INA226_VSCALE));
|
||||
_battery.updateCurrent(static_cast<float>(_current * _current_lsb));
|
||||
_battery.updateBatteryStatus(hrt_absolute_time());
|
||||
_battery.updateAndPublishBatteryStatus(hrt_absolute_time());
|
||||
|
||||
perf_end(_sample_perf);
|
||||
|
||||
@ -295,7 +295,7 @@ INA226::RunImpl()
|
||||
_battery.setConnected(false);
|
||||
_battery.updateVoltage(0.f);
|
||||
_battery.updateCurrent(0.f);
|
||||
_battery.updateBatteryStatus(hrt_absolute_time());
|
||||
_battery.updateAndPublishBatteryStatus(hrt_absolute_time());
|
||||
|
||||
if (init() != PX4_OK) {
|
||||
ScheduleDelayed(INA226_INIT_RETRY_INTERVAL_US);
|
||||
|
||||
@ -88,7 +88,7 @@ INA228::INA228(const I2CSPIDriverConfig &config, int battery_index) :
|
||||
_battery.setConnected(false);
|
||||
_battery.updateVoltage(0.f);
|
||||
_battery.updateCurrent(0.f);
|
||||
_battery.updateBatteryStatus(hrt_absolute_time());
|
||||
_battery.updateAndPublishBatteryStatus(hrt_absolute_time());
|
||||
}
|
||||
|
||||
INA228::~INA228()
|
||||
@ -310,7 +310,7 @@ INA228::collect()
|
||||
_battery.setConnected(success);
|
||||
_battery.updateVoltage(static_cast<float>(_bus_voltage * INA228_VSCALE));
|
||||
_battery.updateCurrent(static_cast<float>(_current * _current_lsb));
|
||||
_battery.updateBatteryStatus(hrt_absolute_time());
|
||||
_battery.updateAndPublishBatteryStatus(hrt_absolute_time());
|
||||
|
||||
perf_end(_sample_perf);
|
||||
|
||||
@ -376,7 +376,7 @@ INA228::RunImpl()
|
||||
_battery.setConnected(false);
|
||||
_battery.updateVoltage(0.f);
|
||||
_battery.updateCurrent(0.f);
|
||||
_battery.updateBatteryStatus(hrt_absolute_time());
|
||||
_battery.updateAndPublishBatteryStatus(hrt_absolute_time());
|
||||
|
||||
if (init() != PX4_OK) {
|
||||
ScheduleDelayed(INA228_INIT_RETRY_INTERVAL_US);
|
||||
|
||||
@ -71,7 +71,7 @@ INA238::INA238(const I2CSPIDriverConfig &config, int battery_index) :
|
||||
_battery.setConnected(false);
|
||||
_battery.updateVoltage(0.f);
|
||||
_battery.updateCurrent(0.f);
|
||||
_battery.updateBatteryStatus(hrt_absolute_time());
|
||||
_battery.updateAndPublishBatteryStatus(hrt_absolute_time());
|
||||
}
|
||||
|
||||
INA238::~INA238()
|
||||
@ -197,7 +197,7 @@ int INA238::collect()
|
||||
_battery.setConnected(success);
|
||||
_battery.updateVoltage(static_cast<float>(bus_voltage * INA238_VSCALE));
|
||||
_battery.updateCurrent(static_cast<float>(current * _current_lsb));
|
||||
_battery.updateBatteryStatus(hrt_absolute_time());
|
||||
_battery.updateAndPublishBatteryStatus(hrt_absolute_time());
|
||||
|
||||
perf_end(_sample_perf);
|
||||
|
||||
@ -254,7 +254,7 @@ void INA238::RunImpl()
|
||||
_battery.setConnected(false);
|
||||
_battery.updateVoltage(0.f);
|
||||
_battery.updateCurrent(0.f);
|
||||
_battery.updateBatteryStatus(hrt_absolute_time());
|
||||
_battery.updateAndPublishBatteryStatus(hrt_absolute_time());
|
||||
|
||||
if (init() != PX4_OK) {
|
||||
ScheduleDelayed(INA238_INIT_RETRY_INTERVAL_US);
|
||||
|
||||
@ -74,7 +74,7 @@ VOXLPM::init()
|
||||
_battery.setConnected(false);
|
||||
_battery.updateVoltage(0.f);
|
||||
_battery.updateCurrent(0.f);
|
||||
_battery.updateBatteryStatus(hrt_absolute_time());
|
||||
_battery.updateAndPublishBatteryStatus(hrt_absolute_time());
|
||||
}
|
||||
|
||||
/* do I2C init, it will probe the bus for two possible configurations, LTC2946 or INA231 */
|
||||
@ -345,7 +345,7 @@ VOXLPM::measure()
|
||||
_battery.setConnected(true);
|
||||
_battery.updateVoltage(_voltage);
|
||||
_battery.updateCurrent(_amperage);
|
||||
_battery.updateBatteryStatus(tnow);
|
||||
_battery.updateAndPublishBatteryStatus(tnow);
|
||||
}
|
||||
|
||||
// fallthrough
|
||||
@ -371,7 +371,7 @@ VOXLPM::measure()
|
||||
_battery.setConnected(true);
|
||||
_battery.updateVoltage(0.f);
|
||||
_battery.updateCurrent(0.f);
|
||||
_battery.updateBatteryStatus(tnow);
|
||||
_battery.updateAndPublishBatteryStatus(tnow);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@ -130,7 +130,10 @@ void Battery::updateBatteryStatus(const hrt_abstime ×tamp)
|
||||
} else {
|
||||
_connected = false;
|
||||
}
|
||||
}
|
||||
|
||||
battery_status_s Battery::getBatteryStatus()
|
||||
{
|
||||
battery_status_s battery_status{};
|
||||
battery_status.voltage_v = _voltage_v;
|
||||
battery_status.voltage_filtered_v = _voltage_filter_v.getState();
|
||||
@ -149,13 +152,23 @@ void Battery::updateBatteryStatus(const hrt_abstime ×tamp)
|
||||
battery_status.capacity = _params.capacity > 0.f ? static_cast<uint16_t>(_params.capacity) : 0;
|
||||
battery_status.id = static_cast<uint8_t>(_index);
|
||||
battery_status.warning = _warning;
|
||||
battery_status.timestamp = hrt_absolute_time();
|
||||
return battery_status;
|
||||
}
|
||||
|
||||
void Battery::publishBatteryStatus(const battery_status_s &battery_status)
|
||||
{
|
||||
if (_source == _params.source) {
|
||||
battery_status.timestamp = hrt_absolute_time();
|
||||
_battery_status_pub.publish(battery_status);
|
||||
}
|
||||
}
|
||||
|
||||
void Battery::updateAndPublishBatteryStatus(const hrt_abstime ×tamp)
|
||||
{
|
||||
updateBatteryStatus(timestamp);
|
||||
publishBatteryStatus(getBatteryStatus());
|
||||
}
|
||||
|
||||
void Battery::sumDischarged(const hrt_abstime ×tamp, float current_a)
|
||||
{
|
||||
// Not a valid measurement
|
||||
|
||||
@ -97,6 +97,16 @@ public:
|
||||
*/
|
||||
void updateBatteryStatus(const hrt_abstime ×tamp);
|
||||
|
||||
battery_status_s getBatteryStatus();
|
||||
void publishBatteryStatus(const battery_status_s &battery_status);
|
||||
|
||||
/**
|
||||
* Convenience function for combined update and publication
|
||||
* @see updateBatteryStatus()
|
||||
* @see publishBatteryStatus()
|
||||
*/
|
||||
void updateAndPublishBatteryStatus(const hrt_abstime ×tamp);
|
||||
|
||||
protected:
|
||||
struct {
|
||||
param_t v_empty;
|
||||
|
||||
@ -83,7 +83,7 @@ AnalogBattery::updateBatteryStatusADC(hrt_abstime timestamp, float voltage_raw,
|
||||
Battery::setConnected(connected);
|
||||
Battery::updateVoltage(voltage_v);
|
||||
Battery::updateCurrent(current_a);
|
||||
Battery::updateBatteryStatus(timestamp);
|
||||
Battery::updateAndPublishBatteryStatus(timestamp);
|
||||
}
|
||||
|
||||
bool AnalogBattery::is_valid()
|
||||
|
||||
@ -102,7 +102,7 @@ EscBattery::Run()
|
||||
_battery.setConnected(true);
|
||||
_battery.updateVoltage(average_voltage_v);
|
||||
_battery.updateCurrent(total_current_a);
|
||||
_battery.updateBatteryStatus(esc_status.timestamp);
|
||||
_battery.updateAndPublishBatteryStatus(esc_status.timestamp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ void BatterySimulator::Run()
|
||||
_battery.setConnected(true);
|
||||
_battery.updateVoltage(vbatt);
|
||||
_battery.updateCurrent(ibatt);
|
||||
_battery.updateBatteryStatus(now_us);
|
||||
_battery.updateAndPublishBatteryStatus(now_us);
|
||||
|
||||
perf_end(_loop_perf);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user