🐛 daly bms: fix 0% SoC not being able to charge at all and do not limit discharge on high SoC

This commit is contained in:
Jakob Löw 2025-02-13 00:32:18 +01:00
parent 2ead3cc508
commit eeaf0b2b56
No known key found for this signature in database
GPG key ID: B77685F55C7C46C6

View file

@ -30,6 +30,7 @@ void update_values_battery() {
datalayer.battery.status.max_charge_power_W = (BATTERY_MAX_CHARGE_AMP * voltage_dV) / 100;
datalayer.battery.status.max_discharge_power_W = (BATTERY_MAX_DISCHARGE_AMP * voltage_dV) / 100;
// limit power when SoC is low or high
uint32_t adaptive_power_limit = 999999;
if (SOC < 2000)
adaptive_power_limit = ((uint32_t)SOC * POWER_PER_PERCENT) / 100;
@ -38,9 +39,13 @@ void update_values_battery() {
if (adaptive_power_limit < datalayer.battery.status.max_charge_power_W)
datalayer.battery.status.max_charge_power_W = adaptive_power_limit;
if (adaptive_power_limit < datalayer.battery.status.max_discharge_power_W)
if (SOC < 2000 && adaptive_power_limit < datalayer.battery.status.max_discharge_power_W)
datalayer.battery.status.max_discharge_power_W = adaptive_power_limit;
// always allow to charge at least a little bit
if (datalayer.battery.status.max_charge_power_W < POWER_PER_PERCENT)
datalayer.battery.status.max_charge_power_W = POWER_PER_PERCENT;
memcpy(datalayer.battery.status.cell_voltages_mV, cellvoltages_mV, sizeof(cellvoltages_mV));
datalayer.battery.status.cell_min_voltage_mV = cellvoltage_min_mV;
datalayer.battery.status.cell_max_voltage_mV = cellvoltage_max_mV;