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.

[参考译文] INA226:壁式功率计读数(22.1 W)与 INA226(AM69A)传感器读数(0.003700 W)之间存在显著差异?

Guru**** 2393725 points
Other Parts Discussed in Thread: INA228, INA237, INA226, SYSCONFIG, INA238

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

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1468302/ina226-there-is-significant-discrepancy-between-the-wall-power-meter-reading-22-1-w-and-the-ina226-am69a-sensor-reading-0-003700-w

器件型号:INA226
主题中讨论的其他器件: SysConfigINA238、INA228、INA237

工具与软件:

我们使用 I2C 和 smbus2接口来监控来自 INA226寄存器的电流电源电压。

请看一下下面的脚本和命令、我们正在使用这些脚本和命令从 INA226寄存器中获取值、但与 wall 参数相比、我们获得的值太小。 请帮助确认我们使用 I2C/SMBUS2来获取和操作各种测量值的方式。

Python 脚本(SMBUS2)  

导入 smbus2
导入时间

# INA226的 I2C 地址
地址= 0x40
#功率寄存器地址
POWER_REGISTER = 0x03
#功率 LSB 值(单位为瓦特)
power_lsb = 25e-6

#初始化 I2C 总线0
总线= smbus2.smbus (0)

DEF READ_POWER():
尝试:
RAW_POWER = BUS.READ_WORD_DATA (地址、POWER_REGISTER)
#必要时交换字节
RAW_POWER =((RAW_POWER 和0xFF)<< 8)|(RAW_POWER >> 8)
功率= RAW_POWER * POWER_lsb
回路功率
OSError 除外(e):
打印(f"读取功率时出错:{e}")
无返回

#监控电源随时间变化
DEF MONITOR_POWER():
正确时:
power = read_power ()
如果电源不是 None (无):
打印(f"电源:{power:.6F}W")
time.sleep (1)#每秒读取一次功率

如果__name__="__MAIN__":
MONITOR_POWER()

输出:

为什么 壁式功率计(22.3瓦)的功率读数存在显著差异?  

谢谢!

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

    您好、Chinmaya、

    为了在功率寄存器中获得真实值、您首先需要根据数据表的第6.5节配置校准寄存器。 如果您有兴趣查看示例代码、可点击以下链接访问 SysConfig 工程: https://dev.ti.com/sysconfig/index.html?product=ascstudio&module=/ti/sensors/currentsensor/INA226。

    此致、

    Mitch

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

    尊敬的 Mitch:

    根据数据表、我们按如下方式设置校准寄存器  

    最大预期电流(I_max): 10a

    分流电阻器(R_shunt): 0.01欧姆

    1. 计算 CURRENT_LSB

      CURRENT_LSB = I_max / 2^15 = 10/2^15 = 0.00030518A  

    2. 计算校准值

      校准= 0.00512 / CURRENT_LSB x Rshunt = 0.00512 / 0.00030518 * 0.0116777

    3. 写入校准值 :转换16777为十六进制、即0x4199

      以下命令用于将其写入校准寄存器:

          sudo i2cset -y 0 0x40 0x05 0x4199  w

    您能否帮助确认为什么即使我们设置了不同的校准值(例如0x0000),从功率寄存器值的读数仍然保持不变。

    sudo i2cget -y 0 0x40 0x03 w
    0x9400

    我们注意到壁式功率计和 INA226读数之间存在很大差异、您能帮助检查我们设置的校准是否正确吗? 或者  

     

    谢谢!

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

    尊敬的 Chinmaya:

    Mitch 今天不在办公室、但我们将于周一再次为您提供帮助。

    感谢您的耐心。

    Holly

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

    您好、Chinmaya、

    校准计算有问题。 数学值等于1677.7、而不是16777、因此可以用作1677、或舍入为1678。 1678是十六进制的0x68E。 这可能是该值未更改的部分原因。 根据校准值、如果寄存器0x6中有 OVF 位标志、则可能无法正常工作。

    另一个问题是、使用最大10A 电流和一个10mΩ 分流电阻器时、您将需要一个100mV 的总满量程范围。 INA226的满量程范围仅为81.92mV、因此您无法读取高于8.192A 的电流。 如果您确实需要测量整个10A 电流、则需要一个更小的分流电阻器(~8mΩ)。 如果您需要保持10mΩ 分流、则可以更换 INA238的 INA226 (或 INA228或 INA237、但 INA238的精度和成本与 INA226非常相似)。 这些器件与 INA226引脚兼容、但具有其他特性。 它们还具有163.84mV 的满量程范围。  

    此致、

    Mitch

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

    抱歉、该值为16777、而不是1677.7、基于 1 mΩ Not 10mΩ。

    0.00512 / 0.00030518 * 0.001. ≈1677.

    我做了一个 加电 复位以恢复 INA226电阻器的所有默认值、然后按照上述方法对校准电阻器(0x05)进行编程、即可正常工作。  

    但是、我看到功率电阻器读数会不时波动、我正在观察这些值。

    如果我们每次从功率(0x03)电阻器获得一系列值以获得单个编程的校准值、那么我们应考虑哪个值?  

    sudo i2cset -y 0 0x40 0x00 0x8000 w 应该根据 TI 文档重置默认值(位15为1)、但不起作用?  

     

    非常感谢您的答复、Mitch!

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

    您好、Chinmaya、

    哦、好的、这个拼写错误是合理的。 我会注意到、16777是0x4189、而不是0x4199、但这不会产生很大的影响。 尝试执行复位位时却不起作用、这很奇怪。 它在我测试它时会工作。  

    至于要使用哪个值来表示功率、如果您处于连续转换模式、则寄存器将在每次转换后自动更新、因此最新值始终是最新结果。 如果您不希望该值不断更新、则可以更改为触发模式、仅在告诉测量值时进行测量。 或者、您可以增加转换时间和/或取平均值、以便结果不会频繁更新。  

    此致、

    Mitch

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

    非常感谢 MITCH 为您提供宝贵的时间。

    似乎我的数据分析团队对 INA226寄存器的读数(功率和电流)不信服。
    它与壁式仪表读数完全不同。

    到目前为止我们做了什么?
    1.将校准寄存器编程为16777是0x4189
    2.从功率寄存器(0x03)中读取为十六进制值
    3.先将这些值转换为十进制值
    4.计算 POWER_LSB 25 * Current_LSB = 25 * 0.00030517578 = 0.0076295 ( Current_LSB = 10A /(2^15)= 0.00030517578)
    5.功率(W)=十进制值* POWER_LSB

    请帮助验证上述步骤并查看记录的功率和电流?

    6. Current (a)=十进制值(0x04)* CURENT_LSB。 .

    请帮助澄清以下几个疑问。

    1. 计算公式  支持 INA226传感器的 Linux 驱动程序?  是内核级还是用户级? 寄存器所在的位置?
    2. 如何确定哪个是器件的最佳校准编程(截至目前10A 为最大预期电流、 1 mΩ 为分流寄存器)
    3. 从 I2CDetect 命令检测 INA226传感器是否足够、或者如何在当前的嵌入式器件中获取 INA226传感器的具体证据?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Chinmaya、

    下面是我对您的问题的回答:

    1. INA2xx Linux 驱动程序与 INA226搭配使用。 请注意、该驱动程序不是由 TI 开发的、因此我们无法提供详细支持。  
    2. 对于10A 最大值和1mΩ 分流器、您只使用 81.92mV 而不是10mV 满量程。  所以、您可以通过利用更大的范围来提高准确度/分辨率。 以下是一些您可能会发现有用的建议:
      1. 数字功率监测器入门: https://www.ti.com/lit/pdf/sboa511
        1. 该计算器工具的链接: https://www.ti.com/tool/download/SBOR021
      2. 误差计算工具: https://www.ti.com/tool/download/CS-AMPLIFIER-ERROR-TOOL 
        1. (使用此信息查看特定设置的预期总误差)
    3. 您不确定这里的意思、但如果您在寻找一种方法来验证 INA226是否已连接、那么您可以检查 裸片 ID 寄存器(0xFF)  

    在计算器工具中检查您的预期误差、并且可能需要调整分流电阻器后、如果您仍然未获得预期的值、下面是一些其他调试步骤:

    • 直接测量器件的 IN+和 IN-引脚上的电压、查看该电压是否为您所需的电压(并与 VSHUNT 寄存器结果进行比较)  
    • 与 INA226 GND 引脚相比、测量 VBUS 引脚处的正确电压、查看这是否是您预期的电压(并与 VBUS 寄存器结果进行比较)。
    • 如果这其中任何一个电压不是您预期看到的电压、则可能是硬件或布局问题。 您可以使用 EVM 测量您的系统来进行确认。 此外、您可能对此处某些视频感兴趣: https://training.ti.com/ti-precision-labs-current-sense-amplifiers。甚至还有几个视频可以帮助解决布局问题。

    此致、

    Mitch