

01
对我们硬件来说,系统功耗主要受三个因素钳制:稳压器、CPU工作频率,以及芯片自身的低功耗处理能力。
先说说稳压器和频率。降低CPU主频能直接降功耗,这大家都懂,但代价是性能。所以很多芯片支持运行模式下的动态管理,也就是在需要干活时,通过配置内部电源变换器进入低功耗运行模式,同时把系统时钟降下来,再顺手关掉不用的外设时钟。这样就能在保持内核和外设基本运行的前提下,把功耗压到最低。
不过说实话,对于多数项目和芯片来说,很多时候我们更关注的是休眠模式。像我开头举例的智能门锁,大部分时间都处于休眠状态,只有你开门或者触发传感器的时候才醒来工作一会儿,这才是省电的关键。

再往根儿上说,功耗的本质是热力学,电能灌进系统,最终都得变成热散出去。你优化功耗,本质上就是尽可能减少耗电和发热。我们所有软硬件优化,归根结底都是在干同一件事,让尽可能多的晶体管,在尽可能长的时间里,处于彻底关断的状态。
具体操作上,首先要保证最小系统能正常工作,不必要的外设,尽可能把供电给关断。比如我们用不到WiFi功能,那么WiFi芯片的供电就可以直接通过CPU的IO口来关断。调试的时候要仔细翻芯片手册,看芯片在低功耗状态下各个电源域的最低要求是多少,如果在最小系统下都不满足,那后面就不用白费力气了。
02
芯片为了省电,定义了一系列休眠模式,比如Sleep、Standby和Shutdown,功耗逐级降低。说白了就是芯片内部通过关闭外设和时钟,甚至切断部分电源域来达到省电的目的。

Sleep模式下,内核停了,但外设还在跑,适合需要快速响应的场景。进入和退出都很灵活,可以用WFI指令让任意外设中断唤醒。Standby模式则关掉更多时钟和稳压器,功耗更低,但唤醒时间更长。Shutdown模式几乎把芯片内部电源全掐了,漏电最小,但唤醒就相当于一次冷启动,啥都得重新初始化。
然而,理论很丰满,现实很骨感。根据经验,功耗问题最隐蔽、最折磨人的地方,往往不是纠结选哪个休眠模式,而是软件在进出休眠时对IO口的配置。
我之前在调试一个低功耗产品的时候就吃过这个亏。硬件改了好几处,功耗突然暴增,反复折腾了好几天,最后发现是一个RS485芯片跟CPU的一个IO口连在一起了,休眠时那个IO处于不确定状态,把那个引脚断开就好了,功耗一下子就正常了。

03
很多传感器和模块,你发了Sleep命令,它自己还有几uA的静态电流。最好的方法是用个MOS管来控,不用时直接关断VCC,漏电彻底归零。

所有这些能力,看着简单,但最终靠的是调试闭环。你得用合适的工具去测量、去验证。
还有啊,很多硬件兄弟习惯拿个万用表或者普通示波器就打天下,但对于电流只有几个mA甚至uA级的低功耗设备来说,这些工具的精度远远不够。你得选用高精度的电流分析仪或者专用的功耗测试工具,才能看到真实的电流波形和瞬态变化。有了准确的测量数据,你才能知道哪一步优化有效、哪一步是白费劲,把精力花在刀刃上。
如果觉得有收获,欢迎转发给身边的朋友。今天的分享就到这里,咱们下期再见!