This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] BQ76952:Bq76952电流校准(CC2计数)查询。

Guru**** 2394305 points
Other Parts Discussed in Thread: BQ76952

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1328526/bq76952-bq76952-current-calibration-cc2-counts-query

器件型号:BQ76952

您好  

我使用的是 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值与施加的充电电流显著不同。 我不确定问题在哪里、非常感谢您的指导。

此致、

萨特维克派

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Satvik:

    示例代码使用 READ_CAL1 ()子命令来获取 CC2计数、您可以尝试改用该子命令。

    我很好奇 CC2 Current 寄存器是否读出了一个接近您正在应用的1A 的值。 您能检查一下吗?

    此致、

    马克斯·韦博肯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是施加500 mA 电流后的结果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    萨特维克您好!

    正如 Max 提到的、您是否使用 READ_CAL1 ()子命令获得了 CC2计数?

    该子命令可以为您提供4个字节、但只应将中间的两个字节用于电流校准。 这在  校准和 OTP 编程指南

    此致、

    路易斯·埃尔南德斯·萨洛蒙

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Luis & Max:

    下面是我使用读取校准命令检查 CC2计数并仅读取中间的2个字节的代码。

    void AFE_BoardCalibOffset ()

    {

    子命令(READ_CAL1、0x00、R);

    CC2_CCS= Counts_Read_Cal ((RX_32byte[2]<<8)+(RX_32byte[1]));

    这将为我提供 CC2计数的值为13825

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    萨特维克您好!

    这听起来仍然有点高。 您是否正在施加电流?

    您能告诉我 整个寄存器的十六进制值是什么吗?

    此致、

    路易斯·埃尔南德斯·萨洛蒙