3. 核心功耗模型:电池容量、工作周期、峰值电流与平均电流的计算方法
各位工程师朋友,这一章咱们来啃硬骨头——功耗模型的计算。说实话,很多做胎压监测的同行,一开始都栽在电池寿命估算上。我当年也吃过这个亏,产品做出来,实验室测着挺好,一上车跑俩月就没电了……后来才明白,核心问题就出在「平均电流」没算对。
今天我把这套计算方法掰开揉碎了讲。你只要跟着走一遍,以后任何低功耗产品的电池寿命估算,你都能心里有底。
3.1 电池容量:你的能量储备到底有多少?
先看电池容量。胎压监测里最常用的是CR2032纽扣电池,标称容量220mAh。但注意,这个数字是理想值。
实际可用容量 ≠ 标称容量
为什么?因为电池有自放电,有内阻,还有温度特性。我做过一个测试:同一批CR2032,在25℃下放电到2.0V,能放出210mAh;放到-20℃,同样截止电压,只能放出140mAh。差了整整三分之一。
所以我的习惯是:
- 常温可用容量:取标称值的90%
- 低温可用容量:取标称值的60%~70%
- 寿命末期容量:再打八折
经验公式:
C_usable = C_nominal × K_temp × K_aging
其中 K_temp 在0℃以下取0.7,K_aging 取0.8
举个例子:标称220mAh的电池,在-10℃环境下,用了两年后,实际可用容量大概只有:
220 × 0.7 × 0.8 = 123.2 mAh
嗯,这个数字才是你设计时该用的基准值。
3.2 工作周期:胎压监测的「作息时间表」
胎压监测系统不是一直在工作的。它有自己的「作息时间表」,我们叫它工作周期。
典型的周期是这样的:
| 阶段 | 持续时间 | 电流消耗 |
|---|---|---|
| 深度休眠 | 59.5秒 | 1.5 μA |
| 唤醒+传感器采样 | 10 ms | 5 mA |
| 数据处理+RF发射 | 20 ms | 15 mA |
| 等待确认 | 5 ms | 8 mA |
你看,一个完整周期大约60秒。其中99%以上的时间都在睡觉。这就是低功耗的精髓——能睡就睡,醒了赶紧干活,干完继续睡。
我曾经见过一个团队,把采样周期设成了10秒一次。结果电池三个月就挂了。你想想看,发射一次RF要15mA,10秒来一次,平均电流直接飙升。这就是没算明白工作周期的代价。
3.3 峰值电流:别被瞬间的大电流吓到
峰值电流,就是系统在某一瞬间拉的最大电流。胎压监测里,峰值通常出现在RF发射瞬间,15mA左右。
有人会问:15mA不大啊,电池不是能输出几十mA吗?
问题在于——电池的内阻。纽扣电池的内阻通常在10~30Ω。当你要15mA电流时,电池内阻上的压降是:
V_drop = 15mA × 20Ω = 0.3V
电池空载3.0V,一发射就掉到2.7V。如果系统最低工作电压是2.5V,那还行。但如果你的MCU或传感器要求2.7V以上……嗯,系统就会复位。
避坑指南:我曾经在一个项目里,RF发射瞬间MCU频繁复位。查了三天,最后发现是电池内阻太大,发射时电压跌到2.4V,MCU直接掉电。解决方案是加了一个100μF的钽电容,瞬间电流由电容提供,电压就稳住了。
所以,峰值电流本身不可怕,可怕的是它引起的电压跌落。我的建议是:
- 计算峰值电流下的最小电压:V_min = V_bat - I_peak × R_bat
- 确保 V_min 高于系统最低工作电压 + 0.2V 的余量
- 如果不够,加储能电容,或者选低内阻电池
3.4 平均电流:电池寿命的「判决官」
好了,前面都是铺垫。真正决定电池能用多久的,是平均电流。
平均电流的计算公式很简单:
I_avg = (I_sleep × T_sleep + I_wake × T_wake + I_tx × T_tx) / T_total
拿我们刚才的例子算一下:
I_avg = (1.5μA × 59.5s + 5mA × 0.01s + 15mA × 0.02s + 8mA × 0.005s) / 60s
先把单位统一:
I_sleep = 0.0015 mA
T_sleep = 59.5 s
I_wake = 5 mA, T_wake = 0.01 s
I_tx = 15 mA, T_tx = 0.02 s
I_ack = 8 mA, T_ack = 0.005 s
分子 = 0.0015×59.5 + 5×0.01 + 15×0.02 + 8×0.005
= 0.08925 + 0.05 + 0.3 + 0.04
= 0.47925 mA·s
I_avg = 0.47925 / 60 = 0.0079875 mA ≈ 8 μA
平均电流只有8μA!这就是为什么胎压监测能用两三年。你想想看,如果休眠电流从1.5μA涨到5μA,平均电流会变成多少?
I_avg_new = (0.005×59.5 + 0.05 + 0.3 + 0.04) / 60
= (0.2975 + 0.39) / 60
= 0.6875 / 60
= 0.01146 mA ≈ 11.5 μA
平均电流从8μA涨到11.5μA,涨了44%。电池寿命直接从3年掉到2年。你看,休眠电流才是真正的「电老虎」。
我的经验:做低功耗设计,80%的精力要花在降低休眠电流上。RF发射那几十毫秒,再优化也省不了多少。但休眠电流每降1μA,电池寿命就能延长好几个月。
3.5 电池寿命估算:把前面所有东西串起来
最后一步,估算电池寿命:
Life (hours) = C_usable (mAh) / I_avg (mA)
Life (years) = Life (hours) / (24 × 365)
用我们刚才的数据:
C_usable = 123.2 mAh (考虑了温度和老化)
I_avg = 0.008 mA (8 μA)
Life = 123.2 / 0.008 = 15400 hours
= 15400 / 8760 ≈ 1.76 years
嗯?只有1.76年?不是说能用3年吗?
问题出在——我们用了最恶劣的条件:-10℃、用了两年的电池。如果换成常温、新电池:
C_usable = 220 × 0.9 = 198 mAh
Life = 198 / 0.008 = 24750 hours ≈ 2.83 years
这就接近3年了。所以,电池寿命是一个范围,不是一个固定值。我一般会给客户两个数:
- 典型寿命:常温、新电池,约3年
- 最低寿命:低温、老化电池,约1.5年
这样既不过分乐观,也不过分悲观。
3.6 一个完整的计算示例
最后,我放一个完整的计算流程。你以后做设计,直接套用就行。
/* 胎压监测功耗计算模板 */
/* 1. 参数定义 */
#define BAT_CAPACITY_NOM 220 // 标称容量 mAh
#define K_TEMP 0.7 // 低温系数
#define K_AGING 0.8 // 老化系数
#define I_SLEEP_UA 1.5 // 休眠电流 μA
#define T_SLEEP_S 59.5 // 休眠时间 s
#define I_WAKE_MA 5 // 唤醒电流 mA
#define T_WAKE_MS 10 // 唤醒时间 ms
#define I_TX_MA 15 // 发射电流 mA
#define T_TX_MS 20 // 发射时间 ms
#define I_ACK_MA 8 // 确认电流 mA
#define T_ACK_MS 5 // 确认时间 ms
/* 2. 计算可用容量 */
float C_usable = BAT_CAPACITY_NOM * K_TEMP * K_AGING;
/* 3. 计算平均电流 */
float I_avg = (I_SLEEP_UA/1000 * T_SLEEP_S +
I_WAKE_MA * T_WAKE_MS/1000 +
I_TX_MA * T_TX_MS/1000 +
I_ACK_MA * T_ACK_MS/1000) /
(T_SLEEP_S + T_WAKE_MS/1000 + T_TX_MS/1000 + T_ACK_MS/1000);
/* 4. 计算寿命 */
float life_hours = C_usable / I_avg;
float life_years = life_hours / (24 * 365);
printf("可用容量: %.1f mAh\n", C_usable);
printf("平均电流: %.3f mA\n", I_avg);
printf("电池寿命: %.1f 小时 (%.2f 年)\n", life_hours, life_years);
输出结果:
可用容量: 123.2 mAh
平均电流: 0.008 mA
电池寿命: 15400.0 小时 (1.76 年)
好了,这一章的核心内容就这些。说白了,功耗模型就是三件事:算清楚电池有多少电、系统怎么用电、平均下来能用多久。你把这个模型建好了,后面做任何优化,都能量化评估效果。
下一章,我会讲具体的低功耗硬件设计技巧——怎么选MCU、怎么设计电源、怎么让传感器更省电。到时候咱们接着聊。