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:当 IN+和 IN-短接在一起时、分流检测未读取一致的0.00mV

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

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1421120/ina228-shunt-sense-not-reading-a-consistent-0-00mv-with-in-and-in--shorted-together

器件型号:INA228
Thread 中讨论的其他器件: SysConfigINA236

工具与软件:

大家好、我是一名电子新手、正在尝试让 INA228在我的第一个定制电路板上工作。  我的 目标是测量12V 汽车电池电压(VBUS)和电流(VShunt、分流电阻器上的 mV 读数、IN+至 IN-)

我使用 Rob Tillart 的 Arduino INA228库通过 i2c 进行通信。   VBUS 寄存器 读数按预期变化、但当我将 IN+和 IN-短接在一起以进行调试时、VSHUNT 寄存器会在0和0.33V 之间交替变化。  0.33V 实际上是0.32768V、这是一个可能会给出提示的数字。

用于读取寄存器地址4h 的函数如下:

浮点 INA228:getShuntVoltage ()

uint32_t 值=_readRegister (INA228_SHUNT_VOLTAGE、3);
value >>=4;

}

我没有在软件中更改任何默认值、电路板布局布线 看起来与示例类似。

我将查找有关后续调试步骤的提示。   我不能100%肯定我正在使用的图书馆实际上是在工作,因为有一个关于它在 Github 上未经测试的注释。

感谢您发送编修。

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

    代码中缺少最后一行、抱歉:

    返回值* 312.5e-9;

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

    嗨、Mark、

    我不熟悉这个代码项目、因此我不确定问题的确切位置。 也就是说、我们 通过 SysConfig 提供软件支持、SysConfig 会根据您的配置设置生成 C 代码。 它还具有解析寄存器数据的便利功能。 以下是指向 SysConfig 的链接: https://dev.ti.com/sysconfig/index.html?product=ascstudio&device=Other

    使用 SysConfig 生成包含所需配置设置的代码后、您可以按照以下说明轻松将此代码转换为 Arduino 代码(此示例适用于 INA236、但适用于任何器件):  

    1. 从 ASCStudio SysConfig 工程下载 all.zip
    2. 查找 Arduino 文档文件夹
    3. 创建与主 ino 文件同名的新 sketchbook 文件夹
      1. 创建一个"主"文件夹草图画册以反映 main.ino
    4. 将 main.c 扩展名更改为 main.ino
    5. 将 SysConfig 文件扩展名从.c 和.h 更改为.cpp 和.HPP
    6. 打开 main.ino 将打开文件的整个 sketchbook
    7. 更改每个文件开头的#include 语句以反映扩展名更改(例如、将#include "mcu.h"更改为#include "mcu.HPP")
    8. 为了在您选择的 MCU 和 INA236 (或任何其他电流传感器)之间进行通信、您需要将 MCU 特定的代码添加到 mcu.cpp。 Arduino 具有一个称为"线"的 I2C/双线通信预制库-下面是一个 指南
      1. 在 mcu.cpp 和 main.ino 中为导线库添加 include 语句
      2. 在 MCU_i2cInit 函数中启动有线通信
      3. 根据 Arduino 导线指南中提供的示例、向 mcu_i2cTransfer 函数添加编写和读取代码
      4. 向 MCU_msWait 添加延迟函数
        1. 这也要求您添加#include 如果您使用 Arduino 库中的 delay()、请在您的 mcu.cpp 中输入
    9. HPP、INA236.cpp、mcu.HPP、config.cpp 和 config.hpp 不需要在包含和扩展名更改之外进行更改
    10. 最后、您需要立即在 main.c 的 main.ino 文件中编写 main 循环
      1. 除了 int main(void),你将有两个函数 void setup()和 void loop()与标准 Arduino
      2. 在 void 设置中,您将包括启动有线通信的代码和串行输出您正在读取的信息/电流到 Arduino IDE 中的串行监视器。 您还需要添加配置函数来配置 INA236_0结构
      3. 在 void 循环中、您将编写利用 INA236.c 函数的函数、例如 INA236_readReg、以拉取当前值或制造 ID
    11. 在这里、您可以编译代码并将其上传到 Arduino
    12. 要将 Arduino 连接到您所连接的 INA236EVM
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mitch、感谢您的出色而详细的回答。  通过查看生成的 C 代码、我能够在所使用的库中找到一个错误、该错误不允许读取负电压。  此外、我还发现电路板设计出现通信错误、导致电路中有两个分流电阻器。  一个外部是我想要的、另一个内部是不想要的、引起了许多混乱的结果。   

    在解决这两个问题后、一切都运行良好。   

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

    嗨、Mark、

    太棒了! 很高兴这一切都为您服务。

    此致、

    Mitch