3、低功耗硬件设计原理:电源树设计、时钟树设计、IO口功耗控制、外围电路低功耗设计技巧
各位同学,咱们接着聊。上一节讲了低功耗的顶层思路,这一节咱们要落地了。说白了,硬件设计才是功耗的「地基」。软件写得再漂亮,硬件上漏电漏成筛子,那也是白搭。我这些年做医疗体温计,踩过的坑有一半都在硬件上。今天就把电源树、时钟树、IO口和外围电路这几个关键点,掰开了揉碎了讲给你们听。
3.1 电源树设计:别让每一毫安白流
电源树,听起来高大上,其实就是搞清楚你的板子上,每一路电从哪来、到哪去、用了多少。体温计这种小设备,电池就那么点容量,每一微安都得精打细算。
核心原则:能关的坚决关,能降的坚决降。
- 分区供电:把电路分成「常电区」和「开关区」。比如MCU的RTC和唤醒逻辑,必须常供电;而蓝牙射频、LCD显示这些大胃王,平时就给它断电。我习惯用一颗负载开关(比如TPS22918)来控制大功率外设的电源轨。
- 选型要抠门:LDO的静态电流(Iq)是关键。体温计待机时,MCU可能只吃几微安,结果LDO自己就吃掉1微安,这能忍?我推荐用超低Iq的LDO,比如TPS7A02,Iq能做到25nA,几乎可以忽略。
- 电压要匹配:MCU内核电压越低,动态功耗越小。但别为了省电把电压压到临界值,我曾经遇到过因为电压偏低,MCU在低温下启动失败的案例。嗯,这里要注意,一定要看数据手册的「工作电压范围」和「温度曲线」。
我的小技巧:画电源树的时候,我习惯在每个节点旁边标注「典型电流」和「最大电流」。这样一眼就能看出瓶颈在哪。比如,蓝牙发射时电流可能冲到10mA,那你的电源芯片就得能扛住这个峰值,否则电压一掉,系统就复位了。
3.2 时钟树设计:频率越高,功耗越猛
时钟是MCU的心脏,跳得越快,功耗越大。这个道理大家都懂,但实际设计时,很多人还是习惯「能用多快就用多快」。你想想看,体温计需要每秒采样1000次吗?不需要嘛。
我的做法:
- 按需分配时钟:MCU内部通常有多个时钟源,比如低速的32.768kHz晶振和高速的几十MHz主晶振。平时待机,只用低速时钟跑RTC和唤醒定时器;需要测量或通信时,再切换到高速时钟。我习惯在代码里用「动态时钟切换」,而不是一直开着高速时钟。
- 外设时钟单独控制:很多MCU的外设(比如ADC、SPI、UART)都有独立的时钟门控。不用的时候,一定要关掉。我见过有人把ADC的时钟一直开着,结果待机电流多了几十微安。说白了,这就是个习惯问题。
- 晶振选型:低速晶振的负载电容要匹配,否则起振困难或者功耗偏大。我一般选6pF或9pF负载电容的晶振,配合MCU内部的可调电容,把振荡电流调到最小。
避坑指南:我曾经遇到过一个问题:系统待机时电流偏大,查了半天,发现是MCU的PLL(锁相环)没有完全关闭。有些MCU的PLL即使不用,也会消耗几百纳安。所以,一定要仔细看数据手册的「时钟关闭序列」,确保每个时钟源都真正「睡着了」。
3.3 IO口功耗控制:别让引脚偷偷漏电
IO口是MCU和外界打交道的窗口,也是最容易漏电的地方。很多新手觉得IO口功耗可以忽略,其实不然。一个引脚漏个几微安,几十个引脚加起来,待机电流就上去了。
关键控制点:
- 未使用的IO口:绝对不能悬空!悬空的IO口电平不确定,会导致CMOS输入级产生穿通电流。我习惯把未使用的IO口设置为「模拟输入模式」或者「输出低电平」。注意,设置为输出低电平时,要确保外部没有上拉电阻。
- 上拉/下拉电阻:能不用就不用。如果必须用,阻值选大一些,比如100kΩ甚至1MΩ。体温计这种低速率应用,根本不需要10kΩ那么强的上拉。
- 电平匹配:如果MCU是1.8V供电,而外设是3.3V供电,IO口之间一定要加电平转换。否则,MCU的IO口会被外设的高电压「灌电流」,轻则功耗增加,重则烧毁引脚。我一般用TXB0104这类自动方向转换芯片,或者用分立MOS管搭。
举个例子:一个体温计的按键检测,我习惯用「中断唤醒+内部上拉」的方式。平时IO口处于输入模式,内部上拉电阻(约40kΩ)把电平拉高。按键按下时,电平拉低,触发中断。这样,待机时IO口几乎没有电流消耗。千万别用外部上拉电阻加轮询扫描的方式,那功耗能差好几个数量级。
3.4 外围电路低功耗设计技巧:细节决定成败
外围电路,比如传感器、运放、LCD背光,往往是功耗的大头。MCU再省,外设不省也是白搭。
几个实用技巧:
- 传感器供电控制:体温计用的NTC热敏电阻或者数字温度传感器(比如TMP117),测量时间很短。我习惯用MCU的GPIO直接给传感器供电。测量时,GPIO输出高电平,传感器上电;测量完,GPIO输出低电平,传感器断电。这样,传感器只在测量瞬间耗电,待机时零功耗。
- 运放选型:如果需要模拟信号调理,一定要选「轨到轨输入输出」且「低功耗」的运放。比如OPA333,静态电流只有17μA。千万别用LM358那种老古董,那玩意儿静态电流几百微安,体温计根本扛不住。
- LCD显示:段码LCD比点阵LCD省电得多。而且,段码LCD可以用MCU的「LCD驱动模块」直接驱动,不需要额外的驱动芯片。刷新率也别太高,30Hz就够用了。我见过有人把刷新率设到100Hz,功耗直接翻倍。
- 去耦电容:这个容易被忽略。每个IC的电源引脚都要加0.1μF的陶瓷电容,而且要尽量靠近引脚。否则,电源噪声会导致IC工作不稳定,内部电路可能频繁切换状态,增加动态功耗。
我的经验:画原理图时,我习惯在每个外设的电源路径上串联一个0Ω电阻。这样,调试时可以用电流表测量每个外设的单独功耗。如果发现某个外设功耗异常,直接断开电阻排查,非常方便。这个习惯帮我省了不少排查时间。
好了,这一节的内容就这么多。电源树、时钟树、IO口、外围电路,这四个方面是低功耗硬件的核心。你想想看,只要每个环节都抠一抠,整机功耗降个50%是很轻松的事。下一节,咱们要讲软件层面的低功耗策略,那又是另一片天地了。