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.

[参考译文] LMP90098:使用2个稳压电流源的3线 RTD 配置

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/730531/lmp90098-configuration-for-3-wire-rtd-using-2-current-sources-reg

器件型号:LMP90098
主题中讨论的其他器件: ADS124S08ADS1248LMP90100

您好!

  我已将 LMP90098与 PT-100 RTD 传感器集成、并通过 SPI 接口将 ADCout 提供给 MCU (具有 HAL API 的 STM33控制器)

  LM90098的初始配置:

空 LMP90098_Init_Config (SPI_HandleTypeDef * hspi)

LMP90098_Write (hspi、0x01、0x08);                                                    //参数2-寄存器地址; 参数3-值  
LMP90098_Write (hspi、0x03、0x00);
LMP90098_Write (hspi、0x08、0x00);
LMP90098_Write (hspi、0x10、0x02);
LMP90098_Write (hspi、0x11、0x83);
LMP90098_Write (hspi、0x12、0x2A);
LMP90098_Write (hspi、0x13、0x00);
LMP90098_Write (hspi、0x17、0x01);
LMP90098_Write (hspi、0x20、0x41);

读取的 ADC_OUT 值如下所示、

uint32_t ADC_Read (SPI_HandleTypeDef * hspi)

uint8_t ADC_RxBuff[6]={0x10、0x01、0xCA、0x00、0x00、0x00};                                     //从地址0x1A 开始读取3个字节的数据
uint32_t adc_out=0;
Val=LMP90098_read (hspi、0x1E); //读取寄存器0x1E 以 检查通道是否进行扫描
if (Val)>1==0)

LMP90098_Write (hspi、0x1F、0x80);
LMP90098_Write (hspi、0x17、0x02);
IF (DRDY_Flg)

DRDY_Flg = 0;
HAL_GPIO_WritePin (GPIOA、GPIO_PIN_4、GPIO_PIN_RESET);                     //将 CSB 置为有效

HAL_SPI_Receive (hspi、ADC_RxBuff、6100);                                     //读取 ADC_DOUT

HAL_GPIO_WritePin (GPIOA、GPIO_PIN_4、GPIO_PIN_SET);                        //取消确认 CSB




ADC_OUT =((ADC_RxBuff[5])|((ADC_RxBuff[4]<8)|(ADC_RxBuff[3]<<16));
返回 ADC_OUT;

返回0;

下面是我们板中 AFE 的原理图:

  我的问题是

如果 ADC_DOUT 是2字节值、则 ADC_DOUTH 将填充什么?

2.如何提高 ADC_DOUT 精度?

3、监测 DRDYB 信号是否足以识别 ADC_DOUT 中的新输出、或者是否应该甚至读取寄存器0x18中的值。   

在相同的温度下、ADC_DOUT 值会波动、这可能是什么问题?

请帮我解决这个问题。

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

    Ankita、

    很抱歉,但我今天不在办公室。 我将在下周初回答您的问题。

    吴约瑟

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

    Ankita、

    ADC_DOUT 是由两个字节组成的输出数据。 ADC_DOUTH 是高字节、ADC_DOUTL 是低字节。 表14中介绍了数据结构、如下所示:

    2.提高测量精度有很多可以说的。 对于 RTD 测量、最大误差源可能是您使用的基准电阻。 在原理图中、这被标记为 R7。 该电阻器中的任何误差都会反映为 RTD 测量中的误差。 该电阻器应是具有高精度和低漂移的精密电阻器。 之后、您需要考虑如何进行测量以确定误差。

    有一份有关 RTD 测量的应用手册、其中概述了不同的 RTD 拓扑以及用于进行测量的一些计算。 它最初面向 ADS1248、ADS124S08和其他器件(大多数为 ADS12xx 型器件)、但 LMP90098的测量方法是相同的。 您可以在此处找到 RTD 应用手册:

    我认为监测 DRDYB 信号以找到输出更高效。 最好将此行用作中断、以便您可以在正确的时间读取数据、而不是轮询该行。  

    ADC_DOUT 的波动可能有很多、具体取决于幅度。 我需要详细了解您看到的值以及测试系统时使用的值。 通常、在进行测试时、我会将精密电阻器用于输入电阻器和基准电阻器。 如果您有一些测量数据、配置设置以及所使用的输入、我可以提供一些建议。 如果您确实发送了信息,请详细说明您的设置。 一般而言、它有助于了解您用作输入的内容以及您希望从数据中获取的内容。

    吴约瑟

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

    您好、 Joseph、

    感谢您的回复、

    我们使用 Rref 作为1k、容差为0.1%、为了进行测试、我连接了容差为5%的180 Ω 电阻器、计算后的 RTD 值为189 Ω、以交叉验证我已将180 Ω 替换为5%容差的220 Ω、但 RTD 值为278 Ω。 我的寄存器配置是否正确、我已经按照之前答复中提到的所有步骤操作、问题出在哪。 我能否获取此驱动程序文件或库。 LMP90098是24位 ADC、有时 ADCOUT 值为7FFFFF 是错误的。

    以下是用于读取电阻值的代码片段:  

    while (1)

    IF (DRDY_Flg)

    temp_Val = ADC_Read (&hspi1);
    memset (Debug_Buf、'\0'、strlen (Debug_Buf));
    sprintf (Debug_Buf、"ADCOut%02x\r\n"、Temp_Val);
    HAL_UART_Transmit (&huart4、Debug_buf、sizeof (Debug_buf)、200);


    FLT_Temp_Val =((((Temp_Val)*4000)/pow (2、24))+ 100);
    memset (Debug_Buf、'\0'、strlen (Debug_Buf));
    sprintf (Debug_Buf、"欧姆温度:%f\r\n"、Flt_Temp_Val);
    HAL_UART_Transmit (&huart4、Debug_buf、sizeof (Debug_buf)、200);
    HAL_DELAY (2000);

    请告诉我如何解决这个问题。如果我获得相同的库文件、这将很有帮助

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


    您显示的数字与预期相差不大。 我不会查看寄存器值、而是会检查电路板本身以查看可能出现的问题。 (我将在收到几条建议后查看代码)。

    我不知道您的确切设置、因此我不确定您测量的配置、但我相信您使用的是具有低侧基准的等效3线 RTD。 我猜您没有连接 R92。

    使用精密万用表测量基准电压。 根据您所配置的不同,这应该是 IDAC 电流*2*2 1kΩ。 测量测试电阻两端的电压。 这应该是1个 IDAC 电流*测试电阻。 请注意、您有几个串联电阻器。 R14和 R9。 如果它们不完全是0Ω Ω、则会增加误差。 此外、您似乎已经为某种硬件补偿添加了 R10。 我们通常不建议这样做。 您可能会尝试通过允许负值测量来增大动态范围、但它通常只是增加测量误差。 您还可以测量 R10两端的电压、仅检查该值。

    最后、记录万用表在 VIN0至 VIN1之间测得的电压。 使用此选项、您可以查看 ADC 值是否按预期输出。 同样、我需要您记录万用表测量值、并希望您将其与 ADC 输出和预期的 ADC 输出进行比较。 我要注意的是、7FFFFF 的 ADCOUT 可能指示输入为开路或输入超出范围。

    阅读我的评论并进行测量。 让我知道您能获得什么结果。

    我不知道您的问题是否与驱动程序或库问题有关、但下面是一些代码资源:

    LMP90100传感器 AFE 的微控制器固件注意事项
    www.ti.com/.../snaa075a.pdf

    MSP430与 LMP90100代码库相连
    www.ti.com/.../snaa134a.pdf

    MSP430示例代码
    www.ti.com/.../snac029


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

    您好、Joseph、

                感谢您的支持、所有电压测量 都符合您的建议、并且通过将扫描模式更改为0 (单通道连续扫描)、增益更改为1、并且所连接的216欧姆电阻器的电阻值随值的小数点变化而变化、ADC_DOUT 符合预期、 但是、当 RTD 连接时、该点变化会在度数方面产生重大差异(25-28度变化)。

    此致、

    Ankita Kulkarni

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

    Ankita、


    为了跟踪这些类型的测量误差、我需要比您提供的更多信息。 在这一点上、您报告说您有25-28°的变化、但我需要知道这是多少电压和电阻误差。 给出温度误差并不能帮助我调试电路中的错误。 我需要查看您完成的所有计算以及您进行的所有测量。 测量包括来自 ADC 的原始数据。

    如果存在测量误差、代码中可能会出现一些问题、但更有可能是电路出现问题。 因此、我们需要尝试将测量误差与电气特性相关联。

    当您报告数据和测量值时、请在描述中提供非常详细的信息。 此时、我甚至不清楚您的错误的真实性质。 正如您描述的那样、这可能是一些噪声问题或一些增益或偏移误差。


    吴约瑟

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

    您好、Joseph、

    测量详细信息、

    基准电压=(IB1 +IB2)* Rref =(1+1) m*1k = 2V、但实际上我得到的是1.96V

    R10上的电压= 95.7mV (实际)

    差分电压(V0 - V1)= 111.9mV

    ADC_OUT 至 RTD 计算:

    RTD = (((ADC_OUT * 4*1k)/(2^24 * 1))+100  //增益=1

    以度数计算的温度:

    参考 PT-100转换图- 0度- 100欧姆和70度- 127.07欧姆

    我使用了内插方法:

    (Tdeg - 0)/(70 - 0)=(RTD - 100)/(127.07-100)

    i.e、Tdeg =((RTD - 100)/27.07)*70

    对于相同的环境、ADC 值在5秒内变化、

    示例 11:37:21                                                      11:37:28  

    ADCOUT = C18f                                                        ADCOUT = bed

    电阻= 111.813881欧姆                                            电阻= 111.470078欧姆

    温度= 30.539335度                                             温度= 29.660143度

    RTD PT-100会在一秒内给出这种变化、还是在 ADC 采样时出现错误、因为在一秒内温度变化1或2 degs 是不可能在相同的环境设置下实现的。

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

    Ankita、

    我认为、如果我只是仔细研究一些我认为是的误差源、效率会更高。 然后、我将介绍我认为您应该改变的内容。

    下面是测量的基本原理图。 您有3线 RTD 测量、您使用2个匹配的电流源来驱动引线1和2。 IB1驱动引线1和 RTD、而 IB2驱动引线2。 对电流进行求和、然后将引线3输出到基准电阻器。 导联3不是从 VIN0和 VIN1测量的、因此它不会计算到测量中。

    通常、IB1和 IB2用于消除引线电阻。 导联1*IB1被添加到 VIN0至 VIN1的电压中,而导联2*IB2被减去。 如果电流相同且引线电阻相同、则值应消除。

    但是、在电路中、原理图中添加了 R14和 R9。 这些功能与引线电阻相同。 但是、对于0Ω Ω 电阻器和任何焊点、这会增加实际引线电阻的一些可变性。 通常、您需要绕过这些电阻以排除测量中的电阻。 我稍后将展示一个图。

    此外、您还在测量中添加了100Ω Ω 电阻。 我通常根本不会使用它。 我在上一篇文章中提到了这一点。 我相信、我们的想法是取消电压、这样您就可以得到正负值、从而增加测量的动态范围。 在实践中、这很难做到。 同样、您在焊接连接中增加了一些寄生电阻的可变性。 此外、IB1和 IB2可能无法完全匹配。 该误差最大值为0.45%、并增加了硬件补偿的误差。

    至于5秒内电压测量值的变化、这可能是某种程度的自发热。 如果您打开器件、流经 RTD 的电流将导致一些功率耗散。 但是、该值通常非常小。 °您给出的值、这将是一个低值、并且值的有效变化将小于0.02 μ s。 但是、由于测量中有多个电阻器、并且来自焊点的电阻在温度范围内的变化将要大得多。 我在输入或基准上看不到任何电容。 但是、随着时间的推移、这也可能对测量有一定影响(尽管对于输入滤波电容器、通常时间常数为毫秒或更少)。

    这不是你所展示的、而是我本应该做的:

    如前所述、我本来会省去硬件补偿(100Ω Ω 电阻器)并绕过 IB1和 IB2的串联电阻。 转换将基于1kΩ Ω 基准电阻器以电阻为单位。 无论如何、计算结果仍然与我之前提到的应用手册中的结果相同:

    结果如第15页的公式32所示。 请注意、转换输出取决于基准电阻器值、您无需转换为精确的电压。 我只想使用精确的电压来验证测量是否正常。 使用补偿电阻器、您得到的值约为11.8Ω Ω、您需要为此添加100Ω Ω 电阻器。

    请注意、您的误差在数十欧姆范围内。 在测量中添加0Ω Ω 电阻器时、获得这种精度很困难、甚至会更加困难。

    接下来、我将消除100Ω Ω 电阻器。 我还会尝试使用多个不同的 RTD 值。 您可以使用精密电阻器作为替代器件、但您需要连接第三个连接来模拟3线 RTD。 如果由于 IB1和 IB2的不匹配或来自引线1和引线2 (包括0Ω Ω 电阻器)的错误、您可能能够添加一些电流斩波以尝试消除这些错误。 对于您的电路、我将回顾应用手册中的一些说明。 第5页介绍引线消除、第14页介绍3线 RTD 应用、第6页和第16页介绍电流斩波。

    吴约瑟

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


    这条线程的上次发布已经有一段时间了。 我认为、您看到的误差可能是测量中的寄生电阻与激励电流源 IB1和 IB2的失配的组合。 希望您能够在自己的原理图中测试和证明这一点。

    我现在将关闭此帖子、但如果您继续发现测量中的错误、请发布回、我们可以继续查看您的原理图。


    吴约瑟