Add low pass filtered current draw

This commit is contained in:
sander
2016-05-10 21:34:11 +02:00
committed by Lorenz Meier
parent 6b5e77250f
commit 9a09c5af5c
5 changed files with 26 additions and 2 deletions
+18
View File
@@ -84,6 +84,7 @@ Battery::updateBatteryStatus(hrt_abstime timestamp, float voltage_v, float curre
reset(battery_status);
battery_status->timestamp = timestamp;
filterVoltage(voltage_v);
filterCurrent(current_a);
sumDischarged(timestamp, current_a);
estimateRemaining(voltage_v, throttle_normalized, armed);
determineWarning();
@@ -92,6 +93,7 @@ Battery::updateBatteryStatus(hrt_abstime timestamp, float voltage_v, float curre
battery_status->voltage_v = voltage_v;
battery_status->voltage_filtered_v = _voltage_filtered_v;
battery_status->current_a = current_a;
battery_status->current_filtered_a = _current_filtered_a;
battery_status->discharged_mah = _discharged_mah;
battery_status->warning = _warning;
battery_status->remaining = _remaining;
@@ -114,6 +116,22 @@ Battery::filterVoltage(float voltage_v)
}
}
void
Battery::filterCurrent(float current_a)
{
if (_current_filtered_a < 0.0f) {
_current_filtered_a = current_a;
}
// ADC poll is at 100Hz, this will perform a low pass over approx 500ms
const float filtered_next = _current_filtered_a * 0.98f + current_a * 0.02f;
if (PX4_ISFINITE(filtered_next)) {
_current_filtered_a = filtered_next;
}
}
void
Battery::sumDischarged(hrt_abstime timestamp, float current_a)
{
+2
View File
@@ -92,6 +92,7 @@ public:
private:
void filterVoltage(float voltage_v);
void filterCurrent(float voltage_a);
void sumDischarged(hrt_abstime timestamp, float current_a);
void estimateRemaining(float voltage_v, float throttle_normalized, bool armed);
void determineWarning();
@@ -105,6 +106,7 @@ private:
control::BlockParamFloat _param_crit_thr;
float _voltage_filtered_v;
float _current_filtered_a;
float _discharged_mah;
float _remaining_voltage; ///< normalized battery charge level remaining based on voltage
float _remaining_capacity; ///< normalized battery charge level remaining based on capacity