调试 BQ25703A 后,我总结了几个 Charge IC 的核心问题


📺 B站 嵌入式孙老师博主个人介绍
📘 博主书籍-京东购买链接Yocto项目实战教程
📘 加博主微信,进技术交流群jerrydev


最近在调试电池充电和系统供电时,我对 BQ25703A 做了一次比较完整的梳理。

一开始我也有几个疑问:

  • Charge IC 上电后,软件还需要配置吗?
  • IIN_HOST 默认为什么是 3.3A?
  • IIN_HOSTILIM_HIZ 会不会冲突?
  • 输入过流、过压为什么可能导致系统重启?
  • 数据手册写的是 0xD6,为什么 Linux 使用 0x6B

在这里插入图片描述

后来我发现,理解这类充电 IC,不能只盯着某一个寄存器。更重要的是先看懂适配器、电池和系统之间的功率关系。

1. 先看懂 BQ25703A 在系统中的作用

在这里插入图片描述

BQ25703A 不只是给电池充电。

它还要管理三部分之间的功率:

适配器输入
    ↓
BQ25703A
   ├──→ 系统负载 VSYS
   └──→ 电池充电

适配器拔掉或者输入功率不足时,电池还可以反过来给系统供电:

电池 → BQ25703A → VSYS

Q1~Q4 和电感组成四开关 Buck-Boost 电路,因此它既能降压,也能升压。

例如:

20V输入 → 12.6V电池:主要是降压
9V输入 → 12V系统:需要升压

这也是 BQ25703A 适合多档 USB PD 输入的原因。

输入功率不足时会发生什么

BQ25703A 会优先保证系统供电。

当系统负载增加时,一般按照下面的顺序处理:

  1. 降低电池充电电流;
  2. 必要时停止充电;
  3. 输入仍然不足时,由电池给系统补能;
  4. 如果输入和电池都无法满足负载,VSYS 下降;
  5. VSYS 低于下游电源门限,系统重启。

所以,Charge IC 触发限流并不等于芯片重启。

很多时候真正导致重启的是:

输入功率不足 → 电池无法补能 → VSYS跌落 → 系统欠压重启

2. 我认为最需要分清的几个配置

IIN_HOST:软件输入电流限制

IIN_HOST 表示主机允许 Charge IC 从适配器端取得的最大输入电流。

它限制的是输入电流,不是电池充电电流。

BQ25703A 官方给出的默认值是:

IIN_HOST默认值 = 3.3A

这个值以 RAC=10mΩ 为基准。

需要注意,3.3A 只是寄存器默认值,不是芯片内部已经运行了一套完整的充电固件。

软件仍然需要根据实际情况配置:

  • 适配器最大电流;
  • 电池充电电流;
  • 电池最高电压;
  • 最低系统电压;
  • USB PD 协商结果。

而且适配器移除后,IIN_HOST 会恢复到默认 3.3A。因此,如果产品要求限制在 3.0A,软件需要在适当时机重新写入。

IIN_HOST 的计算

IIN_HOST 使用 50mA 步进,并带有 50mA 偏移:

IIN_HOST = (Code + 1) × 50mA

反过来:

Code = IIN_HOST / 50mA - 1

例如设置 3A:

Code = 3000 / 50 - 1
     = 59
     = 0x3B

对应字段值为:

0x3B00

几个常用值如下:

输入电流Code字段值
0.5A90x0900
1.5A290x1D00
3.0A590x3B00
3.3A650x4100

这里还有一个细节:

Code = 0,不是0A,而是50mA

ILIM_HIZ:硬件限制或外部调节

ILIM_HIZIIN_HOST 并不冲突。

我更愿意这样理解:

IIN_HOST:软件设置的输入电流上限
ILIM_HIZ:硬件或外部模拟环路设置的限制

两者同时启用时,实际输入电流由更严格的条件决定:

IIN实际 ≈ min(
    IIN_HOST,
    ILIM_HIZ限制,
    适配器能力,
    其他DPM限制
)

一种比较合理的配置是:

IIN_HOST = 3.0A
ILIM_HIZ硬件限制略高

这样正常情况下由软件控制;软件没有初始化或者配置异常时,还有硬件限制兜底。

ILIM_HIZ 与输入电流之间的关系为:

VILIM_HIZ = 1V + 40 × IDPM × RAC

因此:

IDPM = (VILIM_HIZ - 1V) / (40 × RAC)

如果 RAC=10mΩ

IDPM = (VILIM_HIZ - 1V) / 0.4

这里不能只看原理图旁边标注了多少安培,还应该结合实际分压、检测电阻误差和测试结果重新核对。

输入电流和充电电流不是一回事

这是我调试时觉得最容易混淆的地方。

输入端的功率除了给电池充电,还要供系统运行:

P输入 ≈ P系统 + P充电 + P损耗

例如适配器是 20V/3A:

最大输入功率约为60W

如果系统已经消耗 40W,留给电池充电的功率就只剩约 20W,还没有计算转换损耗。

因此,系统负载增加时看到充电电流下降,通常是正常现象。

3. 硬件和软件配置上的几个经验

两个检测电阻不要混淆

BQ25703A 有两组主要的电流检测:

检测位置引脚作用
输入侧 RACACP/ACN输入电流检测和输入限流
电池侧 RSRSRP/SRN电池充放电电流检测

手册中的电流换算通常以 10mΩ 为基准。

如果实际检测电阻改变:

I实际 ≈ I寄存器标称 × 10mΩ / R实际

例如换成 20mΩ,相同寄存器配置对应的实际电流约减半。

检测电阻的采样线还应该使用 Kelvin 连接,从电阻焊盘内侧单独引出,并远离电感和 SW 开关节点。否则软件设置为 3A,实际限流点可能存在明显偏差。

充电电压必须按电池规格设置

最高充电电压的基本计算是:

最高充电电压 = 串数 × 单节满充电压

例如普通 3S 锂电池:

3 × 4.20V = 12.60V

但不是所有电芯都是 4.20V,也可能是 4.10V 或 4.35V,因此最终必须以电池规格书为准。

充电电流也不能只看芯片支持多大,而应该取以下条件中的最小值:

电芯允许电流
BMS允许电流
适配器剩余功率
连接器和PCB能力
MOSFET、电感及检测电阻能力
整机散热能力

我的保守起始配置

假设使用:

RAC = 10mΩ
RSR = 10mΩ
3S普通锂电池
20V/3A适配器

我会先从下面的值开始:

参数建议起始值
IIN_HOST3.0A
充电电流1.5~2.0A
最高充电电压12.60V
最低系统电压约9.0V
OTG默认关闭

先使用较小的充电电流,确认输入电压、VSYS、充电方向、开关波形和温升都正常,再逐步提高。

如果使用 USB PD,IIN_HOST 最好跟随协商结果动态调整:

IIN_HOST = min(
    适配器协商电流 × 降额系数,
    板级安全上限
)

降额系数可以先从 0.85~0.95 开始,再根据线缆压降、瞬态和温升测试调整。

I²C 地址为什么使用 0x6B

数据手册中的 0xD6 是包含读写位的 8 位写地址:

0xD6 >> 1 = 0x6B

所以:

7位设备地址:0x6B
写地址字节:0xD6
读地址字节:0xD7

Linux 设备树中应该写:

charger@6b {
    reg = <0x6b>;
};

最后总结

调试 BQ25703A 后,我认为最核心的是下面几点:

  • BQ25703A 不只是充电器,也是系统功率路径管理器;
  • IIN_HOST 默认是 3.3A,但产品仍然需要软件配置;
  • IIN_HOST 管软件输入上限,ILIM_HIZ 可以作为硬件兜底;
  • 输入电流不等于电池充电电流,分析问题时应该先看功率;
  • 触发输入限流通常不会直接重启,真正需要关注的是 VSYS 是否跌落;
  • 输入侧 RAC 和电池侧 RSR 作用不同,不能混淆;
  • 最终电流上限不是由某一个寄存器决定,而是由适配器、电池、功率器件、PCB 和散热中最弱的一环决定。

简单来说:

IIN_HOST 决定允许从适配器取多少电流,充电电流寄存器决定给电池充多少电流,ILIM_HIZ 提供外部限制或硬件兜底。BQ25703A 负责在系统和电池之间分配功率,但真正的安全边界,需要硬件与软件共同确定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值