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.

[参考译文] INA220:测量0mA 时分流电压随机值(尖峰)

Guru**** 2538950 points
Other Parts Discussed in Thread: INA220, INA3221, INA231, INA230, INA233, INA226, INA260

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

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/870948/ina220-shunt-voltage-random-values-spikes-when-measuring-0ma

器件型号:INA220
主题中讨论的其他器件: INA3221INA231INA230INA233INA226INA260

您好!  

我有一款产品、它使用5个 INA220B 器件、在两条 I2C 总线上分离。 (1号总线上为3个器件、2号总线上为2个器件)

这些总线由 Atmel ATXMEGA128A3-AU 控制器控制、运行频率为400kHz。  

INA 仅测量0、004欧姆分流电阻器上的电压(通过 IN+、IN-引脚、Vbus 引脚接地)。  

配置寄存器的值 为0x219D (40mV 满量程、12位分辨率、并联电压连续转换、转换时间:最大586us)  

控制器每600us 定期读取一次 INAS。  

SCL、SDA 上升和下降时间< 300ns、因此符合规格。  

当交流或直流电流流过分流器时、一切工作正常。  

如果在分流器上未施加电流、则大部分时间它们读取0 (或正常情况下的1-2 LSB 噪声)、但有时它们读取随机值(3002、-2453、3524等)。 在1个读取周期内、然后再次为0。  

错误完全是随机的,它们不是定期的(值之间为2-20分钟)。

我们有60多种产品、其中5种是 INA、所有产品(60 x 5)都有相同的误差... 因此、我认为可以排除 ESD 或生产过程中的随机器件故障。  

我在这个论坛中搜索 链接  、发现 Tony Jay 与 INA220有一个非常相似的问题。  

不幸的是、论坛主题已关闭、没有解决此问题的任何解决方案或解决方法... :(  

 这是一个已知问题吗?是否有任何修复?  

谢谢

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

    [引用 USER="Horv.Joe)]总线由 Atmel ATXMEGA128A3-AU 控制器控制,运行频率为400kHz。  [/报价]

    如果 GPIO 端口配置为同步而不是异步、那么 SIO 传输可能会成为问题? 当值从0变为0时、串行 I/O 是否有数据轮询到 MCU? 示波器捕获有助于诊断 FIFO 噪声源是内部产生的还是外部产生的。   

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

    我已经用100kHz 和1、5ms 的读取周期尝试了它。 问题仍然存在。  

    我不认为 MCU 的 GPIO 或 FIFO 噪声是问题的根源、因为在99%的情况下、它巧妙地测量0mA、而没有输入电流。  

    此外、如果我向 输入施加任何电流(即使只有1 LSB = 2、5mA)、问题就会消除...

    正如 Tony 在他的帖子中写道:(https://e2e.ti.com/support/amplifiers/f/14/t/497217?INA220-Intermittent-Errors-when-measuring-0mA)

    "...如果在进行数学运算和/或向 I2C 提供2字节结果时 ADC 结果未被适当缓冲和保持、我不会感到意外。
    例如、 如果在新的转换结果准备就绪之前出现 I2C 请求、并且如果之前的转换是正的并且新的转换是负的、那么可能会有一些旧数据/新数据混合..."

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

    我还使用逻辑分析仪(内置 I2C 解码器)进行了一些测量、它会对总线上的相同值进行解码、使其与 MCU 相同。   

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

    [引用 user="Horv.joe"]此外,如果我向 输入端施加任何电流(即使只有1 LSB = 2,5mA),问题就会消除...

    您希望能少些什么吗?

    [引用 user="Horv.jo"]"...如果在执行数学运算和时 ADC 结果未被正确缓冲和保持、我不会感到意外

    因此、当 SAMPLE[n]的输入= 0时、它停止执行任何数学计算。 想知道为什么 ADC 采样序列发生器未配置为中断驱动?  

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

    [引用 USER="Horv.Joe">我不认为 MCU 的 GPIO 或 FIFO 噪声是问题的根源、因为在99%的情况下、它巧妙地测量0mA、而没有输入电流。  [/报价]

    诊断问题的一种方法可能是仅在测量的数据开始运行时轮询 SIO 以获取数据、并汲取电流。 表5可能提供了提示、您是如何配置模式的?

    虽然可以随时读取 INA220、并且来自最后一次转换的数据仍然可用、但是提供的转换准备就绪位(状态寄存器、CNVR 位)有助于协调单次或触发转换。 转换准备就绪位在所有转换、平均值计算、和乘法运算完成后被置位。

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

    嗨、Horv.Joe、

    我认为这是已知问题的一部分、该问题已针对较新的功率监控器件修复。 现在已经对这个问题进行了几次推测、我可以确认、如果主机在转换和寄存器更新时间完成之前正在读取数据寄存器、则可能会出现数据寄存器中的问题。 我不清楚这种情况的原因、可能是每次转换时寄存器的实际更新方式。 我将与负责的团队核实这一点。

    µs 您每600 μ s 轮询一次 INA220、并且转换时间也已设置、那么、除非轮询和转换时间是彼此的完美倍数、否则轮询将在寄存器更新期间发生。

    通过为 INA220之后的所有其他功率监控器添加一个额外的寄存器缓冲器来解决此问题。 因此、如果您只想更换器件、以下是具有固定电压的功率监控器: INA226、INA230、INA231、INA233、INA260、 和 INA3221。

    另一种解决方案仍然是保持 INA220、但使用触发分流电压模式(在第8.3.1节中进行了说明)。 这样、您可以触发单次转换事件、然后在使用设定的时间后或在转换准备就绪位(CNVR)被设定之前读取数据。

    我希望这对您有所帮助、并请您在问题后回复。

    最棒的

    Peter

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

    gL 说:
    表5可能提供线索,说明您如何配置模式?[/quot]

    正如我之前所写的那样、配置寄存器的值为 0x219D = 0010 0001 1001 1101、因此最后3位101 = MODE:"分流电压、连续"。  

    [引用 USER="GL"]虽然可以随时读取 INA220、并且来自最后一次转换的数据仍然可用、但提供的转换准备就绪位(状态寄存器、CNVR 位)有助于协调单次或触发转换。[/QUERPES]

    我知道、当会话准备就绪时、INA220无法请求 MCU 中断、因此 MCU 必须定期轮询。 (从总线电压寄存器中读取 CNVR 位,或直接读取分流电压寄存器。)

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

    [ µs user="Peter Iliya"]因此、如果您每600 μ s 轮询一次 INA220、并且转换时间也已设置、则除非轮询和转换时间是彼此的完美倍数、否则轮询将在寄存器更新期间进行。

    似乎是 I2C、SSI 和其他串行异步外设的原因、GPIO 端口需要配置为在 C2000等 MCU 上进行异步。 否则、GPIO 输入保持与 SYSCLK 的默认同步、而不是与异步外设时钟同步的轮询应用。

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

    [引用 USER="Horv.Joe"]因此最后3位101 = MODE:"分流电压、连续"

    我不会猜到、而且从查看220数据表开始已经有一段时间了。 正如 Peter 再次评论的那样、在轮询 CNVR 位时、您需要为触发转换或单次转换重新配置220。  

    请告诉我们其中的任何一项是否对您有所帮助!  

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

    感谢您的回答!  

    如果这是一个已知问题(至少3年)、为什么勘误表或数据表中没有提到这一点???  

    [引用 user="Peter Iliya"]因此,如果您只想更换设备,以下是具有修复功能的电源监视器: INA226INA230INA231INA233INA260、 和 INA3221。[/quot]

    我无法修改硬件、因为我们销售了50个器件、它们都在现场、在客户中、而且还制造了交付给客户的+100个器件...  

    [引用 user="Peter Iliya">另一种解决 方案仍保留 INA220、但使用触发分流电压模式(在第8.3.1节中进行了说明)。 这样、您就可以触发单次转换事件、然后在使用设定的时间后或在设置转换准备就绪位(CNVR)之后读取数据。[/QUERP]

    我修改了固件以触发对话、而不是定期读取值、读取后触发新对话... 我似乎在工作。  

    但是、对于总线上的3个器件、读取和触发3个器件(时钟频率为400kHz)需要至少885us 的整个周期  

    这是一个问题、因为它是用于工业 PLC DAQ 应用的电流发送器器件... 使用该解决方案时、采样时间会增加、因此输入带宽会降低...  :/导致设备不符合规格.... :(  

    我也不能增加 I2C 时钟、因为使用较大的时钟时、我必须减小上拉电阻器值。 这是硬件修改... :/

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

    嗨、Horv.Joe、

    885us 时间是否使用最短的84us 转换时间? 也许您可以通过将转换时间设置为84us、按顺序触发全部3个器件以及按顺序读取全部3个器件来缩短整体时间、这样您就不必在固件中设置任何硬延迟? 或者您可能已经考虑过这一点?

    最棒的  

    Peter

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

    885us 是与总线上的3个器件进行通信所需的时间。  

    我已附上逻辑分析仪的屏幕截图。  

    [报价用户="Peter Iliya"]您可能可以通过将转换时间设置为84us 来缩短整体时间,  

    我们需要12位 ADC 分辨率、 84us 仅适用于9位!  

    无论如何、问题是、通过 I2C 在每个周期中重新触发 ADC 需要更多的时间。  

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

    嗨、Horv.Joe、

    当然。 我正在研究任何其他可能的方法来加速操作或确保不会出现错误的读数。 我将於今日稍后答覆。

    最棒的

    Peter

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

    嗨、Horv.Joe、

    测量所需的 BW 是多少? 586µs 位转换时间最大为1 μ s、因此理论上这是可能的最佳采样时间。  

    另一种方法呢? 您能否将时间延迟编程到您的代码中? 我之所以提出这一要求、是因为您可以返回连续模式12位、然后对主机进行编程、以便在写入配置寄存器后轮询数据600µs、并每600us 重复一次轮询、这样您就可以在586µs 转换时间后读取寄存器。

    除此之外、您还可以连续读取每个并联寄存器两次或三次、并实现一些数字逻辑来忽略任何明显不正确的读数?

    如果无法做到这一点、那么我建议将 INA220替换为 INA226。 它在同一封装中具有引脚对引脚兼容性、并且具有相同的寄存器映射。 唯一的区别是 INA226具有更多的特性和更好的精度。

    希望这对您有所帮助。

    此致、

    Peter

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

    尊敬的 Peter:  

    [引用用户="Peter Iliya"]

    测量所需的 BW 是多少? 586µs 位转换时间最大为1 μ s、因此理论上这是可能的最佳采样时间。  

    另一种方法呢? 您能否将时间延迟编程到您的代码中? 我之所以提出这一要求、是因为您可以返回连续模式12位、然后对主机进行编程、以便在写入配置寄存器后轮询数据600µs、并每600us 重复一次轮询、这样您就可以在586µs 转换时间后读取寄存器。

    [/报价]

    所需带宽为800Hz。 因此、根据 香农奈奎斯特采样定理 、最大采样时间为624us。 因此、具有连续对话模式的600us 读取间隔是最好的。 这是我最初的解决方案。  但由于 INA 内部缓冲器错误、它无法正常工作。  

    因为在连续会话模式下、INA 开始会话、并且在完成后将结果写入输出寄存器、然后在自动启动下一次会话后、写入输出寄存器等。 (无论我是否读取输出寄存器...) 因此、如果会话时间正好为586us、 并且我每600us 读取一次输出寄存器、那么在读取42次之后、将有一段时间、当 INA 在读取期间写入寄存器... 这是错误...  

    如果我在读取后(通过写入配置寄存器)重新启动对话、则此操作(读取、重新启动、读取重新启动等)需要885us、因为我在同一总线上有3个器件、因此我必须执行树次操作。  

    [引用 user="Peter Iliya"]实施一些数字逻辑以忽略任何明显不正确的读数?

    这可能是一种可能的解决方案、但当我的输入端确实出现短路电压尖峰时、会发生什么情况? 逻辑电路会检测到它的测量误差、并将读数降至...  

    最终的解决方案已经成为我们已将所需的 BW 规格降低至500Hz,并 为客户支付了所运送产品的补偿.... :/