2. 功耗测量基础:万用表与示波器测电流,精密电阻采样法,功耗分析仪(如Joulescope)的使用,电池放电曲线分析

做低功耗设计,第一件事是什么?

不是写代码,不是调驱动。是先把功耗测准了。

我见过太多工程师,花了两周优化代码,功耗降了30%,结果发现是万用表档位选错了,测出来的数据全是错的。嗯,这种事我也干过。所以这一章,咱们把测量这件事彻底聊透。

2.1 万用表测电流:最基础,也最容易翻车

万用表测电流,说白了就是让电流流过表内部的一个小电阻,测它两端的电压,然后换算成电流。原理简单,但坑不少。

第一个坑:表笔插错孔。

测电压用V孔,测电流用A孔或mA孔。我刚开始做嵌入式那会儿,有一次测一个蓝牙模块的功耗,表笔插在电压孔里就去串电流了,结果读数乱跳,我还以为是模块坏了。折腾了半小时才发现是孔插错了。

第二个坑:量程选不对。

嵌入式系统有个特点——动态范围极大。休眠时可能只有几微安,工作时几百毫安。你用mA档去测休眠电流,读数可能是0.000,因为分辨率不够。反过来,你用A档去测工作电流,可能连小数点后两位都看不到。

我的习惯是:先粗测,再精测。先用A档看个大概范围,再换到合适的mA或μA档去读精确值。

小技巧: 很多万用表在换档时会断开电路,导致系统掉电重启。如果你测的是休眠电流,一换档系统就醒了,数据全废。建议用带“自动量程保持”功能的表,或者干脆用示波器+采样电阻的方法。

2.2 示波器测电流:看到动态变化

万用表只能看平均值,但嵌入式系统的功耗是动态的。比如一个LoRa模块,发射时电流100mA,持续20ms,然后休眠2秒。万用表读出来可能只有1mA左右,但这完全掩盖了发射时的峰值功耗。

这时候就得用示波器了。

方法:精密电阻采样法

在电源和负载之间串一个小电阻,用示波器测电阻两端的电压差,再除以电阻值,就得到电流波形。

电阻怎么选?我一般遵循三个原则:

  • 阻值要小:通常0.1Ω到1Ω。太大影响系统供电,太小信号太弱。
  • 功率要够:P = I²R。比如测1A电流,用0.1Ω电阻,功率就是0.1W,选个1/4W的没问题。
  • 精度要高:至少1%,最好0.1%。我习惯用金属膜电阻,温漂小。
实战案例: 我曾经调试一个NB-IoT模块,发现它工作时偶尔会重启。用示波器+0.1Ω电阻抓电流波形,发现发射瞬间电流峰值达到了1.8A,而电源芯片的限流值是1.5A。问题一下就找到了——电源选型余量不足。

示波器设置也有讲究:

  • 用差分探头或者两个通道做减法,避免共模干扰
  • 采样率不用太高,但存储深度要够,才能抓到完整的休眠-唤醒周期
  • 触发模式设成“下降沿触发”,可以抓到系统进入休眠的瞬间

2.3 功耗分析仪:Joulescope 的使用

如果你觉得万用表和示波器用起来太麻烦,或者精度不够,那就上专业工具吧。

Joulescope 是我个人非常喜欢的一款功耗分析仪。它本质上是一个高精度、宽动态范围的电流采样设备,能同时测电流和电压,实时计算功率和能量。

它解决了什么问题?

  • 动态范围极宽:从纳安到安培级,自动切换量程,不用手动换档
  • 高采样率:最高2MHz,能抓到微秒级的电流尖峰
  • 软件强大:PC端软件可以实时显示波形,还能导出数据做后处理

我记得有一次,客户说我们的低功耗产品在某种场景下电池续航比预期少了40%。用万用表测平均电流,数据正常。用示波器抓,也看不出明显异常。最后用Joulescope连续记录了24小时的电流波形,才发现有一个定时任务每10分钟会唤醒系统,但唤醒后有个外设的初始化代码没写好,导致多耗了50ms的电流。这个50ms在万用表上根本看不出来,但累积24小时,电量就差了40%。

注意: Joulescope 虽然好用,但价格不便宜(大概3000-5000元)。如果你只是偶尔测一下,用示波器+采样电阻就够了。但如果你是专职做低功耗开发的,我建议公司配一台,省下的调试时间远不止这个价。

2.4 电池放电曲线分析

测完了电流,还得看电池能不能扛得住。

电池放电曲线,说白了就是电池电压随时间的变化曲线。不同负载下,曲线形状完全不同。

几个关键点:

  • 平台电压:锂电池放电时,大部分时间电压在3.6V-3.8V之间,这个区域叫“平台区”。如果你的系统在这个电压范围内工作正常,那续航就稳了。
  • 截止电压:一般锂电池保护板会在2.8V左右切断输出。但你的系统可能在3.0V就工作不正常了。所以实际可用容量,取决于系统的最低工作电压,而不是电池的截止电压。
  • 脉冲负载的影响:如果你的系统有瞬间大电流(比如LoRa发射、电机启动),电池内阻会导致电压瞬间跌落。如果跌到系统复位电压以下,系统就会重启。

我做过一个测试:用同一个电池,分别带恒定负载和脉冲负载,测出来的可用容量能差20%以上。原因就是脉冲负载下,电池内阻消耗了更多能量,而且电压跌落导致系统提前进入欠压保护。

建议: 做电池续航测试时,不要只测平均电流。最好用电池直接供电,记录从满电到系统关机的完整电压曲线。这样你才能知道,你的系统到底能用多久,以及电池的哪一段能量是被浪费掉的。

好了,这一章的内容就这些。测量是低功耗设计的基础,基础不牢,后面优化再多也是白费。下一章我们聊聊怎么从硬件层面降低功耗,包括电源选型、DC-DC和LDO的取舍,以及一些我踩过的坑。