第2章:电量计量基础——库仑计数法原理、电压查表法、混合计量模型
各位同学,欢迎来到电量计量的核心章节。
做智能手表,最头疼的问题是什么?我猜很多人会说是「续航」。但续航准不准,其实取决于一个更底层的东西——电量计量。你想想看,用户看着手表上还剩20%的电,结果出门跑个步就自动关机了,这种体验有多糟糕?
这一章,我们就来聊聊电量计量的三种主流方法。我个人习惯把它们叫做「老中青三代」:库仑计数法(老将)、电压查表法(中年)、混合计量模型(新秀)。
2.1 库仑计数法:最朴素的「数电子」方法
库仑计数法,说白了就是数流进流出电池的电荷量。
它的原理非常简单:
电流对时间积分,得到的就是电量。
// 库仑计数法核心公式
Q(t) = Q(t₀) + ∫ I(t) dt
// 离散化实现(每100ms采样一次)
static float total_capacity = 0; // 单位:mAh
void coulomb_counting(float current_ma) {
total_capacity += current_ma * 0.1 / 3600; // 100ms = 0.1h
}
嗯,这里要注意一个关键点:初始电量Q(t₀)怎么确定? 我在项目中遇到过这个问题——手表刚开机时,电池电压是3.8V,但你怎么知道它对应的是80%还是85%?
避坑指南: 我曾经在一个量产项目中,因为初始电量校准偏差了3%,导致用户反馈「电量跳变」。后来我加了一个开机静置5秒后查表校准的流程,才彻底解决。
库仑计数法的优点很明显:
- 精度高(如果电流采样够准)
- 实时性好(每100ms更新一次)
- 实现简单(一个累加器搞定)
但缺点也很致命:
- 累积误差——采样误差会一直累加,跑一个月可能偏了10%
- 需要校准——每次充满电或放空电时,必须重置
- 低功耗场景不准——手表待机时电流只有几微安,ADC根本测不准
2.2 电压查表法:简单粗暴的「看电压猜电量」
电压查表法,就是根据电池的开路电压(OCV)来估算剩余电量。
为什么能这么干?因为锂电池的电压和电量之间,存在一个近似单调的关系——OCV-SOC曲线。
| 电压 (V) | 电量 (%) | 备注 |
|---|---|---|
| 4.20 | 100% | 满电 |
| 3.80 | 60% | 平台区 |
| 3.60 | 20% | 开始陡降 |
| 3.30 | 5% | 接近关机 |
你想想看,这个表看起来很简单,但实际做起来坑很多。我遇到过最典型的问题:手表在运动时,电压会剧烈波动。跑步时电流突然增大,电压瞬间掉0.2V,查表一看电量从50%掉到30%——用户直接吓傻了。
我的经验: 电压查表法只适合在「静置状态」下使用。我一般会在手表检测到静止超过30秒后,才用电压法做一次校准。运动过程中,坚决不用。
电压查表法的优缺点:
- ✅ 实现简单,不需要电流传感器
- ✅ 没有累积误差
- ❌ 动态负载下不准
- ❌ 电池老化后曲线会偏移
- ❌ 温度影响大(低温时电压偏低)
2.3 混合计量模型:取长补短的「黄金搭档」
既然库仑计数法和电压查表法各有短板,那把它们结合起来呢?
这就是混合计量模型的核心思想:用库仑计数法做短期高精度计量,用电压查表法做长期校准。
// 混合计量模型伪代码
typedef struct {
float coulomb_soc; // 库仑法估算的电量
float voltage_soc; // 电压法估算的电量
float blended_soc; // 最终输出
float confidence; // 置信度(0~1)
} BatterySOC;
void update_soc(BatterySOC *soc, float current, float voltage) {
// 1. 库仑法更新
soc->coulomb_soc += current * 0.1 / 3600;
// 2. 电压法查表
soc->voltage_soc = lookup_ocv_table(voltage);
// 3. 动态权重融合
float weight = calculate_weight(current, voltage);
soc->blended_soc = weight * soc->coulomb_soc
+ (1 - weight) * soc->voltage_soc;
// 4. 边界校准
if (voltage > 4.15V) soc->blended_soc = 100%;
if (voltage < 3.30V) soc->blended_soc = 0%;
}
这里最关键的是权重计算。我个人的做法是:
- 当电流稳定且适中(10mA~100mA)时,库仑法权重给到0.8
- 当电流接近0(待机)或剧烈波动时,电压法权重提升到0.6
- 当检测到充满或放空时,强制重置库仑计数器
核心要点: 混合模型不是简单的平均,而是根据工况动态调整信任度。说白了,就是「谁准听谁的」。
2.4 实战中的坑与对策
讲了这么多理论,来点实际的。我在智能手表项目中踩过的坑:
- 温度补偿——冬天在户外,电池内阻增大,电压偏低。我加了一个温度查表修正,每5°C一个档位。
- 电池老化——用了半年的手表,满电电压从4.20V降到4.15V。我加了一个循环计数,每100次充放电更新一次OCV曲线。
- 关机电压不准——有些手表在3.0V才关机,有些3.3V就保护了。这个必须根据具体电芯规格来配。
我曾经犯过的错: 有一款手表,我直接用参考设计里的OCV表,没做实测校准。结果量产5000台后,有300台反馈「电量显示不准」。后来我花了两周时间,用高精度电源测了50块电池,重新拟合了曲线才搞定。所以,永远不要相信参考设计里的参数。
2.5 小结
这一章我们聊了三种电量计量方法:
- 库仑计数法——精度高但有累积误差,适合短期计量
- 电压查表法——简单但动态不准,适合静置校准
- 混合计量模型——取长补短,是目前智能手表的主流方案
下一章,我们会深入讲电池建模与参数辨识——也就是怎么给你的手表电池建一个「数字孪生」模型。到时候你会看到,真正的电量计量远不止「数电子」这么简单。
嗯,今天就到这里。有问题欢迎在课程群里讨论,或者直接来找我。