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:使用 I2C 读取寄存器时电池值不正确

Guru**** 2551370 points
Other Parts Discussed in Thread: BQSTUDIO

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1251944/bq76942-incorrect-cell-value-when-reading-registers-using-i2c

器件型号:BQ76942
主题中讨论的其他器件:BQSTUDIO

您好!

我以100kHz 的频率使用 I2C 接口、在使用 Battery Management Studio 时、该电路板会正确报告所有值。 问题是、当我使用自定义代码读取电芯电压值时、电芯8会报告不正确的电压。 从技术参考手册表4-1中,我直接从地址0x23读回电芯电压。 使用表中相同的地址值读回单元格1-7以及这些报告电压的值完全正确。

我是否必须将任何校准系数应用于从这些地址读取的电池值、或者这些地址是否直接报告电池电压? 您能告诉我我我的方法与 Battery Studio 方法之间的区别吗?

提前感谢  

理查德

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

    尊敬的 Richard:

    只是再次检查一下、您是否正在使用8S 设置? TI 提供用于在 STM32和 MSP430微控制器上对 I2C 进行编程的代码。 可以 在此处找到示例代码。 我已将读取电池电压的代码附在下面。 您能否尝试运行一些示例代码、以确定是您的器件配置有问题(即器件可能需要400kHz I2C 或 SPI、而您尝试使用100kHz I2C)、还是最终代码不正确? 值得注意的是、BQStudio 可自动适应处理与您的器件适用的协议。 您能否与您分享确切的器件型号、例如 bq7694202?

    uint16_t BQ769x2_ReadVoltage(uint8_t command)
    // This function can be used to read a specific cell voltage or stack / pack / LD voltage
    {
    	//RX_data is global var
    	DirectCommands(command, 0x00, R);
    	if(command >= Cell1Voltage && command <= Cell16Voltage) {//Cells 1 through 16 (0x14 to 0x32)
    		return (RX_data[1]*256 + RX_data[0]); //voltage is reported in mV
    	}
    	else {//stack, Pack, LD
    		return 10 * (RX_data[1]*256 + RX_data[0]); //voltage is reported in 0.01V units
    	}
    
    }
    void BQ769x2_ReadAllVoltages()
    // Reads all cell voltages, Stack voltage, PACK pin voltage, and LD pin voltage
    {
      int cellvoltageholder = Cell1Voltage; //Cell1Voltage is 0x14
      for (int x = 0; x < 16; x++){//Reads all cell voltages
        CellVoltage[x] = BQ769x2_ReadVoltage(cellvoltageholder);
        cellvoltageholder = cellvoltageholder + 2;
      }
      Stack_Voltage = BQ769x2_ReadVoltage(StackVoltage);
      Pack_Voltage = BQ769x2_ReadVoltage(PACKPinVoltage);
      LD_Voltage = BQ769x2_ReadVoltage(LDPinVoltage);
    }

    此致!

    A·内德尔费尔德

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

    尊敬的 Asher:

     谢谢你的答复。 我看不到您的方法与我们的方法之间存在重大差异。 我们正在进一步调查。  

    此致

    理查德

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

    尊敬的 Richard:

    您的第8节电池电压偏离了多远? 它是保留一个错误值还是随时间变化? 由于似乎是某种形式的软件错误、您能否共享用于读取电池电压的函数? 需要考虑的一点是、如果短接任何单元格、则使用 for 循环遍历单元格不会正常工作、除非将其设置为跳过所跳过的单元格的地址。

    此致!
    A·内德尔费尔德