我们在原理图中使用 BQ25713芯片。 原理图设计基于 BQ25713开发板原理图。
我们使用 的是12-14V 适配器和3节锂离子电池。
我们面临着几个问题。
如果我们从 VSYS 汲取的电流不超过6A、则适配器的充电电流和功耗是可以的。
当 VSYS 上的加载消耗的电流超过6A (大约)的时间达到大约10s 时、就会出现此问题。 然后输入电流降至3A 左右、剩余电流从电池消耗。
如果 VSYS 断开连接、电池充电电流也会降至0.4A。 如果我在该状态下连接相同的负载(峰值高于6A)、则输入电流限制在3A 左右、剩余电流再次从电池消耗。
适配器可提供高达10A 的电流。
我的初始 BQ25716配置(POR 之后):
void Configure_BQ25713_on (void)
{
//配置 BQ25713
I2C_REG_addr = 0x0C;//MinSysVoltage (两个寄存器) 0x0D - 0x0C
I2C_DATA_FULL = 0x6E00;//11776mV
I2C_DATA[0]=(I2C_DATA_FULL & 0xFF);//寄存器数据 LSB
I2C_DATA[1]=((I2C_DATA_FULL >> 8)和0xFF);//注册数据 MSB
i2cSend (I2C_ADDR_BQ25713、I2C_REG_addr、 2 、&I2C_DATA[0]);/2字节长度
//
I2C_REG_addr = 0x0E;//输入电流限制(两个寄存器) 0x0F - 0x0E
I2C_DATA_FULL = 0x7F00;//IIN_HOST = 6350mA
I2C_DATA[0]=(I2C_DATA_FULL & 0xFF);//寄存器数据 LSB
I2C_DATA[1]=((I2C_DATA_FULL >> 8)和0xFF);//注册数据 MSB
i2cSend (I2C_ADDR_BQ25713、I2C_REG_addr、 2 、&I2C_DATA[0]);/2字节长度
//
//如果输入电压下降超过 InputVoltage 寄存器允许的值,则器件进入 DPM 并减小充电电流。
I2C_REG_addr = 0x0A;//输入电压限制(两个寄存器) 0x0B - 0x0A
I2C_DATA_FULL = 10880 - 3200;//10880mV - 3200mV 偏移
I2C_DATA[0]=(I2C_DATA_FULL & 0xFF);//寄存器数据 LSB
I2C_DATA[1]=((I2C_DATA_FULL >> 8)和0xFF);//注册数据 MSB
i2cSend (I2C_ADDR_BQ25713、I2C_REG_addr、 2 、&I2C_DATA[0]);/2字节长度
//
I2C_REG_addr = 0x04;//充电电压限制(两个寄存器) 0x05 - 0x04
I2C_DATA_FULL = 12304;//12304mV (对于锂离子3S2P 电池组、充电电压限制(两个寄存器) 0x05 - 0x04 = 0x3010 (8mV 阶跃))
I2C_DATA[0]=(I2C_DATA_FULL & 0xFF);//寄存器数据 LSB
I2C_DATA[1]=((I2C_DATA_FULL >> 8)和0xFF);//注册数据 MSB
i2cSend (I2C_ADDR_BQ25713、I2C_REG_addr、 2 、&I2C_DATA[0]);/2字节长度
//
I2C_REG_addr = 0x02;//充电电流限制(两个寄存器) 0x03 - 0x02
I2C_DATA_FULL = 2048;//2048mA
I2C_DATA[0]=(I2C_DATA_FULL & 0xFF);//寄存器数据 LSB
I2C_DATA[1]=((I2C_DATA_FULL >> 8)和0xFF);//注册数据 MSB
i2cSend (I2C_ADDR_BQ25713、I2C_REG_addr、 2 、&I2C_DATA[0]);/2字节长度
//
I2C_REG_addr = 0x00;//充电选项0 (两个寄存器) 0x01 - 0x00
I2C_DATA_FULL = 0x020E;//多个设置:EN_LWPWR = 0、WDTMR_ADJ =禁用、IDPM_AUTO_DISABLE = 0、OTG_ON_CHROK = 0、EN_OOA = 0、 PWM_FREQ = 800kHz、LOW_PTM_RIPPLE = 0、
//SYS_SHORT _DISABLE = 0、EN_LEARN = 0、IADT 增益= 20x、IDCHG 增益= 16x、EN_LDO = 1、EN_IDPM = 1、CHRG_INHIBIT = 0
I2C_DATA[0]=(I2C_DATA_FULL & 0xFF);//Reg 数据 LSB
I2C_DATA[1]=((I2C_DATA_FULL >> 8)和0xFF);//注册数据 MSB
i2cSend (I2C_ADDR_BQ25713、I2C_REG_addr、 2 、&I2C_DATA[0]);/2字节长度
//
I2C_REG_addr = 0x32;//充电选项2 (两个寄存器) 0x33 - 0x32
/////////////////////////////////// I2C_DATA_FULL = 0x0237;//PKPWR_TOVLD = 1ms、EN_PKPWR_IDPM=0、EN_PKPWR_VSYS_0、PKPWR_OVLD_STAT=0、PKPWR_RELEASE_STAT =0、 PKPWR_TMAX[1:0]=10b (20ms)、
//EN_EXTLIM = 0 (输入电流限制由 REG0x0F/0E 设置)、IBAT_SEL=0、Q2_OCP=1、ACX_OCP=1、EN_ACOC=0、 ACOC_VTH=1、EN_BATOC=1、BATOC_VTH=1
/////test
I2C_DATA_FULL = 0x2237;//PKPWR_TOVLD = 1ms、EN_PKPWR_IDPM...、 EN_EXTLIM = 0 (输入电流限制由 REG0x0F/0E 设置)
I2C_DATA[0]=(I2C_DATA_FULL & 0xFF);//寄存器数据 LSB
I2C_DATA[1]=((I2C_DATA_FULL >> 8)和0xFF);//注册数据 MSB
i2cSend (I2C_ADDR_BQ25713、I2C_REG_addr、 2 、&I2C_DATA[0]);/2字节长度
//
I2C_REG_addr = 0x3A;//ADC 选项(两个寄存器) 0x3B - 0x3A
I2C_DATA_FULL = 0xA0FF;//启用所有 ADC 和 ADC_CONV = 1秒
I2C_DATA[0]=(I2C_DATA_FULL & 0xFF);//寄存器数据 LSB
I2C_DATA[1]=((I2C_DATA_FULL >> 8)和0xFF);//注册数据 MSB
i2cSend (I2C_ADDR_BQ25713、I2C_REG_addr、 2 、&I2C_DATA[0]);/2字节长度
}
什么会导致这种奇怪的行为? 初始配置可能错误?
此外,我不知道如何在 CHRG_OK 的任何条件为低电平并且输入电流限制重置为默认值3.3A 后正确地避免 ChargeCurrent()重置零,因此我可以定期运行此代码来恢复值:
i2cReceive (I2C_ADDR_BQ25713、0x20、2、&I2C_DATA[0]);//0x20 =充电状态寄存器
如果(bit_in_set (I2C_DATA[1]、7))//检测到主电源? (MSB.7 AC_STAT = 1 (交流存在))
{
//检查在 CHRG_OK 的任何条件为低电平后 ChargeCurrent ()是否复位为零
i2cReceive (I2C_ADDR_BQ25713、0x02、2、&I2C_DATA[0]);//充电电流限制寄存器
如果(I2C_DATA[0]= 0 && I2C_DATA[1]= 0)
{
//恢复电荷电流限制值
I2C_DATA_FULL = 2048;//2048mA
I2C_DATA[0]=(I2C_DATA_FULL & 0xFF);//寄存器数据 LSB
I2C_DATA[1]=((I2C_DATA_FULL >> 8)和0xFF);//注册数据 MSB
i2cSend (I2C_ADDR_BQ25713、0x02、 2、 &I2C_DATA[0]);//充电电流限制(两个寄存器) 0x03 - 0x02
}
//移除适配器后、输入电流限制重置为默认值3.3A
//检查输入电流限制是否已重置为默认值
i2cReceive (I2C_ADDR_BQ25713、0x0E、2、&I2C_DATA[0]);//输入电流限制寄存器
如果(I2C_DATA[0]= 0x00 && I2C_DATA[1]= 0x41)
{
//恢复输入电流限制值
I2C_REG_addr = 0x0E;//输入电流限制(两个寄存器) 0x0F - 0x0E
I2C_DATA_FULL = 0x7F00;//IIN_HOST = 6350mA
I2C_DATA[0]=(I2C_DATA_FULL & 0xFF);//寄存器数据 LSB
I2C_DATA[1]=((I2C_DATA_FULL >> 8)和0xFF);//注册数据 MSB
i2cSend (I2C_ADDR_BQ25713、I2C_REG_addr、 2 、&I2C_DATA[0]);/2字节长度
}
}

