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.

[参考译文] BQ76942:电芯平衡未激活。

Guru**** 2547580 points
Other Parts Discussed in Thread: BQ76942

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1245177/bq76942-cell-balancing-not-activating

器件型号:BQ76942

您好!

我有一个使用 BQ76942作为 AFE 的定制电路板。 配置为6S。 即使 存在120mV+的不平衡、我也无法让 AFE 平衡电芯。 (使用实数单元格)

以下是固件中的设置以及与我尝试设置的内容相关的注释:

    BQ769x2_SetRegister(BalancingConfiguration, 0x1F, 1); 
    BQ769x2_SetRegister(CellBalanceInterval, 0x14, 1); //Set cell balancing interval to 30s.
	BQ769x2_SetRegister(CellBalanceMaxCells, 0x03, 1); //Set max cell balancing to 3 cells.
	BQ769x2_SetRegister(CellBalanceMinCellVCharge, 0x0C80, 2); //Balancing will happen only when cell vol above 3200mV in Charge mode.
	BQ769x2_SetRegister(CellBalanceMinCellVRelax, 0x0C80, 2); //Balancing will happen only when cell vol above 3200mV in Relax mode.

以下是我的 PowerConfig 设置:

BQ769x2_SetRegister(PowerConfig, 0x0D80, 2);

我还尝试使用以下代码打印 CB_ACTIVE_CELLS 0x0083:此输出始终为0。

uint16_t BQ769x2_ReadBalancingActive()
// Reads no of cells undergoing balancing.
{
	DirectCommands(CB_ACTIVE_CELLS, 0x00, R);
	return (RX_data[1]*256 + RX_data[0]);

以下是其他几点:

-我的温度都在极限范围内

- My CHG 和 DSG Threshold 设置为默认值。

请告诉我、为了在休息模式下启用电池平衡、除了这一点之外、还需要做什么、并请查看我是否将所有设置正确。

提前感谢、

Abhijith

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

    尊敬的 Abhijith:

    我有几个简短的问题:

    1.您是否已从您写入的寄存器中读取过,以确认更改是否已完成?

    2.您是否在设备充电时尝试过电池平衡?

    3、您为 Cell Balance Min Delta 和 Cell Balance Stop Delta 寄存器配置了什么?

    4.除电池平衡外、器件是否正常运行?

    值得注意的是、VC16和 VC15必须在它们之间填充一个电芯、以使器件正常平衡。 我不确定您是否做过这件事、但值得注意。 您为6S 配置填充了哪些 VCx 引脚?

    此致!

    A·内德尔费尔德

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

    尊敬的 Asher:感谢您一直以来提供的帮助。

    1、不、我还没有这么做。 我将进行尝试、并将结果添加为编辑内容。

    2、有点像。 充电结束时的不平衡非常轻微。 但电池单元开始时不平衡情况非常小。 我们没有明确尝试造成严重的不平衡,也没有检查它是否平衡。 我们还没有尝试监控 CB_ACTIVE_CELLS 来检查状态是否发生变化。

    3、它们为默认值。 我尚未配置它们。 因此、最小 Delta = 40mV、停止 Delta = 20mV。

    4、是的、我们到目前为止已测试的所有函数都可以正常工作。

    我的器件是 BQ76942、不是52、因此是 VC10和 VC9。 我们在中间有一个单元- VC0和 VC1、VC1和 VC2、VC2和 VC3、VC4和 VC5、VC5和 VC6、 VC9和 VC10。

    此外、该器件是否还需要处于睡眠模式才能启动自主电池平衡?

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

    尊敬的 Abhijith:

    听起来不错、请让我知道更改是否有效且可读。 该器件无需处于 SLEEP 模式即可开始平衡。 根据 Balancing Configuration 寄存器、有三个选项可供选择:

    1. CB_SLEEP:该器件将在 SLEEP 模式下开始进行电池平衡

    2. CB_RELAX:当消耗的电流足够低、以至于器件已进入 RELAX 模式时、该器件可以进行电芯平衡。

    3. CB_CHG:该器件可在电池充电时进行电池平衡。

    这些都不是相互排斥的、并且它们都可以设置为 true。 此外、我只是想检查一下、但您是使用 TI 提供的 BQ769x2_SetRegisters ()函数、还是编写了您自己的函数?

    此致!

    A·内德尔费尔德

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

    您好、是的、通过将 BalancingConfiguration 设置为0x1F、我将设置您提到的全部3个。

    是的、我在 STM_I2C 示例中使用的是 TI 提供的相同 BQ769x2_SetRegisters ()函数。

    您能指导我如何读回寄存器吗? 我对此有问题。

    此外、我正在考虑主机控制型平衡、因此、对于这一点、在 while (1)循环中、子命令(CB_SET_LVL、0x0C80、W2);//开始对3200mV 以上到 StopDelta 的主机平衡、只执行此操作将启用开始平衡? (还将 BalancingConfiguration 更改为0x0F、以接受主机控制的平衡。)

    如果需要、我们应该将 CB_ACTIVE_CELLS 设置为什么? 我们可以忽略它吗? 我被 CB_ACTIVE_CELLS 和 CB_SET_LVL 混淆。 请告诉我区别。 另外、如果要执行主机控制器平衡、请让我知道应该设置什么。

    有关主机控制平衡的其他几个问题:
    1、如果我选择执行主机控制型平衡、那么我要设置哪些所有参数? AFE 是否仍会尊重 StopDelta、MinDelta、CellBalanceInterval 和此类其他参数? 基本上、主机应根据电池电压决定要平衡哪些电池?
    2、如果我确定应平衡哪个电池、该命令会如何更改(假设是电池2):子命令(CB_ACTIVE_CELLS、0x???、W2);

    这是我现在尝试过的(结果:不平衡):

        if (cellImbalance > 30)
        {
            if ((HAL_GetTick() - lastBalancingTime) > 29000)
            {
            Subcommands(CB_SET_LVL, 0x0C80, W2);
            lastBalancingTime = HAL_GetTick();
            }
    
        }


    抱歉、我问的问题太多、我目前缺少一个团队。 感谢您的帮助。
    Abhijith

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

    尊敬的 Abhijith:

    与 SetRegisters ()函数类似,TI 还提供了应返回寄存器中包含的值的 ReadReg ()功能示例。 我将它附在下面。

    int I2C_ReadReg(uint8_t reg_addr, uint8_t *reg_data, uint8_t count)
    {
    	unsigned int RX_CRC_Fail = 0;  // reset to 0. If in CRC Mode and CRC fails, this will be incremented.
    	uint8_t RX_Buffer [MAX_BUFFER_SIZE] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
    #if CRC_Mode
    	{
    		uint8_t crc_count = 0;
    		uint8_t ReceiveBuffer [10] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
    		crc_count = count * 2;
    		unsigned int j;
    		unsigned int i;
    		unsigned char CRCc = 0;
    		uint8_t temp_crc_buffer [3];
    
    		HAL_I2C_Mem_Read(&hi2c1, DEV_ADDR, reg_addr, 1, ReceiveBuffer, crc_count, 1000);
    		uint8_t crc1stByteBuffer [4] = {0x10, reg_addr, 0x11, ReceiveBuffer[0]};
    		CRCc = CRC8(crc1stByteBuffer,4);
    		if (CRCc != ReceiveBuffer[1])
    		{
    			RX_CRC_Fail += 1;
    		}
    		RX_Buffer[0] = ReceiveBuffer[0];
    
    		j = 2;
    		for (i=1; i<count; i++)
    		{
    			RX_Buffer[i] = ReceiveBuffer[j];
    			temp_crc_buffer[0] = ReceiveBuffer[j];
    			j = j + 1;
    			CRCc = CRC8(temp_crc_buffer,1);
    			if (CRCc != ReceiveBuffer[j])
    				RX_CRC_Fail += 1;
    			j = j + 1;
    		}
    		CopyArray(RX_Buffer, reg_data, crc_count);
    	}
    #else
    	HAL_I2C_Mem_Read(&hi2c1, DEV_ADDR, reg_addr, 1, reg_data, count, 1000);
    #endif
    	return 0;
    }

    CB_ACTIVE_CELLS (CAC)和 CB_SET_LVL (CSL)具有两种不同的用途、但两者都用于平衡。 您只需要使用其中的一个。 另请注意、如果希望使用手动控制、请确保 Settings:Cell Balancing Config:Balancing Configuration[CB_NO_CMD]位设置为0、否则命令将被阻止。 您还需要确定希望电池平衡多长时间、因为内置的时间可以防止电池无限期平衡。 该计时器的值位于 Settings:Cell Balancing Config:Cell Balance Interval。 有关配置以太网交换机的

    CAC:允许您打开单个电池的电池平衡。 当该寄存器中的一个位置为高时、将与该位对应的电芯进行平衡、直到该位被置为低电平。 这意味着您将必须处理电池已足够平衡的时间、并在 MCU 的软件侧将其关闭。 这为您提供了最强的电池平衡控制能力、但它会占用更多的软件资源。

    CSL:这允许您设置电压值以将所有电池平衡到预设值。 这是一种非常简单的平衡方法、但对于手动电池平衡来说、这是最低的软件密集型方法。 它将平衡电池、直到它们达到存储在寄存器中的电压电平。

    1.对于手动电池平衡(禁用自动平衡),不涉及 StopDelta 等功能。 电芯平衡将由 CAC、CSL 和 Cell Balance Interval 级别控制、该级别将确定电芯是否正在平衡。

    2.如果要平衡电芯(1-16),则应将相应的位设置为高电平。 例如、对于电池3、命令应为子命令(CB_ACTIVE_CELLS、0x0004、W2)。 对于电池8、该命令应为子命令(CB_ACTIVE_CELLS、0x0080、W2)。 对于电池8和电池3、命令应为子命令(CB_ACTIVE_CELLS、0x0084、W2)。

    此致!

    A·内德尔费尔德

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

    尊敬的 Asher:感谢您的讲解。

    关于 CSL 的一些后续问题:

    1、如果考虑一个3节电池组、其中 C1 = 3600mV、C2 = 3750mV、C3 = 3800mV、我需要的停止差值为40mV、那么我应该将 CSL 设置为40mV? 因为您说

    它将平衡电池,直到它们达到存储在寄存器中的电压水平。

    因此、如果假设我将 CSL 设置为3200mV、AFE 将打开平衡 FET、直至 C1、C2和 C3达到3200mV? 我迷路了

    。 如果单元格值已经小于该值、该怎么办? (例如2900mV)。 我曾认为 CSL 的工作原理几乎像 CellBalanceMinCellVCharge 或 CellBalanceMinCellVRelax、只有当电池高于该值时才会发生平衡、AFE 将负责平衡哪种电池? 2、我更喜欢使用 CSL、只要不平衡变得超过某个值、就直接调用该函数。 在我清除 Q1的情况下、当我使用 CSL 时、在上面文章中我附上的代码中、如果 CellImbalance 小于30mV、则不会调用 CSL、并且 Cell Balance FET 会在 Cell Balance Interval 的计时器耗尽后关闭? 在全部过程中、器件会负责平衡哪种电池? 基本上、只要存在不平衡时调用该函数、就是这样吗? 另外、自从上一个帖子发布以来、我已经能够设置并回读设置。 目前、我仅将 CSL 用作3200mV、当我读取 CB_CELLS_ACTIVE 时、我会看到一些电芯正在达到平衡。 我当前正在记录它、并将更新回结果。 请澄清我对公务员事务局局长的怀疑。 非常感谢、 Abhijith
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Abhijith:

    我很高兴您现在能够读取寄存器。

    1.如果电池平衡量低于3200mV、比如2900mV、就不会平衡。 只有大于3200mV 的电芯才能进行平衡。 在软件方面、您可以自行读取所有电池电压、确定哪个电压最低、并将接近该值的值设置为平衡目标。 是的、AFE 应处理平衡部分以使其与之匹配。

    2.这就是它应该如何工作的。 根据数据表、如果一个或多个最高电压电池高于设定的阈值、则该器件开始对这些电池进行平衡。

    此致!

    A·内德尔费尔德