4、电源域划分:独立电源域设计、负载开关应用、分区供电与唤醒机制
电源域划分这件事,说白了就是「把不该通电的模块关掉」。我刚开始做售货机项目时,总觉得整机供电最省事,结果电池撑不过三天。后来才明白,一个系统里真正需要一直工作的,可能只有RTC和唤醒检测电路。
你想想看,售货机大部分时间都在待机。用户投币或者扫码之前,主控、屏幕、电机驱动这些模块根本没必要通电。所以电源域划分的核心思路就是:把系统拆成几个独立的供电区域,按需供电。
4.1 独立电源域设计
我习惯把售货机的电源域分成三类:
- 常电域(Always-on Domain):RTC、唤醒检测电路、部分GPIO。这部分功耗必须控制在微安级。
- 待机域(Standby Domain):主控MCU的低功耗模式、通信模块的休眠状态。功耗在毫安级。
- 工作域(Active Domain):屏幕、电机、支付模块、4G模块。功耗可能到安培级。
我在一个项目中遇到过这样的坑:把WiFi模块和RTC放在同一个电源域里。结果WiFi模块工作时,RTC的供电纹波太大,导致时钟跑偏。后来我强制要求:常电域必须独立LDO供电,纹波控制在10mV以内。
关键设计原则:
- 常电域与工作域之间必须加隔离(负载开关或二极管)
- 每个电源域的地要单独走线,最后单点接地
- 域间信号必须加电平转换或限流电阻
4.2 负载开关应用
负载开关这东西,看着简单,用起来门道不少。说白了就是一个MOS管加一个控制逻辑。但我见过太多人把它当普通开关用,结果翻车了。
举个例子,我曾经帮一个团队排查问题:他们的售货机屏幕在唤醒时偶尔闪一下。查了半天,发现是负载开关的启动电流不够。屏幕的电容负载太大,开关一开,电压瞬间被拉低,MCU也跟着复位了。
选型时我建议关注三个参数:
| 参数 | 说明 | 我的经验值 |
|---|---|---|
| 导通电阻(Rds(on)) | 越小越好,但要注意成本 | 小于50mΩ |
| 启动电流限制 | 必须大于负载的浪涌电流 | 2倍额定电流 |
| 关断漏电流 | 常电域必须极低 | 小于1μA |
我的小技巧:在负载开关的输出端加一个100μF的电解电容,可以有效抑制启动时的电压跌落。但注意电容的漏电流不能太大,否则待机功耗会超标。
4.3 分区供电与唤醒机制
分区供电,说白了就是「谁干活谁通电」。我设计过一个方案,把售货机分成四个供电区:
- 区A(常电):RTC + 唤醒检测
- 区B(待机):MCU + 传感器
- 区C(工作):屏幕 + 支付模块
- 区D(大功率):电机 + 制冷
唤醒机制我一般用两种方式:
- 硬件唤醒:通过外部中断(比如投币检测、人体红外)直接唤醒MCU。这种方式延迟最低,我习惯用下降沿触发。
- 定时唤醒:RTC定时唤醒MCU,用于巡检、上报心跳等。我一般设成30秒一次,功耗和实时性平衡得比较好。
这里有个坑:我曾经把唤醒检测电路和MCU放在同一个电源域里。结果MCU休眠时,唤醒电路也跟着断电了。嗯,这显然不行。所以唤醒检测电路必须放在常电域,而且它的输出要能直接唤醒MCU。
注意:唤醒信号必须做去抖处理。我遇到过因为按键抖动导致系统反复唤醒,电池一天就耗光了。硬件上加一个RC滤波,软件上再做个10ms的去抖,基本能解决。
最后说一个我自己的习惯:每个电源域都留一个测试点。调试时用万用表测一下电压,就能快速判断哪个域没正常工作。这个习惯帮我省了不少排查时间。
好了,电源域划分这块,核心就是「该断则断,该通则通」。下一章我们聊聊具体的功耗测量方法,到时候拿实际数据说话。