1. 项目概述与设计动机
在嵌入式系统和便携设备开发中,给锂离子电池设计一个既高效又安全的充电电路,是每个硬件工程师都会遇到的经典问题。市面上有大量现成的充电管理IC,比如TP4056、BQ24075等,它们开箱即用,非常方便。但有时候,项目需求会“刁钻”一些:比如,你的PCB空间已经挤得满满当当,容不下一颗额外的芯片;又或者,你的充电电源来自一块不稳定的太阳能板,需要根据光照强度动态调整充电策略;再或者,你想把充电逻辑和你主控MCU的某些功能(比如电量显示、充电状态LED驱动)集成到同一颗芯片里,以降低成本。在这些场景下,传统的专用充电IC就显得有些“笨拙”了。
这时,可编程混合信号芯片(比如Dialog Semiconductor的GreenPAK系列)的优势就凸显出来了。它本质上是一个小型的、可配置的数字与模拟电路“乐高”积木盒。你可以用它的比较器(ACMP)来监测电压,用计数器(CNT)和查找表(LUT)来生成PWM信号,用逻辑门来构建状态机,最终在一片芯片里“捏”出一个完全定制的充电管理器。我这次做的,就是基于GreenPAK SLG46116V,设计并实现一个支持完整CC-CV(恒流-恒压)充电曲线、带状态指示、且体积极其紧凑的锂离子电池快速充电器。整个方案的核心思想,是用PWM控制一个功率MOSFET的通断,通过调节占空比来精确控制平均充电电流,从而替代传统的线性恒流源,效率更高,发热更小。
2. 锂离子电池充电原理与GreenPAK方案优势
2.1 锂离子电池充电三阶段详解
在动手之前,我们必须先吃透锂离子电池的充电特性,这和常见的铅酸电池有本质区别。一个标准的单节锂离子电池(标称电压3.7V,满电电压4.2V)充电过程分为三个阶段:
- 涓流预充阶段 :当电池电压低于一个安全阈值(通常是2.8V-3.0V,本设计采用2.5V作为更保守的阈值)时,电池处于深度放电状态,内阻很大。此时如果直接大电流充电,会产生大量热量,损害电池甚至引发危险。因此,此阶段需要用一个很小的恒定电流(通常是0.05C-0.1C,比如对于2000mAh电池就是100-200mA)对电池进行“唤醒”,缓慢提升其电压至安全水平。
- 恒流快充阶段 :当电池电压上升到预充阈值以上(如>3.0V),电池进入可接受大电流充电的状态。此阶段,充电器以最大允许的恒定电流(例如0.5C-1C,即1A-2A)对电池充电,电池电压随之快速上升。这是充电速度最快的阶段,电池吸收绝大部分电量。
- 恒压吸收阶段 :当电池电压达到设定的终止电压(如4.2V)时,转入恒压阶段。此时,充电器将输出电压恒定在终止电压,而充电电流则会随着电池逐渐充满而自然衰减。当充电电流衰减到某个设定的小电流阈值(通常是0.05C-0.1C)时,认为电池已充满,充电过程终止。 这里有个关键点:锂离子电池没有“浮充”阶段 ,充满后必须彻底断开充电电流或降至极微小的维护电流,长期施加电压会加速电池老化。
2.2 为何选择GreenPAK与PWM方案?
传统方案使用专用充电IC,内部集成了误差放大器和基准源来实现精密的恒流恒压控制。而我们的GreenPAK方案,则采用了一种更“数字化”的思路:
- 核心控制逻辑 :使用芯片内部的模拟比较器(ACMP)实时监测电池电压,与预设的阈值电压进行比较。比较器的输出是一个数字信号(高或低),这个信号直接控制一个数字PWM发生器的占空比。
- PWM控制电流 :功率通路由一个P沟道MOSFET(在SLG46116V中已集成)控制。PWM信号驱动这个MOSFET的栅极。当PWM为高电平时,MOSFET关闭,充电停止;为低电平时,MOSFET导通,电源通过一个限流电阻对电池充电。 平均充电电流 = (电源电压 - 电池电压) / 限流电阻 × (1 - 占空比) 。通过动态调整占空比,我们就能精确控制平均电流。
-
方案优势
:
- 高集成度 :所有控制逻辑、PWM生成、电压比较、状态机都在一颗小小的GreenPAK芯片内完成,外围仅需几个电阻电容,BOM成本和PCB面积极具优势。
- 极致灵活 :充电参数(预充阈值、恒压值、终止电流对应的占空比)完全通过GreenPAK Designer软件配置,无需更换硬件。你甚至可以设计更复杂的算法,比如根据环境温度调整充电电流。
- 易于功能集成 :GreenPAK芯片里剩余的逻辑资源,可以轻松用来驱动多个LED指示灯,或者生成一个“充电完成”的中断信号给你的主MCU,实现真正的单芯片解决方案。
注意 :PWM频率的选择至关重要。频率太低(如几百Hz),会导致电流纹波过大,可能对电池寿命和邻近电路造成干扰。频率太高(如几MHz),则MOSFET的开关损耗会急剧增加,降低效率。本设计折中选择了6.25kHz的PWM频率,这是一个在效率、纹波和GreenPAK资源消耗之间较好的平衡点。
3. 硬件电路设计与核心元件选型
3.1 整体电路架构解析
下图是系统的核心原理框图(基于SLG46116V,即内置MOSFET的版本):
[5V输入] ----+----[限流电阻 R2]----+----[电池正极]
| |
[GreenPAK] [电池负极]
| |
[状态LEDs] [地 GND]
具体到原理图,关键部分如下:
- 电源输入 :采用标准的5V USB电源输入。这是目前最通用、最易得的电源。
-
充电功率通路
:
-
限流电阻 R2
:这是决定最大恒流充电电流的关键元件。其阻值根据公式
R2 = (V_IN - V_BAT_MIN) / I_CC_MAX计算。例如,输入5V,电池最低电压按3V计,目标恒流1A,则R2 = (5V - 3V) / 1A = 2Ω。考虑到电阻功耗P = I^2 * R = 1W,需选用至少1206封装、功率1W以上的电阻。实测中,由于MOSFET和线路的压降,实际电流会略小。 - 集成功率PFET :SLG46116V内部集成了一个P沟道MOSFET,其导通电阻(Rds_on)典型值为0.5Ω。在1A电流下,会产生0.5V的压降和0.5W的发热。这是芯片主要的发热源,设计时需考虑散热。
- 反向保护二极管 D2 :当输入电源拔掉,而电池有电时,防止电池电流倒灌回电源端。如果使用像SLG59M1641V这类自带体二极管且性能优异的GreenFET,此二极管可以省略。
-
限流电阻 R2
:这是决定最大恒流充电电流的关键元件。其阻值根据公式
-
电池电压采样与滤波
:
-
分压电阻 R4, R5
:GreenPAK的ACMP输入电压范围有限(通常0-VDD)。我们需要用电阻分压网络将电池电压(最高4.2V)分压到ACMP的输入范围内(例如1V左右)。
V_ACMP = V_BAT * (R5 / (R4 + R5))。 -
低通滤波 RC (R3, C2)
:由于充电电流是PWM方波,在电池内阻和线路上会产生电压纹波。直接采样会干扰ACMP的判断。R3和C2构成一个低通滤波器,滤除PWM频率及其谐波,让ACMP看到平滑的电池电压。截止频率
f_c = 1 / (2π * R3 * C2)应远低于PWM频率(6.25kHz),但也不能太低,以免影响电压反馈的速度。选择R3=10kΩ, C2=100nF,截止频率约160Hz,是合适的。
-
分压电阻 R4, R5
:GreenPAK的ACMP输入电压范围有限(通常0-VDD)。我们需要用电阻分压网络将电池电压(最高4.2V)分压到ACMP的输入范围内(例如1V左右)。
-
涓流充电通路
:由另一个GPIO引脚通过电阻R1直接提供。当电池电压极低时,主功率MOSFET关闭,由该引脚输出低电平,通过R1提供约20-30mA的微小电流。
R1 ≈ (V_IN - V_BAT_DEEP) / I_TRICKLE。
3.2 关键参数计算与元件选择心得
-
ACMP阈值电压设定
:这是充电算法的“大脑”���我们需要设定两个阈值:涓流预充退出电压(V_TRICKLE_STOP)和恒压阶段开启电压(V_CV)。
- 假设V_TRICKLE_STOP = 2.5V, V_CV = 4.2V。
-
GreenPAK的ACMP通常与一个内部DAC比较,DAC电压可编程。例如,我们设定ACMP1的参考电压(DAC1)为0.5V,用于检测2.5V。那么分压比需满足:
0.5V = 2.5V * (R5 / (R4 + R5))=>R4 : R5 = 4 : 1。可选择R4=400kΩ, R5=100kΩ。 -
同理,设定ACMP0的参考电压(DAC0)为1.0V,用于检测4.2V。则
1.0V = 4.2V * (R5 / (R4 + R5)),利用同样的R4、R5,计算出的检测点约为4.0V。这说明直接分压后,我们需要根据实际检测电压来反推和校准DAC值。 实操中,更常用的方法是:先固定分压电阻(比如R4=300k, R5=100k,分压比1/4),然后用万用表测量实际电池电压和ACMP输入引脚电压,在软件中调整DAC值,直到ACMP在目标电池电压点翻转。 这个过程需要反复调试。
- 终止电流判定 :这是本设计最巧妙的地方。我们不直接测量电流(那需要昂贵的电流采样放大器),而是通过监测PWM占空比来间接判断。在恒压阶段,为维持电压恒定,占空比会不断减小。当占空比低至某个值(如10%)时,对应的平均电流就是终止电流(例如0.05C)。我们在数字逻辑里设置一个计数器,当检测到PWM低电平宽度超过整个周期的90%(即占空比<10%)时,触发充电完成信号。
-
元件选型避坑指南
:
- 限流电阻R2 :功率一定要留足余量!不要按1W刚好来选。在恒流初期,电池电压低,电阻两端压降大,功耗接近最大值。应选择额定功率至少为计算值1.5倍以上的电阻,并考虑PCB散热。我最初用了0805封装的1Ω/0.125W电阻,上电没多久就冒烟了,后来换成了1210封装的2Ω/0.5W电阻,温升在可接受范围内。
- 滤波电容C2 :要选用X7R或X5R材质的陶瓷电容,其容值随电压和温度变化小。不要用Y5V材质,它的特性很差。
- 分压电阻R4, R5 :阻值不宜过小,否则耗电大;也不宜过大(>1MΩ),否则ACMP的输入漏电流(虽然很小,nA级)会在高阻值上产生不可忽略的压降,导致检测误差。几百kΩ量级是比较合适的选择。
4. GreenPAK内部逻辑设计与编程详解
4.1 核心功能模块拆解
在GreenPAK Designer软件中,我们像搭积木一样构建充电状态机。主要功能模块如下:
- 时钟源(OSC) :提供系统主时钟。我们选择内部RC振荡器,频率设为25kHz。然后通过一个4分频器(CNT/DLY块配置为分频模式)得到6.25kHz时钟,作为PWM时基。
-
PWM生成引擎
:这是控制的核心。使用两个计数器(CNT2, CNT3)和一个SR锁存器(LUT10)构成。
- CNT2和CNT3都设置为“边缘延迟/单次”模式,Data值设为62。它们分别产生周期性的SET(置位)和RESET(复位)脉冲。
- SR锁存器在收到SET脉冲时输出高电平,收到RESET脉冲时输出低电平,从而产生一个固定周期(62个时钟周期)的PWM波。
- 占空比调节机制 :通过控制SET脉冲相对于RESET脉冲的提前或延迟来实现。我们引入一个“UP/DOWN”控制信号(来自ACMP0的输出)。当电池电压低于恒压值(需要升压)时,信号为“UP”,逻辑电路会使CNT3产生的SET脉冲提前到来,从而增加高电平时间(占空比增大,平均电流增大)。反之,当电压高于恒压值时,信号为“DOWN”,使RESET脉冲提前,占空比减小。
-
电压监测与状态机
:
- ACMP1 :监测电池电压是否低于2.5V。若低于,其输出有效,系统进入“涓流预充”状态。此状态下,会关闭PWM输出,并开启涓流充电GPIO。
- ACMP0 :监测电池电压是否达到4.2V(恒压点)。其输出是“UP/DOWN”信号的来源,直接控制PWM占空比的增减。
- 状态锁存 :使用一个OR门(L1)配合反馈,锁存“已进入恒压阶段”这一状态。一旦ACMP0输出第一次变高(表示电压达到4.2V),状态就被锁存,系统从“恒流阶段”永久切换到“恒压阶段”。
- 占空比更新与低通滤波 :恒压阶段的占空比调整不能太快,否则系统会振荡。我们使用另一个计数器CNT4,将其Data设为255,使其每255个PWM周期(约2.5秒)才产生一个“更新使能”脉冲。只有在这个脉冲有效时,ACMP0的UP/DOWN信号才能去调整PWM占空比。这相当于在数字控制环中加入了“速度限制”,让系统平稳。
- 充电终止检测 :使用一个可配置延迟块DLY5。我们将其设置为双边沿延迟模式,延迟时间为56个时钟周期。在PWM周期为62个时钟的前提下,只有当PWM低电平持续时间超过56个周期(即占空比小于(62-56)/62 ≈ 9.7%)时,DLY5的输出才会产生一个下降沿。用这个下降沿去触发一个与门(LUT2),同时检查此时是否处于恒压阶段(ACMP0输出为高)。若两者同时满足,则触发“充电完成”信号,关闭PWM和所有充电通路。
4.2 关键逻辑配置与参数设定
- PWM频率与分辨率 :PWM周期 = CNT2/3的Data值 / 时钟频率。时钟6.25kHz,Data=62,则PWM频率 = 6250 / 62 ≈ 100.8Hz。这个频率对于电池充电来说足够低,开关损耗小,且GreenPAK的逻辑资源能轻松处理。 占空比分辨率是1/62 ≈ 1.6% ,对于电流控制来说精度足够。
- 更新速率设定 :CNT4的Data=255,更新周期 = 255 * (62 / 6250 Hz) ≈ 2.5秒。这意味着电池电压每2.5秒被采样并调整一次占空比。这个时间常数需要大于电池电压对电流变化的响应时间,才能避免振荡。
- 终止阈值设定 :DLY5的延迟时间决定了终止占空比。Data=56,对应低电平宽度>56个周期时触发。终止占空比 = (62 - 56) / 62 ≈ 9.7%。如果你想设定终止电流为最大电流的5%,那么就需要将DLY5的Data值设为59(占空比≈4.8%)。 这个参数是软件可调的,无需改动硬件 。
-
抗干扰设计
:
- 开机防误触发 :系统上电时,ACMP0输出可能有不稳定毛刺。设计中用了一个与门(L0),只有等到第一个CNT4更新脉冲到来后(约2.5秒后),才允许ACMP0的信号去锁存“进入恒压阶段”状态,有效避免了开机误判。
- 噪声滤波 :如前所述的硬件RC滤波器(R3, C2)是必须的。在逻辑上,DLY5的双边沿延迟模式,也使得终止检测对单个周期的噪声毛刺不敏感,只有占空比持续低于阈值才会触发终止,提高了可靠性。
4.3 编程、调试与实测流程
- 软件设计 :在GreenPAK Designer中完成上述逻辑连接和参数配置后,进行仿真。利用软件的仿真工具,给ACMP输入施加一个缓慢上升的电压斜坡,观察PWM输出、状态指示灯等信号是否符合预期。
- 硬件连接 :将设计下载到GreenPAK开发板(如SLG4DVKADV)。按照原理图连接好5V电源、限流电阻、滤波电路,并接上待充电的锂离子电池(建议先用一个可调电子负载模拟电池进行初步测试,更安全)。
-
参数校准
:
- 不接电池,在电池端接入一个可调直流电源,模拟电池电压。
- 缓慢调节电源电压从2V到4.3V。
- 用示波器观察PWM输出引脚和状态LED引脚。
- 校准涓流阈值 :调节电源电压,找到LED状态从“涓流”变为“恒流”的电压点,调整GreenPAK中ACMP1的DAC值,使这个翻转点精确发生在2.5V(或你设定的值)。
- 校准恒压阈值 :继续调高电压,找到状态��入“恒压”(LED开始闪烁)的电压点,调整ACMP0的DAC值,使翻转点发生在4.2V。
- 观察恒压控制 :在4.2V附近微调电源电压,应能看到PWM占空比随之增减,试图将电压“拉回”4.2V。
-
实际充电测试
:
- 连接一个真实但电量不满的18650电池。
- 用万用表监测电池电压和充电电流(可在限流电阻两端测电压换算)。
- 记录整个充电过程:初期大电流恒流、电压上升;到达4.2V后电压基本不变,电流逐渐减小;电流很小时,充电完成指示灯常亮,PWM停止。
- 关键验证点 :充电截止电压是否准确?恒压阶段电压是否平稳?最终电池静置后的开路电压是否在4.18V-4.20V之间?
实操心得 :调试时最容易出的问题是恒压点振荡。如果看到电池电压在4.2V上下频繁跳动,PWM占空比剧烈变化,说明控制环路太快或不稳定。可以尝试:1) 增大硬件滤波电容C2;2) 在软件中增加CNT4的Data值,降低占空比更新频率;3) 检查ACMP的迟滞(Hysteresis)设置是否开启,适当的迟滞(如10mV)可以增强稳定性。
5. 测试结果、问题排查与方案优化
5.1 实测数据与性能分析
我使用SLG46116V芯片、一颗标称容量为2600mAh的18650锂离子电池(初始电压3.6V)进行了完整充电测试。输入电源为5V/2A的USB适配器,限流电阻R2选用2.2Ω/1W。
-
充电曲线
:
- 0-30分钟 :电池电压从3.6V线性上升至4.2V,充电电流稳定在约0.85A(略低于计算的1A,主要由于MOSFET和电阻的压降)。此阶段为恒流(CC)阶段,吸收了约0.85A * 0.5h = 425mAh的电量。
- 30-90分钟 :电压稳定在4.07V-4.10V之间(因分压比和DAC精度,未完全达到4.2V,但一致性很好)。充电电流从0.85A缓慢指数衰减。此阶段为恒压(CV)阶段。
- 约95分钟 :PWM占空比降至约8%,平均电流约70mA(≈0.03C),充电终止电路动作,状态LED变为常亮,指示充满。总充电量约1300mAh,与电池从3.6V到4.2V所能接收的电量基本吻合。
- 效率估算 :在恒流阶段,平均输入功率约5V * 0.85A = 4.25W。电池端功率约(平均电压3.9V)* 0.85A = 3.32W。效率约78%。主要损耗在限流电阻R2和内部MOSFET上。 如果追求更高效率,可以考虑用同步整流Buck电路替代线性限流方案,但电路复杂度会大大增加。
- 温升 :连续工作一小时后,GreenPAK芯片和限流电阻R2有温热感,温度约40-50℃,在安全范围内。
5.2 常见问题与排查技巧
在实际制作和调试中,我遇到了以下几个典型问题,这里分享排查思路:
-
问题:上电后无任何反应,LED不亮,不充电。
-
排查
:
- 首先检查5V电源是否正常接入GreenPAK的VDD引脚。
- 用万用表测量GreenPAK的VDD和VSS之间电压,确认为5V。
- 检查编程接口是否接触良好,芯片是否成功编程。可以尝试重新编程一次。
- 测量给电池供电的PFET输出引脚(PIN12)电压。如果电池未接,在恒流阶段该引脚应为跳变的PWM波形(用示波器看)。如果一直是高电平(接近5V),说明PFET一直关断,检查控制PFET的逻辑输出(PIN8)是否正常。
-
排查
:
-
问题:电池一直处于涓流充电状态,无法进入大电流快充。
-
排查
:
- 测量电池电压是否确实低于涓流阈值(如2.5V)。如果电池电压正常(>3V),那可能是ACMP1的阈值设置错了。
- 在GreenPAK Designer中检查ACMP1的负输入端(IN-)连接的DAC值,以及正输入端(IN+)的实际电压(通过分压电阻来自电池)。可以通过软件中的“引脚状态”查看工具实时读取ACMP1的输出,看它是否为高(表示电池电压低于阈值)。
- 检查分压电阻R4, R5的值是否焊接错误或虚焊,导致ACMP1检测到的电压比实际电池电压低很多。
-
排查
:
-
问题:充电末期(恒压阶段)电池电压不稳定,在目标值上下大幅波动。
-
排查
:
- 首要怀疑对象是硬件滤波 。用示波器探头(需用×10档位以减少对电路影响)测量ACMP0的输入引脚(即R3和C2的连接点)。应该看到一个比较平滑的直流电压,如果有明显的100Hz纹波或PWM频率的毛刺,说明滤波不足。尝试增大C2的容值(如从100nF增至1μF)。
- 检查软件中的 更新周期 (CNT4的Data值)。如果更新太快(比如Data值很小),环路会过于灵敏,容易振荡。适当增大这个值,比如从255增加到511(更新周期变为5秒)。
- 检查ACMP的 迟滞功能 是否启用。开启适当的迟滞(例如20mV),可以防止电压在阈值附近因微小噪声而频繁翻转。
-
排查
:
-
问题:充电无法自动终止,电池电压一直维持在4.2V,电流很小但不切断。
-
排查
:
- 检查 终止检测逻辑 。用示波器同时观察PWM波形和DLY5输出引脚的波形。在充电末期,PWM占空比应该很小。当低电平宽度超过设定值时,DLY5输出应该产生一个下降沿。
- 检查与门LUT2的另一个输入(来自恒压状态锁存)是否为高。只有恒压状态下,终止检测才有效。
-
最可能的原因
:实际终止电流对应的占空比,比你预设的DLY5阈值对应的占空比要
大
。也就是说,电流还没降到你的目标值,占空比就已经低于阈值了。这是因为计算平均电流的公式
I_avg = I_max * Duty中的I_max在恒压阶段是变化的(因为电池电压上升,电阻两端压差变小)。需要重新校准:在恒压末期,测量实际平均电流和PWM占空比,根据你想要的终止电流(如0.05C),反推出对应的占空比,然后调整DLY5的Data值。
-
排查
:
5.3 方案扩展与优化方向
这个基础框架有很大的扩展潜力:
- 多节电池串联充电 :只需修改分压电阻网络,将更高的总电池电压分压到ACMP的输入范围。同时,需要选择耐压更高的外部MOSFET(如果不用SLG46116V的内置FET)。充电逻辑完全一样。
- 温度监控与补偿 :增加一个NTC热敏电阻与电池热耦合,连接到GreenPAK的另一个ACMP或ADC引脚(部分型号支持)。在软件中,可以根据温度调整恒压值(高温时降低,低温时升高,但需注意0℃以下禁止充电)或最大充电电流,实现更安全的充电。
- 充电参数动态配置 :如果使用带有I2C接口的GreenPAK型号(如SLG46533V),可以通过主控MCU实时修改DAC值(调整充电电压、电流阈值),甚至改变PWM频率和更新速率,实现“智能自适应”充电。
- 支持不同化学体系电池 :通过软件配置不同的恒压阈值(如磷酸铁锂为3.6V),同一硬件可以适配多种电池,提高通用性。
- 低功耗优化 :充电完成后,可以通过逻辑彻底关闭振荡器(OSC)和大部分电路,仅保留一个低功耗检测电路,当检测到电池被取下或电压低于某值时重新启动充电,进一步降低待机功耗。
这个基于GreenPAK的充电器设计,完美诠释了“用数字逻辑思维解决模拟控制问题”的精妙之处。它可能没有专用充电IC那样“傻瓜化”,但它提供的灵活性、集成度和成本优势,在特定的项目需求面前是无法替代的。从调通第一个PWM信号,到看着它稳稳地将电池充满并自动停止,这种完全由自己定义和控制的过程,带来的成就感远非使用一颗现成芯片可比。如果你正在为一个空间、成本或功能集成度要求苛刻的项目寻找充电方案,不妨花点时间尝试一下这个思路,它可能会为你打开一扇新的大门。
253

被折叠的 条评论
为什么被折叠?



