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、设计原理图