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.

[参考译文] INA219:

Guru**** 2390755 points
Other Parts Discussed in Thread: INA219

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

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1065397/ina219

器件型号:INA219

我尝试通过提供一些负载来读取电池的电压和电流。 使用万用表检查时、我的电池电压为3.12v、但 我的代码 为2.9V。 我应该读取哪个寄存器来获得当前值?

连接:

  

代码逻辑:

   rshunt_lsb = 0.4

  shuntVoltage_Bytes = i2c.readfin_mem (addr、__REG_SHUNTOLTGE、2)//分流电阻器- 0x01
   shuntVoltage_val = int.from_bytes(shuntVoltage_bytes,'big')
   打印("计算后分流电压:"、SHUNT_VOLT* RSHUNT_lsb/100)

输出:

并联寄存器值: 697
计算后的分流电压:2.784

并联寄存器值: 696
计算后的分流电压:2.7

我的连接和代码是否正确? 如何计算电流?

来计算电流

  CURRENT_LSB = 32800

  CALIBRAY_register = trunc (0.04096/(CURRENT_LSB * Rshunt_lsb))
  Print (CALIBRACK_REGISTER)//打印0

  CURRENT_REGISTER =(SHUNT_VOLTAGE * CALIBRACK_REGISTER)/ 4096 //返回0

我无法读取当前数据、请提供帮助。

提前感谢!

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

    您好、Shamita、

    感谢您提出问题并使用 E2E 论坛。

    您是否尝试读取总线电压或分流电压? 听起来好像您正在尝试读取总线电压、但代码显示您正在读取0x01、即分流电压。 总线电压寄存器实际上是地址0x02

    读取正确的电压读数寄存器后、实际上不需要进行任何计算。 如果您读取寄存器0x02、该寄存器中的值应该只是十六进制格式的总线电压测量值、唯一需要完成的计算是将其从十六进制转换为十进制。 例如、如果寄存器中的值为697h、将其转换为十进制将导致1687d、 然后乘以标准4mv LSB 将得到6.748V 的总线电压(显然远高于您的预期、我只是展示了一个如何计算电压的示例)。

    若要计算电流、似乎您为 Current_LSB 设定的32800值 可能不正确。 要计算 Current_LSB、请执行以下计算:

    计算此值后、您可以使用以下公式计算和编程校准寄存器(根据您的一些代码、我假设您的 Rshunt 为0.4Ω Ω):

    对校准寄存器(0x05)进行编程后、您可以读取当前寄存器。 该寄存器将是流经 Rshunt 的电流值、您只需将十进制等效结果乘以 CURRENT_LSB 即可找到实际电流值。

    因此、从本质上讲、以下是读取分流电流所需的步骤。

    1. 计算您的 CURRENT_LSB
    2. 计算校准
    3. 对校准寄存器(0x05)进行编程
    4. 执行转换
    5. 读取电流寄存器(0x04)
    6. 将当前寄存器十六进制结果转换为十进制
    7. 将步骤6中的结果乘以 CURRENT_LSB

    如果您有任何疑问、请告诉我。

    路易

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

    您好、Louis、

    我尝试读取总线电压(0x02)、但我得到的十进制值为2058、我右移3 val、然后乘以0.004、即使我得到的电压为1.0、但实际电压必须为3.4。

    如果我将+ve 电池点连接到 VIN-,那么我只能得到预期的电压。 但是、如果连接以读取电压和电流、我会得到不同的电压。

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

    Shamita、

    当您将正电池端子连接到 IN-引脚时、您会得到预期的电压读数、这是有道理的、因为总线电压寄存器返回 IN-引脚上相对于 GND 的电压。

    您能否分享一个原理图、说明您认为自己是如何建立联系的? 您的 Rshunt 大小是多少、您希望消耗多少电流? 分流器上的压降可能非常大、导致总线电压结果与您预期的结果不同。

    路易

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

    您好、Louis、

    下面是我的连接图片:

    我正在读取总线电压寄存器、但我将获得非常低的电压。

    片段:

       register_bytes = i2c.readfin_mem (addr、__REG_BUSVOLTAGE、2)/0x02
       register_value = int.from_bytes(register_bytes、'big')
       print ("读取 DEC:"、REGISTER_VALUE、"十六进制:"、HEX (REGISTER_VALUE))
       Val = float (register_value >> 3)* 0.004
       打印(val)

    我希望电压为3.45v。 我的连接是否正确?

    Rshunt 为0.4。

    该公式是否   用于对校准寄存器进行编程?

    谢谢、

    Shamita C

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

    Shamita、

    如果我能获得电路布线原理图、我觉得我可以更好地帮助您。 很难看到图片中的所有内容、 看起来 INA219上的优惠券板不是我们的 EVM、因此我不知道哪些引脚是 IN+或 IN-。 从 PICS 看来、您的分流电阻器连接在低侧(假设红色为高侧、黑色为低侧)。 如果是这种情况、您的总线电压结果将非常低、因为正如我之前提到的、这个结果来自 IN-引脚上相对于 GND 的电压。

    我也不确定为什么要将寄存器值移位到右侧的3位。 总线电压寄存器中的原始值是总线电压的十六进制值、唯一需要的计算是将其转换为十进制、然后将该结果乘以4mV LSB、得到总线电压结果。

    是的、您粘贴的等式是计算要编程到校准寄存器的值的正确等式(首先计算 Current_LSB)。

    路易

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

    您好、Louis、

    这是我的连接图

    我将寄存器内容移位为3位、因为数据表中提到了将总线寄存器值移位3位并乘以4mV

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

    Shamita、

    很抱歉、我仍然看不到正在建立的连接、也不熟悉您使用的测试板。 如果没有原理图、我就不知道信号到底在哪里。

    我现在唯一的建议是确保您按照建议的连接来测量数据表中图13中的总线电压。

    其次、很抱歉、我忘记了将总线寄存器移位3位。

    为了帮助解决此问题、您可以在连接分流器的情况下探测 IN-引脚。 探测该引脚并获取电压后、发送命令以触发测量、然后读取总线电压寄存器。

    您是否还可以执行寄存器转储并向我展示所有寄存器正在读取的内容?

    路易

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

    Shamita、

    我将假定您能够解决此问题、因此我将关闭此主题。

    如果您有任何其他问题、请随时联系我们。

    路易