基于GreenPAK可编程芯片的锂离子电池CC-CV充电器设计与实现

AI助手已提取文章相关产品:

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)充电过程分为三个阶段:

  1. 涓流预充阶段 :当电池电压低于一个安全阈值(通常是2.8V-3.0V,本设计采用2.5V作为更保守的阈值)时,电池处于深度放电状态,内阻很大。此时如果直接大电流充电,会产生大量热量,损害电池甚至引发危险。因此,此阶段需要用一个很小的恒定电流(通常是0.05C-0.1C,比如对于2000mAh电池就是100-200mA)对电池进行“唤醒”,缓慢提升其电压至安全水平。
  2. 恒流快充阶段 :当电池电压上升到预充阈值以上(如>3.0V),电池进入可接受大电流充电的状态。此阶段,充电器以最大允许的恒定电流(例如0.5C-1C,即1A-2A)对电池充电,电池电压随之快速上升。这是充电速度最快的阶段,电池吸收绝大部分电量。
  3. 恒压吸收阶段 :当电池电压达到设定的终止电压(如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]

具体到原理图,关键部分如下:

  1. 电源输入 :采用标准的5V USB电源输入。这是目前最通用、最易得的电源。
  2. 充电功率通路
    • 限流电阻 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,此二极管可以省略。
  3. 电池电压采样与滤波
    • 分压电阻 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,是合适的。
  4. 涓流充电通路 :由另一个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软件中,我们像搭积木一样构建充电状态机。主要功能模块如下:

  1. 时钟源(OSC) :提供系统主时钟。我们选择内部RC振荡器,频率设为25kHz。然后通过一个4分频器(CNT/DLY块配置为分频模式)得到6.25kHz时钟,作为PWM时基。
  2. 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脉冲提前,占空比减小。
  3. 电压监测与状态机
    • ACMP1 :监测电池电压是否低于2.5V。若低于,其输出有效,系统进入“涓流预充”状态。此状态下,会关闭PWM输出,并开启涓流充电GPIO。
    • ACMP0 :监测电池电压是否达到4.2V(恒压点)。其输出是“UP/DOWN”信号的来源,直接控制PWM占空比的增减。
    • 状态锁存 :使用一个OR门(L1)配合反馈,锁存“已进入恒压阶段”这一状态。一旦ACMP0输出第一次变高(表示电压达到4.2V),状态就被锁存,系统从“恒流阶段”永久切换到“恒压阶段”。
  4. 占空比更新与低通滤波 :恒压阶段的占空比调整不能太快,否则系统会振荡。我们使用另一个计数器CNT4,将其Data设为255,使其每255个PWM周期(约2.5秒)才产生一个“更新使能”脉冲。只有在这个脉冲有效时,ACMP0的UP/DOWN信号才能去调整PWM占空比。这相当于在数字控制环中加入了“速度限制”,让系统平稳。
  5. 充电终止检测 :使用一个可配置延迟块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 编程、调试与实测流程

  1. 软件设计 :在GreenPAK Designer中完成上述逻辑连接和参数配置后,进行仿真。利用软件的仿真工具,给ACMP输入施加一个缓慢上升的电压斜坡,观察PWM输出、状态指示灯等信号是否符合预期。
  2. 硬件连接 :将设计下载到GreenPAK开发板(如SLG4DVKADV)。按照原理图连接好5V电源、限流电阻、滤波电路,并接上待充电的锂离子电池(建议先用一个可调电子负载模拟电池进行初步测试,更安全)。
  3. 参数校准
    • 不接电池,在电池端接入一个可调直流电源,模拟电池电压。
    • 缓慢调节电源电压从2V到4.3V。
    • 用示波器观察PWM输出引脚和状态LED引脚。
    • 校准涓流阈值 :调节电源电压,找到LED状态从“涓流”变为“恒流”的电压点,调整GreenPAK中ACMP1的DAC值,使这个翻转点精确发生在2.5V(或你设定的值)。
    • 校准恒压阈值 :继续调高电压,找到状态��入“恒压”(LED开始闪烁)的电压点,调整ACMP0的DAC值,使翻转点发生在4.2V。
    • 观察恒压控制 :在4.2V附近微调电源电压,应能看到PWM占空比随之增减,试图将电压“拉回”4.2V。
  4. 实际充电测试
    • 连接一个真实但电量不满的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 常见问题与排查技巧

在实际制作和调试中,我遇到了以下几个典型问题,这里分享排查思路:

  1. 问题:上电后无任何反应,LED不亮,不充电。

    • 排查
      • 首先检查5V电源是否正常接入GreenPAK的VDD引脚。
      • 用万用表测量GreenPAK的VDD和VSS之间电压,确认为5V。
      • 检查编程接口是否接触良好,芯片是否成功编程。可以尝试重新编程一次。
      • 测量给电池供电的PFET输出引脚(PIN12)电压。如果电池未接,在恒流阶段该引脚应为跳变的PWM波形(用示波器看)。如果一直是高电平(接近5V),说明PFET一直关断,检查控制PFET的逻辑输出(PIN8)是否正常。
  2. 问题:电池一直处于涓流充电状态,无法进入大电流快充。

    • 排查
      • 测量电池电压是否确实低于涓流阈值(如2.5V)。如果电池电压正常(>3V),那可能是ACMP1的阈值设置错了。
      • 在GreenPAK Designer中检查ACMP1的负输入端(IN-)连接的DAC值,以及正输入端(IN+)的实际电压(通过分压电阻来自电池)。可以通过软件中的“引脚状态”查看工具实时读取ACMP1的输出,看它是否为高(表示电池电压低于阈值)。
      • 检查分压电阻R4, R5的值是否焊接错误或虚焊,导致ACMP1检测到的电压比实际电池电压低很多。
  3. 问题:充电末期(恒压阶段)电池电压不稳定,在目标值上下大幅波动。

    • 排查
      • 首要怀疑对象是硬件滤波 。用示波器探头(需用×10档位以减少对电路影响)测量ACMP0的输入引脚(即R3和C2的连接点)。应该看到一个比较平滑的直流电压,如果有明显的100Hz纹波或PWM频率的毛刺,说明滤波不足。尝试增大C2的容值(如从100nF增至1μF)。
      • 检查软件中的 更新周期 (CNT4的Data值)。如果更新太快(比如Data值很小),环路会过于灵敏,容易振荡。适当增大这个值,比如从255增加到511(更新周期变为5秒)。
      • 检查ACMP的 迟滞功能 是否启用。开启适当的迟滞(例如20mV),可以防止电压在阈值附近因微小噪声而频繁翻转。
  4. 问题:充电无法自动终止,电池电压一直维持在4.2V,电流很小但不切断。

    • 排查
      • 检查 终止检测逻辑 。用示波器同时观察PWM波形和DLY5输出引脚的波形。在充电末期,PWM占空比应该很小。当低电平宽度超过设定值时,DLY5输出应该产生一个下降沿。
      • 检查与门LUT2的另一个输入(来自恒压状态锁存)是否为高。只有恒压状态下,终止检测才有效。
      • 最可能的原因 :实际终止电流对应的占空比,比你预设的DLY5阈值对应的占空比要 。也就是说,电流还没降到你的目标值,占空比就已经低于阈值了。这是因为计算平均电流的公式 I_avg = I_max * Duty 中的 I_max 在恒压阶段是变化的(因为电池电压上升,电阻两端压差变小)。需要重新校准:在恒压末期,测量实际平均电流和PWM占空比,根据你想要的终止电流(如0.05C),反推出对应的占空比,然后调整DLY5的Data值。

5.3 方案扩展与优化方向

这个基础框架有很大的扩展潜力:

  1. 多节电池串联充电 :只需修改分压电阻网络,将更高的总电池电压分压到ACMP的输入范围。同时,需要选择耐压更高的外部MOSFET(如果不用SLG46116V的内置FET)。充电逻辑完全一样。
  2. 温度监控与补偿 :增加一个NTC热敏电阻与电池热耦合,连接到GreenPAK的另一个ACMP或ADC引脚(部分型号支持)。在软件中,可以根据温度调整恒压值(高温时降低,低温时升高,但需注意0℃以下禁止充电)或最大充电电流,实现更安全的充电。
  3. 充电参数动态配置 :如果使用带有I2C接口的GreenPAK型号(如SLG46533V),可以通过主控MCU实时修改DAC值(调整充电电压、电流阈值),甚至改变PWM频率和更新速率,实现“智能自适应”充电。
  4. 支持不同化学体系电池 :通过软件配置不同的恒压阈值(如磷酸铁锂为3.6V),同一硬件可以适配多种电池,提高通用性。
  5. 低功耗优化 :充电完成后,可以通过逻辑彻底关闭振荡器(OSC)和大部分电路,仅保留一个低功耗检测电路,当检测到电池被取下或电压低于某值时重新启动充电,进一步降低待机功耗。

这个基于GreenPAK的充电器设计,完美诠释了“用数字逻辑思维解决模拟控制问题”的精妙之处。它可能没有专用充电IC那样“傻瓜化”,但它提供的灵活性、集成度和成本优势,在特定的项目需求面前是无法替代的。从调通第一个PWM信号,到看着它稳稳地将电池充满并自动停止,这种完全由自己定义和控制的过程,带来的成就感远非使用一颗现成芯片可比。如果你正在为一个空间、成本或功能集成度要求苛刻的项目寻找充电方案,不妨花点时间尝试一下这个思路,它可能会为你打开一扇新的大门。

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值