fix(battery): harden charge-complete inference
This commit is contained in:
@@ -22,9 +22,9 @@
|
||||
#define BATTERY_STOP_POLL_MS 10
|
||||
#define BATTERY_CHARGE_DEBOUNCE_MS 30
|
||||
#define BATTERY_FULL_CONFIRM_RETRY_MS 1000
|
||||
#define BATTERY_FULL_CONFIRM_TIME_MS 5000
|
||||
#define BATTERY_FULL_CONFIRM_TIME_MS \
|
||||
((uint32_t)CONFIG_TQ_BATTERY_FULL_CONFIRM_SEC * 1000U)
|
||||
#define BATTERY_FULL_CONFIRM_SAMPLES 3U
|
||||
#define BATTERY_FULL_MIN_VOLTAGE_MV 4050
|
||||
#define BATTERY_SHUTDOWN_CONFIRM_SAMPLES 3U
|
||||
#define BATTERY_EMERGENCY_CONFIRM_SAMPLES 2U
|
||||
#define BATTERY_SHUTDOWN_RETRY_MS 1000
|
||||
@@ -339,8 +339,9 @@ static void control_plane_battery_full_hint_hook(
|
||||
}
|
||||
|
||||
ESP_LOGI(TAG,
|
||||
"Inferred charge-complete prompt start voltage=%dmV file=%s",
|
||||
"Inferred charge-complete prompt start voltage=%dmV level=%u%% file=%s",
|
||||
status->voltage_mv,
|
||||
(unsigned)status->percentage,
|
||||
BATTERY_FULL_PROMPT_FILE);
|
||||
esp_err_t prompt_err = domain_runtime_behavior_play_prompt_file(
|
||||
BATTERY_FULL_PROMPT_FILE);
|
||||
@@ -453,11 +454,13 @@ static void battery_worker(void *arg)
|
||||
if (full_hint_candidate && status.valid &&
|
||||
!status.measurement_suppressed) {
|
||||
if (status.charge_state != DOMAIN_BATTERY_CHARGE_NOT_CHARGING ||
|
||||
status.voltage_mv < BATTERY_FULL_MIN_VOLTAGE_MV) {
|
||||
status.voltage_mv < CONFIG_TQ_BATTERY_FULL_MIN_VOLTAGE_MV ||
|
||||
status.percentage < CONFIG_TQ_BATTERY_FULL_MIN_PERCENT) {
|
||||
ESP_LOGI(TAG,
|
||||
"Charge-complete inference cancelled charge=%s voltage=%dmV",
|
||||
"Charge-complete inference cancelled charge=%s voltage=%dmV level=%u%%",
|
||||
charge_state_name(status.charge_state),
|
||||
status.voltage_mv);
|
||||
status.voltage_mv,
|
||||
(unsigned)status.percentage);
|
||||
full_hint_candidate = false;
|
||||
full_hint_confirmations = 0U;
|
||||
} else {
|
||||
|
||||
@@ -979,6 +979,28 @@ menu "Example Configuration"
|
||||
range 0 1
|
||||
depends on TQ_BATTERY_ENABLE
|
||||
|
||||
config TQ_BATTERY_FULL_MIN_VOLTAGE_MV
|
||||
int "Minimum voltage for charge-complete prompt (mV)"
|
||||
default 4150
|
||||
range 4000 4200
|
||||
depends on TQ_BATTERY_ENABLE
|
||||
help
|
||||
The TP4057 status pin cannot distinguish charge termination
|
||||
from charger removal. Require at least this filtered battery
|
||||
voltage before inferring that charging has completed.
|
||||
|
||||
config TQ_BATTERY_FULL_MIN_PERCENT
|
||||
int "Minimum level for charge-complete prompt (percent)"
|
||||
default 95
|
||||
range 90 100
|
||||
depends on TQ_BATTERY_ENABLE
|
||||
|
||||
config TQ_BATTERY_FULL_CONFIRM_SEC
|
||||
int "Charge-complete stable confirmation time (seconds)"
|
||||
default 30
|
||||
range 5 300
|
||||
depends on TQ_BATTERY_ENABLE
|
||||
|
||||
config TQ_BATTERY_DIVIDER_HIGH_OHM
|
||||
int "Battery divider resistance from VBAT to ADC (ohm)"
|
||||
default 100000
|
||||
|
||||
@@ -332,6 +332,9 @@ CONFIG_TQ_BATTERY_ENABLE=y
|
||||
CONFIG_TQ_BATTERY_ADC_GPIO=9
|
||||
CONFIG_TQ_BATTERY_CHARGE_GPIO=10
|
||||
CONFIG_TQ_BATTERY_CHARGE_ACTIVE_LEVEL=0
|
||||
CONFIG_TQ_BATTERY_FULL_MIN_VOLTAGE_MV=4150
|
||||
CONFIG_TQ_BATTERY_FULL_MIN_PERCENT=95
|
||||
CONFIG_TQ_BATTERY_FULL_CONFIRM_SEC=30
|
||||
CONFIG_TQ_BATTERY_DIVIDER_HIGH_OHM=100000
|
||||
CONFIG_TQ_BATTERY_DIVIDER_LOW_OHM=100000
|
||||
CONFIG_TQ_BATTERY_CALIBRATION_GAIN_PPM=1000000
|
||||
|
||||
Reference in New Issue
Block a user