简介:面向便携设备与嵌入式硬件开发者的3.7V锂电池5V充放电电路设计资料,围绕锂电池安全充电、放电保护与PCB实现展开,适合需要做电源管理、电池监测或小型物联网设备供电方案的学习者参考。资源包约3.27MB,当前页面未展开文件总数与类型明细,从内容组织看涵盖原理图/PCB设计、STM32控制与电池状态采集、5V输入转换及过充过流保护等关键环节,可用于梳理充电策略、器件选型与布局布线要点。已有2257人学习,说明该主题在电源电路实践中具有较高关注度。读者可据此理解3.7V锂电池从3.0V至4.2V的工作区间、5V适配与保护电路配合方式,并借鉴STM32监测电池电压电流、调整充电过程的思路,对完成小型便携设备供电设计与PCB检查具有参考价值。
1. 3.7V 锂电池 5V 充放电电路:一条 USB 线背后到底发生了什么
插上一根 USB 线,一块 3.7V 的锂电池就开始充电;拔掉线,板子还能继续跑。很多人画 PCB 时把这套电路当成“抄参考设计就行”的标配模块,直到板子回来才发现:充电时发热严重、电量显示不准、负载一重就掉电重启。问题往往不在芯片选型,而在于没搞清这条链路里电压、电流和状态是怎么被约束的。这个机制值得搞懂,因为它是一个典型的“多电源域共存”问题——USB 的 5V、电池的 3.0~4.2V、系统的 3.3V 同时在板上,谁给谁供电、什么时候切换、怎么防止倒灌,全在这几个平方厘米里决定。
2. 电压域的权力交接:5V、电池、系统电压谁说了算
一块带锂电池的小板子上,其实同时存在三个电压域:USB 输入的 5V、锂电池的 3.0~4.2V 波动区间、以及后级负载需要的稳定 3.3V(或 5V)。这三个域不是简单的串行关系,而是并行存在、随时可能互相“夺权”。理解充放电电路,第一步就是把它们之间的权力交接规则理清楚。
2.1 为什么电池电压不能直接喂给负载
锂电池的放电曲线决定了它不能当稳压源用。满电 4.2V,放到 3.5V 时还剩不少容量,但绝大多数数字电路和射频模块在这个区间内都无法正常工作。更麻烦的是负载瞬态:Wi-Fi 模块发射瞬间可能拉出几百毫安,电池内阻加上 PCB 走线阻抗会瞬间把电压拽下去,如果没有储能和稳压环节,主控直接复位。
所以中间必须有一个稳压级。常见的两条路线是:升压到 5V 再给 5V 负载,或者降压/升降压到 3.3V 给系统。选哪条不是拍脑袋,取决于负载电压和后级效率。3.7V 转 3.3V 用降压(Buck)效率可以做到 90% 以上;3.7V 转 5V 必须升压(Boost),效率通常低几个点,而且输入电流会显著增大。
这里有个容易被忽略的细节:升压电路在电池低压时的输入电流。假设输出 5V/1A 即 5W,效率 85%,输入功率约 5.9W,电池 3.3V 时输入电流接近 1.8A。这个电流会直接体现在走线宽度、电感饱和电流和电池保护板的过流阈值上。很多板子在电池满电时测试一切正常,放到 3.4V 带载就翻车,根因就在这里。
2.2 电源路径管理:充电和供电为什么不走同一条路
最朴素的接法是电池直接挂在系统电源上,USB 5V 经充电芯片给电池充电,系统从电池取电。这种接法在插着 USB 且负载较重时会出现一个问题:充电电流和负载电流在同一节点叠加,充电芯片无法准确判断电池实际需要多少电流,同时电池在“边充边放”,循环损耗加快,电量计也会算错。
电源路径管理(Power Path)就是为了解决这个。它的核心思想是把“输入”和“电池”做成两个可以独立导通的支路,系统优先从 USB 输入取电,不足的部分再由电池补充;只有在没有外部电源时,才完全由电池供电。常见的实现思路是用一颗带路径管理的充电管理芯片,内部集成两个 MOS 和一套优先级逻辑。
用一张简化的状态表能看清这个逻辑:
| 场景 | USB 输入 | 电池 | 系统供电来源 | 充电状态 |
|---|---|---|---|---|
| 插 USB,轻载 | 5V 在 | 未满 | USB 输入 | 恒流/恒压充电 |
| 插 USB,重载 | 5V 在 | 未满 | USB + 电池补充 | 充电电流被压缩 |
| 插 USB,电池满 | 5V 在 | 4.2V | USB 输入 | 截止 |
| 拔 USB | 无 | 放电中 | 电池 | 不适用 |
这张表里最值得琢磨的是第二行。当负载超过输入能力时,路径管理会把充电电流降到接近零,甚至让电池反向补充负载——这是设计意图,不是故障。如果用的是没有路径管理的方案,这个场景下输入电压会被拉垮,USB 端可能触发过流保护,表现为“插着线反而不稳定”。
2.3 防倒灌:那些不显眼却必须存在的二极管和 MOS
USB 拔掉的瞬间,5V 域掉电,但板子上还有大电容。如果输入和输出之间没有隔离,电容上的电会往 USB 口倒灌,轻则让主机识别异常,重则损坏接口。同样,电池端也不能在无输入时反向灌入充电芯片的输入端。
常见做法有两类。一类是用肖特基二极管做单向隔离,简单可靠,代价是压降带来的损耗——0.3V 压降在 1A 电流下就是 0.3W 的发热。另一类是用背靠背 MOS 做理想二极管,导通电阻可以做到几十毫欧,损耗小得多,但需要控制逻辑判断方向。集成路径管理的芯片通常把这部分做在内部,外围只需要少量电容。
画 PCB 的时候,这部分常常被压缩到最小面积,结果就是走线电感变大、瞬态响应变差,插拔 USB 时偶发复位。血泪经验是:输入电容和电池端的去耦电容,位置比容值更重要,必须贴着芯片引脚放。
3. 充电控制的底层逻辑:CC/CV 到底在控制什么
知道了电压怎么分配,下一个问题是:充电这个过程本身是怎么被控制的。锂电池充电不是“给个 5V 就一直灌”,而是一套有明确阶段的状态机。搞不清这套状态机,就没法解释为什么充电时间不是线性的、为什么最后 10% 特别慢。
3.1 三段式充电的状态机拆解
标准的锂离子充电分三个阶段:涓流(Trickle)、恒流(CC)、恒压(CV)。
涓流阶段针对深度放电的电池。当电池电压低于某个阈值(常见 2.8~3.0V),充电芯片只给很小的电流,通常是恒流值的十分之一左右。这个阶段的目的是让过放的电池慢慢恢复,避免大电流导致内部析锂。很多项目里电池带保护板,过放时保护板直接切断输出,此时芯片检测到的电压可能是 0,涓流逻辑是否生效取决于具体芯片的实现。
恒流阶段是主体。芯片以设定的电流给电池充电,电池电压从 3.0V 左右稳步上升到 4.2V。这个阶段充入的电量最多,时间也最长。
恒压阶段从电池电压到达 4.2V 开始。此时芯片不再强行灌电流,而是把输出电压钳在 4.2V,电流随着电池逐渐充满而自然衰减。当电流降到恒流值的十分之一左右,判定为充满,截止。
这个状态机可以用一段伪代码表达它的判定逻辑:
# 简化的三段式充电状态机,用于说明判定顺序 CHARGE_CURRENT = 1.0 # 恒流值,单位 A TRICKLE_THRESHOLD = 3.0 # 涓流进入阈值,单位 V CV_TARGET = 4.2 # 恒压目标,单位 V CUTOFF_RATIO = 0.1 # 截止电流比例 def charge_state(vbat, ibat): if vbat < TRICKLE_THRESHOLD: # 深度放电,小电流唤醒,避免大电流损伤电池 return "TRICKLE", CHARGE_CURRENT * 0.1 elif vbat < CV_TARGET: # 电压未到位,全力恒流,这是充入电量最快的阶段 return "CC", CHARGE_CURRENT elif ibat > CHARGE_CURRENT * CUTOFF_RATIO: # 电压已到 4.2V 但电流仍大,钳压等待电流自然衰减 return "CV", CV_TARGET else: # 电流衰减到阈值以下,判定充满,彻底关断 return "DONE", 0这段逻辑的重点不在代码本身,而在判定顺序:先看电压是否够低决定涓流,再看电压是否到位决定恒流还是恒压,最后看电流是否衰减到阈值决定是否截止。顺序错了就会出错——比如先判电流,恒流阶段电流一直很大,会被误判成永远充不满。
参数上需要关注的是恒流值的设定。它通常由一颗电阻决定,公式在不同芯片上略有差异,但本质是I = K / R。这颗电阻的精度直接影响充电电流的准确性,用 1% 精度的电阻是基本要求。另外,恒流值不能超过电池规格书里的最大充电倍率,常见的圆柱电池允许 0.5C~1C,软包电池往往更保守。
3.2 充电截止与再充电:那个容易被忽略的滞后窗口
充满之后如果一直插着 USB,芯片不会反复在“充一点、停一下”之间抖动。它设置了一个再充电阈值,通常是 4.1V 左右。只有电池电压因为自放电或系统耗电跌到这个值以下,才会重新启动一轮充电。
这个滞后窗口的存在,是为了避免电池在 4.2V 附近被反复微充。频繁的微充对循环寿命不友好,也会让充电指示灯闪烁得让人怀疑板子坏了。调试时如果发现指示灯在满电后还偶尔亮一下,先查这个阈值,再看是不是系统静态电流太大把电池拉下去了。
还有一个细节:温度保护。多数充电芯片带 NTC 引脚,外接一颗贴近电池的负温度系数电阻。电池温度超出窗口(常见 0~45℃)时,芯片会暂停充电。这颗电阻的摆放位置比参数更重要,贴在电池背面和贴在板子边缘,测到的是完全不同的温度。踩过的坑是:NTC 走线和功率走线并行,被干扰后误触发保护,表现为“充电充一会儿就停,凉了又能充”。
4. 放电与保护:过放、过流是怎么被拦住的
充电讲完,另一半是放电。电池放电看起来简单——接上负载就行,但实际上保护逻辑比充电更隐蔽,因为它在正常工作时完全不显形,只在出问题时才起作用。
4.1 保护板的三个开关:过充、过放、过流
绝大多数成品锂电池自带一块保护板,上面串着两颗 MOS(充放电各一个)和一颗控制芯片。它监控三个量:单节电压、回路电流、以及充放电方向。
过充保护在电压达到 4.25~4.3V 时切断充电 MOS,防止电池鼓包。过放保护在电压跌到 2.5~2.8V 时切断放电 MOS,防止深度放电损坏。过流保护靠检测 MOS 上的压降,超过阈值就断开,响应时间通常在毫秒级。
这里有个工程上很容易混淆的点:保护板的过流阈值和充电芯片的限流是两回事。保护板是最后一道防线,动作意味着已经出问题了;充电芯片的限流是正常工作范围。设计时如果两者设置得太接近,会出现负载稍有波动就触发保护板断开,表现为“带载瞬间掉电,松手又恢复”——很容易被误判成接触不良。
另外,保护板断开后并不会自动恢复。过放切断后需要插入充电器才能重新导通,这就是为什么有些板子电池放空了插上 USB 没反应,得等一会儿才亮灯——涓流唤醒加保护板恢复都需要时间。
4.2 电量检测:为什么电压法不准,库仑计又贵
电量显示是用户最直观感受到的部分,也是最容易做不准的部分。
电压法最简单:读 ADC,拿电压去查放电曲线表。问题在于锂电池的放电曲线中段非常平坦,3.7V 到 3.9V 之间可能对应 40% 到 70% 的电量,几个毫伏的测量误差就能让显示跳变。而且充电时电池电压被抬高,插着线显示 80%,拔掉瞬间掉到 60%,用户会认为你在骗他。
库仑计的做法是在电池回路上串一颗小电阻,对电流做积分,直接统计流进流出的电荷量。它不受电压平台影响,精度高得多,代价是需要一颗专用芯片、一次完整的满充到满放校准,以及更复杂的固件。
折中的思路是用电压法加负载补偿:在已知负载电流下对测量电压做修正,同时加入滞回和斜率限制,让显示变化平滑。我一般会这么理解——电量显示的目标不是绝对准确,而是“不突跳、不倒退、拔插前后一致”,做到这三点,用户就不会觉得有问题。
下面这段是电压法带滞回和限速的常见写法:
# 电压法电量估算,重点是防跳变而非追求绝对精度 OCV_TABLE = [(4.15, 100), (4.00, 85), (3.90, 70), (3.80, 55), (3.70, 40), (3.60, 25), (3.50, 10), (3.30, 0)] def estimate_soc(vbat, last_soc, max_step=3): # 查表得到原始估算值 raw = 0 for v, p in OCV_TABLE: if vbat >= v: raw = p break # 限制单次变化幅度,避免 ADC 噪声导致数字乱跳 if raw > last_soc + max_step: return last_soc + max_step if raw < last_soc - max_step: return last_soc - max_step return rawmax_step是关键参数,它把每次更新的幅度限制在几个百分点以内。取值太大起不到平滑作用,太小则充电时电量涨得明显滞后。实践中 2~3 个百分点配合合理的更新周期(比如每秒一次)比较合适,还要注意充电和放电用两套不同的表,否则插拔瞬间的跳变躲不掉。
5. 避坑与排查:那些原理图上看不出来的问题
原理正确不等于板子能用。这一节记录的是几个在实物上反复出现、但从电路图完全看不出来的问题。
5.1 现象:充电时芯片发烫,电流上不去
原因通常是散热焊盘没有打好。充电芯片的功耗等于 (输入电压 − 电池电压) × 充电电流,电池 3.5V 时输入 5V、电流 1A,就有 1.5W 全部变成热。如果底部散热焊盘下面没有足够的过孔连到地平面,热阻会大到芯片自己进热调节,自动把电流降下来。
解决方式是检查散热焊盘的开窗和过孔数量。常见做法是打 9 个以上过孔,孔径 0.3mm,直接连到内层地铜皮,铜皮面积尽量大。另外注意焊盘和芯片之间不能有阻焊残留。
5.2 现象:插上 USB 系统反复重启
原因多半是输入电容不足或者路径切换时的瞬态跌落。USB 插入瞬间,充电芯片开始拉电流,如果输入端的陶瓷电容离芯片太远,走线电感会造成瞬时压降,主控的复位阈值一旦被触发就重启。
解决方式是把输入电容贴近芯片的 VIN 和 GND 引脚,容值按芯片手册推荐值取,通常 1μF 加 10μF 组合。同时检查 USB 座子的 VBUS 到芯片之间有没有串联磁珠之类的器件形成额外阻抗。
5.3 现象:电量显示从 80% 直接跳到 20%
原因是电压法查表时没有处理负载压降,或者 ADC 采样点在负载回路上。负载电流大的时候,测到的电压比电池实际开路电压低,换算出来电量偏低。
解决方式是把采样点移到电池正极就近位置,采用开尔文接法,避免采样线承载负载电流。同时在固件里根据当前负载电流做补偿,或者干脆在充电和放电两种状态下用不同的查表曲线。
5.4 现象:电池放空后插上充电器没有反应
原因是电池进入过放保护,保护板切断了回路,充电芯片检测到的电池端电压接近 0,有些芯片的涓流逻辑要求先检测到有效电池电压才启动。
解决方式是确认芯片是否支持 0V 充电。如果不支持,需要靠保护板的恢复机制——多数保护板在检测到充电电压后会短暂导通,让芯片检测到电压后进入涓流。另外检查充电电流设置是否过大,涓流阶段电流太大会让保护板再次切断。
5.5 现象:板子放在高温环境里充不进电
原因是 NTC 检测误触发。除了 NTC 本身位置不当,还有一种情况是分压电阻取值让温度窗口偏窄,环境温度稍高就超出范围。
解决方式是先确认 NTC 的 B 值曲线和分压电阻是否匹配芯片手册推荐值,再用热风枪或恒温箱实测几个温度点的分压电压,对照手册的温度-电压表验证。这一条属于典型的“参数都对但就是不对”,只能靠实测。
6. 设计取舍:为什么没有一种充放电电路能通吃
把整条链路拆完会发现,每一处设计都是取舍。路径管理芯片集成度高、外围简单,代价是成本上去了,而且充电电流和散热能力受封装限制;分立方案灵活,可以把 MOS 和电感按实际功率选型,但占板面积和调试成本都翻倍。升压方案能带 5V 负载,效率损失和输入电流增大是必须付的账;纯降压方案效率好看,负载电压又被限制在 3.3V 附近。
我通常用一张表来辅助决策,把这几个维度摆在一起看:
| 维度 | 集成路径管理 | 分立充电 + 独立 DC-DC |
|---|---|---|
| 板面积 | 小 | 大 |
| 充电电流上限 | 受封装散热限制 | 按 MOS 选型可做大 |
| 系统供电切换 | 芯片内部完成 | 需额外控制逻辑 |
| BOM 成本 | 中等 | 低(大批量)或高(小批量) |
| 调试难度 | 低 | 高,需验证切换时序 |
验证方法上,我比较依赖三个动作:一是用电子负载模拟不同电池电压下的带载能力,重点看 3.3V 和 3.5V 这两个点;二是用示波器抓 USB 插拔瞬间的 VIN 和系统电压,看跌落幅度和恢复时间;三是把板子放进恒温箱,在温度窗口边界附近跑完整充电流程,确认 NTC 不会误动作。
这几个动作做下来,能覆盖掉八成返工。真正难的是那些不常出现的组合场景,比如低电量加高温加满载同时发生,这种只能靠留足设计余量,而不是靠测试穷举。
从那以后我每次画这类电路,都强制先把三个电压域的电流路径在纸上画一遍,标出每个节点的最大电流和方向,再对照芯片的绝对最大额定值逐条核对。这个习惯救过我好几次,比事后调板子划算得多。希望帮到你。
本文还有配套的精品资源,点击获取