mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-05 02:39:57 +02:00
🐛 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:
parent
2ead3cc508
commit
eeaf0b2b56
1 changed files with 6 additions and 1 deletions
|
@ -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_charge_power_W = (BATTERY_MAX_CHARGE_AMP * voltage_dV) / 100;
|
||||||
datalayer.battery.status.max_discharge_power_W = (BATTERY_MAX_DISCHARGE_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;
|
uint32_t adaptive_power_limit = 999999;
|
||||||
if (SOC < 2000)
|
if (SOC < 2000)
|
||||||
adaptive_power_limit = ((uint32_t)SOC * POWER_PER_PERCENT) / 100;
|
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)
|
if (adaptive_power_limit < datalayer.battery.status.max_charge_power_W)
|
||||||
datalayer.battery.status.max_charge_power_W = adaptive_power_limit;
|
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;
|
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));
|
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_min_voltage_mV = cellvoltage_min_mV;
|
||||||
datalayer.battery.status.cell_max_voltage_mV = cellvoltage_max_mV;
|
datalayer.battery.status.cell_max_voltage_mV = cellvoltage_max_mV;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue