3. 功耗模型分析:发射功耗、接收功耗、休眠功耗、动态功耗切换

功耗模型这东西,说白了就是给UWB设备的“耗电行为”拍一张X光片。你得知道每个动作吃多少电,才能谈平衡。我早年做一款工业定位标签时,就因为没摸透休眠功耗的底细,导致产品续航直接腰斩——嗯,那次教训挺深刻的。

UWB的功耗模型,我习惯拆成四个维度来看:

  • 发射功耗:发一个数据包,芯片要花多少能量。
  • 接收功耗:听信道、收数据包,芯片要花多少能量。
  • 休眠功耗:啥也不干,只保持时钟和寄存器,芯片漏多少电。
  • 动态功耗切换:从休眠→发射、接收→休眠这些状态跳转时,额外消耗的能量和时间。

这四个维度不是孤立的。你想想看,一个典型的UWB测距周期,设备要经历“休眠→唤醒→发射→接收→计算→休眠”的循环。每个环节的功耗和时长,共同决定了平均功耗。

核心公式(平均功耗):

Pavg = (Etx + Erx + Esleep + Eswitch) / Tcycle

其中E代表每个阶段的能量消耗(单位:μJ),Tcycle是完整工作周期的时间(单位:ms)。

3.1 发射功耗:脉冲的代价

发射功耗是UWB最“显眼”的耗电项。为什么?因为UWB发射器需要在极短时间内(纳秒级)产生一个高功率的脉冲信号。这个脉冲的峰值电流通常能达到几十毫安。

我个人习惯把发射功耗拆成两部分:

  1. 脉冲生成功耗:与脉冲幅度、脉冲宽度强相关。幅度越大、脉宽越宽,功耗越高。
  2. 前导码开销:UWB数据包前面有一长串前导码,用于接收端同步。前导码越长,发射时间越长,总能量消耗越大。

举个例子,某款主流UWB芯片在-41.3 dBm/MHz的发射功率下,发射一个标准数据包(含前导码)的典型能量消耗约为:

参数 典型值 说明
发射峰值电流 31 mA 3.3V供电时约102 mW
数据包发射时长 ~250 μs 含前导码+数据帧
单次发射能量 ~25.5 μJ 102 mW × 250 μs

避坑指南:我曾经在项目中为了追求更远的测距距离,把发射功率调到芯片允许的最大值。结果测距距离只提升了15%,但发射功耗暴涨了60%。后来我学乖了——发射功率不是越高越好,要结合链路预算和功耗做折中。

3.2 接收功耗:听,也要花钱

很多人以为接收功耗比发射功耗低很多。其实不然。UWB接收器需要持续监听信道,检测微弱的前导码信号,这个过程同样耗电。

接收功耗的构成:

  • 射频前端:LNA(低噪声放大器)、混频器等,持续工作。
  • 基带处理:相关器、匹配滤波器,用于检测前导码。
  • 等待时间:接收器不知道发射器什么时候发数据,所以必须提前打开并等待。这个等待时间越长,浪费的能量越多。

我做过一个对比测试,同一款芯片在接收状态下的功耗:

接收模式 典型电流 说明
持续监听模式 ~38 mA 接收器一直打开,随时准备接收
间歇监听模式 ~5 mA(平均) 周期性地打开接收器,占空比控制
前导码检测模式 ~15 mA 只检测前导码,不接收完整数据包

你想想看,如果接收器一直开着,功耗甚至比发射还高。所以很多UWB系统采用“先休眠,再定时唤醒”的策略,就是为了减少接收等待时间。

3.3 休眠功耗:蚊子腿也是肉

休眠功耗,我刚开始做UWB时根本没当回事。觉得芯片都睡了,能费多少电?结果被现实狠狠教育了一回。

UWB芯片的休眠模式通常分为几种:

  • 深度休眠:只保留RTC(实时时钟)和少量寄存器,电流低至1~2 μA。
  • 浅度休眠:保留部分时钟和状态,唤醒速度快,但电流可能到10~50 μA。
  • 待机模式:射频关闭,但数字核心仍在运行,电流约100~500 μA。

我曾经做过一个计算:一个标签每天发送1000次测距数据,每次工作周期20 ms,其余时间都在深度休眠。结果休眠功耗竟然占了总功耗的40%!

注意:休眠功耗的“累积效应”非常可怕。如果产品设计寿命是1年,休眠电流每增加1 μA,电池容量就需要额外增加约8.76 mAh。对于纽扣电池供电的设备,这可能是致命的。

3.4 动态功耗切换:看不见的“过路费”

动态功耗切换,说白了就是芯片在状态之间跳转时,额外消耗的能量和时间。这部分很容易被忽略,但实际影响很大。

常见的状态切换路径:

  1. 休眠 → 发射:需要唤醒时钟、锁相环(PLL)锁定、射频上电。这个过程通常需要100~200 μs,期间电流从几μA飙升到几十mA。
  2. 发射 → 接收:需要切换射频开关、调整接收器状态。切换时间较短,约10~20 μs。
  3. 接收 → 休眠:需要关闭射频、保存寄存器状态。切换时间约50~100 μs。

我习惯用一个“切换能量”的概念来量化这部分开销:

Eswitch = ∫ P(t) dt,从切换开始到切换结束。

举个例子,从休眠到发射的切换过程:

  • 切换时间:150 μs
  • 平均电流:20 mA(从1 μA上升到31 mA)
  • 切换能量:20 mA × 3.3V × 150 μs ≈ 9.9 μJ

这个能量已经接近一次发射能量(25.5 μJ)的40%了。如果频繁切换,这部分开销会非常可观。

我的经验:在低占空比应用中(比如每分钟测距一次),动态切换功耗可能占总功耗的30%以上。我曾经通过优化切换时序,把切换时间从150 μs压缩到80 μs,直接让标签续航提升了15%。

3.5 功耗模型全景图

下面这张图,是我自己总结的UWB功耗模型全景。它把四个维度的关系串起来了。

UWB功耗模型全景图 发射功耗 脉冲生成+前导码 接收功耗 监听+基带处理 休眠功耗 深度/浅度/待机 动态切换功耗 状态跳转开销 总功耗模型 Pavg = ΣE / Tcycle 工作占空比 发射/接收时长 ÷ 周期时长 占空比越低,平均功耗越低 切换频率 状态跳转次数/秒 切换越频繁,开销越大 休眠深度选择 深度休眠 vs 浅度休眠 深度休眠省电但唤醒慢 核心结论 功耗平衡不是单一维度的优化,而是发射、接收、休眠、切换四个维度的联合权衡。 占空比、切换频率、休眠深度是三个最关键的调节杠杆。

从这张图可以看得很清楚:四个功耗维度汇聚到总功耗模型,而总功耗又受到三个关键杠杆的调节。我个人在做功耗平衡时,就是盯着这三个杠杆来调——先确定占空比,再优化切换频率,最后选择合适的休眠深度。

3.6 实战:如何建立自己的功耗模型

说了这么多理论,来点实际的。我建议你按以下步骤建立自己的功耗模型:

  1. 查数据手册:找到芯片在不同模式下的典型电流值。注意区分“典型值”和“最大值”,我一般用典型值做估算,用最大值做最坏情况分析。
  2. 实测验证:用示波器+电流探头,实测芯片在工作周期内的电流波形。我曾经发现某款芯片的休眠电流比手册标称值高了30%,后来发现是GPIO配置问题。
  3. 建立Excel模型:把每个阶段的电流、时间、电压列出来,计算能量消耗。我习惯用这个公式:E = I × V × t。
  4. 迭代优化:根据模型结果,调整参数(比如前导码长度、发射功率、休眠深度),重新计算,直到满足续航目标。

一个简单的功耗估算示例:

假设一个UWB标签的工作周期如下:

  • 休眠:999 ms,电流2 μA
  • 唤醒+切换:150 μs,平均电流20 mA
  • 发射:250 μs,电流31 mA
  • 接收:500 μs,电流38 mA
  • 切换回休眠:100 μs,平均电流15 mA

平均电流计算:

Iavg = (2 μA × 999 ms + 20 mA × 0.15 ms + 31 mA × 0.25 ms + 38 mA × 0.5 ms + 15 mA × 0.1 ms) / 1000 ms

Iavg ≈ 2 μA + 3 μA + 7.75 μA + 19 μA + 1.5 μA ≈ 33.25 μA

如果电池容量是200 mAh,理论续航 ≈ 200 mAh / 33.25 μA ≈ 6015小时 ≈ 250天。

嗯,这个例子里的休眠电流虽然只有2 μA,但占空比很低,所以平均功耗主要由发射和接收贡献。如果我把测距频率从1 Hz降到0.1 Hz(每10秒一次),平均电流会降到约5 μA,续航直接飙升到4年以上。

这就是功耗模型的魅力——你不需要动硬件,只靠调整参数,就能让续航翻几倍。