3、电源树设计:多级电源架构、动态电压调节(DVS)、电源域划分原则
各位同学,咱们接着聊。上一章讲了加密狗的整体功耗目标,今天要啃的这块骨头,是电源树设计。说白了,就是怎么给加密狗里的各个模块“喂电”,喂得既够用又不浪费。
我刚开始做低功耗设计时,总觉得电源树嘛,不就是LDO加DC-DC,拉几条线就完事了?结果第一次做加密狗原型,电池续航只有标称值的60%。查了三天,发现是电源域没划分好,一个休眠的模块还在偷偷吃电。嗯,从那以后,我对电源树设计就再也不敢马虎了。
3.1 多级电源架构:为什么不能“一电到底”?
加密狗里通常有这几个主要耗电模块:主控MCU、加密芯片、USB接口、蓝牙模块、还有一堆传感器。它们的电压需求各不相同。
举个例子:
- MCU内核:通常需要1.2V或1.8V,电流几十mA
- 加密芯片:有的需要3.3V,有的内部还有DCDC
- USB接口:5V供电,但需要过压保护
- 蓝牙模块:1.8V或3.3V,发射时电流大
如果只用一级电源,比如直接从电池3.7V降到1.2V,压差2.5V,效率会非常低。我算过一笔账:用LDO从3.7V降到1.2V,效率只有32%,剩下68%的能量全变成热量了。加密狗那么小一个壳子,散热根本扛不住。
所以,多级电源架构是必须的。我个人习惯这样分:
- 第一级:电池到中间总线(3.7V → 3.3V)—— 用高效率DC-DC,效率能做到90%以上
- 第二级:中间总线到各模块(3.3V → 1.2V/1.8V)—— 对噪声敏感的用LDO,对效率敏感的用DC-DC
你想想看,两级转换虽然多了个环节,但每一级压差都小了,整体效率反而更高。我做过一个对比测试:单级LDO方案整体效率只有35%,两级DC-DC+LDO方案能做到78%。差距就是这么明显。
核心原则:大压差用DC-DC,小压差用LDO。噪声敏感电路(如加密芯片的模拟部分)必须用LDO,数字电路可以用DC-DC。
3.2 动态电压调节(DVS):让电压跟着负载跑
动态电压调节,说白了就是“看人下菜碟”。加密狗在工作时,不同任务的负载差异很大:
- 待机状态:电流只有几μA,电压可以降到最低
- USB通信:电流几十mA,需要标准电压
- 加密运算:电流上百mA,需要最高性能
我做过一个项目,加密狗在待机时MCU内核电压从1.2V降到0.9V,功耗直接降了40%。为什么?因为动态功耗和电压的平方成正比。电压降一点,功耗降一大截。
实现DVS,通常有两种方式:
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 软件控制DVS | 灵活,可调范围大 | 响应慢,需要MCU参与 | 任务切换不频繁的场景 |
| 硬件自动DVS | 响应快,μs级切换 | 电路复杂,成本高 | 实时性要求高的场景 |
我个人建议,加密狗这种产品用软件控制DVS就够了。因为加密运算通常持续几十ms,MCU完全来得及在运算开始前把电压调上去,运算结束后再降下来。
小技巧:DVS切换时要注意电压爬升速率。太快了可能引起电源过冲,太慢了影响响应速度。我一般控制在10μs/V左右,既稳定又够快。
3.3 电源域划分原则:别让“漏电”毁了你的续航
电源域划分,是低功耗设计里最容易踩坑的地方。我曾经犯过一个错误:把蓝牙模块和加密芯片放在同一个电源域里。结果蓝牙休眠时,加密芯片的漏电流通过共用的电源轨流到了蓝牙模块,导致蓝牙模块无法完全断电。
后来我总结了几条电源域划分的原则:
- 按功能模块划分:每个独立功能模块一个域,比如MCU域、加密域、蓝牙域、USB域
- 按工作状态划分:常开域(如RTC)、间歇工作域(如加密运算)、休眠域(如蓝牙待机)
- 按电压等级划分:不同电压的模块必须分属不同域
举个例子,一个典型的加密狗电源域划分:
电源域划分示意:
┌─────────────────────────────────────┐
│ 常开域 (Always-On) │
│ - RTC时钟 │
│ - 唤醒逻辑 │
│ - 电源管理PMU │
│ 电压:1.2V / 电流:< 1μA │
├─────────────────────────────────────┤
│ 主控域 (MCU Domain) │
│ - MCU内核 │
│ - 内部SRAM │
│ 电压:0.9V~1.2V (DVS) │
│ 电流:待机1μA / 工作10mA │
├─────────────────────────────────────┤
│ 加密域 (Crypto Domain) │
│ - 加密芯片 │
│ - 密钥存储 │
│ 电压:1.8V │
│ 电流:待机0.1μA / 工作50mA │
├─────────────────────────────────────┤
│ 通信域 (Comm Domain) │
│ - 蓝牙模块 │
│ - USB PHY │
│ 电压:3.3V │
│ 电流:休眠1μA / 发射100mA │
└─────────────────────────────────────┘
每个域之间用电源开关(Power Switch)隔开。我推荐使用集成式的负载开关,比如TI的TPS22918,导通电阻只有几十mΩ,关断时漏电流小于1μA。
注意:电源域切换时,一定要处理好“上电顺序”。比如加密域必须在主控域稳定之后才能上电,否则可能引起逻辑混乱。我一般用PMU的GPIO来控制使能引脚,配合延时电路,确保顺序正确。
3.4 实战中的几个坑
最后,分享几个我在项目中踩过的坑,希望能帮大家少走弯路:
- 坑一:电源域之间的电平转换 —— 不同电压的域之间通信,必须加电平转换芯片。我试过用电阻分压,结果信号质量一塌糊涂。
- 坑二:去耦电容的布局 —— 每个电源域入口必须放10μF+0.1μF的去耦电容,而且要靠近芯片引脚。我曾经把电容放远了,结果高频噪声直接耦合到模拟电路里。
- 坑三:休眠时的漏电路径 —— 检查所有IO口,确保休眠时没有电流倒灌。我吃过一次亏,一个GPIO没配置成高阻,结果休眠时漏了5μA,电池续航少了20%。
好了,这一章的内容就到这里。电源树设计是低功耗的基石,多级架构、DVS、电源域划分,这三板斧用好了,你的加密狗续航至少能翻一倍。下一章我们聊聊PCB布局中的低功耗技巧,到时候见。