☰
Cat.1模组低功耗设计:Vref引脚漏电导致PSM待机电流飙升的排查与对策
2026/10/20 8:02:01 网站建设 项目流程

去年在给一个低功耗定位终端做改版时,我栽了个不大不小的跟头:Cat.1 模组的 PSM 待机电流按规格书标称不到 10uA,结果整机实测却稳稳停在 58uA 下不来。把负载、软件、焊接挨个排查过一轮之后,最后发现电路图里多画了一根 Vref 引出线,就是这根线让模组在睡眠状态下始终无法彻底关断基准电源域。

也是从那次开始,我养成了一个习惯:拿到任何 Cat.1 模组的参考设计,第一件事就是检查所有电源域引脚在待机状态下的连接关系,尤其是 Vref 这种功能看起来很简单、漏电原因却非常隐晦的引脚。如果你正在做电池供电的物联网设备,比如定位器、智能表计、资产追踪终端,大概率迟早会碰到类似的事:PSM 和 eDRX 都配置了,整机待机电流依然是几十微安甚至上百微安。这篇文章不绕弯子,直接讲清楚 Vref 的正确打开方式,并用一次完整排查过程把原理、测量方法和软硬件对策一次说透。

1. PSM 模式开了但待机 58uA:这个项目的第一次功耗翻车

1.1 先算一笔账:多出来的 40uA 意味着什么

当时项目用的是 700mAh 锂亚电池,产品预期使用 24 个月以上。你拿计算器一按就清楚:700mAh 除以 58uA 的理论待机时间是 12000 小时左右,差不多 1.37 年,这还不算电池自放电和低温环境下的容量衰减。按这个数字,产品连预期的半程都撑不到。

反过来看,如果把待机电流降到 12uA,理论时间直接变成 6 年多,电池自放电反而成了主要限制因素。很多工程师会忽略这个量级差,觉得"不就是几十微安嘛",但对电池供电产品来说,每 10uA 都对应着几个月的续航损失,尤其在容量本来就不大的电池上,占比特别吓人。

更麻烦的是,这类问题不是靠改参数就能发现的。射频工程师测了传导、杂散,软件工程师把 PSM、eDRX 参数反复改了无数遍,模组依然在睡眠状态下保持高电流。最后只能承认:问题不在配置,而在于某个硬件细节把模组的电源域"钉死"在开启状态。

1.2 PSM 到底关了什么,没关什么

要做低功耗排查,必须理解 PSM(Power Saving Mode)的实际行为。模组进入 PSM 后,射频接收通路基本关闭,基带的大部分电源域被断电,只保留 RTC 和定时唤醒所需的极小电路。从网络角度看,模组已经"不可达",直到 TAU 定时器到期或者终端主动发数据才醒来。

但是有一点经常被忽略:PSM 节省的是"模组自己能控制的电源域"。如果外部电路把一个本该在睡眠时停止工作的引脚电压"吊住",模组内部的管理单元就会误判为外部仍在请求供电,从而不让对应电源域进入关断状态。

这就像一个声控灯系统:明明整栋楼都拉闸了,但门禁系统的供电还通着,楼里就没法真正做到零能耗。Vref 这个引脚,就是这类门禁系统里的关键一环。

1.3 第一批样机上被忽略的 Vref 布线

回到项目本身。当初电路设计时,参考设计里 Vref 引脚是悬空的,我们的工程师为了给电池电压采样提供一个"更准的 1.8V 参考",擅自加了一组分压电阻网络接到 Vref 上。具体接法是 Vref 经过两个 100kΩ 电阻分压,中点再连到模组的 ADC 通道。

从原理图上看,这似乎只是给 ADC 提供了参考电位,不至于引起待机功耗问题。但等到小批量贴片回来,整机待机电流就从原来开发板的 12uA 涨到了 58uA。更讽刺的是,这个分压网络提供的参考精度提升,在实际上根本用不到,因为模组内部本来就有带隙基准。

那 40 多微安的增量到底从哪儿来的?接下来就要看 Vref 引脚内部到底是什么结构。

2. Vref 的角色拆解:它背后其实是一路可关断的基准 LDO

2.1 Vref 不是"可以随便借电的 1.8V 电源"

很多第一次做 Cat.1 模组的工程师会把 Vref 当成一个普通的 1.8V 输出电源来用,这其实是最大的误解。Vref 通常是 ADC 基准电压输入/输出引脚,由模组内部一颗独立的基准 LDO 产生,典型电压 1.8V。

这颗 LDO 和给 GPIO 供电的 VDDIO、给内部逻辑供电的数字核心电源完全不是一回事。VDDIO 掉电会导致 IO 状态混乱,数字核心电源掉电会导致系统崩溃,但 Vref 是允许在睡眠流程中被软件或硬件关断的,它的作用范围非常窄,负载能力通常只有几百微安甚至更低。

你可以把它理解成精密秤旁边配的标准砝码:需要称重时拿过来用,称完立刻收回去。你不能因为砝码是金属的,就顺手把它当砖头去垫桌子腿。

2.2 为什么在 Vref 上接一个分压电阻网络,能把整个模组"唤醒"

这是整篇文章最核心的机制,我会尽量讲透。模组睡眠流程中,软件会命令基准 LDO 关闭,但 PMU 硬件并不只是简单切断输出,它通常会检测 Vref 引脚的外部负载状态:如果检测到外部电路还在持续从引脚抽取电流,PMU 就认为基准仍然被"外部使用中",于是维持 LDO 输出。

这算一种保护机制,目的是防止不明原因的掉电导致 ADC 采样结果异常,或者外部器件因电源突然中断而出现逻辑错误。但它有个副作用:如果你在 Vref 上挂了分压电阻、比较器、放大器这类持续工作的器件,PMU 就永远等不到负载解除的信号,基准 LDO 一直开着。

另外,即便 PMU 强行关闭了基准输出,引脚外部如果存在到地的电阻通路,也会形成一条缓慢放电的路径,造成漏电流。更极端的情况是把 Vref 和外部 GPIO 直接相连,睡眠时 GPIO 保持高电平,电流会通过引脚倒灌进模组内部。

我整理了一下常见的三种接法,按实际功耗影响排个序:

Vref 处理方式待机电流影响风险评估
引脚悬空或仅接 0.1uF 到地几乎无影响,模组可正常睡眠推荐
外接对地分压/下拉电阻网络电阻网络本身耗电,同时阻止基准 LDO 关闭,实测常增加 30~60uA高,尽量避免
被外部 GPIO 上拉到高电平通过引脚倒灌电流,数值取决于上拉电阻,可能达到几百 uA极高,严禁

我们项目的 58uA 就是这么来的:外部分压电阻持续消耗约 18uA,加上基准 LDO 无法关断带来的额外损耗,凑成了整机待机的"翻车"数字。

2.3 Vref 的正确用途:什么时候该用它

并不是说 Vref 这个引脚没用,恰恰相反,在某些场景下它非常合适。比如你用模组内置 ADC 采样外部模拟量,本身又需要更高稳定度的参考电压,那么使用 Vref 作为 ADC 基准是合理的,但必须遵循两个原则:第一,仅在采样窗口内使用;第二,采样完成之后要从物理上断开外部电路。

如果确实需要一个 1.8V 给外部低功耗传感器供电,也别直接挂在 Vref 上,正确的做法是加一颗负载开关。睡眠前 MCU 先把负载开关关断,再去触发模组进入 PSM。这样 Vref 看到的外部负载为零,基准 LDO 才能正常关闭。

唯一的红线是:永远不要用 Vref 去驱动 LED、运放、比较器、电平转换电路这类有源器件,它的负载能力支持不了,而且会直接破坏模组的深度睡眠。

3. 从整机到单引脚:Vref 漏电路径的完整定位实录

3.1 测量方案:万用表、示波器和 10Ω 采样电阻的配合

排查之初,我先搭建了一套靠谱的测量环境。很多工程师习惯直接把万用表调到电流档串进回路,这其实有个大问题:万用表的电流档内阻可能有几欧姆甚至几十欧姆,在 3.8V 供电的模组系统里会造成明显的电压跌落,轻则测量值偏小,重则模组直接复位。

我的做法是:电源正极串联一只 10Ω 的 1% 精密采样电阻,示波器两个通道分别接电阻两端,用差分方式测压差,再除以 10 得到电流。同时保留万用表 uA 档作为二次验证,但只在确认系统不重启时才串入。

工具清单大致是这样:

工具用途注意事项
可调直流电源(3.8V,限流 100mA)提供稳定供电限流一定要设,防止短路烧板
10Ω 精密采样电阻把电流信号转成电压信号用 1% 精度,功率足够
双通道示波器抓电流波形和引脚电平用 DC 耦合,差分测压差
万用表 uA 档验证稳态平均电流注意内阻对系统的压降影响

这一步的目标是把"模组进入 PSM 后的电流基线"稳定读出来,而不是只看某个瞬时峰值。

3.2 分层断电:把板子拆成多个"供电岛"再逐一排除

拿到 58uA 这个数字后,我没有直接怀疑某条具体走线,而是把整板按功能切成了几块独立供电的"岛",逐一断开测试。

排查步骤记录如下:

  1. 整机全连接,待机电流 58uA;
  2. 拔掉传感器板排线,电流降到 56uA,说明传感器不是主犯;
  3. 断开底板与模组串口之间的电平转换芯片供电,电流降到 43uA,有一些改善但依然偏高;
  4. 断开 Vref 分压电阻网络的一端,让 Vref 引脚悬空,电流瞬间掉到 8uA;
  5. 单独恢复 Vref 分压网络,确认电流再次回到 58uA,问题锁定在 Vref 外部负载。

这个过程中的关键技巧是:每次改动后不要立刻记录,要等 30 秒以上,让模组完全进入稳定睡眠状态。部分平台的基准 LDO 关闭有软超时逻辑,改动后紧接着的几分钟内数据可能会跳动。

3.3 用示波器看"周期性脉冲 vs 常驻漏电"

在确认问题点之前,我还做了一步判断:用示波器观察采样电阻上的波形。因为 PSM 模式下模组仍然会有周期性的 TAU 唤醒,如果待机电流高是因为唤醒过于频繁,波形上会看到明显的周期脉冲;而如果问题出在 Vref,基线应该是一条平稳的高电流直线。

实测波形非常平滑,58uA 没有任何周期性脉冲,这说明模组根本没有进入真正的深度睡眠,电源域被常驻负载钉死了。这个现象基本排除了参数配置问题,把矛头指向硬件连接。

随后我用示波器去量 Vref 引脚电压,发现即使在模组进入睡眠指令之后,Vref 仍然稳定在 1.8V。这进一步证实了 PMU 一直在维持基准输出,没有进入预期的关断状态。

3.4 数据核对:把引脚描述和参考设计并排抄一遍

最后一步是回到文档。我把模组规格书里的引脚描述和官方参考设计原理图并排摆在一起,逐条核对。

规格书里关于 Vref 的说明很明确:模拟参考电压引脚,无外部负载时建议悬空或接 0.1uF 旁路电容,禁止外接对地电阻网络,否则外部负载会阻止基准电源域关闭。参考设计里 Vref 恰好就是悬空的,只有一颗 0.1uF 电容到地。

而我们这批原理图多出来的分压网络,完全属于"工程师觉得需要,但产品和硬件都不知情"的私自添加。拆掉之后整机待机电流回到 10uA 左右,项目续航恢复正常。

4. 软硬件协同:把 Vref 放在该开的时候开、该关的时候关

4.1 硬件侧:Vref 引脚的最终接法清单

经过这次事故,我把 Vref 的硬件接法整理成了一个固定清单,后续所有项目都按这个执行。

方案 A(最推荐):Vref 引脚不引出,在 PCB 上直接悬空,或者就近接一颗 0.1uF 电容到地。这颗电容的作用是抑制外部噪声耦合,避免模组 ADC 采样时受到开关电源纹波干扰。接上电容后待机状态下没有持续放电回路,对功耗无影响。

方案 B:如果保留调试需求,可以在 Vref 与测试点之间串一颗 0Ω 电阻。调试时通过电流表飞线测量,量产前把 0Ω 拿掉,等于多了一道物理保险。

方案 C:如果项目确实需要 1.8V 参考或供电给某个外部负载,务必在 Vref 和负载之间增加负载开关。我用的是常见的小信号 P-MOS,栅极通过一个 100kΩ 电阻接 MCU GPIO,睡眠时 GPIO 置高,P-MOS 栅源电压接近 0,通路关断;采样时 GPIO 拉低,P-MOS 导通给负载供电。模拟开关也可以,但要注意选自身静态电流极低的型号。

接法适用场景待机影响
悬空或接 0.1uF 到地大多数模组方案无
串 0Ω 电阻引出到测试点调试阶段无
加负载开关再引到外部负载必须外接 1.8V 参考睡眠时负载隔离,无影响
直接接电阻网络或外部器件不推荐30~100uA 甚至更高

4.2 软件侧:睡眠前按顺序关 ADC、关基准输出、再进 PSM

硬件改完之后,软件流程也要配合,否则就算电路没问题,睡眠顺序不对依然可能触发异常状态。我在代码里把进入睡眠的动作固定成了下面这个顺序。

/** * 低功耗上报后进入睡眠的流程示意 * 具体 AT 指令以实际模组手册为准,这里只描述行为顺序 */ void enter_lowpower_sleep(void) { /* 1. 完成业务数据上报 */ uart_send("AT+CPSMS=1\r\n"); /* 使能 PSM,参数按平台配置 */ delay(20); /* 2. 关闭 ADC 采样通道,避免采样电路继续维持基准 */ uart_send("AT+CADC=0\r\n"); /* 关闭 ADC,指令名因平台而异 */ delay(10); /* 3. 关闭基准输出 / 基准 LDO */ uart_send("AT+VREFCTL=0\r\n"); /* 按手册调用,部分平台仅需关闭 ADC 即可 */ delay(10); /* 4. 拉低 WAKEUP 引脚,通知模组进入 PSM */ gpio_write(WAKEUP_PIN, GPIO_LEVEL_LOW); }

需要注意的细节是顺序不能乱。先关基准再上报,会导致上报过程中引用外部参考的电路工作异常;先进入 PSM 再去关外部负载,基准 LDO 可能因为负载未消除而根本无法关闭。正确的做法是:先让外设停止消耗,再关 ADC,再关基准,最后拉低唤醒引脚让模组睡死。

另外,很多模组在 PSM 状态下串口不再响应任何指令,所以任何命令必须在拉低 WAKEUP 之前发完。唤醒时也要拉高 WAKEUP 引脚,等待模组发出就绪信号后再开始下发数据。

4.3 可复用的原理图自查清单

经过这次教训,我把 Vref 检查提升到了硬件评审的第一优先级。每次改完电路,我都会逐条对照以下清单:

  • Vref 引脚是否悬空或只接 0.1uF 旁路电容?
  • 是否有外部电阻网络或者有源器件直接接到 Vref?
  • 外部负载是否通过负载开关隔离,睡眠时能否彻底关断?
  • 睡眠流程是否先断开外部负载,再关闭 ADC 和基准输出?
  • 模组进入 PSM 后,待机电流波形是否是一条平稳的低电流直线?

如果你能在原理图阶段就做完这几项检查,后面至少能省下两周排功耗问题的时间。

5. Vref 之外,Cat.1 低功耗设计里的另外四类高频坑

5.1 UART 上拉电阻:最容易被忽略的常驻电流

Vref 解决了,不代表整机功耗就万事大吉。同一块板子上我们后来又陆续踩了几个坑,第一个是串口上拉电阻。

模组和 MCU 之间的 TX/RX 经常需要接上拉电阻保证空闲电平稳定,有人习惯用 10kΩ,这在正常工作状态下完全没问题,但睡眠时问题就来了:模组和 MCU 都不工作了,上拉电阻仍然把 IO 拉到 VDDIO,一路 10k 对地 3.3V 就是 330uA 电流,两条串口线轻松超过 600uA,比整个模组睡眠还耗电。

正确做法是:如果串口在睡眠期间不需要维持电平,就把 MCU 侧 GPIO 配置为高阻输入或下拉状态;如果必须保留上拉,把电阻从 10k 换成 1M,单路电流降到 3.3uA,几乎可以忽略。注意,1M 上拉在高速通信时可能影响边沿,但 Cat.1 模组串口常用波特率不超过 115200,1M 上拉完全够用。

5.2 SIM 卡检测引脚和 32kHz 时钟输出的无谓消耗

第二个坑出在 SIM 卡卡座的 CD 检测引脚上。参考设计通常要求把 CD 脚接一个上拉到 1.8V,再连到模组 GPIO。正常情况下这没问题,但如果你只是出于"万一要检测插卡状态"接了它,睡眠时内部的上拉回路仍然在工作,同样会带来数微安到十几微安的电流。

这类引脚的特点是一年用不了几次,但电流一年 365 天都在跑。我的处理方式是:不做热插拔场景的项目,直接把 CD 引脚接地或按参考设计固定电平,不用它干任何事;需要检测的项目,也要让 MCU 在睡眠前把对应 GPIO 配置成高阻态。

另一个更隐蔽的是模组的 32.768kHz 时钟输出脚。有些平台允许把低频时钟引出来给外部 MCU 使用,外观上很诱人:MCU 不用再放一颗晶振,时钟还能同步。但代价是睡眠时模组的时钟缓冲器也一直在工作,通常会吃掉十几个微安。如果 MCU 在深度睡眠时不需要时钟维持,务必通过 AT 指令或引脚配置关掉这个输出。

5.3 电源路径:选 LDO 还是 DC-DC,使能时序怎么写

第三类坑和电源拓扑有关。我见过不少设计把 3.8V 锂电池直接经过一颗普通 LDO 降成 3.3V 给模组供电。普通 LDO 的静态电流 Iq 动辄几十微安,睡眠时模组倒是睡着了,LDO 自己还在持续耗电。

从低功耗角度,优先选 Iq 小于 1uA 的低功耗 LDO。市面上这类芯片并不少,关键是下原理图时要注意看数据手册里 Iq 的定义条件,有些厂家标注的是微安级,实际在空载下表现也还不错。

如果模组发射时峰值电流很大,LDO 可能因为压差发热导致输出跌落,这时候就需要用带轻载省电模式的降压 DC-DC。低 Iq 同步降压在睡眠时可以进入脉冲模式,代价是纹波稍大,但只要模组的电源输入范围足够,整体收益还是正的。

还有使能脚的默认电平问题。有些参考设计把 EN 脚经 100kΩ 下拉到地,目的是防止上电瞬间误开启外部负载,但如果你主控没来得及拉高 EN,整机就永远处于关机状态。我的做法是 EN 直接固定连到电源输入或主控 GPIO,加上正确的默认策略,避免出现"静态正常、动态翻车"的情况。

5.4 指示灯和传感器供电:交互体验要有代价意识

最后一类坑,是 LED 指示灯和传感器电源的睡眠管理。

先说 LED。很多人习惯用 GPIO 高电平点亮 LED,这种方式在代码上很直观,但睡眠时如果忘记把 GPIO 拉低,LED 会处于微亮状态,电流轻松突破 100uA。正确做法是用灌电流方式:LED 负极接 GPIO,正极通过限流电阻接 VDDIO,点亮时 GPIO 输出低电平,睡眠时 GPIO 配置为输入高阻,彻底断掉电流路径。

再说传感器。很多传感器自己有 sleep 引脚,但数据手册上的 sleep 电流往往只代表数字核心休眠,内部的 ADC、运放或者接口电路可能还在运行。最稳妥的办法是所有外设的 VDD 都统一接到一颗负载开关上,MCU 睡眠前先把整个传感器电源域切断。这一步操作看似简单,实际能省掉的电流可能比模组自身睡眠节省的还多。

那次 58uA 事件之后,我把 Vref 检查从可选优化直接升到了硬件评审的第一项。说句实在话,功耗问题最磨人的不是测量工具不够好,而是软件配置看起来全对,却忘了从物理层面去检查每一个电源域引脚。Vref 只是这类问题的典型代表——它看起来就是一条走线、几个电阻,但在休眠的世界里,它可能是一根永远不灭的灯丝。排查时别怕把板子拆得七零八落,也别嫌飞线难看,有时候真相就藏在某一根线断开之后,电流表上突然掉下去的那几十微安里。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询