3、电源树设计:多路电源拓扑、DC-DC与LDO选型、动态电压调节

电源树设计,说白了就是给蓝牙网关的每一颗芯片、每一个模块「喂饭」。喂多了浪费,喂少了罢工。我刚开始做网关项目时,总觉得电源嘛,能亮就行。结果第一次整机功耗测试,待机电流直接飙到 80mA,被老板叫去喝茶。嗯,从那以后我再也不敢随便拉电源了。

蓝牙网关的电源树,核心就三件事:拓扑怎么搭、器件怎么选、电压怎么调。咱们一个一个说。

3.1 多路电源拓扑:先分后合,还是先合后分?

网关的供电来源通常是 5V USB 或者 3.7V 锂电池。但板子上需要 3.3V(主控、蓝牙 SoC)、1.8V(某些传感器、Flash)、1.2V(内核电压)、还有 4.2V 直供 PA(功率放大器)。你想想看,一路输入,四五路输出,拓扑怎么选?

我个人习惯把拓扑分成两种:

  • 级联式:先升/降压到中间电压(比如 3.3V),再用 LDO 二次降压到 1.8V、1.2V。优点是纹波干净,缺点是效率低——每一级都在损耗。
  • 并联式:从电池或 USB 直接分出多路 DC-DC,各自降压到目标电压。效率高,但 PCB 面积大,纹波也难控制。

我在项目中遇到过最头疼的情况:级联式拓扑里,3.3V 那路 DC-DC 效率只有 85%,后面再挂两个 LDO,整机效率直接掉到 70% 以下。后来改成并联式,主路用 DC-DC 给蓝牙 SoC 供电,传感器和 Flash 用 LDO 从电池直降,整机效率提到了 88%。

经验法则:大电流(>200mA)走 DC-DC,小电流(<50mA)走 LDO。中间电流(50-200mA)看纹波要求,射频部分优先 LDO。

下面这张图是我常用的蓝牙网关电源树结构,你可以参考一下:

蓝牙网关电源树拓扑(并联+局部级联) 输入:5V USB / 3.7V 锂电池 DC-DC:3.3V @ 1A 蓝牙 SoC:3.3V LDO:1.8V @ 100mA LDO:1.2V @ 50mA 传感器 / Flash 内核电压域 射频 + 数字核心 说明: • 主路径:5V → DC-DC(3.3V) → 蓝牙 SoC(大电流直供) • 分支路径:DC-DC(3.3V) → LDO(1.8V/1.2V) → 小电流负载(纹波抑制) • 蓝牙 SoC 的射频部分对电源纹波敏感,建议在 SoC 电源入口加 π 型滤波 • 动态电压调节(DVS)只作用于内核电压域(1.2V 那路)

3.2 DC-DC 与 LDO 选型:别只看电压电流

很多工程师选电源芯片,打开选型表,输入电压范围对、输出电流够,就下单了。其实这里坑很多。我挑几个关键点说说。

3.2.1 DC-DC 选型:效率曲线比标称值更重要

DC-DC 的数据手册都会标「效率 95%」。但你仔细看,那个 95% 通常是在中等负载(50%-80% 额定电流)下测的。轻载(1mA-10mA)时,很多 DC-DC 的效率会掉到 60% 甚至更低。

蓝牙网关大部分时间处于待机状态,整机电流可能只有 1-5mA。如果 DC-DC 在轻载下效率低,待机功耗就全砸在电源上了。

选型技巧:优先选带「省电模式」或「PFM/PWM 自动切换」的 DC-DC。轻载时进入 PFM 模式,效率能保持在 80% 以上。我常用的型号有 TI 的 TPS62840、MPS 的 MP2145,轻载效率都不错。

3.2.2 LDO 选型:压差和静态电流是死穴

LDO 看起来简单,但有两个参数容易忽略:

  • 压差(Dropout Voltage):如果输入 3.3V,输出 3.0V,压差只有 0.3V。普通 LDO 可能无法正常工作,必须选低压差 LDO(LDO 本身就是 Low Dropout 的缩写,但有些老型号压差还是很大)。
  • 静态电流(Iq):LDO 自身消耗的电流。有些 LDO 的 Iq 高达 100μA,对于待机电流只有 10μA 的传感器来说,LDO 自己比负载还耗电。

我曾经在一个温湿度传感器节点上用了某款 LDO,Iq 标称 30μA,传感器待机 2μA,结果整机待机 32μA——LDO 吃了 94% 的功耗。后来换成 Iq 只有 1μA 的 TPS7A02,待机直接降到 3μA。

参数 DC-DC LDO
效率 高(80-95%) 低(= Vout/Vin,压差大时效率低)
纹波 大(10-50mVpp) 小(<1mVpp)
静态电流 10-100μA(轻载可低至 1μA) 1-100μA(选超低 Iq 型号)
适用场景 大电流、高效率需求 小电流、低纹波需求
PCB 面积 大(需要电感、电容) 小(仅需输入输出电容)

3.3 动态电压调节:省电的终极大招

动态电压调节(DVS),说白了就是让芯片「看人下菜碟」。干活的时候给足电压,闲着的时候降压。蓝牙 SoC 在发射时可能需要 3.3V,但待机时 2.5V 就能保持 RAM 不掉电。

实现 DVS 有两种方式:

  1. 软件控制:SoC 通过 GPIO 或 I2C 控制 DC-DC 的反馈电阻,切换输出电压。优点是灵活,缺点是切换速度慢(几十微秒)。
  2. 硬件自动:用带 DVS 功能的 PMIC,SoC 通过 VID(电压识别)接口直接发指令。切换速度可以做到几微秒。

我个人更推荐软件控制的方式,成本低,而且蓝牙网关的电压切换频率不高(秒级),几十微秒的延迟完全可以接受。

注意:DVS 不能乱降。蓝牙 SoC 在发射时如果电压不足,会导致 PA 饱和功率下降,通信距离缩短。我曾经在调试时把发射电压从 3.3V 降到 2.8V,结果 RSSI 掉了 6dB,连接距离从 50 米缩到 20 米。所以 DVS 一定要和射频状态机联动,发射前提前升压。

3.3.1 一个简单的 DVS 实现示例

假设你用的 DC-DC 是 RT8059,它的 FB 引脚电压是 0.6V。正常输出 3.3V 时,反馈电阻 R1=100kΩ,R2=22kΩ。要降到 2.5V,只需要在 R1 上并联一个电阻,改变分压比。

// 伪代码:通过 GPIO 控制 DVS
#define DVS_PIN  GPIO_PIN_5

void set_vout_high(void) {
    // 断开并联电阻,输出 3.3V
    HAL_GPIO_WritePin(DVS_PIN, GPIO_PIN_SET);
    // 等待电压稳定(约 50μs)
    delay_us(50);
}

void set_vout_low(void) {
    // 接入并联电阻,输出 2.5V
    HAL_GPIO_WritePin(DVS_PIN, GPIO_PIN_RESET);
    delay_us(50);
}

// 在进入待机前调用
void enter_sleep_mode(void) {
    set_vout_low();
    // 进入深度睡眠
    HAL_PWR_EnterSTOPMode(...);
}

// 在唤醒后、发射前调用
void wakeup_and_tx(void) {
    set_vout_high();
    // 开始发射
    ble_tx_packet(...);
}

实际电路里,并联电阻的阻值需要根据目标电压计算。公式很简单:

Vout = 0.6 × (1 + R1 / R2)

要降到 2.5V,R1 不变(100kΩ),R2 需要变成 31.6kΩ。并联的电阻值就是 22kΩ || 31.6kΩ ≈ 13kΩ。嗯,算起来不复杂,但焊接时一定要确认电阻精度,1% 的误差就够了。

实测效果:在我之前的项目中,加入 DVS 后,蓝牙网关的待机功耗从 12mW 降到了 4.5mW,降幅超过 60%。代价只是多了一个 GPIO 和一颗电阻。这笔账,怎么算都划算。

3.4 电源树设计的避坑清单

最后,我把自己踩过的坑整理成一份清单,你设计时对着检查:

  • 不要共用电源域:射频和数字电路尽量分开供电,否则数字噪声会通过电源耦合到射频,影响灵敏度。
  • 注意上电时序:有些 SoC 要求内核电压先于 IO 电压上电,否则可能锁死。用电源监控芯片或 RC 延时电路保证时序。
  • 滤波电容别省:DC-DC 输出端至少放 10μF+0.1μF,LDO 输出端至少 1μF。位置要靠近芯片引脚,远了效果打折扣。
  • 地线要粗:电源回路的地线阻抗要低,否则纹波会变大。我习惯用整块地平面,不分割。
  • 测试时测纹波:示波器带宽限制 20MHz,探头用短地线夹,直接在芯片引脚上测。别在电源输出端测,那里看到的纹波比实际小。

电源树设计没有标准答案,但有一条原则:每一毫瓦都值得珍惜。蓝牙网关可能一年不换电池,电源树上省下来的每一微安,最终都会变成用户的好评。