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.

INA237: 寄存器读取值与手册中不匹配

Part Number: INA237
Other Parts Discussed in Thread: INA226, INA238, SYSCONFIG

先后选取了两种型号,分别为INA237AIDGSR和INA237AQDGSRQ1,将其与STM32通信,但是实际读出来的寄存器数值十分奇怪,与手册上的默认值相差较大,如图所示.


但是同样的电路,同样的代码,更换成Pin-Pin兼容的INA226AIDGSR之后,没有出现过上述问题,不知道INA237是否有什么特殊配置或者要求,电路连接如下图

  • 您好,A0 A1的连接决定了I2C的从机地址,我看您这里悬空了,Table7-2是针对不同A1A0的连接决定的I2C地址。

    另外,图中给出的寄存器值和INA226的寄存器默认值有些也不相符啊,您这些寄存器都是默认值吗?

    您可以使用我们的SysConfig tool,帮助您参考一些器件的sample code。INA237没有参考示例,您可以看下INA238的code.

    https://dev.ti.com/sysconfig/index.html?product=ascstudio&module=/ti/sensors/currentsensor/INA238#/config/?args=-s%20%2Fmnt%2Ftirex-content%2Fascstudio_1_0_7%2F.metadata%2Fproduct.json%20-d%20Other&module=%2Fti%2Fsensors%2Fcurrentsensor%2FINA238

  • 图中是读237的寄存器值,换成226之后读出来的值跟226寄存器是匹配的

  •  这个是完整电路图,之前没有截全

  • 嗯看到了,电路没什么问题。A0A1都接地的话,7bit从机地址位1000000,那么如果对寄存器进行写,配置I2C从机地址位0x80,如果读寄存器的值,配置位0x81,看下是否配置的没问题?

    另外,能否附上读取寄存器值的I2C时序我这边看下,时序是否没问题。 

  • 地址配置应该是没有问题,毕竟更换INA226之后是正常工作,后续我把波形抓出来看看

  • 嗯好的,是的INA226和INA237的从机地址根据A0A1的连接方式不同,从机地址的配置是相同的。

    那除了默认的寄存器读取出来不正常,是否有尝试写入寄存器,能否正确写入呢? 

    通过时序看下是否有收到ACK信号?等您把波形抓出来再看下。 

  • hi,上面是抓取的IIC波形,黄色为SDA,红色SCL,分别尝试了INA226, 237,238三种芯片,波形都类似上图,相差无几。下面简单说下测试结果和我的一些分析。

    首先是发现在MCU至INA芯片通信方向上,发送低电平经过隔离芯片ADUM1250的时候,并未完全下拉到0,而是存在0.8-1V(前8个bit)的抬升,而INA芯片响应ACK时候(第9个bit)才真正下拉到0V。查阅了INA226和INA237手册,发现INA226的VIL为0.3*Vs(page.6 in datasheet),在此设计中即为0.3*5=1.5V,而INA237的VIL为0.4V(page.6 in datasheet),因此当时判断是低电平太高导致INA237判定出错,从而导致数据传输错误。

    随后我们将INA237的IIC线上两个电阻R60和R71更换为20kΩ,再次测量,发现并未改变结果,波形与原来相同,读出来的数据也是错误的。

    但是,我们又将INA237替换为INA238(与INA237电平标准相同),保留20kΩ上拉电阻,发现这个时候寄存器读取值完全正常,如图所示

     此时的波形也跟之前类似,低电平也会有0.8-1V的抬升,也超过了INA238的VIL判定阈值。

    我们又将INA238的上拉电阻更换为4.7KΩ,再次测试,抓取的波形低电平的抬升依然没有改变,但读取寄存器发生错误

     ,再重新将上拉电阻恢复为10kΩ,读取数据错误,再次更换为20kΩ,读取数据正常。

    总结测试表格如下

    芯片 4.7k上拉 10k上拉 20K上拉
    INA226 正常 正常 正常
    INA237 异常 异常 异常
    INA238 异常 异常 正常

    另外在测试过程中还发现一个现象,就是我们是从ADUM1250的pin2和pin3飞线出来连接至示波器测量,在测试INA238时候,如果保留飞线,不连接探头,IIC读取正常,但是如果此时用手触碰飞线,IIC读取就会失败。

    所以目前很迷惑:

    1. 为何上拉电阻阻值不同会影响到IIC通讯?

    2. INA238和INA237电平判定相同,为何20K上拉时候测试一个成功,一个失败?

    3. 手触摸飞线导致IIC通信失败如何解释?

  • 您好,抱歉回复晚了。

    1. 上拉电阻最小值是根据Vol计算的。Rp(min)=(Vcc-Vol)/Iol.所以您可以看到不同Vol电平标准的上拉阻值是不同的 。参考这篇关于I2C pull up resistors calculation 应用手册:https://www.ti.com/lit/an/slva689/slva689.pdf

    2. 有更换INA237再试试吗?

    3. 手触摸的话相当于给I2C 总线增加了容性负载,而I2C的容性负载最大是有限制的。所以以我想这是手触摸飞线导致通讯失败的原因。

  • 感谢感谢,仔细阅读了这个应用手册,想请教下,这里面Rp(min)=(Vcc-Vol)/Iol中,IOL应该怎么理解,是指该引脚输出低电平时候,外部上拉的电源流入引脚的sink current吗?比如INA237手册中

     提到的test condition 为IOL=3mA。

  • 是的,指的是sink current。对于datasheet中电流的定义,我们经常看到有正负,TI规定的是流入电流sink current是正值,流出source 电流为负值。