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.

[参考译文] ADS122U04:视环境而定

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1425770/ads122u04-ambient-dependent

器件型号:ADS122U04

工具与软件:

您好!

  正如参考 TIDA-01526E1一样、我们按照指南和示例软件使用 ADS122U04进行了设计。

一切都很正常、看起来很精确、但我们现在已经测试了环境温度变化的影响、它看起来  ADS122U04非常依赖。

将人工气候室用于电路板并使用高精度电阻器(1K - 0.00C 和1K5 - 130.44C)(非 PT1000)、因为人工气候室外部的传感器提供了高精度电阻器  

  • 初始校准  
    • 环境21.35C -传感器1 0.00C -传感器2 130.46C -差速器130.46C   
  • 冷却60分钟  
    • 环境温度-1.00C - 传感器1 0.08C -传感器2 130.58C -差分130.50C    
  • 静音60分钟  
    • 环境47.47C -传感器1 -0.34C -传感器2 129.95C -差分130.29C   
  • 最大 差值为 0.21C  

如您所见、温度不稳定。 您能解释一下原因吗、我们能否更好地改变内部基准或使用其他模式?

此致 Peter

Init
	ADS122X_reset();                // send UART command
	__delay_cycles(8 * 150);        // 1 * 150 = 17,44 us, measured with Saleae 23. Oct'18
	ADS122X_writeReg(1, 0x0A);      //Normal mode, 90 SPS, Single shot, REFP/N as Reference
	//__delay_cycles(8*300);     // 8 * 300 = 153.6 us
	ADS122X_writeReg(2, 0x04);      //Conversion Counter off, 250 uA IDAC
	// __delay_cycles(8*600);     // 8 * 600 = 455 us
	ADS122X_writeReg(3, 0xA1);      //IDAC2 to REFP pin thru External Ref. Resistor., IDAC1 off, Autoread
	ADS122X_writeReg(4, 0x30);      //Configure GPIO0/1 as output low

Sample
	//Measure RTD2
	//ADS122X_writeReg(0, 0x63); //AIN2/3, Gain=2, PGA Bypassed --> see TechNote SBAA235.pdf Gain=4 for 0x65
	ADS122X_writeReg(0, 0x65);                      //AIN2/3, Gain=4, PGA Bypassed --> see TechNote SBAA235.pdf
	__delay_cycles(8 *  200);                       // 100 us after /RESET rising edge @ 8 MHz
	ADS122X_start();                                // send START command to ADS122X04
	__delay_cycles(8 *  200);                       // 100 us after /RESET rising edge @ 8 MHz
	ADS122X_getConversionData(&convDataRTD2);       //ignore 1st data, IDAC settling

	ADS122X_start();                                // send START command to ADS122X04
	__delay_cycles(8 *  200);                       // 100 us after /RESET rising edge @ 8 MHz

	ADS122X_getConversionData(&convDataRTD2);       //use 2nd data set
	if (convDataRTD2 & 0x800000) {                  // check if result is negative
		convDataRTD2 ^= 0x00FFFFFF;             //invert and make
		convDataRTD2 += 1;                      // two's complement
	}
	convDataRTD2 -= ADS122X_RTD2OffsetCorrection;
	convDataRTD2 = (long)((long long)(convDataRTD2) * ADS122X_RTD2GainCorrection / 100000);

	//Measure RTD1
	ADS122X_writeReg(0, 0x35); //AIN/0, Gain=4, PGA Bypassed --> see TechNote SBAA235.pdf
	// ADS122X_writeReg(0, 0xE5); //AIN/0, Gain=4, PGA Bypassed --> see TechNote SBAA235.pdf

	//using internal REF results are stable
	__delay_cycles(8 * 200);        // 100 us after /RESET rising edge @ 8 MHz
	ADS122X_start();                // send START command to ADS122X04
	__delay_cycles(16 * 800);       // 100 us after /RESET rising edge @ 8 MHz

	ADS122X_getConversionData(&convDataRTD1);
	if (convDataRTD1 & 0x800000) {          // check if result is negative
		convDataRTD1 ^= 0x00FFFFFF;     //invert and make
		convDataRTD1 += 1;              // two's complement
	}
	convDataRTD1 -= ADS122X_RTD1OffsetCorrection;
	convDataRTD1 = (long)((long long)(convDataRTD1) * ADS122X_RTD1GainCorrection / 100000);

	//Measure RTD1 "chopped" (AINx/AINy inverted)
	ADS122X_writeReg(0, 0x05);      //AIN0/1, Gain=4, PGA Bypassed --> see TechNote SBAA235.pdf
	__delay_cycles(8 * 200);        // 100 us after /RESET rising edge @ 8 MHz
	ADS122X_start();                // send START command to ADS122X04
	__delay_cycles(8 * 200);        // 100 us after /RESET rising edge @ 8 MHz

	ADS122X_getConversionData(&convDataRTD1chop);
	if (convDataRTD1chop & 0x800000) {      // check if result is negative
		convDataRTD1chop ^= 0x00FFFFFF; //invert and make
		convDataRTD1chop += 1;          // two's complement
	}
	convDataRTD1chop -= ADS122X_RTD1OffsetCorrection;
	convDataRTD1chop = (long)((long long)(convDataRTD1chop) * ADS122X_RTD1GainCorrection / 100000);

	//Measure RTD2 "chopped" (AINx/AINy inverted)
	ADS122X_writeReg(0, 0x75);              //AIN3/2, Gain=2, PGA Bypassed --> see TechNote SBAA235.pdf; Gain=4 for 0x75
	__delay_cycles(8 *  200);               // 100 us after /RESET rising edge @ 8 MHz
	ADS122X_start();                        // send START command to ADS122X04
	__delay_cycles(8 *  200);               // 100 us after /RESET rising edge @ 8 MHz

	ADS122X_getConversionData(&convDataRTD2chop);
	if (convDataRTD2chop & 0x800000) {      // check if result is negative
		convDataRTD2chop ^= 0x00FFFFFF; //invert and make
		convDataRTD2chop += 1;          // two's complement
	}
	convDataRTD2chop -= ADS122X_RTD2OffsetCorrection;
	convDataRTD2chop = (long)((long long)(convDataRTD2chop) * ADS122X_RTD2GainCorrection / 100000);

	ADS122X_powerdown(); // Powerdown to ADS122x04

	//calculate mean value RTD1
	convDataRTD1 = (convDataRTD1 + convDataRTD1chop) / 2;
	RTDtemperature1 = interpolateRTDTemperatureValue(convDataRTD1); // Get the RTD temperature and convert into millidegrees C

	//calculate mean value RTD2
	convDataRTD2 = (convDataRTD2 + convDataRTD2chop) / 2;
	RTDtemperature2 = interpolateRTDTemperatureValue(convDataRTD2); // Get the RTD temperature and convert into millidegrees C

	/* Result in RTDtemperature1 &  RTDtemperature2 */
	// uart_putLong(RTDtemperature1);
	// uart_putLong(RTDtemperature2);

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

    尊敬的 Peter:

    我将向我们的团队介绍这一点、并会在本周结束时向您提供最新情况。

    此致、

    天使

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

    尊敬的 Peter:

    使 RTD 温度测量更稳定的一种方法是利用 RTD 比例式测量、方法是让同一 IDAC 通过精密基准电阻器为 ADC 设置外部电压基准、而不是使用内部基准。

    RTD 测量是否使用比例式计算?

    您的代码中是否设置了外部基准? 原理图也会很有帮助。  

    您可以在以下应用手册中阅读有关这方面的更多详细信息: RTD 测量基本指南(修订版 A)(TI.com)

    此致、

    天使

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

    嗨、Angel、

    我们正在使用精密基准寄存器、一切都是根据您的 TIDA-01526E1材料制作的 、并且应该非常精确、如 设计指南中所述。 原理图是 https://www.ti.com/lit/df/tidrv83/tidrv83.pdf?BOM=1729225619139 的复本、刚刚添加到电子设备中的相同 ts 与 https://www.ti.com/tool/EVM430-FR6047几乎相同

    只要我们不更改环境温度、设置就很精确、但您的材料中未提到这一点、我们可以做些什么?

    此致 Peter

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

    尊敬的 Peter:

    我将对此进行探讨、然后回复给您。

    此致、

    天使

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

    尊敬的 Peter:

    此设计和示例代码是由我们中央营销组织的一位同事开发和编写的。 遗憾的是、我们对自己实施的代码不是很熟悉。

    我同意、温漂似乎高于我的预期。 其他几个问题:

    • 是否所有测量都使用相同的4增益? 在某些示例代码中、增益似乎在2和4之间切换。
    • 我在示例代码中找不到函数"interrateRTDTemperatureValue"。 您是否有机会知道其中包含了示例代码的哪个文件? 我想检查一下从 ADC 代码到 RTD 电阻的转换是否以比例式方式执行。
      转换只应使用公式中的转换代码、增益设置、R_RTD 和 R_REF。
    • 为您使用的基准电阻指定了什么漂移?
      基准电阻通常决定了整个环境温度范围内的测量精度。
      从我的粗略计算来看、R_REF 漂移似乎在33ppm/°C 范围内、这是非常高的。 这就解释了温漂的原因。
    • 您是否在未使用"斩波"测量值的情况下尝试过代码?
    • 您在初始帖子中提到您正在使用内部 VREF。 但示例代码提到选择了外部 VREF。 您能解释一下吗?

    此致、
    Joachim Wuerker

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

    Joachim、您好!

    感谢您的回答、我将尝试进一步解释。

    • GAIN 始终为4 (0x65、0x35、0x05、0x75)、GAIN/GPA_BYPASS 中为5。  我们只是采用了未经修改的示例代码、而注释变得一团糟。
    • 我已经随附了具有  INTERPOLATERTDTemperatureValue 的文件、但是您可以在 https://www.ti.com/tool/download/TIDC701中找到它
    • 我们的 Rref 是 MCT06030D3901BPP500固定电阻器、薄膜、0.1W、3900 Ω、75V、 0.1%+/-Tol、25ppm/CEL、表面贴装、0603
      alså 尝试了2ppm/cel 设备、未出现任何差异(VIPG_S_A0009883494_1-2514823.pdf)
    • 我没有尝试,没有斩波测量,我相信这个例子
    • 我对 VREF 的评论是误导性的。 我只是想列举不同做法的示例  

    e2e.ti.com/.../RTD_5F00_Math.c

    此致 Peter Nielsen

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

    非常感谢 Peter 的澄清。

    说实话、我不能遵循代码以及查找表的构建方式。 它看起来针对该设计非常具体。 这意味着如果使用其他组件值或设置、它可能不再起作用。 然而,你似乎得到了合理的结果,我认为它在你的情况下是有效的。
    (是的、我完全同意、评论混乱。)

    25ppm/°C RREF 可以与我的误差计算结果保持一致。 但使用2ppm/°C RREF 肯定会提高漂移性能。  我们通常推荐漂移小于=5ppm/°C 范围内的 RREF。
    我不确定漂移应该来自哪里。 ADC 本身只有2ppm/°C 范围内的增益漂移、通过执行"斩波"测量、原则上可以消除温漂。

    此致、
    Joachim Wuerker

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

    Joachim、您好!

    感谢您的回答。 我已购买 ADS122U04EVM、然后会尝试使用标准 TI 软件库来查看此设置是否存在相同的问题。

    我会发布结果、让您知道。

    此致 Peter Nielsen

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

    尊敬的 Peter:

    我不确定您在此特定用例中是否能够真正地成功使用该 EVM。
    另外、我也不确定修改 EVM 以将配置中的两个 RTD 连接到它有多容易。
    我们为 ADS122U04提供的示例代码可能并未显示如何以比例式方式转换数据。
    我们为 ADC 创建的温度传感器固件库可能会更加实用一点: ADC-TEMP-SENSOR-FW

    根据我的计算结果、您看到基于您使用的25ppm/°C RREF 的一切都有意义。 我只是不清楚为什么使用较低漂移的 RREF 不能改善这种情况。 我宁愿进一步调查这一点。

    此致、
    Joachim Wuerker