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.

[参考译文] INA229:INA229电流传感器读数制造商 ID

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

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1131138/ina229-ina229-current-sensor-reading-manufacture-id

器件型号:INA229
Thread 中讨论的其他器件: SysConfigTMS320F28377D

我想将 INA229传感器与 F28377D DSP 配合使用。

 我正在尝试读取数据表中提到的制造商 ID、该 ID 应为"TI (0x5449)"。

但是、我读取的值是0x0054、0x4900或0x4900、0x0054。

找到了与我相同的问题。 但它看起来有点不同。 
https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1074352/ina229-ina229-current-sensor-reading-wrong-manufacturer-id

更改 SPI 的设置也有问题。
Clock_phase = 1 CLKPOLARITY = 0

下面引用了示例代码。
dev.ti.com/.../index.html

SPI 设置错误吗?

提前感谢。


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

    您好、Andrew、

    感谢您使用 TI 论坛。

    关于极性和相位、通常是极性= 0和相位= 1、但某些 MCU 架构会以不同的方式定义极性和相位、从而导致值不同。 重要的是、根据数据表说明、数据线与时钟保持一致:

    您似乎获得了正确的值、但可能是格式/解析问题? 我建议查看 SysConfig 中的示例代码: https://dev.ti.com/sysconfig/index.html?product=ascstudio&module=/ti/sensors/currentsensor/INA229。 希望这能帮助您解决固件问题。 如果不是、请再次在此处发送消息、希望我们能够找到问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我更改​​了极性和相位的值。 
    无法解决。 
    你能给我一些建议吗? 

    谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="46989" URL"~/support/amplifiers-group/amplifiers/f/amplifiers-forum/1131138/ina229-ina229-current-sensor-reading-manufacture-id ]for (i = 0;i < 2;i++)

    // byte[i]= SpiaRegs.SPIRXBUF;
    BYTE[i]= tmp_rx_data16[i]= SpiaRegs.SPIRXBUF;

    返回0;
    }[/报价]

    我不熟悉该 MCU、但上面的代码对我来说似乎是可疑的。 您不应该等待新数据在 SPIRXBUF 的连续读取之间到达? SPI_xmit()可能有一个从 SPI 读取数据的配套函数。

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

    您好、Andrew、  

    我将 TMS320F28377D 团队添加到此主题、以帮助解决 MCU 特定 SPI 问题。

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

    您好!

    只需查看代码并提供信息即可查看一些观察结果:

    SPI 配置为16位字符、这将强制在每次写入 SPI TX 缓冲器时发送/接收16位。 但是、由于不包含 SPICLK、我无法从示波器图中判断每个芯片选择帧中是否传输了16位。

    [引用 userid="46989" URL"~/support/amplifiers-group/amplifiers/f/amplifiers-forum/1131138/ina229-ina229-current-sensor-reading-manufacture-id "]

    SPI_xmit (TX_DATA);//发送
    // while (SpiaRegs.SPIFFRX.bit.RXFFST!= 1){}

    对于(I = 0;I < 2;I++)

    // byte[i]= SpiaRegs.SPIRXBUF;
    BYTE[i]= tmp_rx_data16[i]= SpiaRegs.SPIRXBUF;

    返回0;

    [/报价]

    此代码对我来说并不正确。 由于 SPI 配置为16位字符、因此每个 SPITXBUF 写入只应执行一个单16位读取、而不是两个。 检查 RXFFST 状态的代码也不应该被注释掉、否则在 SPI 读取 FIFO 中有任何有效数据之前、你有读取 SPIRXBUF 的风险。

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

    如果可以,还请包括  spi_xmit()的代码。 该函数应向 SPITXBUF 写入单个16位字符。

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

    好的一点、INA 器件确实以8位块发送数据、因此您可能需要将其配置为8位读取、然后读取两次。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="300200" URL"~/support/amplifiers-group/amplifiers/f/amplifiers-forum/1131138/ina229-ina229-current-sensor-reading-manufacture-id/4201483 #4201483"]他们可能需要将其配置为8位读取,然后读取两次

    Mitch、正确。 要读取制造商 ID 寄存器、我建议使用以下内容:

    • 将 MCU SPI 配置为8位字符大小
    • 写入字节地址(SPI 同时读取1个字节)
    • 如果  RXFFST!= 1、则等待
    • 从 SPIRXBUF 中读取回收字节并丢弃
    • 写入虚拟字节 (SPI 同时 读取 1个字节)
    • 如果  RXFFST!= 1、则等待
    • 从 SPIRXBUF 读取字节、这是您的制造商 ID 寄存器的 MSB
    • 写入虚拟字节 (SPI 同时 读取 1个字节)
    • 如果  RXFFST!= 1、则等待
    • 从 SPIRXBUF 读取字节、这是您的制造商 ID 寄存器的 LSB
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的善意。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没错。
    我使用8位进行读取和写入、因此它可以正常工作。
    与此同时,16亿里位的读写不起作用。 
    谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我能够通过读取和写入8位来读取正确的值。
    似乎不可能以16位进行读取和写入。 
    制造商 ID 和器件 ID 读数均正常。

    读取的值。 因此、我向左移动了8位。

     DT[0]= 0x00
     DT[1]= 0x54
     DT[2]= 0x49

     DT[0]= 0x00 
     DT[1]= 0x22
     DT[2]= 0x91

    这是我的过程。  
    • 将 MCU SPI 配置为8位字符大小
    • 写入字节地址(SPI 同时读取1个字节)
    •  如果 RXFFST = 0则等待
    • 从 SPIRXBUF 中读取回收字节并丢弃
    • 写入虚拟字节 (SPI 同时 读取 1个字节)
    •  如果 RXFFST = 0则等待
    • 从 SPIRXBUF 读取字节、这是您的制造商 ID 寄存器的 MSB
    • 写入虚拟字节 (SPI 同时 读取 1个字节)
    •  如果 RXFFST = 0则等待
    • 从 SPIRXBUF 读取字节、这是您的制造商 ID 寄存器的 LSB
    此外、我是否可以询问有关读取电流的问题? 
    感谢您的建议。  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="46989" URL"~/support/amplifiers-group/amplifiers/f/amplifiers-forum/1131138/ina229-ina229-current-sensor-reading-manufacture-id/4203256 #4203256"]我能够通过8位的读写操作来读取正确的值。

    我忘记了在8位配置中、您需要在写入 SPITXBUF 之前将字节地址移动<< 8。 不过、您可能已经知道了这一点。 这是因为 SPI 将始终先移出 SPITXBUF 的 MSB。 在读取 SPIRXBUF 期间、无需移位。

    • 将 MCU SPI 配置为8位字符大小
    • 向 SPITXBUF 写入(BYTE_ADDRESS << 8)(SPI 同时读取1个字节)
    [引用 userid="46989" URL"~/support/amplifiers-group/amplifiers/f/amplifiers-forum/1131138/ina229-ina229-current-sensor-reading-manufacture-id/4203256 #4203256"]似乎无法以16位格式进行读取和写入。

    任何 SPI 事务期间、INA 看起来至少需要8+16个时钟。 如果您将 SPI 配置为16位字符并尝试读取 INA ID 寄存器、则需要对 SPITXBUF 执行两次写入操作、该操作将生成32个时钟、这超出了 INA 的预期。 由于 INA SPI 帧可以在8+16至8+40位之间变化、因此最好/更容易为8位数据配置 SPI。

    [引用 userid="46989" URL"~/support/amplifiers-group/amplifiers/f/amplifiers-forum/1131138/ina229-ina229-current-sensor-reading-manufacture-id/4203256 #4203256"]此外,我是否可以询问有关读取当前数据的问题?

    我建议启动一个新线程。  

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

    此致、