2、自动/手动互相切换都闪 2 下灯;APP 发停止后再发自动模式可正常启动,手动残留停止不再挡住自动 3、自动模式 1~6 单次最长跑 10 分钟后回待机;关机时长按 12 秒进 OTA,OTA 期间红绿交替闪
59 lines
2.4 KiB
C
59 lines
2.4 KiB
C
/******************************************************************************
|
|
* @file app_battery.h
|
|
* @brief 电量算法:电压滤波、充放电基准记录、突变防抖、缓冲平滑显示
|
|
* @author cyWu <1917507415@qq.com>
|
|
* @date 2026.08.27
|
|
* @version V1.0.1
|
|
* @history
|
|
* - V1.0.0, 2026.08.26, cyWu, 首次发布,实现电压滤波、充放电基准、突变防抖与缓冲平滑
|
|
* - V1.0.1, 2026.08.27, cyWu, 补充模块说明注释
|
|
*
|
|
* @note 本模块只认识"电压(mV) + 是否在充电",不碰 ADC/GPIO,电压采样、
|
|
* USB 在位判定由调用方(app_power)负责,保持单向依赖。
|
|
* 低电告警迟滞(app_power.c 里的 check_low/check_empty)不受本模块
|
|
* 影响,两者各管一段:本模块只负责"电量数字怎么变得好看",低电告警/
|
|
* 深睡门限仍按原始电压判断。
|
|
******************************************************************************/
|
|
|
|
#ifndef __APP_BATTERY_H__
|
|
#define __APP_BATTERY_H__
|
|
|
|
#include <stdint.h>
|
|
|
|
/*========================= 功能配置 =========================*/
|
|
/** 充电末期自动 +1% 模式:解决充电曲线末期长时间平台期、电量显示卡住的问题;
|
|
* 是否需要取决于实测充电曲线,先关掉,确认卡电量再打开 */
|
|
#define APP_BATTERY_AUTO_INCREMENT_EN 0
|
|
|
|
/**
|
|
* @brief 初始化电量模块状态(含充放电基准,不做持久化,每次重启重新学习)
|
|
* @return 无
|
|
*/
|
|
void app_battery_init(void);
|
|
|
|
/**
|
|
* @brief 按最新采样电压推进电量算法
|
|
* @param dt 距上次调用的毫秒数
|
|
* @param mv 本次采样均值电压,单位 mV(由调用方滑动平均后传入)
|
|
* @param charging 1=充电中(USB 在位),0=放电
|
|
* @return 无
|
|
*/
|
|
void app_battery_tick(uint16_t dt, uint16_t mv, uint8_t charging);
|
|
|
|
/**
|
|
* @brief 查询当前显示用电量百分比(已做防抖/缓冲平滑,非原始电压换算值)
|
|
* @return 0~100
|
|
*/
|
|
uint8_t app_battery_get_percent(void);
|
|
|
|
/**
|
|
* @brief 外部强制刷新电量(例如硬件判定充满后收尾到 100%),立即生效不走缓冲
|
|
* @note 充电场景下曲线拟合可能因基准/温漂等原因走不到 100% 就被充电芯片
|
|
* 判满,靠这个接口兜底,避免显示卡在 98%/99% 不动
|
|
* @param percent 目标百分比,超过 100 会被钳到 100
|
|
* @return 无
|
|
*/
|
|
void app_battery_set_percent(uint8_t percent);
|
|
|
|
#endif /* __APP_BATTERY_H__ */
|