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.

[参考译文] INA228:无法与 INA228通信

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

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1439796/ina228-failed-to-communicate-with-ina228

器件型号:INA228

工具与软件:

所有人都很好

 我正在连接一个  INA228  解决方案  STM32微控制器  输入电压。 但是、我在沟通时遇到了一个问题、我似乎无法解决。

设置详细信息:

  • 微控制器:  STM32h7 (使用 HAL 库)
  • INA228  经由 I2C 连接
  • 使用的 API:  HAL_I2C_TRANSMIT (阻塞模式)
  • I2C 时钟速度:  在100kHz 和400kHz 上进行测试
  • 上拉电阻器:  SDA 和 SCL 线路上的2.2 kΩ
  • STM32h7中的 GPIO 配置:  
    GPIO_InitStructMODE =  GPIO_MODE_AF_OD
    GPIO_InitStructPULL = GPIO_NOPULL 
    GPIO_InitStructSPEED =  GPIO_SPEED_FREQ_HIGH
    GPIO_InitStruct替代 =  GPIO_af4_I2C1

问题:

我将尝试通过发送1字节数据在 INA228上写入指针寄存器、然后对该寄存器执行读取:

  1.  寄存器地址  (1字节)

我正在调用 HAL_I2C_INA228_ADDRESS<<1 Master_Transmit、txBuf、1、HAL_MAX_DELAY)

txBuf 包含寄存器的地址。

在大多数情况下、INA228以 A 响应  NACK . 不过、我曾尝试将 HAL_I2C_EVM Master_Transmit 放入循环中、并且 在 随机迭代中、器件正确响应且传输成功。  当它成功时、我尝试使用读取寄存器内容  HAL_I2C_EVM Master_Receive  但它失败、并出现错误  HAL_I2C_ERROR_AF (NACK)

 
我采取的步骤:
  1. 使用 HAL_I2C_IsDeviceReady -->未检测到 INA228验证了 INA228的 I2C 地址、我在帖子中看到 HAL_I2C_IsDeviceReady 存在错误(我使用的是 V1.11.0)、因此我不再依赖它。
  2. 已使用逻辑分析仪检查波形;正在发送的数据似乎正确。
  3. 将 I2C 时钟速度降至100kHz -未观察到改进。
  4. 已尝试在寄存器地址字节和数据字节之间添加较小的延迟-问题仍然存在。

有人在使用 STM32 HAL 库的 INA228上遇到类似问题吗?

  1. 这是否与未记录的 INA228所需的时序或特定延迟有关?
  2. STM32 HAL 中是否有任何其他 I2C 设置或配置可能有助于解决此问题?

非常感谢您提供任何帮助或建议! 提前感谢

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

    请显示失败写入的示波器轨迹。

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

    我注意到数据和时钟之间需要去同步、对吗?

    STM32论坛链接: community.st.com/.../744295

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

    您好!

    数据逻辑低电平似乎不够低。 INA228需要具有不高于0.4V 的逻辑低电平。 通常、这是由 MCU 向引脚灌入电流的能力引起的。 所以、您有两个选择:

    1.许多 MCU 有一个设置可以更改灌电流能力、如果增加灌电流能力、那么它就能够将低压线拉得更接近 GND。

    可以使用更大的上拉电阻。 由于您仅以100KHz 和400kHz 的频率进行通信、因此您可以使用10kΩ 电阻器而不是2.2kΩ。

    此致、

    Mitch

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

    MITCH、感谢您的答复、我遗漏了一些我在这篇文章中说明的重要细节: https://community.st.com/t5/stm32-mcus-products/i2c-communication-with-ina228-from-texas-instrument/m-p/744241 (我的 MCU 通过隔离器 ADUM1250连接到 INA228)

    我会考虑您对低层次的观察。

    这不是一个问题,数据的第一位低位不与时钟同步? 我发现这有点奇怪..

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

    仅在 SCL 的上升沿对 SDA 进行采样。 当 SCL 为高电平时、SDA 上的下降边沿是起始条件。 这些波形的时序没有问题。

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

    您好!

    正如克莱门斯所说的,时机很好。

    由于您使用隔离器、因此您需要检查隔离器两侧的逻辑高电平和低电平。 许多隔离器针对隔离器的每一侧采用不同的规格、因此有时将隔离器互换可能会有所帮助。 我还看到、在隔离器两侧的通信线路上将一个较小的电容器添加到 GND 也有帮助(~33pF)。

    请注意、您可能对我们的隔离式 ADC 感兴趣。 我们有一些解决方案侧重于电流检测、可以由单电源或双电源供电:

    https://www.ti.com/isolation/isolated-adcs/overview.html

    此致、

    Mitch