一、功耗基础:嵌入式系统功耗来源与电池寿命估算

做低功耗设计这么多年,我经常被问到同一个问题:「为什么我的电池供电设备,明明待机电流只有几微安,实际用起来却撑不了几天?」

这个问题背后,其实藏着功耗分析的核心逻辑。今天我们就从最基础的功耗来源讲起,把功耗这层窗户纸捅破。

1.1 功耗的三大来源

芯片的功耗,说白了就三种:动态功耗、静态功耗、短路功耗。我习惯把它们比作「干活时的消耗」「闲着时的漏电」「切换时的浪费」。

动态功耗

动态功耗是芯片工作时最主要的功耗来源。它发生在晶体管开关切换的瞬间——从0变1,或者从1变0。

公式很简单:P_dynamic = α × C × V² × f

  • α:翻转率,也就是每个时钟周期内门电路翻转的概率
  • C:负载电容,包括门电容和互连电容
  • V:供电电压
  • f:工作频率

你看这个公式,电压是平方关系。这意味着什么?我举个例子:把电压从3.3V降到1.8V,动态功耗能降低70%以上。我在做一款智能手表项目时,就是靠这招把主控功耗从15mW降到了4mW以下。

关键洞察:降低电压是减功耗最有效的手段,但代价是速度会变慢。所以低功耗设计里,我们经常做「电压-频率协同调节」——频率降下来,电压也跟着降。

静态功耗

静态功耗,就是芯片「啥也不干」时也在消耗的功率。它主要来自晶体管的漏电流。

公式:P_static = I_leak × V

漏电流主要有几种:

  • 亚阈值漏电流:晶体管关不彻底,电流从源极溜到漏极
  • 栅极漏电流:栅氧化层太薄,电子直接隧穿过去
  • PN结漏电流:反偏PN结的微小漏电

嗯,这里要注意。随着工艺节点越来越小(比如28nm以下),静态功耗占比越来越高。我记得做一款NB-IoT终端时,待机电流要求低于3μA,结果发现光漏电流就占了1.5μA。后来不得不改用低漏电工艺库,才勉强达标。

避坑指南:我曾经在选型时只看动态功耗,忽略了静态功耗。结果产品做出来,待机功耗比预期高了3倍。后来学乖了——低功耗设计一定要同时看「工作功耗」和「待机功耗」两张表。

短路功耗

短路功耗发生在晶体管切换的瞬间。当输入电压在中间值时,PMOS和NMOS会同时导通一小段时间,形成从VDD到GND的直流通路。

公式:P_short = I_short × V × t_rise_fall × f

其中t_rise_fall是信号上升/下降时间。你想想看,如果信号边沿很缓,PMOS和NMOS同时导通的时间就长,短路功耗就大。

实际项目中,短路功耗通常只占总功耗的5%-15%。但在高速设计中,如果信号完整性没做好,这个比例可能飙升到30%以上。我见过一个案例,某款芯片因为时钟树上的信号边沿太缓,短路功耗直接翻了一倍。

1.2 功耗 vs 能量效率

这两个概念,很多人混为一谈。我简单说清楚:

  • 功耗(Power):单位时间消耗的能量,单位是瓦特(W)
  • 能量(Energy):一段时间内消耗的总能量,单位是焦耳(J)

举个例子:

  • 方案A:10mW功耗,跑10秒完成任务 → 能量 = 100mJ
  • 方案B:50mW功耗,跑1秒完成任务 → 能量 = 50mJ

方案B虽然功耗高,但总能量消耗反而少。这就是为什么低功耗设计追求的是「完成任务所需的总能量最小化」,而不是单纯降低瞬时功耗。

我的经验:做电池供电产品时,我习惯用「能量预算」来思考。比如一颗200mAh的纽扣电池,总能量约2.6kJ。如果每次数据上报需要50mJ,那理论上可以上报5万次。这样算,比单纯看待机电流靠谱得多。

1.3 电池寿命估算方法

电池寿命估算,说白了就是「总能量 ÷ 平均功耗」。但实际估算时,有几个坑要避开。

基本估算公式

电池寿命(小时) = 电池容量(mAh) / 平均电流(mA)

或者用能量来算:

电池寿命(小时) = 电池能量(Wh) / 平均功耗(W)

实际估算步骤

  1. 分析工作模式:列出设备的所有工作状态(待机、运行、休眠、发送等)
  2. 测量各模式电流:用精密电流表或示波器测出每种模式的电流
  3. 统计时间占比:确定每种模式在一天中的持续时间
  4. 计算平均电流:I_avg = Σ(I_mode × T_mode) / T_total
  5. 估算寿命:Life = Battery_Capacity / I_avg

举个实际案例:

一款温湿度传感器,工作模式如下:

工作模式 电流 持续时间 每天次数
深度休眠 2μA
传感器采样 5mA 50ms 1440次(每分钟一次)
无线发送 30mA 20ms 1440次

平均电流计算:

I_avg = 2μA + (5mA × 50ms + 30mA × 20ms) × 1440 / 86400s

I_avg = 2μA + (0.25mAs + 0.6mAs) × 1440 / 86400s

I_avg = 2μA + 14.2μA ≈ 16.2μA

用一颗200mAh的CR2032电池:

寿命 ≈ 200mAh / 0.0162mA ≈ 12345小时 ≈ 514天

注意:实际电池寿命通常只有理论值的60%-80%。原因包括:电池自放电、温度影响、电池内阻随放电深度变化、电池容量随放电率变化(Peukert效应)。我一般会在理论值上打7折作为设计目标。

影响电池寿命的关键因素

  • 温度:低温下电池内阻增大,可用容量下降。0°C时锂电池容量可能只有常温的70%
  • 放电率:大电流放电会降低有效容量。比如100mA放电时,200mAh电池可能只能放出180mAh
  • 截止电压:不同设备对电池截止电压要求不同。截止电压越高,实际可用容量越少
  • 老化:锂电池每年容量衰减约5%-10%

我的习惯:做电池寿命估算时,我会建一个Excel表格,把每种工作模式的电流、时间、频次都列清楚。然后留出20%-30%的余量。这样产品上市后,用户实际体验才不会打折扣。

好了,功耗基础就讲到这里。下一章我们会深入讨论「低功耗设计方法论」,从系统层面讲讲怎么把功耗降下来。记住一句话:低功耗不是测出来的,是设计出来的