4. 电源域划分:如何划分多个电源域,实现选择性供电
电源域划分,说白了就是把芯片内部不同功能模块的供电“切开”。
为什么要这么做?因为车规MCU里,有些模块得一直醒着,比如看门狗、RTC、唤醒逻辑。有些模块呢,大部分时间都在睡觉,比如CAN控制器、主存储器。你让它们一直通着电,那功耗就下不来。
我个人习惯,在设计初期就把电源域分成三类:常电域(Always-On)、可关断域(Switchable)、深度休眠域(Deep-Sleep)。这三类域,供电策略完全不同。
4.1 常电域:永远不能断电的部分
常电域,就是芯片的“生命线”。
我做过一个项目,客户要求MCU在12V电池断开后,还能维持RTC走时30天。那这个RTC模块就必须放在常电域里。常电域一般包含:
- RTC模块:时间基准,断电就丢了。
- 唤醒逻辑:比如CAN唤醒、LIN唤醒、GPIO边沿检测。
- 备份寄存器:存一些关键状态,比如系统故障码。
- 部分IO保持电路:确保休眠时IO电平不突变。
关键点:常电域的供电电压可以很低。很多车规MCU支持1.2V甚至0.9V的常电域电压。电压越低,漏电越小。我见过有人把常电域做到0.8V,RTC照样跑得稳稳的。
4.2 可关断域:按需供电的主力模块
可关断域,是功耗优化的主战场。
你想想看,MCU在正常运行时,CPU、Flash、SRAM、各种外设都开着。但进入休眠后,这些模块完全可以断电。怎么断?用电源开关(Power Switch)。
电源开关有两种常见实现:
- PMOS开关:适合中等电流(几十mA),压降小。
- 电源管理IC(PMIC)配合:适合大电流(几百mA),外部控制。
我在项目中遇到过一个问题:某个外设模块断电后,它的输出引脚还连着其他域的输入。结果漏电电流达到了200μA!后来加了隔离单元(Isolation Cell)才解决。
避坑指南:我曾经因为没加隔离单元,导致休眠电流超标。后来学乖了,每个可关断域的边界,必须加ISO cell。ISO cell在域断电时,输出钳位到固定电平,防止漏电。
4.3 深度休眠域:极致低功耗的秘诀
深度休眠域,是车规MCU的“终极省电模式”。
这个域里,连常电域的大部分电路都关了,只保留最核心的唤醒逻辑。比如:
- 一个极低功耗的定时器:周期唤醒。
- 一个简单的GPIO检测电路:检测外部唤醒信号。
- 备份寄存器:保存唤醒后的状态。
深度休眠域的功耗可以做到多低?我做过的一个项目,深度休眠电流只有1.2μA。秘诀就是:把常电域里所有不用的模块都关掉,只留一个微安级的唤醒定时器。
小技巧:深度休眠域的供电,可以用一个独立的LDO。这个LDO效率不用高,但静态电流必须极低。我习惯用那种静态电流只有几百纳安的LDO。
4.4 电源域划分的实战步骤
说了这么多理论,咱们来点实际的。电源域划分,我一般按以下步骤走:
- 列出所有功能模块:CPU、Flash、SRAM、CAN、LIN、SPI、I2C、ADC、RTC、唤醒逻辑、备份寄存器……
- 分析每个模块的供电需求:哪些必须常电?哪些可以关断?哪些可以深度休眠?
- 分组:把相同供电需求的模块分到同一个域。
- 设计电源开关:每个可关断域配一个PMOS或PMIC通道。
- 加隔离单元:域边界加ISO cell。
- 仿真验证:跑功耗仿真,看每个域的漏电和动态功耗。
举个例子,一个典型的车规MCU电源域划分如下:
| 电源域 | 包含模块 | 供电策略 | 典型功耗 |
|---|---|---|---|
| 常电域 | RTC、唤醒逻辑、备份寄存器 | 始终供电,电压1.0V | ~5μA |
| 可关断域1 | CPU、Flash、SRAM | 休眠时断电 | ~50μA(漏电) |
| 可关断域2 | CAN、LIN、SPI | 休眠时断电 | ~10μA(漏电) |
| 深度休眠域 | 极低功耗定时器、GPIO检测 | 深度休眠时供电 | ~1μA |
4.5 电源域划分的常见误区
嗯,这里要注意几个坑:
- 误区一:域越多越好。不是的。域太多,电源开关和隔离单元会占用大量面积,而且控制逻辑复杂。我一般控制在3-5个域。
- 误区二:所有外设都放可关断域。有些外设,比如看门狗,必须常电。否则系统死机了,看门狗也断电了,谁来复位?
- 误区三:忽略IO保持。域断电后,IO引脚如果没保持,可能会产生毛刺,导致外部电路误动作。一定要加IO保持电路。
核心总结:电源域划分,本质是“用面积换功耗”。你多花一点面积做电源开关和隔离单元,就能换来几个数量级的功耗降低。在车规MCU里,这笔买卖绝对划算。
好了,这一章就讲到这里。下一章咱们聊聊时钟门控,那是另一个降低动态功耗的利器。