BQ76952: 过流等异常保护后 读取电压电流寄存器的数据不正确。

Part Number: BQ76952

HI TI 团队:

       您好,我们用的是磷酸铁锂 5节,设计思路是让BQ完全自主工作,MCU只是采集一下电压、电流以及各状态。

       整个设计能正常工作,采集各方面都正常。现在遇到的问题是:未开启PF失效情况下,一旦异常(电芯欠压、过流3、过流2、过流1等)保护,MCU采集到的电压、电流、Batstatus 等寄存器值异常,但是控制逻辑是正常的:异常保护时,CHG、DSG断开,当异常消除时,CHG、DSG也能打开。

        1、 初始化的程序如下:

void BQ769x2_Init()
{
CommandSubcommands(BQ769x2_RESET); // 后面再看,是不是要取消。
delay_ms(300);
CommandSubcommands(SET_CFGUPDATE);//进入CONFIG_UPDATE模式
BQ769x2_SetRegister(CommType, 0x07, 1); //设置通讯模式:07速度为100Khz的模式
BQ769x2_SetRegister(PowerConfig,0x3882, 2); //允许SLeep,TS2为非Shutdown模式等
BQ769x2_SetRegister(REG0Config, 0x01, 1); //Reg0前置稳压
BQ769x2_SetRegister(REG12Config,0x0D, 1); //3.3V REG1开启
BQ769x2_SetRegister(TS1Config, 0x07, 1); //热敏电阻,0X07电芯内部温度检测
BQ769x2_SetRegister(TS2Config, 0x00, 1); //未使用
BQ769x2_SetRegister(TS3Config, 0x07, 1); //热敏电阻,0X07电芯内部温度检测

BQ769x2_SetRegister(CFETOFFPinConfig, 0x00, 1); //未使用
BQ769x2_SetRegister(DFETOFFPinConfig, 0x00, 1); //未使用
BQ769x2_SetRegister(ALERTPinConfig, 0x00, 1); //未使用
BQ769x2_SetRegister(HDQPinConfig, 0x00, 1); //未使用
BQ769x2_SetRegister(DCHGPinConfig, 0x00, 1); //未使用
BQ769x2_SetRegister(DDSGPinConfig, 0x00, 1); //未使用

BQ769x2_SetRegister(VCellMode, 0x800F, 2); //连接了1-4、16位置
BQ769x2_SetRegister(DAConfiguration, 0x1D, 1);//0x1D FET温度开启,10mV 1mA 为userA
BQ769x2_SetRegister(ChgPumpControl, 0x07, 1);//开启为控制的电压为11V等 0X03是5.5V 0X01是11V
BQ769x2_SetRegister(FETOptions, 0x2F, 1);//开启主机可控制,在睡眠模式下也可以启用CHG

//CHG DSG自主控制及控制内容
BQ769x2_SetRegister(MfgStatusInit, 0x0010, 2);//自主FET控制,开启永久失效检测,器件在操作期间不会对OTP进行编程。
BQ769x2_SetRegister(CHGFETProtectionsA, 0x98, 1);//CHG开启:放电短路、充电过流、电芯过压
BQ769x2_SetRegister(CHGFETProtectionsB, 0xD5, 1);//CHG开启:FET过热、内部过热、充电过热、内部欠温、充电欠温
BQ769x2_SetRegister(CHGFETProtectionsC, 0x50, 1);//CHG开启: 放电短路,电芯过压锁存,禁止预充电超时,禁止机看门狗故障保护
BQ769x2_SetRegister(DSGFETProtectionsA, 0xE4, 1);//DSG开启:放电短路、放电过流12、电芯欠压
BQ769x2_SetRegister(DSGFETProtectionsB, 0xE6, 1);//DSG开启:FET过热、内部过热、充电过热、内部欠温、放电欠温
BQ769x2_SetRegister(DSGFETProtectionsC, 0xE0, 1);//DSG开启: 使用放电短路,电芯过压锁存,禁止主机看门狗故障保护

//开启初级保护类型
BQ769x2_SetRegister(EnabledProtectionsA, 0xFC, 1);//0xE0只开过流 //0xFC使用全部短路,过流,过压,欠压保护
BQ769x2_SetRegister(EnabledProtectionsB, 0xF7, 1);//0x00关闭 //0xF7使用全部温度保护
BQ769x2_SetRegister(EnabledProtectionsC, 0xF0, 1);//0x80只开过流 //0xF0使用全部放电相关保护和电芯保护 ,禁止预充电超时,主禁止机看门狗故障保护


//保护参数设置
BQ769x2_SetRegister(COVThreshold, 0x55, 1);//电芯过压 86*50.6 =4.35V(默认)
BQ769x2_SetRegister(CUVThreshold, 0x32, 1);//3.0V电芯欠压 0x32 50*50.6 =2.53V(默认)

BQ769x2_SetRegister(OCCThreshold, 0x01, 1);//充电过流保护 1*2mV@1毫欧 2A
BQ769x2_SetRegister(SCDThreshold, 0x00, 1);//放电短路         10mV@1毫欧 10A
BQ769x2_SetRegister(OCD1Threshold,0x02, 1);//放电过流1    2*2mV@1毫欧 4A
BQ769x2_SetRegister(OCD2Threshold,0x01, 1);//放电过流2    1*2mV@1毫欧 2A
BQ769x2_SetRegister(OCD3Threshold,-1000,2);//放电过流3    -1A

BQ769x2_SetRegister(OTCThreshold, 0x37, 1);//充电过热保护 55°C (默认)
BQ769x2_SetRegister(OTDThreshold, 0x3C, 1);//放电过热保护 60°C (默认)
BQ769x2_SetRegister(OTFThreshold, 0x50, 1);//FET 过热保护 80°C (默认)
BQ769x2_SetRegister(OTINTThreshold,0x55,1);//内部过温保护 85°C (默认)
BQ769x2_SetRegister(UTCThreshold, 0x00, 1);//充电低温保护 00°C (默认)
BQ769x2_SetRegister(UTDThreshold, 0x00, 1);//放电低温保护 00°C (默认)
BQ769x2_SetRegister(UTINTThreshold,0xEC,1);//内部欠温保护 -20°C (默认)//注意负数

//次级保护 永久失效
BQ769x2_SetRegister(EnabledPFA, 0x00, 1);//0x00关闭
BQ769x2_SetRegister(EnabledPFB, 0x00, 1);//0x00关闭
BQ769x2_SetRegister(EnabledPFC, 0x00, 1);//0x00关闭

CommandSubcommands(LOAD_DETECT_ON);//开路检测

CommandSubcommands(SLEEP_DISABLE);
CommandSubcommands(EXIT_CFGUPDATE);
// CommandSubcommands(SEAL);
}

2、正常时寄存器的数据

  

3、过流3(-1A)异常后,DSG和CHG 断开,过流3消失后,温度、电压、电流状态就不正确了。IIC通讯正常,FET开关管的状态采集正确。

      

4、设计原理图