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.

[参考译文] BQ76925:电池电压 VCOUT 的计算

Guru**** 2782575 points

Other Parts Discussed in Thread: BQ76925

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/824360/bq76925-calculation-of-cellvoltage-vcout

器件型号:BQ76925

尊敬的电池团队:

我对读出校正因数有一些疑问。

根据数据表,这些系数以2的补码的形式存储为5或6位值。

 

如数据表的表2和表3所示、MSB 和 LSB 被简单地移位和排列。

 

sluc581中的示例代码显示以下内容:

 

 //获取偏移的2 MSB 和 VREF 的增益校正的1 MSB

   if (i2c_read (VREF_CAL_EXT、&i2c_read_struct)) error_trap ();

   // MSB 中移位并符号扩展

   offset_corr[0]|=((((i2c_read_struct.data & 0x06)<< 3)^ 0x20)- 0x20;

   Gain_corr[0]  |=(((i2c_read_struct.data & 0x01)<< 4)^ 0x10)- 0x10;

 

移位看起来是正确的、但是数据也与 MSB 进行了异或运算、并且在末尾减去了 MSB

对我来说,这似乎没有效果。

 

示例:

数据:00001

XOR with 10000提供10001

减去10000将得到00001 (与输入数据相同)。

 

这可能是前一个芯片的代码。

我会继续查看数据表、这样可减少读取校正因数的代码。

 

是肯定的–您能澄清一下吗?

祝你一切顺利、

Olrik

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

    您好、Olrik、

    我不是程序员、所以我的解释可能会很简单。

    该值由一些 MSB 组成、这些 MSB 与公共寄存器中其他单元的 MSB 打包在一起、因此命令的一部分是提取正确的 MSB 位。  例如、在命令中:

     Gain_corr[0]  |=(((i2c_read_struct.data & 0x01)<< 4)^ 0x10)- 0x10;

    Gain_corr[0]之前加载了较低半字节。  新处理的上半字节将被应用到它。

    (I2C_READ_STRUCT.DATA & 0x01)从读取的值中选择所需的位。  在寄存器位 S 中、GAIN_COR[0]的符号位 为:xxxx xxxS  

    已处理:0000 000s

    向左移动4: << 4将符号位置于适当的位位置、以应用于低半字节: 000s 0000

    将 ORing 与0x10 ^ 0x10异或 将使符号位反相。  现在、相同计算有2种可能:

    如果符号位为0、则数字为正。  0x00 ^ 0x10 = 0x10。  减去0x10得到0x00。  正如您所描述的、对于一个正数、它没有做任何事情、因为没有做任何事情。

    如果符号位为1、则数字为负。  0x10 ^ 0x10 = 0x00。  减去0x10得到0xF0。  对于负数、符号被扩展至全高半字节。

    该结果是正数还是负值,与寄存器中已有的值进行或运算,以生成完整的数字(字节) GAIN_COR[0]|=   。  无论是正数位还是负 数位、计算都是以相同的方式进行的、而不是需要基于符号位的决策和不同操作、这更像是我们当中有多少人通常认为的以及作者在数据表中描述的那样。

    每个校正值都有自己的公式、因为必须从打包的 MSB 寄存器中挑选不同的位。

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

    还有一些有关 BQ76925的 VREF 和 VCOUT 校正和计算的问题。

     

    Vref

    在 BQ76925的数据表中、VREF = 3.0V 时的初始容差为+/- 120mV。

    校准后、容差应在+/- 0.1%范围内。

     

    校准到底是如何完成的? 它只是 slua619 (方程式2)中给出的理论校正、其中:

     

    VREF_INIT =(1+GC_VREF) x VREF_NOM + OC_VREF (VREF_NOM = 3.0)

     

    之后、该校正后的 VREF 值用于计算 VCOUT。

    我是否可以通过主机 ADC 读出更正后的 VREF_INIT 值?

     

    VCOUT

    在 slua619 (方程式4)中、更正后的 VCOUT 计算公式 如下:

    VCOUT_Corr =(VCOUT + OC_VCOUT) x (1 + GC_VCOUT)

     

    与计算校正的 VREF 值相反、首先添加到 VCOUT 的偏移量。 然后是增益乘积。

    是这样吗? 我不知道校正后的数据是如何确定的、以及如何将其存储在存储器中。

     

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

    您好、Olrik、

    基准的运行方式与校准后的基准标准不同。  差异量在制造时测量并存储在所述的寄存器中。  用户可以使用这些值计算为校准值。

    只能选择从器件中读取数据表中指示的电平。

    2、上面注释的 VCOUT_Corr 计算似乎是应用手册中的等式7、似乎与数据表中的等式1相同。  它也被传递到等式8以及9和10中的示例中。  它似乎与器件开发人员实施的设计一致。