diff --git a/src/lib/battery/battery.cpp b/src/lib/battery/battery.cpp index 2ed157dee4..122b4e69ba 100644 --- a/src/lib/battery/battery.cpp +++ b/src/lib/battery/battery.cpp @@ -166,6 +166,7 @@ battery_status_s Battery::getBatteryStatus() battery_status.id = static_cast(_index); battery_status.warning = _warning; battery_status.timestamp = hrt_absolute_time(); + battery_status.faults = determineFaults(); return battery_status; } @@ -267,6 +268,19 @@ uint8_t Battery::determineWarning(float state_of_charge) } } +uint16_t Battery::determineFaults() +{ + uint16_t faults{0}; + + if ((_params.n_cells > 0) + && (_voltage_v > (_params.n_cells * _params.v_charged * 1.05f))) { + // Reported as a "spike" since "over-voltage" does not exist in MAV_BATTERY_FAULT + faults |= (1 << battery_status_s::BATTERY_FAULT_SPIKES); + } + + return faults; +} + void Battery::computeScale() { const float voltage_range = (_params.v_charged - _params.v_empty); diff --git a/src/lib/battery/battery.h b/src/lib/battery/battery.h index 26dc4e3e61..66c923071e 100644 --- a/src/lib/battery/battery.h +++ b/src/lib/battery/battery.h @@ -150,6 +150,7 @@ private: float calculateStateOfChargeVoltageBased(const float voltage_v, const float current_a); void estimateStateOfCharge(); uint8_t determineWarning(float state_of_charge); + uint16_t determineFaults(); void computeScale(); float computeRemainingTime(float current_a);