fix(battery): harden charge-complete inference
This commit is contained in:
@@ -22,9 +22,9 @@
|
|||||||
#define BATTERY_STOP_POLL_MS 10
|
#define BATTERY_STOP_POLL_MS 10
|
||||||
#define BATTERY_CHARGE_DEBOUNCE_MS 30
|
#define BATTERY_CHARGE_DEBOUNCE_MS 30
|
||||||
#define BATTERY_FULL_CONFIRM_RETRY_MS 1000
|
#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_CONFIRM_SAMPLES 3U
|
||||||
#define BATTERY_FULL_MIN_VOLTAGE_MV 4050
|
|
||||||
#define BATTERY_SHUTDOWN_CONFIRM_SAMPLES 3U
|
#define BATTERY_SHUTDOWN_CONFIRM_SAMPLES 3U
|
||||||
#define BATTERY_EMERGENCY_CONFIRM_SAMPLES 2U
|
#define BATTERY_EMERGENCY_CONFIRM_SAMPLES 2U
|
||||||
#define BATTERY_SHUTDOWN_RETRY_MS 1000
|
#define BATTERY_SHUTDOWN_RETRY_MS 1000
|
||||||
@@ -339,8 +339,9 @@ static void control_plane_battery_full_hint_hook(
|
|||||||
}
|
}
|
||||||
|
|
||||||
ESP_LOGI(TAG,
|
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,
|
status->voltage_mv,
|
||||||
|
(unsigned)status->percentage,
|
||||||
BATTERY_FULL_PROMPT_FILE);
|
BATTERY_FULL_PROMPT_FILE);
|
||||||
esp_err_t prompt_err = domain_runtime_behavior_play_prompt_file(
|
esp_err_t prompt_err = domain_runtime_behavior_play_prompt_file(
|
||||||
BATTERY_FULL_PROMPT_FILE);
|
BATTERY_FULL_PROMPT_FILE);
|
||||||
@@ -453,11 +454,13 @@ static void battery_worker(void *arg)
|
|||||||
if (full_hint_candidate && status.valid &&
|
if (full_hint_candidate && status.valid &&
|
||||||
!status.measurement_suppressed) {
|
!status.measurement_suppressed) {
|
||||||
if (status.charge_state != DOMAIN_BATTERY_CHARGE_NOT_CHARGING ||
|
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,
|
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),
|
charge_state_name(status.charge_state),
|
||||||
status.voltage_mv);
|
status.voltage_mv,
|
||||||
|
(unsigned)status.percentage);
|
||||||
full_hint_candidate = false;
|
full_hint_candidate = false;
|
||||||
full_hint_confirmations = 0U;
|
full_hint_confirmations = 0U;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -979,6 +979,28 @@ menu "Example Configuration"
|
|||||||
range 0 1
|
range 0 1
|
||||||
depends on TQ_BATTERY_ENABLE
|
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
|
config TQ_BATTERY_DIVIDER_HIGH_OHM
|
||||||
int "Battery divider resistance from VBAT to ADC (ohm)"
|
int "Battery divider resistance from VBAT to ADC (ohm)"
|
||||||
default 100000
|
default 100000
|
||||||
|
|||||||
@@ -332,6 +332,9 @@ CONFIG_TQ_BATTERY_ENABLE=y
|
|||||||
CONFIG_TQ_BATTERY_ADC_GPIO=9
|
CONFIG_TQ_BATTERY_ADC_GPIO=9
|
||||||
CONFIG_TQ_BATTERY_CHARGE_GPIO=10
|
CONFIG_TQ_BATTERY_CHARGE_GPIO=10
|
||||||
CONFIG_TQ_BATTERY_CHARGE_ACTIVE_LEVEL=0
|
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_HIGH_OHM=100000
|
||||||
CONFIG_TQ_BATTERY_DIVIDER_LOW_OHM=100000
|
CONFIG_TQ_BATTERY_DIVIDER_LOW_OHM=100000
|
||||||
CONFIG_TQ_BATTERY_CALIBRATION_GAIN_PPM=1000000
|
CONFIG_TQ_BATTERY_CALIBRATION_GAIN_PPM=1000000
|
||||||
|
|||||||
Reference in New Issue
Block a user