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%。我习惯用金属膜电阻,温漂小。
示波器设置也有讲究:
- 用差分探头或者两个通道做减法,避免共模干扰
- 采样率不用太高,但存储深度要够,才能抓到完整的休眠-唤醒周期
- 触发模式设成“下降沿触发”,可以抓到系统进入休眠的瞬间
2.3 功耗分析仪:Joulescope 的使用
如果你觉得万用表和示波器用起来太麻烦,或者精度不够,那就上专业工具吧。
Joulescope 是我个人非常喜欢的一款功耗分析仪。它本质上是一个高精度、宽动态范围的电流采样设备,能同时测电流和电压,实时计算功率和能量。
它解决了什么问题?
- 动态范围极宽:从纳安到安培级,自动切换量程,不用手动换档
- 高采样率:最高2MHz,能抓到微秒级的电流尖峰
- 软件强大:PC端软件可以实时显示波形,还能导出数据做后处理
我记得有一次,客户说我们的低功耗产品在某种场景下电池续航比预期少了40%。用万用表测平均电流,数据正常。用示波器抓,也看不出明显异常。最后用Joulescope连续记录了24小时的电流波形,才发现有一个定时任务每10分钟会唤醒系统,但唤醒后有个外设的初始化代码没写好,导致多耗了50ms的电流。这个50ms在万用表上根本看不出来,但累积24小时,电量就差了40%。
2.4 电池放电曲线分析
测完了电流,还得看电池能不能扛得住。
电池放电曲线,说白了就是电池电压随时间的变化曲线。不同负载下,曲线形状完全不同。
几个关键点:
- 平台电压:锂电池放电时,大部分时间电压在3.6V-3.8V之间,这个区域叫“平台区”。如果你的系统在这个电压范围内工作正常,那续航就稳了。
- 截止电压:一般锂电池保护板会在2.8V左右切断输出。但你的系统可能在3.0V就工作不正常了。所以实际可用容量,取决于系统的最低工作电压,而不是电池的截止电压。
- 脉冲负载的影响:如果你的系统有瞬间大电流(比如LoRa发射、电机启动),电池内阻会导致电压瞬间跌落。如果跌到系统复位电压以下,系统就会重启。
我做过一个测试:用同一个电池,分别带恒定负载和脉冲负载,测出来的可用容量能差20%以上。原因就是脉冲负载下,电池内阻消耗了更多能量,而且电压跌落导致系统提前进入欠压保护。
好了,这一章的内容就这些。测量是低功耗设计的基础,基础不牢,后面优化再多也是白费。下一章我们聊聊怎么从硬件层面降低功耗,包括电源选型、DC-DC和LDO的取舍,以及一些我踩过的坑。