
在嵌入式开发里有一个很常见的现象MCU 选型、外设驱动、通信协议都研究得很透最后板子一上电不是复位重启就是 ADC 采集值跳来跳去甚至芯片发烫烧毁。查来查去问题大多出在电源部分。电源模块设计就像是系统的地基地基没打好上层跑得再花哨也是白搭。这篇文章围绕电源模块设计中最核心的四个主题展开Buck 降压电路、LDO 低压差线性稳压器、USB PD 协议、锂电池充放电管理。这四块内容并不是彼此孤立的在一个典型的便携式或电池供电设备中它们会构成一套完整的电源链路电池或适配器输入经过保护与路径管理再通过 Buck 或 LDO 降压到各个电压域配合 USB PD 协商充电电压最终完成一套可用、可靠、可量产的电源方案。2026 Make Blocks 第 5 期的主题之所以选“电源模块设计”核心原因是电源设计是嵌入式硬件开发中门槛最低、但坑最多的一类工作。说它门槛低是因为拓扑和公式一共就那么几个说它坑多是因为寄生参数、PCB 布局、器件选型、环路稳定性每一个环节都可能让原理图看起来正确的东西在实际板上“翻车”。读完这篇文章你能得到三个层面的收获第一搞懂 Buck、LDO、USB PD、锂电管理的核心原理和适用场景搞清楚“为什么修改占空比就能改变输出电压”这类基础但关键的问题第二获得一套可以直接复用的设计流程和关键参数估算方法包括电感选型、输出电容计算、LDO 功耗判断、USB PD 协商流程、锂电池充电截止条件第三拿到一份常见问题排查清单以后板子电源有问题知道从什么地方入手查。1. 这篇文章真正要解决的问题很多初学者刚接触电源设计时第一反应是Buck 不就是几个开关管加电感电容吗LDO 不就是输入输出各加一个电容吗USB PD 不就是两根 CC 线吗锂电池管理不就是充电芯片加保护板吗这套“四连问”听起来简单但真正做起来几乎每一个环节都有隐藏的坑。举几个真实的场景用 LDO 把 12V 降到 3.3V 给 MCU 供电负载电流 100mA结果 LDO 烫得不敢摸。这是典型的线性稳压器功耗问题P (12 - 3.3) × 0.1 0.87W对于 SOT-23 封装的 LDO这个功耗已经远超热阻允许范围。设计了一个 Buck 电路原理图完全参照芯片手册但输出纹波特别大甚至带载后电压跌落。问题往往不在反馈电阻而在电感选型或输出电容的 ESR 上。做 USB PD 快充结果设备死活不发 Accept 消息调试了半天发现是 CC 引脚的上拉电阻阻值不对或者没有正确处理 Rp/Rd 的状态机。锂电池供电的设备低压报警一直不准甚至电池过放损坏。原因可能是没有理解锂电池的充放电曲线不是线性的用简单的 ADC 采电压查表做电量显示误差极大。这篇文章要解决的问题就是把上面这些“看起来简单、做起来踩坑”的点逐个拆开讲透。给读者一条清晰的路径理解拓扑 → 掌握关键参数 → 完成选型 → 画原理图 → 调试验证 → 处理问题。适合阅读这篇文章的读者包括正在做毕业设计的电子类专业学生、从纯软件转向嵌入式硬件开发的工程师、已经会画 PCB 但缺少电源设计系统知识的硬件工程师、以及需要审核硬件方案的嵌入式项目负责人。2. 四种电源技术的基础概念与核心原理在深入电路设计之前先把这四个概念理清楚。它们之间不是替代关系而是互补关系在一个完整的系统中各司其职。2.1 Buck开关型降压变换器Buck 电路也叫降压斩波电路是一种开关电源拓扑。它的基本原理是通过控制功率开关管的导通和关断把一个较高的直流输入电压转换成较低且稳定的直流输出电压。Buck 电路的核心器件包括开关管MOSFET、续流二极管或同步整流 MOSFET、电感和输出电容。它的核心工作原理可以这样理解开关管以固定频率导通和关断在导通期间输入电源给电感充电并给负载供电电感电流上升在关断期间电感通过续流二极管继续向负载供电电感电流下降。通过控制导通时间和关断时间的比例即占空比 D就可以控制输出电压。这里需要回答一个热搜词里的经典问题为什么修改占空比就可以改变输出电压对于一个工作在连续导通模式的 Buck 电路输出电压与输入电压的关系近似为Vout D × Vin其中 D 是占空比等于开通时间 Ton 除以开关周期 T。所以当输入电压固定时占空比越高输出电压就越高。这个关系式虽然在真实电路中会因为二极管压降、开关管导通压降、寄生电阻等因素有一定的偏差但作为一阶近似已经足够帮助理解 Buck 降压的本质。Buck 电路的最大优势是效率高尤其是在输入输出电压差较大的场景下。因为开关管工作在饱和导通和完全关断两种状态导通时管压降小关断时漏电流小所以损耗远小于线性稳压器。典型 Buck 电路效率能做到 85% 到 95% 以上。选择 Buck 的典型场景是输入电压较高输出电压较低且负载电流较大比如 12V 转 5V、5V 转 3.3V 或 1.2V。2.2 LDO低压差线性稳压器LDO 的全称是 Low Dropout Voltage Regulator低压差线性稳压器。它本质上是利用工作在线性区的功率管作为可调电阻通过负反馈环路调整管子的导通程度使得输出电压保持恒定。LDO 的输入输出关系更简单Vout Vin - Vdrop其中 Vdrop 是 LDO 的压差即输入电压必须大于输出电压加上最小压差LDO 才能正常工作。例如一个 3.3V 输出的 LDO如果最小压差是 300mV那么输入至少要达到 3.6V。LDO 和 Buck 的本质区别在于LDO 是线性调节输入输出之间的电压差全部转化为热量消耗掉Buck 是开关式调节通过电感储能实现电压转换功率损耗小得多。LDO 的功耗计算公式为P (Vin - Vout) × Iout这个公式非常重要。它意味着输入输出电压差越大负载电流越大LDO 的自身发热就越严重。在实际设计中如果计算出来的功耗超过 LDO 封装允许的散热能力就必须考虑 Buck 方案。选择 LDO 的典型场景是输入输出电压差小、负载电流小、对输出纹波和噪声要求高的场景。比如 Buck 输出 3.3V再经过 LDO 降到 1.8V 给模拟电路供电这是一种很常见的电源级联设计方式。2.3 USB PDUSB 供电协议USB PDPower Delivery是建立在 USB Type-C 接口之上的快充协议。它的核心功能是让设备之间通过 CC 引脚协商电压和电流从而实现比传统 USB 5V/500mA 高得多的功率传输。USB PD 协议的好处在于不再像传统 USB 那样固定 5V 输出而是可以在 5V、9V、15V、20V 等不同的电压档位间协商最新的 PD 3.1 协议还支持最高 48V 的扩展电压范围。同时PD 协议的双向性允许设备既可以做供电方Source也可以做受电方Sink甚至可以动态切换角色。从硬件角度看USB PD 需要处理两件事一是物理层的 CC 引脚检测和上拉/下拉电阻配置二是协议层的“配置请求-接受-切换”握手过程。对嵌入式开发者来说通常会选择一个支持 USB PD 协议的协议芯片或 PD 控制器例如常见的 PD Sink 控制器MCU 通过 I2C 接口与 PD 控制器通信协商出合适的电压后再去配置后级 Buck 电路的目标输出电压。在电源模块设计中USB PD 的定位是输入端口的“能量协商”环节目的是告诉供电端“我期望收到的是 12V/2A 还是 20V/5A。”协商完成之后真正的降压工作由 Buck 或 LDO 来做。2.4 锂电管理充放电与保护锂电池管理是便携式设备电源设计中最容易被低估的部分。很多人以为锂电池管理就是“充电芯片 保护板”但这只是最基础的串联方案。真正的锂电池管理至少包含四层充电管理、放电保护、电量计量、安全监控。充电管理负责控制锂电池的充电过程。以单节 4.2V 锂离子电池为例标准充电流程是预充电 → 恒流充电 → 恒压充电 → 截止充电。先以小电流预充适合深度放电的电池然后以设定恒流电流充电电池电压到达 4.2V 后转入恒压充电充电电流逐渐下降当降至截止电流通常为 0.1C 或 0.05C时停止充电。放电保护的核心是防止过放、过流和短路。锂电池过放会导致内阻增大、容量衰减甚至永久损坏。保护电路通常用专用锂电池保护 IC 实现串联 MOSFET 在异常条件下切断放电回路。电量计量比想象中复杂。锂电池的放电曲线并不是线性的4.2V 到 3.7V 之间占了大部分容量但从 3.7V 到 3.0V 快速下降。如果只是简单地测量电压然后线性映射到电量百分比结果会非常不准确。工程上常用库仑计芯片做电量计量通过积分充放电电流获得更准确的电量信息。3. 核心原理深挖同步 Buck 与异步 BuckLDO 关键参数PD 角色模型锂电保护3.1 同步 Buck 与异步 Buck 的区别从热搜词可见“同步 Buck”和“异步 Buck”是很多人的知识盲区。两者最本质的区别在于下管用的是 MOSFET 还是二极管。异步 Buck 的方案是上管用 MOSFET下管用肖特基二极管。上管导通时电感储能并给负载供电上管关断时电感电流通过二极管续流。二极管导通时存在正向压降通常为 0.3V 到 0.5V这个压降会产生持续通态损耗。虽然肖特基二极管压降比普通二极管低但在大电流场景下这部分损耗仍然相当可观。同步 Buck 的方案是上管和下管都用 MOSFET下管也参与开关控制。因为 MOSFET 导通电阻可以做得很低例如几十毫欧甚至更低所以相比二极管续流通态损耗显著降低。但代价是下管需要一个互补驱动信号控制逻辑更复杂而且必须加入死区时间防止上下管直通短路。在实际选型中低功率 Buck输出电流 1A 以下两者都可以做异步 Buck 结构简单、成本低但效率会差一点中等功率和低压大电流场景如内核供电 1.2V/3A同步 Buck 是绝对主流。几乎目前主流厂商的 Buck 芯片例如 TI、MPS、Silergy 等同步整流方案占据了绝大多数。对初学者来说理解异步 Buck 有助于理解“续流”这个核心概念理解同步 Buck 则有助于理解“为什么开关电源效率能到 95% 以上”。两者在电源设计入门阶段都属于必须掌握的内容。3.2 LDO 的关键参数LDO 选型时除了输出电压和输出电流还有三个参数容易被忽略。第一个是压差电压即 VDO。它决定了输入电压的最低边界。如果输入电压低于 Vout VDOLDO 就会失去稳压能力输出会随输入变化或出现 dropout 状态。第二个是静态电流和地电流。LDO 自身工作也需要消耗电流静态电流越小待机功耗就越低。对于电池供电设备静态电流直接关系到待机时间所以低功耗 LDO 的静态电流常常做到微安级别。第三个是电源抑制比 PSRR。它表示 LDO 对输入电压纹波的抑制能力单位是 dB。当 LDO 被用作敏感模拟电路供电时PSRR 很关键。在高频段PSRR 会逐渐下降这时 PCB 布局和去耦电容就变得尤为重要。此外还要注意 LDO 的稳定性和输出电容等效串联电阻。部分 LDO 对输出电容的 ESR 有要求ESR 过大会影响环路稳定导致输出振荡。这也是为什么 LDO 数据手册里通常会给出输出电容的推荐容值和 ESR 范围。3.3 USB PD 的角色模型与协商流程USB PD 协议定义了几种角色Source供电方、Sink受电方、DRP双角色端口。对消费电子产品来说充电器通常是 Source设备通常是 Sink。但像笔记本这种既能充电又能对外供电的设备就要支持双角色切换。USB PD 协商过程并不是“插上就供电”而是包含一系列消息交互Source 首先在 CC 引脚上检测 Sink 的存在通过检测 Rd 下拉电阻来判断连接。Source 会周期性发送 SourceCapabilities 消息广播自己支持的电压电流组合。Sink 收到消息后从中选择一组符合自己需求的电压电流发送 Request 消息。Source 收到 Request 后如果可以满足就回应 Accept如果不满足回应 Reject 或 Wait。双方进入电压切换阶段切换完成后Source 发送 PS_Ready 消息表示新的电压档位已经生效Sink 可以开始拉载电流。这个过程如果用普通 MCU 自己实现三部分CC 检测、消息封装、状态机管理工作量不小。所以更常见的做法是选用专用 USB PD 控制器芯片。嵌入式开发者需要做的事情是通过 I2C 或 UART 读取芯片的事件并根据事件去配置后级电源电路。3.4 锂电保护的三个关键环节锂电池保护是安全设计的关键。常见的保护方案是三合一保护 IC过充电保护电压超过上限切断充电通路、过放电保护电压低于下限切断放电通路、过电流/短路保护电流异常增大立即切断通路。从原理图层面看保护 IC 通过监测电池电压和检测电阻两端的压降来判断状态控制外部的两个背靠背 MOSFET 开关。这两个 MOSFET 一个串联在充电回路一个串联在放电回路分别由保护 IC 的 COCharge Over和 DODischarge Over引脚控制。一个容易忽略的细节是过放保护触发后电池电压会回升。这是锂电池的“回弹”特性。所以在设计充电管理时必须确保充电管理芯片能够对“深度放电后回弹”的电池先进行预充电再进入恒流充电。如果没有预充电流程遇到深度过放的电池直接大电流充电会有安全风险。4. 系统设计与链路规划拿到一个电源需求怎么拆解在实际项目中电源设计很少是单打独斗而是多个电源转换器组成的树状结构。以一个典型的便携式 CO2 传感器数据采集器为例系统的供电需求如下主控 MCU3.3V最大电流 200mA传感器加热模块3.7V 或 5V需要低纹波电源无线通信模块3.3V通信峰值电流可达 1.5A显示屏背光5V 或 12V需要恒压电源电池单节锂离子电池3.0V 到 4.2V面对这个需求合理的电源树设计是电池直接作为主电源通过两个 Buck 电路分别输出 5V 和 3.3V其中 3.3V 再通过 LDO 细化出 1.8V 给模拟电路。在这里选择 Buck 而不是 LDO 的理由非常明显电池电压在 3.0V 到 4.2V 之间变化如果用 LDO 做 3.3V在电池电压降到 3.6V 以下时就会进入 dropout系统无法正常工作。而 Buck 可以实现降压和升压兼备的 Buck-Boost 拓扑或者在电池电压允许范围内直接 Buck 输出就稳定得多。如果有 5V 适配器输入并且希望支持 USB PD 快速充电那么电源链路会变成适配器 → USB PD 协商模块 → 电压可调 Buck充电管理 → 锂电池 → 系统负载。这个链路的难点在于USB PD 协商出来的电压是不固定的充电管理需要能够工作在宽范围输入下。另一个需要提前做好的决策是“地的分离与汇合”问题。电源设计中的地不能简单地“连起来就行”。在 PCB 布局中功率地、模拟地、数字地、信号地需要合理分割并在单点汇合。否则高频开关电流会在地回路上形成电压差通过 ADC 参考地引入噪声导致数据采集漂移。从系统设计的角度电源设计的第一步不是选芯片而是画出完整的电源树标注每一路负载的电压、最大电流、纹波要求、噪声敏感度、上电时序要求。电源树画清楚了后面的芯片选型才有依据。5. 实操入门典型升降压电路设计与关键参数计算这里选择一个非常实用的场景宽压输入 5V~20V兼容 USB PD 常见档位输出 3.3V/1.5A给 MCU 与传感器供电。这是 USB PD 设备内部典型的“协商电压后再降压”的应用模式。为了覆盖 USB PD 协商出的 5V、9V、12V、15V、20V 各种输入电压同时又要保持 3.3V 稳定输出需要 Buck-Boost 拓扑或者在输入电压永远高于输出的条件下使用 Buck 拓扑。这里做两种方案的权衡如果输入端只有 USB 5V显然只需要 Buck 拓扑即可因为 5V 3.3V。如果期望兼容 15V、20V 输入而不想引入非隔离 Buck-Boost 的复杂度也可以先用一颗耐压 28V 的 Buck 直接降压Buck 的输入范围覆盖 5V 到 20V 即可。只有当输入电压可能低于输出电压时如电池供电的 3.0V~4.2V才必须用 Buck-Boost。5.1 电感选型计算以 Buck 拓扑为例电感是整个电路中最关键的储能元件。确定电感值的核心公式如下对于一个连续导通模式 Buck电感纹波电流通常取最大输出电流的 20% 到 40%。设定输出电流 Iout 1.5A选取纹波系数 r 0.3则纹波电流 ΔIL 0.45A。开关频率取 fsw 500kHz输入电压取最坏情况 Vin_max 20V输出电压 Vout 3.3V。电感值 L 的计算公式为L (Vin_max - Vout) × Vout / (ΔIL × fsw × Vin_max)代入数值L (20 - 3.3) × 3.3 / (0.45 × 500000 × 20) ≈ 1.22 μH所以电感取标称值 1.5μH 或 2.2μH 都可以实际选型时需要校核电感的饱和电流是否大于最大输出电流加上纹波电流的一半即大于 1.5 0.225 ≈ 1.73A一般预留 1.5 倍以上裕量选饱和电流 3A 以上的电感。5.2 输出电容选型计算输出电容的作用是稳定输出电压并抑制开关纹波。输出纹波主要由两部分组成电容充放电引起的电压波动以及电容 ESR 引起的电压波动。先算电容充放电纹波。Buck 输出纹波的近似公式为ΔVout ≈ ΔIL / (8 × fsw × Cout)如果要求纹波小于 20mV则Cout ≈ ΔIL / (8 × fsw × ΔVout) 0.45 / (8 × 500000 × 0.02) ≈ 5.6 μF再算 ESR 纹波ΔV_ESR ΔIL × ESR要控制 20mV 以内ESR 要小于 44mΩ。所以在选型时要尽量选 X5R/X7R 陶瓷电容且容量取 10μF 或 22μFESR 通常已经很小。实际设计中常在输出端并联 2 到 3 个不同容值的陶瓷电容例如 22μF 10μF 0.1μF以覆盖中低频和高频噪声。5.3 反馈电阻分压计算大多数 Buck 芯片都有一个反馈参考电压 Vref。输出电压通过反馈电阻分压后送入芯片 FB 引脚芯片内部误差放大器保证 FB 电压等于 Vref。典型电路结构输出电压通过 Rtop 和 Rbot 分压FB 引脚接在中间。分压关系为Vout Vref × (1 Rtop / Rbot)假设芯片 Vref 0.8V目标 Vout 3.3V先选 Rbot 10kΩ则Rtop / Rbot (Vout / Vref) - 1 (3.3 / 0.8) - 1 3.125所以 Rtop 31.25kΩ取标称值 31.6kΩ。这里需要注意反馈电阻使用 1% 精度电阻否则输出电压精度会受影响。5.4 完整的最小电路实现示例下面给出一个简化的 Buck 电路参考设计。注意实际量产时请参照所选芯片数据手册的推荐布局和参数。输入USB PD 适配器5V~20V或 DC 电源 输出3.3V / 1.5A 芯片型号示例TPS54302 或 MP1584本文不绑定特定芯片逻辑通用 电路结构 Vin ---- L 1.5μH ------- Vout | / | Cin10μF Buck芯片SW引脚 ---- Cout 22μF 10μF | \ | GND 续流路径 GND FB分压电阻 Vout -- Rtop 31.6kΩ -- FB节点 -- Rbot 10kΩ -- GND占空比在连续导通模式下约为 D Vout / Vin。当 Vin 12V 时D 3.3 / 12 0.275当 Vin 5V 时D 0.66。所以修改占空比可以改变输出电压本质上就是通过反馈环路自动调整占空比让 Vout 稳定在目标值。5.5 Python 辅助计算电感与电容在实际工程中手动计算太慢用脚本可以快速批量计算多种候选参数。下面给出一段简单的 Python 代码用于计算 Buck 电感最小值、输出电容量和反馈电阻可直接复制运行验证。# 文件路径buck_calc.py # 功能Buck 电路基础参数估算 # 用法python3 buck_calc.py def calc_inductor(vin_max, vout, iout, ripple_ratio, fsw): 计算 Buck 电感最小值 vin_max: 最大输入电压 V vout: 输出电压 V iout: 最大输出电流 A ripple_ratio: 纹波电流系数一般取 0.2~0.4 fsw: 开关频率 Hz delta_i iout * ripple_ratio l_min (vin_max - vout) * vout / (delta_i * fsw * vin_max) return l_min, delta_i def calc_output_cap(delta_i, fsw, vout_ripple): 计算 Buck 输出电容量 uF delta_i: 电感纹波电流 A fsw: 开关频率 Hz vout_ripple: 输出电压纹波要求 V c_min delta_i / (8 * fsw * vout_ripple) return c_min * 1e6 # 转为 uF def calc_fb_resistor(vout, vref, rbot10_000): 计算反馈分压电阻 vout: 输出电压 V vref: 芯片参考电压 V rbot: 下电阻阻值 Ω rtop (vout / vref - 1) * rbot return rbot, rtop if __name__ __main__: # 场景5~20V 输入3.3V/1.5A 输出500kHz纹波系数 0.3 l_min, delta_i calc_inductor( vin_max20, vout3.3, iout1.5, ripple_ratio0.3, fsw500_000 ) c_uf calc_output_cap(delta_i, fsw500_000, vout_ripple0.02) rbot, rtop calc_fb_resistor(vout3.3, vref0.8, rbot10_000) print(f电感最小取值: {l_min * 1e6:.2f} uH) print(f电感纹波电流: {delta_i:.3f} A) print(f输出电容最小值: {c_uf:.2f} uF) print(f反馈下电阻: {rbot/1000:.1f} kΩ) print(f反馈上电阻: {rtop/1000:.2f} kΩ)运行结果如下电感最小取值: 1.23 uH 电感纹波电流: 0.450 A 输出电容最小值: 5.63 uF 反馈下电阻: 10.0 kΩ 反馈上电阻: 31.25 kΩ需要说明的是这段脚本是工程估算用于帮助理解参数之间的关系不能替代芯片手册中的详细设计公式。实际选型时还要参考芯片手册给出的最小输入电容、输出电容 ESR 范围、环路补偿网络计算等。6. 实操入门USB PD 协商与锂电池充电管理6.1 USB PD 协商的典型代码框架PD 协商的完整协议栈非常复杂但工程上我们用现成的 PD Sink 控制器芯片例如支持 PD3.1 的 Sink Controller通过 I2C 读取事件和电压能力再发送请求MCU 的工作量小得多。下面给出一个伪代码级的框架展示控制流程实际寄存器地址以芯片手册为准。// 文件路径pd_sink_example.c // 功能USB PD Sink 电压协商控制流程示例 // 说明实际使用时请根据芯片型号替换寄存器与 API #include stdint.h #include stdio.h // 假设 I2C 读写函数 uint8_t i2c_read_reg(uint8_t dev_addr, uint8_t reg); void i2c_write_reg(uint8_t dev_addr, uint8_t reg, uint8_t val); // 事件类型 #define PD_EVENT_SOURCE_CAP 0x01 #define PD_EVENT_REQUEST_OK 0x02 #define PD_EVENT_PS_READY 0x03 // 电压档位编号通常在 SourceCapabilities 中从 1 开始编号 #define PDO_5V 1 #define PDO_9V 2 #define PDO_12V 3 #define PDO_20V 4 static uint32_t pd_target_millivolt 0; // 解析 SourceCapabilities选择目标电压 // 典型策略选一个高于后级 Buck 最低输入电压且功率足够的档位 uint16_t pd_parse_source_cap(uint8_t pdo_count) { for (uint8_t i 1; i pdo_count; i) { uint16_t mv i2c_read_reg(0x51, 0x10 i * 2) | (i2c_read_reg(0x51, 0x11 i * 2) 8); // 假设我们期望 12V if (mv 12000) { return i; } } return PDO_5V; // 保底用 5V } void pd_task(void) { uint8_t event i2c_read_reg(0x51, 0x00); if (event 0) { return; } switch (event) { case PD_EVENT_SOURCE_CAP: { uint8_t pdo_count i2c_read_reg(0x51, 0x01); uint16_t pdo_index pd_parse_source_cap(pdo_count); // 请求目标档位 i2c_write_reg(0x51, 0x02, (uint8_t)pdo_index); break; } case PD_EVENT_PS_READY: { pd_target_millivolt 12000; // 协商完成后级 Buck 可开始工作 // 通知电源管理模块调整输出电压 break; } default: break; } }这段代码的核心逻辑是检测到 SourceCapabilities 事件后解析电压档选择最合适的电压发出请求等到 PS_Ready 后就表示电压已经切换完成。实际项目中还需要加入“接收 RDO 中的电流上限信息”“处理软复位”“超时重试”等逻辑但主干流程与上面一致。6.2 锂电池充电电压与电流的设计要点以单节 4.2V 锂离子电池、容量 2000mAh、充电电流 1A0.5C为例。充电过程通常分为四个阶段。第一阶段是预充电。当电池电压低于 3.0V 时说明电池可能处于深度放电状态此时应使用小电流例如 0.1C 即 200mA给电池充电直到电压升到 3.0V。第二阶段是恒流充电。电池电压保持在约 3.0V 到 4.2V 之间时以设定的恒流电流 1A 充电。这个阶段充入的电量约占电池总容量的 70% 到 80%。由于在恒流阶段电池内部极化电压存在电池端电压会逐渐升高。第三阶段是恒压充电。电池电压到达 4.2V 后充电管理芯片转入恒压模式保持 4.2V 电压不变电流逐渐下降。这个阶段通常要持续约 1 到 2 小时。第四阶段是截止。当充电电流下降到截止电流通常设定为 0.1C 或 0.05C即 200mA 或 100mA充电芯片停止充电。这里有一个新手容易搞錯的点恒压阶段不是“电压一到 4.2V 就立刻拔掉”而是要让电流自然下降到截止值。如果提前结束恒压充电电池并没有“充满”实际可用容量会显著低于标称容量。所以设计充电方案时浮空电压精度和截止电流精度都很重要。6.3 锂电池电量显示与 ADC 采样的坑电量显示是锂电池管理中最容易出“看起来正常但实际不准确”的部分。常见做法是用 ADC 采集电池电压然后根据电压范围线性映射到电量百分比。但锂离子电池的放电曲线并非直线而是呈 S 形4.2V 到 3.8V大约占 50% 的容量3.8V 到 3.6V大约占 30% 的容量3.6V 到 3.0V只占约 20% 的容量3.0V 以下属于过放危险区这导致用线性映射得到的电量百分比严重失真。比如 3.7V 时线性映射可能显示还剩 60%实际电量可能只剩 30%。解决办法主要有两种。一种是分段线性查表法将放电曲线分成几段每段分别用不同斜率的线性函数近似精度远优于单段线性映射。第二种是使用库仑计芯片通过内部 ADC 实时采集充放电电流并积分得到更准确的剩余电量。准确电量的意义不光是显示好看更重要的是防止“电压瞬间跌落导致设备突然关机”。当电池接近放电末期如果负载有一个瞬间大电流电池电压会迅速跌落触发欠压保护设备异常关机。库仑计可以从容量的角度预留裕量在真正触底之前提醒系统进入低功耗模式。6.4 充电管理参考电路结构一个典型的单节锂电池充电管理电路可以选用充电管理芯片结构如下输入电源USB 5V 或 PD 协商 9V/12V │ VBUS 输入滤波电容 │ 充电管理芯片如 TP4056 或 BQ25601逻辑同理 │ BAT 引脚 ── 锂电池正极 │ 电池保护 IC 两颗背靠背 MOSFET │ BAT 引脚 ── 系统负载经 Buck/LDO 后供电需要特别注意充电输入电压的范围。如果输入是 5V USB4.2V 电池的充电系统用线性充电芯片可以接受但输入输出压差和充电电流导致的 LDO 式损耗会非常大。例如 5V 输入、4.2V 电池、1A 充电电流线性充电芯片的功耗约为 (5 - 4.2) × 1 0.8W充电芯片会严重发热。所以当输入来自 USB PD 高电压档位时必须使用开关式降压充电管理芯片才能兼顾效率和发热。7. 常见问题与排查思路电源模块一旦出问题最忌讳“盲目换器件”。下面按问题现象整理了一份排查清单基本上涵盖了入门阶段最常见的坑。问题现象可能原因排查方式解决方案板子上电后 Buck 芯片发烫电感饱和、开关频率不正确、PCB 散热不良用热成像或红外测温查看电感是否有啸叫示波器测 SW 波形更换饱和电流更大的电感检查开关频率设置电阻优化铺铜散热Buck 输出纹波过大输出电容 ESR 太大或容值不足、布局环路太大示波器探头使用短地线测试检查 SW 节点波形和输出纹波增加陶瓷电容降低 ESR改善 PCB 布局让输入输出电容尽量靠近芯片引脚输出电压不准反馈电阻精度不够、反馈走线受干扰用万用表量 Vref确认反馈分压电阻阻值使用 1% 精度电阻反馈走线远离电感避免从大电流路径取反馈点LDO 发烫Vin-Vout 压差过大或负载电流超出预期计算 P(Vin-Vout)×Iout对比封装热阻改用 Buck或降低输入电压或降低负载电流LDO 输出振荡输出电容 ESR 不在芯片要求范围内查看芯片数据手册中稳定性区域图换用 ESR 合适的多层陶瓷电容USB PD 协商不成功CC 上拉/下拉电阻错误、PD 控制器固件状态异常用逻辑分析仪抓取 CC 总线上的 BMC 信号查看 PD 控制器的中断寄存器检查 Rp/Rd 阻值配置更换 PD 芯片升级固件电池充不满充电截止电流设置过高、恒压阶段被提前终止查看充电芯片状态寄存器监测电池电压和电流曲线降低截止电流至 0.1C 以下检查芯片充电完成标志位电池电量显示跳变线性映射导致低电量区误差大、ADC 采样未做滤波观察放电曲线对比真实容量改用分段查表或库仑计芯片ADC 多次采样取平均并加入软件滤波上电时序导致的系统死机多路电源供电时某一路电源未按预期时序上电示波器多通道同时测量各路电源上电顺序增加电源时序控制电路或用带时序功能的 PMIC待机电流过大LDO 静态电流过大、外部上拉电阻消耗、PD 控制器未进入低功耗模式断开各路负载逐个测量各模块电流选用低静态电流 LDO外设电源在待机时切断配置 PD 控制器进入休眠8. 最佳实践与工程建议经历了原理图设计、器件选型、板卡调试验证下面这些工程经验是相对通用且值得长期遵守的规则。8.1 布局布线的第一性原则电源电路对 PCB 布局有很强的敏感性。第一要务是让功率环路尽量小。Buck 电路的功率环路包括输入电容、上管、下管、电感、输出电容。这个环路面积越大寄生电感就越明显SW 节点的电压尖峰就越严重EMI 也就越差。第二要务是反馈走线不要靠近电感或 SW 节点反馈分压点应从输出电容远端取样如果芯片有开尔文连接或远程采样引脚尽量使用。反馈走线是模拟敏感信号与功率走线保持距离是底线。第三要务是输入电容、输出电容要紧贴芯片电源引脚。如果布局空间允许每个电源引脚旁放置一个 0.1μF 高频去耦电容布局时先放芯片和电容再走线。8.2 芯片选型的权衡清单电源芯片选型没有绝对的“最好”只有“最合适”。我通常建议从以下维度打分输入电压范围是否覆盖项目中所有使用场景包括电池充满的 4.2V 和适配器空载 20V。最大输出电流至少为目标电流的 1.5 倍。开关频率是否会造成谐波落入敏感频段比如音频或有源天线频段。静态电流是否符合待机功耗要求。封装是否能够在双层板上良好散热。芯片厂商是否提供仿真模型和参考设计。是否为车规或工业级别是否符合产品定位。采购渠道是否稳定是否有第二供应商可以替代。8.3 保护电路的底线意识给锂电池产品做电源设计时保护电路不是“锦上添花”而是“安全底线”。两颗背靠背 MOSFET 的保护方案是常规做法但不要少于两层保护。如果产品面向消费者温度保护和异常电流保护不能缺失。同时注意充电管理芯片的最大输入电压。USB PD 供电时如果协议协商失败VBUS 可能短暂处于 20V 高压状态如果充电管理芯片耐压不足可能损坏。因此在 VBUS 输入端加入过压保护或选用耐压较高的充电管理芯片属于实用的工程决策。8.4 测试与验证的基本清单每次板卡焊接完成上电测试之前先检查电源输入对地阻抗短路是最常见的问题。然后按顺序执行以下测试空载上电测量各路输出电压是否正常。带载测试测量满载时输出电压降和纹波。输入电压拉偏测试分别测输入下限和上限时的输出精度。用示波器查看 Buck 的 SW 节点波形正常应为稳定的方波开关频率与预设一致。用电流探头或万用表测量各路功耗分析系统功耗瓶颈。如果使用了充电功能测试完整的充电曲线确认预充电、恒流、恒压、截止各阶段切换正常。USB PD 要测试不同适配器下的协商成功率尤其是不知名品牌的适配器。8.5 文档与协作不要看完就忘电源设计中的很多参数不是看一眼就能记住的。建议为每一个项目维护一个“电源树与检测记录”表格内容包括各路输出电压、最大电流、电源芯片型号、电感型号、关键设计公式、实测纹波、实测效率、上电时序、异常备注。这样当产品进入量产或后续硬件迭代时可以直接复用不必重新踩坑。9. 总结与后续学习方向电源模块设计入门难不在于公式有多深而在于它是横跨“理论计算、器件选型、PCB 布局、系统联调”四个环节的综合工程。Buck 解决的效率问题LDO 解决的噪声和简单性问题USB PD 解决的是能量协商和快速充电问题锂电池管理解决的是安全和可用容量问题。四者组合起来覆盖了便携式智能硬件电源设计的大部分场景。这篇文章从最基础的 Buck 占空比公式到电感、输出电容、反馈电阻的计算到 USB PD 协商流程的代码骨架再到锂电池充电流程与电量显示的坑基本还原了一套入门级电源设计需要掌握的知识链路。建议读者下一步做两件事第一把文章中的 Python 脚本本地跑一遍手动改几个参数感受电感、电容、频率之间的制约关系第二用一颗常见的 Buck 芯片按芯片手册设计一块最小系统板焊接、上电、用示波器量 SW 节点和输出纹波整个过程比看十篇文章都有用。如果后续继续深入有四个方向值得投入一是环路补偿与稳定性分析针对动态负载下输出电压跌落的实际问题二是 PCB 布局与 EMC 仿真解决产品做认证时电源辐射超标的问题三是 USB PD 3.1 新特性与 EPR 大功率应用场景四是锂电池电量计与安全认证相关的国标要求。电源设计是一条“越做越知道自己不知道什么”的路。本文提供的是一张地图而不是终点。地形需要自己走一遍才算真正掌握。建议把文中的公式表格、排查清单先收藏起来下次画板子调电源时直接拿出来对照使用。