4. MCU低功耗外设与时钟系统
各位同学,咱们今天聊点实在的。低功耗设计,很多人一上来就盯着软件,什么睡眠模式、动态调频。但我要说,硬件底子没打好,软件再折腾也是白搭。电源树、去耦电容、电平转换、唤醒源——这四个东西,是低功耗硬件的四梁八柱。今天我就把这几个坑,一个一个给你们指出来。
4.1 电源树设计:别让电流偷偷溜走
电源树,说白了就是你的板子上,电是怎么从入口分到各个器件的。我见过不少新手,直接拿一个LDO给全板供电,结果待机电流几十毫安,怎么都降不下去。为什么?因为有些外设在睡眠时根本不需要电,你却一直供着。
核心原则:按功能域分电源,不用的域就彻底断掉。
我个人习惯的做法是:先把板子上的器件按功耗和功能分组。比如MCU核心、传感器、无线模块、接口电平,各走各的电源轨。然后给每个域加一个负载开关(比如TPS22918这类),由MCU的GPIO控制通断。
举个例子,一个NB-IoT终端:
| 电源域 | 典型器件 | 工作电压 | 休眠策略 |
|---|---|---|---|
| VDD_MCU | MCU核心、RTC | 1.8V / 3.3V | 深度睡眠,不断电 |
| VDD_SENSOR | 温湿度、加速度计 | 1.8V | 采样后断电 |
| VDD_RF | NB-IoT模组 | 3.8V | 发送完成后断电 |
| VDD_IO | 电平转换、接口 | 3.3V | 根据外设状态控制 |
这里有个细节:负载开关的静态电流一定要小。我踩过坑,选了一款标称2μA的开关,结果批量后发现有些批次跑到10μA,待机电流直接翻倍。后来我学乖了,选型时只看那些静态电流小于1μA的型号,而且一定要看整个温度范围的典型值。
小技巧:电源树的每个分支,都预留一个0Ω电阻或磁珠焊盘。调试时可以断开某个域单独测电流,定位问题快很多。
4.2 去耦电容布局:距离决定成败
去耦电容,看起来最简单,但恰恰是翻车最多的地方。我记得有一次,一个同事画的板子,MCU一跑起来就随机复位,查了三天,最后发现是去耦电容放得太远,ESL太大,高频噪声滤不掉。
去耦电容的核心就一句话:电容离芯片引脚越近,效果越好。为什么?因为PCB走线有寄生电感,每毫米大约1nH。电容放远了,走线电感一串联,高频阻抗反而变大,等于白放。
我一般遵循这几个规则:
- 0.1μF小电容:必须紧贴芯片电源引脚,走线长度不超过2mm,最好在芯片同一面。
- 10μF~100μF大电容:可以稍远,但也要在3cm以内,负责低频储能。
- 多个小电容并联:用不同容值(如0.1μF + 0.01μF)覆盖更宽频段。
- 过孔问题:电容的接地过孔要尽量靠近电容的GND焊盘,别绕远路。
注意:低功耗模式下,MCU会突然从睡眠切到工作,瞬间电流变化率(di/dt)很大。如果去耦电容布局不好,电源电压会瞬间跌落,轻则复位,重则写坏Flash。我见过一个产品,就是因为这个原因,OTA升级时频繁变砖。
4.3 电平转换电路:别让电压不匹配烧了芯片
低功耗系统里,不同电压域之间通信是家常便饭。MCU可能是1.8V,传感器是3.3V,无线模组又是1.8V。直接连?不行。电平不匹配,轻则信号识别错误,重则烧IO口。
电平转换的方案,我按场景分三类:
| 场景 | 推荐方案 | 优点 | 缺点 |
|---|---|---|---|
| 低速信号(<1MHz) | 分立MOS管电路 | 成本低、功耗极低 | 速率受限 |
| 中速信号(1~10MHz) | 专用电平转换芯片(如TXS0102) | 双向、自动方向 | 静态功耗稍高 |
| 高速信号(>10MHz) | 74LVC系列或电阻分压 | 速率高、信号完整 | 单向、需注意驱动能力 |
我个人最常用的是分立MOS管方案,尤其是I2C和UART这种双向总线。电路很简单:一个N沟道MOS管(比如2N7002)加两个上拉电阻,成本不到一毛钱,静态功耗几乎为零。但要注意,这个电路是开漏的,所以两边都要加上拉电阻到各自的电源。
// 分立MOS管电平转换电路示意(1.8V <-> 3.3V)
// 左侧:1.8V域,右侧:3.3V域
// MOS管栅极接1.8V,源极接左侧数据线,漏极接右侧数据线
// 左侧上拉电阻到1.8V,右侧上拉电阻到3.3V
避坑指南:我曾经在一个项目里用TXS0102做SPI电平转换,结果发现时钟频率一上10MHz,数据就出错。后来查手册才知道,这个芯片的自动方向检测有延迟,不适合高速单向信号。所以,SPI这种高速单向信号,老老实实用74LVC1T45这种专用芯片。
4.4 外部唤醒源电路设计:让系统睡得更安稳
低功耗系统的精髓,就是能睡就睡,醒了赶紧干完活继续睡。但怎么醒?靠什么醒?这就是唤醒源电路的事。
常见的唤醒源有:
- RTC闹钟:定时唤醒,最常用。MCU内部RTC或外部RTC芯片(如DS3231)。
- GPIO边沿触发:按键、传感器中断输出、外部事件。
- 比较器/ADC阈值:模拟量达到某个值唤醒,比如电池电压低于3.0V。
- 无线信号:比如NB-IoT的PSM模式,由基站寻呼唤醒。
设计唤醒电路时,我特别关注唤醒源的功耗。你想想看,如果唤醒源本身就在那耗电,那系统睡得再深也没用。
举个例子,一个电池供电的温湿度采集器,每10分钟醒来一次。如果用外部RTC芯片做唤醒,RTC芯片本身就要消耗几百纳安到几微安。但如果用MCU内部RTC,功耗可以做到1μA以下。所以,能集成就别外挂。
关键设计点:唤醒信号必须干净,不能有毛刺。否则MCU刚睡下就被误唤醒,功耗反而更高。
我处理毛刺的方法:
- 硬件上:在唤醒引脚加一个RC低通滤波,时间常数取1~10ms。
- 软件上:在唤醒中断里加去抖,连续采样几次确认电平稳定再处理。
另外,外部唤醒源的电源域也要注意。如果唤醒源属于一个可断电的域,那系统休眠时这个域断电了,唤醒信号就没了。所以,唤醒源必须放在常电域(VDD_MCU域),或者用电池直供。
我曾经踩过的坑:一个产品用加速度计的中断唤醒MCU,加速度计放在VDD_SENSOR域。结果系统休眠后,VDD_SENSOR断电,加速度计不工作了,中断信号永远出不来。后来我把加速度计的VDD改到常电域,但这样它又一直在耗电。最后解决方案是:用加速度计的低功耗运动检测模式,它自己功耗只有几微安,而且可以工作在1.8V,直接挂在常电域上。
4.5 本章知识结构图
下面这张图,把四个核心模块的关系画出来了。电源树是骨架,去耦电容是血肉,电平转换是桥梁,唤醒源是神经。缺一个,低功耗就做不彻底。
好了,这一章的内容就到这。电源树、去耦电容、电平转换、唤醒源——这四个东西,你只要在原理图阶段就考虑进去,后面调试低功耗会省很多力气。别等到板子打回来,发现待机电流降不下去,再回头改硬件,那成本就高了。