您好
我使用的是 BQ76952电路板。 I AM 电流正在使用 AFE 板进行电流校准。 我在读取 CC2和 CC3计数时遇到问题。 我正在使用 ReadDASTATUS5()子命令读取计数。 我得到的价值观似乎非常大。 我使用的是0.25mV 的检测电阻。 因此、根据公式 CC Gain = 7.5684/(以 mΩ 为单位的 Rsense) 、CCGain = 7.5684/0.25 = 30.2736的计算值、就 IEEE 浮点格式而言、该值为 0x41f23055。 而由于容量增益是 CC 增益乘以298261.6178。 我得到的值为 30.2736 * 298261.6178 = 9029452.91263008 (其值为 十六进制的0x4b09c74d)。
为了继续执行 校准和 OTP 编程指南中提到的任何类型的校准步骤、我应该具有一个正确的 CC2计数值。 因为所有校准步骤都涉及对 CC2计数值进行平均计算。 我尝试在多个实例中获取多个 CC2计数值。 但它给了我一个类似于下面所示的值。
根据代码、CC2计数我得到的值为:
根据 BQ769x2校准和 OTP 编程指南中的示例代码所述、上述值似乎是错误的。 有人能验证该代码吗?
以下是我的配置设置:
AFE_SetRegister (DAConfiguration、0x03、1);
AFE_SetRegister (CCGain、0x41f23055、4);//(单位 userA)
AFE_SetRegister (CapacityGain、0x4b09c74d、4);
AFE_SetRegister (CC3Samples、0x50、1);
以下是我读取 CC 计数的代码:
空子命令(uint16_t 命令、uint16_t 数据、uint8_t 类型)
//查看 TRM 或 BQ76952头文件,了解子命令的完整列表
{
//安全密钥和 MANU_DATA 写入不能与此函数一起使用(读取这些命令是可行的)
//最大回读大小为32字节,即 DASTATUS、CUV/COV 快照
uint8_t TX_Reg[4]={0x00、0x00、0x00、0x00};
uint8_t TX_Buffer[2]={0x00、0x00};
//TX_Reg 采用小端字节序格式
TX_Reg[0]=命令& 0xff;
TX_Reg[1]=(命令>> 8)& 0xff;
if (type == R){//读取
I2C_WriteReg (0x3E、TX_Reg、2);
HAL_DELAY (2);
I2C_ReadReg (0x40、RX_32byte、32);//RX_32byte 是全局变量
//I2C_ReadReg (command、RX_32字节、32);
}
否则、如果(类型=W){
//FET_Control、REG12_Control
TX_Reg[2]= DATA & 0xff;
I2C_WriteReg (0x3E、TX_Reg、3);
HAL_DELAY (1);
TX_Buffer[0]=校验和(TX_Reg,3);
TX_Buffer[1]= 0x05;//寄存器地址和数据的组合长度
I2C_WriteReg (0x60、TX_Buffer、2);
HAL_DELAY (1);
}
否则为(type == W2){//写入2个字节的数据
// CB_LVL、Active_Cells
TX_Reg[2]= DATA & 0xff;
TX_Reg[3]=(数据>> 8)& 0xff;
I2C_WriteReg (0x3E、TX_Reg、4);
HAL_DELAY (1);
TX_Buffer[0]=校验和(TX_Reg,4);
TX_Buffer[1]= 0x06;//寄存器地址和数据的组合长度
I2C_WriteReg (0x60、TX_Buffer、2);
HAL_DELAY (1);
}
}
void AFE_ReadDASTATUS5 ()
{
子命令(DASTATUS5、0x00、R);
CC2_Counts_32bit =((RX_32byte[27]<<24)+(RX_32byte[26]<<16)+(RX_32byte[25]<<8)+(RX_32byte[24]));
CC3_Counts =((RX_32byte[31]<<24)+(RX_32byte[30]<<16)+(RX_32byte[29]<<8)+(RX_32byte[28]));//字节8-11
CC3_CURRENT =((RX_32byte[21]<<8)+(RX_32byte[20]));//字节8-11
}
充电电流 I Applied 约为1安培、但 CC2值与施加的充电电流显著不同。 我不确定问题在哪里、非常感谢您的指导。
此致、
萨特维克派