首页 / 资讯中心 / 文章详情

USB供电充电电路图及原理介绍:从5V到4.2V的完整链路与设计要点

USB供电充电电路图及原理介绍:从5V到4.2V的完整链路与设计要点 ★ FEATURED ARTICLE
简介这份PDF资料聚焦USB供电的充电电路图及原理面向电子工程、硬件设计与嵌入式开发方向的初学者及工程师帮助读者理解USB总线供电规范、电池充电电路设计思路及常见实现方案。资源共1个文件为PDF格式压缩包约684KB内容以电路图、原理讲解与设计分析为主便于随时查阅与对照学习。资料从USB电源规范切入梳理了500mA供电能力、单元负载、枚举机制等基础概念并给出简单USB/AC适配器充电电路的具体设计涵盖线性稳压器、充电器IC、负载切换与增强型电路等模块同时分析了充电电流偏低、负载始终连接电池等局限性及改进思路。目前已有431人学习适合需要快速掌握USB充电电路原理、为便携设备电源设计打基础的读者参考。1. USB供电的充电电路图及原理介绍从一张图看懂5V到4.2V的完整链路很多人第一次拿到「USB供电的充电电路图及原理介绍」这类资料翻两页就放下了——图里一堆符号电阻电容三极管挤在一起看着像天书。但如果你手上正好有一块从旧充电宝拆下来的板子或者想给自制的锂电池小设备加个充电口这张图就是绕不开的东西。它解决的核心问题只有一个把USB口出来的5V安全、可控地变成锂电池需要的4.2V恒压并且在电池电压低的时候先用恒流把电流限住。适合谁看做小家电、DIY移动电源、嵌入式设备供电的硬件工程师和电子爱好者。搞懂这条链路你就能自己算限流电阻、选三极管、判断一块充电板为什么发烫。2. USB充电电路的三种主流拓扑线性、开关与专用IC方案怎么选2.1 线性充电拓扑最简单也最容易发热的方案线性充电的核心思路是把USB的5V当成一个固定水源用一个调整管通常是PNP三极管或P沟道MOS串在中间像水龙头一样把多余的电压「吃掉」。电池电压低时调整管压降大电流被电阻或恒流源限定电池电压升到4.2V时反馈回路让调整管关小进入恒压阶段。这种拓扑的电路图最好认USB的VBUS进来先过一个二极管防反接然后分两路——一路给调整管的发射极一路通过分压电阻送到比较器或运放做电压检测。调整管的基极由反馈网络控制集电极接电池正极。图上通常还能看到一个检流电阻串在充电回路里用来把电流信号转成电压信号。为什么老资料里大量用这种方案因为元件少、成本低、没有电感EMI干净。但它的致命伤是效率等于电池电压除以5V。电池3.7V时效率约74%剩下26%全变成热。如果充电电流设到1A调整管上要耗散1.3W左右TO-92封装的三极管直接烫到不敢摸。所以线性拓扑常见于100mA到500mA的小电流场景比如早期蓝牙耳机、小容量锂电池设备。我一般会这样估算线性方案的功耗先确定最大充电电流I再算最坏情况下的压差。USB电压按5.25V上限、电池按3.0V下限压差就是2.25V功耗P2.25×I。如果I0.5AP≈1.1W必须用SOT-223或TO-252封装的管子并且铜箔面积要铺够。很多新手照着图焊出来发现烫手就是没算这一步。2.2 开关充电拓扑效率上去了但图变复杂了开关充电的思路完全不同它先把5V通过电感储能再以高频开关的方式把能量「泵」进电池。电路图上会多出电感、续流二极管或同步整流MOS、输出电容以及一个PWM控制器。你会在图上看到SW节点、电感L1、电流检测电阻CS还有一堆补偿网络。这种拓扑的效率能做到85%到92%大电流充电时优势明显。比如2A充电线性方案要烧掉2.6W以上开关方案只损失0.3W左右。但代价是电感选型不对会啸叫布局不好会辐射噪声补偿参数没调好会振荡。图上的补偿电阻电容通常标为Rc、Cc不是随便填的它们决定了环路稳定性。对于想自己搭开关充电电路的开发者我的建议是先别急着画分立方案。分立开关充电的调试门槛很高没有示波器和电子负载很难定位问题。更稳妥的做法是用专用充电IC把开关管和控制器集成在里面你只需要按数据手册选外围电感和电容。这样电路图会简化成「IC电感几个阻容」的结构既保留了开关方案的高效率又避开了环路补偿的坑。2.3 专用充电IC方案把图读成「引脚定义外围参数」市面上常见的锂电池充电IC比如TP4056这类把恒流恒压控制、温度保护、充电状态指示全集成在一个SOP-8封装里。电路图变得非常规整VBUS进VCCBAT接电池PROG脚接一个电阻设定充电电流CHRG和STDBY接LED指示状态。读这类图的关键是抓住三个参数充电电流由PROG电阻决定公式通常是I1200/R不同型号系数不同以手册为准恒压值出厂固定4.2V精度靠内部基准保证热调节功能会在芯片温度超过约120度时自动降低电流。这意味着你即使把PROG电阻设得很小芯片也不会无限升温但充电时间会变长。我一般会这样选型先看电池容量按0.5C到1C确定充电电流。比如1000mAh电池充电电流设500mA到1A。然后算PROG电阻再核对IC的最大耗散功率。如果输入5V、电池3.7V、电流1AIC内部耗散约1.3WSOP-8封装的热阻约100度每瓦温升会到130度必须靠PCB铜箔散热或者降低电流。很多成品板把充电电流设在500mA以下就是为了不加散热片也能稳定工作。3. 从原理图到实物恒流恒压两个阶段的参数计算与元件选型3.1 恒流阶段检流电阻和调整管怎么定恒流阶段的本质是不管电池电压怎么变充电电流保持不变。实现方式通常是在回路里串一个小电阻用运放或三极管检测它两端的电压再反馈控制调整管。假设你要做500mA恒流检流电阻选0.1欧姆那么满流时它两端电压是50mV。这个电压送到比较器和基准电压比较。基准可以用TL431产生2.5V再分压得到50mV。分压电阻的精度直接影响恒流精度所以要用1%的金属膜电阻。调整管的选择要看功耗。线性方案里调整管在恒流阶段承受的压差是5V减去电池电压再减去检流电阻压降。电池3.0V时压差约1.95V电流0.5A功耗接近1W。选管子时额定功耗要留一倍余量也就是选2W以上的。同时注意hFE不能太低否则基极驱动电流会很大拉低USB口的电压。下面是一个恒流控制部分的参数计算代码用来快速迭代不同电流下的元件值# 恒流充电参数计算 # 输入目标充电电流、检流电阻、USB电压范围、电池电压范围 def calc_cc_params(i_target, r_sense, v_usb_max5.25, v_usb_min4.75, v_bat_min3.0, v_bat_max4.2): # 检流电阻上的满量程压降 v_sense i_target * r_sense # 调整管最坏功耗USB最高、电池最低 v_drop_max v_usb_max - v_bat_min - v_sense p_diss_max v_drop_max * i_target # 调整管最小功耗USB最低、电池接近恒压点 v_drop_min v_usb_min - v_bat_max - v_sense p_diss_min max(0, v_drop_min * i_target) return { 检流压降(mV): round(v_sense * 1000, 1), 调整管最大功耗(W): round(p_diss_max, 3), 调整管最小功耗(W): round(p_diss_min, 3), 建议管子额定功耗(W): round(p_diss_max * 2, 2) } # 示例500mA充电0.1欧姆检流电阻 result calc_cc_params(0.5, 0.1) for k, v in result.items(): print(f{k}: {v})这段代码帮你快速判断调整管的热压力。参数说明i_target是目标恒流值r_sense是检流电阻v_usb_max和v_usb_min是USB口可能出现的电压范围v_bat_min和v_bat_max是电池从空到满的电压范围。输出里的「建议管子额定功耗」是最大功耗的两倍这是工程上常用的降额准则。如果你算出来建议额定功耗超过1W就要考虑换开关方案或者加散热片。3.2 恒压阶段4.2V基准怎么产生和校准恒压阶段的目标是电池电压到达4.2V时充电电流逐渐减小最终维持在一个很小的值。实现方式是把电池电压分压后和基准比较误差放大器的输出控制调整管。基准电压的精度决定了最终电池能充到多满。如果用TL431它的初始精度是0.5%到2%对应4.2V上的误差是21mV到84mV。对于大多数应用够用了但如果做精密设备就要选更高精度的基准源或者用带修调功能的充电IC。分压电阻的计算很简单假设基准是2.5V电池目标4.2V那么上电阻R1和下电阻R2的比值是(4.2-2.5)/2.50.68。选R210kR1就是6.8k。但要注意电阻的温漂普通碳膜电阻温漂几百ppm在温度变化大的环境里会让恒压点漂移。我一般用25ppm/度的金属膜电阻成本高一点但省心。实际调试时恒压点往往需要微调。因为分压电阻有误差、基准有误差、运放有失调。我的做法是先把R1换成固定电阻加一个多圈电位器串联调到实际输出4.20V后测出电位器阻值再用固定电阻替换。这样批量生产时一致性也好。3.3 充电状态指示与温度保护容易被忽略的两个外围状态指示看起来简单但图上的接法有讲究。常见的是双色LED或者两个单色LED一个表示正在充电一个表示充满。充电IC的CHRG脚通常是开漏输出充电时拉低LED亮充满后高阻LED灭。限流电阻按LED电流算比如3.3V驱动、LED压降2V、目标5mA电阻就是(3.3-2)/0.005260欧姆取270欧姆标准值。温度保护分两种一种是IC内部的热调节芯片结温超过阈值就自动降流另一种是外部NTC电阻贴在电池上检测电池温度。锂电池在0度以下充电会析锂有安全风险所以正规方案会用NTC在低温时切断充电。电路图上NTC通常和分压电阻串联接到IC的TEMP脚。选NTC时要看B值和阻值常见10k B3435。如果你做的设备使用环境温度变化大这个电阻不能省。4. 避坑与排查充电板发烫、充不满、指示灯乱跳的5个真实原因4.1 调整管发烫到烫手现象充电时三极管或IC表面温度超过80度手摸上去坚持不了两秒。 原因线性方案功耗等于压差乘电流USB 5V、电池3.7V、电流1A时功耗1.3WSOT-23封装热阻约250度每瓦温升会到300度以上实际会触发过热保护或烧毁。 解决先算功耗再选封装。超过0.5W就要用SOT-223或TO-252并且PCB上留至少1平方厘米的铜箔散热。如果空间不允许降低充电电流到300mA以下或者换开关方案。4.2 电池只能充到4.0V就转灯现象充电指示灯显示充满但万用表量电池只有4.0V到4.1V。 原因恒压分压电阻误差大或者基准源精度不够。碳膜电阻温漂大夏天和冬天恒压点能差几十毫伏。另外如果检流电阻在恒压阶段仍有较大压降IC检测到的电压会偏低。 解决换1%精度、25ppm温漂的金属膜电阻做分压。检查检流电阻是否在反馈环路之外——有些图把检流电阻放在电池负极和地之间这样IC的电压检测就不包含它的压降恒压点更准。4.3 充电指示灯闪烁或乱跳现象LED不是稳定亮或灭而是快速闪烁或者充电中途突然变灯。 原因常见是电源纹波太大。USB口如果来自开关电源纹波可能超过100mV干扰了IC的比较器。另一个原因是电池内阻大充电时电压被抬高IC误判为充满电流一降电压又掉下来反复振荡。 解决在VBUS和地之间并一个10uF到100uF的电解电容再并一个0.1uF陶瓷电容。如果是电池老化内阻大换电池。还可以在BAT脚并一个1uF电容滤掉检测噪声。4.4 USB口电压被拉低到4.5V以下现象插上充电板后USB口电压从5V掉到4.5V甚至更低充电电流也上不去。 原因USB线太细太长线阻大。或者充电板输入端没有足够的大电容瞬态电流把电压拉垮。还有可能是调整管基极驱动电流太大拉低了前级电压。 解决换短而粗的USB线线阻控制在0.2欧姆以内。输入端加220uF以上的电解电容。如果是三极管方案增大基极电阻或改用MOS管降低驱动电流。4.5 充满后电池电压缓慢下降现象转灯后拔下电池过几小时量电压从4.2V掉到4.1V以下。 原因充电IC的恒压精度不够或者电池自放电大。另一个容易被忽略的原因是IC在充满后没有完全切断而是进入涓流模式但涓流电压设置偏低。 解决先确认电池本身的自放电率正常锂电池每月自放电2%到3%。如果一天就掉0.1V电池有问题。如果电池正常检查IC的恒压精度必要时换更高精度的型号。有些IC可以通过外部电阻微调恒压值查手册确认。5. 进阶技巧用示波器抓充电曲线把「玄学」变成可测参数充电电路调试最怕「玄学」——灯亮了、电池充进去了但不知道余量还有多少换一批元件就翻车。我的习惯是不管多简单的充电板第一次打样回来都要用示波器抓一次完整充电曲线。具体做法是在检流电阻两端接差分探头或者用两个单端探头做数学运算同时用另一个通道监测电池电压。设置触发方式为「上升沿触发」触发电压设在检流电阻压降的10%左右然后插上USB让示波器单次采集整个充电过程。你会看到一条典型的曲线开始阶段电流恒定电压缓慢上升接近4.2V时电流开始下降电压趋于平缓最后电流降到设定值的十分之一左右IC转灯。这条曲线能告诉你三件事恒流值准不准、恒压点偏不偏、转灯电流合不合理。如果恒流阶段电流有台阶或振荡说明环路不稳定需要调整补偿电容。如果恒压阶段电压还在缓慢爬升说明分压电阻温漂大或者基准在漂。如果转灯电流太大比如设定500mA但200mA就转灯电池只能充到八成满。下面是一个用Python处理示波器CSV数据的例子把采集到的电压电流画成曲线并自动提取关键参数import csv import matplotlib.pyplot as plt # 读取示波器导出的CSV假设两列时间(s)、检流电压(V) # 检流电阻0.1欧姆电流 检流电压 / 0.1 def parse_scope_csv(filepath, r_sense0.1): times, currents, voltages [], [], [] with open(filepath, r) as f: reader csv.reader(f) next(reader) # 跳过表头 for row in reader: t float(row[0]) v_sense float(row[1]) v_bat float(row[2]) # 第三列是电池电压 times.append(t) currents.append(v_sense / r_sense) voltages.append(v_bat) return times, currents, voltages # 提取恒流值和恒压值 def extract_params(times, currents, voltages): # 恒流值取前1/3时间段的平均电流 n len(times) cc_current sum(currents[:n//3]) / (n//3) # 恒压值取最后10%时间段的平均电压 cv_voltage sum(voltages[-n//10:]) / (n//10) # 转灯电流取最后5%的平均电流 end_current sum(currents[-n//20:]) / (n//20) return cc_current, cv_voltage, end_current # 使用示例需替换为实际文件路径 # times, currents, voltages parse_scope_csv(charge_curve.csv) # cc, cv, end_i extract_params(times, currents, voltages) # print(f恒流值: {cc*1000:.1f} mA) # print(f恒压值: {cv:.3f} V) # print(f转灯电流: {end_i*1000:.1f} mA)这段代码的关键在于用前三分之一时间段的平均电流代表恒流值用最后百分之十时间段的平均电压代表恒压值用最后百分之五的平均电流代表转灯电流。参数r_sense要和你板子上的检流电阻一致。如果你没有差分探头可以用两个单端探头分别测检流电阻两端然后在示波器里做减法或者导出数据后用代码相减。我自己的血泪经验是不要相信「焊好就能用」。哪怕是最简单的TP4056方案PROG电阻的精度、输入电容的容量、电池线的长度都会影响实际充电曲线。有一次我为了省空间把输入电容从10uF降到1uF结果充电时USB口电压纹波大到让IC反复重启电池充了一晚上还是3.8V。后来老老实实换回10uF问题消失。所以充电电路图只是起点真正值钱的是你愿意花时间测曲线、调参数、留余量。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站