3、电源管理芯片(PMIC)选型:Buck/Boost与LDO的博弈
各位做嵌入式内窥镜的同行,咱们今天聊聊电源管理芯片的选型。说实话,这玩意儿看着不起眼,但选错了,你的电池续航直接打七折。我当年第一个内窥镜项目,就是因为在PMIC上省了几毛钱,结果客户投诉说「看个胃镜还得带充电宝」——那叫一个尴尬。
内窥镜的电源架构,说白了就是个「既要又要」的难题。你想想看,传感器要3.3V,LED驱动要5V,MCU核心要1.2V,而电池电压从4.2V一路掉到3.0V。这中间怎么变?靠的就是PMIC。
3.1 常用PMIC芯片:TPS63020与MAX17260
先聊聊我常用的两款芯片,一个负责功率路径,一个负责电量计量。
TPS63020——这是TI家的Buck-Boost转换器。为什么选它?因为它能在输入电压高于或低于输出电压时自动切换模式。内窥镜的锂电池,满电4.2V,快没电时3.0V,而系统总线通常是3.3V。TPS63020可以在降压和升压之间无缝切换,效率能到96%。
我个人习惯把它用在主电源轨上。记得有一次,我为了省成本换了个便宜的Buck-Boost,结果在电池电压3.4V附近,芯片频繁切换模式,纹波飙到100mV,图像传感器直接花屏。嗯,从那以后我再也不敢在电源上省钱。
| 参数 | TPS63020 | MAX17260 |
|---|---|---|
| 类型 | Buck-Boost转换器 | 电量计(Fuel Gauge) |
| 输入范围 | 1.8V - 5.5V | 2.3V - 4.9V |
| 效率 | 最高96% | 库仑计数精度±1% |
| 主要用途 | 主电源转换 | 电池电量监测 |
MAX17260——这是Maxim(现ADI)的电量计芯片。很多人觉得电量计不就是测个电压吗?大错特错。锂电池的放电曲线不是线性的,3.7V时可能还有80%电量,3.5V时可能只剩20%。MAX17260用的是ModelGauge算法,能学习电池的老化特性。
我曾经在一个项目中,直接用ADC测电池电压来估算电量。结果呢?用户用了三个月后,电量显示还有30%,机器突然关机。用户投诉说「你们这机器跟薛定谔的猫似的,又死又活」。后来换了MAX17260,配合它的m5算法,误差控制在2%以内。
3.2 Buck/Boost转换效率:别被数据手册骗了
数据手册上的效率曲线,都是在理想条件下测的。你实际用起来,效率可能差5-10%。为什么?
- 电感选型:DCR(直流电阻)每增加10mΩ,效率下降约1%。我习惯用DCR小于20mΩ的电感。
- 开关频率:TPS63020默认2.4MHz,但如果你负载很轻(比如待机时只有几mA),可以降低频率到1.2MHz,减少开关损耗。
- PCB布局:功率回路面积越大,辐射损耗越高。我见过有人把电感放在板子边缘,结果效率掉了3%。
在3.3V输出、100mA负载下,TPS63020的实际效率约为93%。但如果输入电压接近输出电压(比如3.6V输入、3.3V输出),效率可以到95%以上。所以,尽量让电池电压工作在转换器的「甜蜜点」附近。
3.3 动态切换DCDC与LDO:省电的关键
内窥镜的工作状态不是一成不变的。拍摄时,图像传感器和LED驱动需要大电流(200-500mA);待机时,只有MCU和蓝牙在跑(几mA)。这时候,你就得动态切换电源方案。
为什么?因为DCDC在轻载时效率会急剧下降。一个典型的Buck转换器,在1mA负载下效率可能只有50-60%,而LDO在同样负载下效率虽然低(取决于压差),但静态功耗可以做到很低。
我的做法是这样的:
- 重载模式(>50mA):使用DCDC(如TPS63020),效率高。
- 轻载模式(<10mA):切换到LDO,比如TPS7A02,静态电流只有25nA。
- 中间地带(10-50mA):根据实际效率曲线决定。我一般会实测两个方案的效率交叉点。
切换过程中要防止电压跌落。我曾经在切换时没做软启动,结果MCU瞬间掉电复位。解决方案是加一个10μF的保持电容,或者用「先开后合」的切换逻辑——先打开LDO,再关闭DCDC,中间有几十微秒的重叠。
具体实现上,可以用一个GPIO控制DCDC的使能脚,另一个GPIO控制LDO的使能脚。MCU根据电流检测结果(比如通过INA219)决定切换时机。
// 伪代码示例:动态切换DCDC与LDO
void power_switch(int load_current_mA) {
if (load_current_mA > 50) {
// 重载:开启DCDC,关闭LDO
GPIO_WriteLow(PIN_DCDC_EN); // 使能DCDC
GPIO_WriteHigh(PIN_LDO_EN); // 关闭LDO
} else if (load_current_mA < 10) {
// 轻载:开启LDO,关闭DCDC
GPIO_WriteHigh(PIN_DCDC_EN); // 关闭DCDC
GPIO_WriteLow(PIN_LDO_EN); // 使能LDO
} else {
// 中间状态:保持当前模式,避免频繁切换
// 可以加一个滞回区间,比如10-20mA保持LDO,40-50mA保持DCDC
}
}
你可能会问:「切换频率多快合适?」我的建议是,不要快于1秒一次。频繁切换会导致输出纹波和EMI问题。我一般用50ms的消抖时间,外加一个状态机防止震荡。
3.4 避坑指南:我踩过的三个坑
最后,分享几个我实际项目中踩过的坑,希望能帮你省点时间。
- 坑一:忽略LDO的压差。我曾经选了个LDO,压差要200mV,结果电池电压降到3.5V时,输出只有3.3V,系统直接掉电。后来换了低压差LDO(如TPS7A02,压差仅60mV@100mA)。
- 坑二:电感饱和电流不够。内窥镜的LED驱动瞬间电流可能到1A,如果电感饱和电流只有800mA,效率会骤降,甚至烧毁。我习惯留30%的余量。
- 坑三:没做电池保护。MAX17260虽然能监测电量,但它不负责保护。你得外加一个电池保护IC(如BQ29700),防止过放和过充。我曾经因为省了这个,电池循环50次就鼓包了。
好了,这一章就聊到这儿。下一章咱们会深入讲讲「低功耗MCU选型与休眠模式设计」,到时候我会分享怎么让STM32U5在待机时功耗降到1μA以下。敬请期待。