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.

[参考译文] BQ76930:所有电池电压返回零值

Guru**** 2457760 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/676665/bq76930-all-the-cell-voltages-return-zero-value

器件型号:BQ76930

您好!
我尝试从 bq7693007DBTR 读取电池电压。 使用的芯片具有 CRC 选项。 因此、我已经确保 CRC 输入正确(函数 writeRegister 处理此操作)。 读取寄存器 CC_CFG、SYS_CTRL1、SYS_CTRL2等将返回写入后的预期值。
要读取芯片的 Arduino 代码片段如下所示:


PinMode (bootPin、输出); digitalWrite (bootPin、HIGH); delay (5); PinMode (bootPin、输入); 延迟(10); writeRegister (CC_CFG、0x19); writeRegister (SYS_CTRL1、B00010000);//在 writeRegister (SYS_CTRL2、B00000000)上切换内部热敏电阻和 ADC;//切换 CC_EN 关闭 延迟(400); Wire.beginTransmission(I2CAddress); Wire.write (VC1_HI_byte);// 0x0C Wire.endTransmission (false); uint8_t b[30]; if (Wire.requestFrom (I2CAddress、30、true)== 30)//在末尾发送停止 { for (int i =0;i<30;i++) { b[i]= Wire.read(); }

b 数组中的输出是  

[0] 0x00 uint8_t{data}@0x08d6
[1] 0xec uint8_t{data}@0x08d7
[2] 0x00 uint8_t{data}@0x08d8
[3] 0x00 uint8_t{data}@0x08d9
[4] 0x00 uint8_t{data}@0x08da
[5] 0x00 uint8_t{data}@0x08db
[6] 0x00 uint8_t{data}@0x08dc
[7] 0x00 uint8_t{data}@0x08dd
[8] 0x00 uint8_t{data}@0x08de
[9] 0x00 uint8_t{data}@0x08df
[10] 0x00 uint8_t{data}@0x08e0
[11] 0x00 uint8_t{data}@0x08e1
[12] 0x00 uint8_t{data}@0x08e2
[13] 0x00 uint8_t{data}@0x08e3
[14] 0x00 uint8_t{data}@0x08e4
[15] 0x00 uint8_t{data}@0x08e5
[16] 0x00 uint8_t{data}@0x08e6
[17] 0x00 uint8_t{data}@0x08e7
[18] 0x00 uint8_t{data}@0x08e8
[19] 0x00 uint8_t{data}@0x08e9
[20] 0x00 uint8_t{data}@0x08ea
[21] 0x00 uint8_t{data}@0x08eb
[22] 0x00 uint8_t{data}@0x08ec
[23] 0x00 uint8_t{data}@0x08ed
[24] 0x00 uint8_t{data}@0x08ee
[25] 0x00 uint8_t{data}@0x08ef
[26] 0x00 uint8_t{data}@0x08f0
[27] 0x00 uint8_t{data}@0x08F1
[28] 0x00 uint8_t{data}@0x08f2
[29] 0x00 uint8_t{data}@0x08f3

我在读取的所有寄存器中得到零值。 b[1]对应的值为0xEC、这是芯片的 CRC i2c 地址和返回的数据字节。 (0x3100)但是、所有后续读取的数据为0x00、其对应的 CRC 为0x00。  

所有电池均已连接。 是否有解决方案?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Eohan、
    您没有提到检查状态寄存器。 如果部件有一个 XREADY 故障、所有电压将读为00。 由于您注意到您已连接电池、因此您应该为器件供电。 您可能仍会检查是否有电源(VC5X 至 VSS、BAT 至 VC5X)。 当 SYS_CTRL1处于0x10时、您不是使用热敏电阻测量温度、而是确保在 TSN 引脚上有下拉电阻器连接到本地基准、这是必需的、否则您可能会得到 XREADY 故障。 检查 CAPn 电容器上的电压、这两个电容器都应大约为3.3V。
    当您从器件获取电压响应时、请确保在同一事务中读取电压的两个字节、这将防止在单独的字节读取期间发生更新、这可能导致电压发生奇怪的跳转。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的提示。 我读取返回 XREADY 故障的状态寄存器。 BAT 至 VC5X 电压在 VSHUT 前几 mV。 我向输入端施加不同的电压。 但现在、我获得了 SYS_STAT 寄存器的 OV 和 UV 误差(0x0C)。 现在、读取电池电压将返回可预测的值、最高三节电池除外:  

    Adcoffset 43.
    AdcGain 378.
    电池 VCx_Word 计算值(mV) 测量值(v)
    1 10664 4073. 4.1.
    2. 10713 4092 4.1.
    3. 0 43. 0
    4. 0 43. 0
    5. 10672. 4077 4.1.
    6. 10554 4033. 4.1.
    7. 10656 4070 4.1.
    8. 1234 509. 0
    9. 2270 901. 0
    10. 1954年 781. 4.1.

    为什么最后三个单元格不正确?

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Eohan、
    VCX 字值似乎不合理。 有2个字节、如果两个字节都被认为最大值为65535、但来自器件的数据范围是有限的。 这些值看起来像一些数据错误。
    OV 和 UV 在器件内部进行比较。 状态将一直保持、直到寄存器被清除、如果电池仍处于故障状态、它将在延迟后返回。 确保 VCn 引脚获得电池电压。 如果其中一个电池断开连接、则可能会发生漂移、导致一个电池出现 OV、而下一个电池出现 UV。