From b87c5285e285ecd58dc06b77f00358f35310eee6 Mon Sep 17 00:00:00 2001 From: Matthias Grob Date: Thu, 15 Feb 2024 13:55:18 +0100 Subject: [PATCH] battery: weigh voltage based estimate more when it's low This is a minimal change to make it harder to crash a vehicle with an empty battery if the capacity was set wrong. The disadvantage is that the state of charge estimate will fluctuate more under load. We need better documentation and improvements to the estimation. --- src/lib/battery/battery.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/battery/battery.cpp b/src/lib/battery/battery.cpp index 8c833af1e0..f3a66fc0ed 100644 --- a/src/lib/battery/battery.cpp +++ b/src/lib/battery/battery.cpp @@ -239,10 +239,10 @@ float Battery::calculateStateOfChargeVoltageBased(const float voltage_v, const f void Battery::estimateStateOfCharge() { // choose which quantity we're using for final reporting - if (_params.capacity > 0.f && _battery_initialized) { + if ((_params.capacity > 0.f) && _battery_initialized) { // if battery capacity is known, fuse voltage measurement with used capacity // The lower the voltage the more adjust the estimate with it to avoid deep discharge - const float weight_v = 3e-4f * (1 - _state_of_charge_volt_based); + const float weight_v = 3e-2f * (1 - _state_of_charge_volt_based); _state_of_charge = (1 - weight_v) * _state_of_charge + weight_v * _state_of_charge_volt_based; // directly apply current capacity slope calculated using current _state_of_charge -= _discharged_mah_loop / _params.capacity;