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.

[参考译文] ADS7142:取决于 ADS7142IRUGR 温度和启动特定的失调电压误差

Guru**** 2531950 points
Other Parts Discussed in Thread: ADS7142

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1558822/ads7142-ads7142irugr-temperature-dependent-and-bootup-specific-offset-error

部件号:ADS7142


工具/软件:

您好!

我们在 ADS7142 启动期间观察到两个不同的电压失调电平、尽管偏移校准/软件复位、这些失调电压在器件上电时仍然存在。 这些水平相差 16LSB、 出现特定失调电平的概率似乎取决于温度。 这种失调电压似乎在不同的器件甚至平台上非常一致且可重现、转换后约为 500uV。 偏移量在转换器的通道之间共享、但不会在不同的转换器单元之间共享。 否则、在最高 1 位级别、偏移校准似乎准确。

以下是该现象的一些图示。 请注意在测试过程中重新启动设备时的行为差异、如图 2.当设备在整个测试期间通电时,如图所示。 3.

图 1.从 45°C 到–10°C 的温度扫描图。 器件会定期通电和断电。 AD1 连接到 GND、而 AD2 测量两个电阻器之间的一个节点。 电阻似乎与温度有一定的相关性。

 

图 2.采用 AD7142 AD 转换器进行温度测量。 器件会定期通电和断电。 可以看到基于温度的开关极性的电压偏移电平。  

图 3.设备持续通电时的温度测量。 尽管偏移校准和软件复位、但偏移电平看起来稳定。

这是 AD 转换器的原理图。 请注意、我们无法监控 Busy/RDY 线路。

图 4.转换器周围的原理图。  

我们已经尝试了 TI 论坛中提供的解决方案、但没有任何用处(软件复位等) 此外、即使在用电源为 ADS7142 供电时、也观察到了这种现象。 此外、还尝试了转换器周围的不同电容器配置。 这似乎会对转换器稳定到的失调电压的分布产生一定的影响、但可以观察到这种现象。

下面是用于初始化的代码:

void Init_ADS7142_PT1000_black_bright(){
	uint8_t ADS_COMMAND[4];
//	ADS7142_SoftwareReset(&hi2c1, ADS7142_I2C_ADDRESS_PT1000);
	/*Calibrate offset values*/
	ADS_COMMAND[0] = SINGLE_WRITE;
	ADS_COMMAND[1] = ADS7142_REG_OFFSET_CAL;
	ADS_COMMAND[2] = ADS7142_VAL_TRIG_OFFCAL;
	HAL_I2C_Master_Transmit(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, ADS_COMMAND, 3, 10);
	HAL_Delay(10);
	/*Select channel input configuration*/
	ADS_COMMAND[0] = SINGLE_WRITE;
	ADS_COMMAND[1] = ADS7142_REG_CHANNEL_INPUT_CFG;
	ADS_COMMAND[2] = ADS7142_VAL_CHANNEL_INPUT_CFG_2_CHANNEL_SINGLE_ENDED;
	HAL_I2C_Master_Transmit(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, ADS_COMMAND, 3, 10);
	/*Select mode*/
	ADS_COMMAND[0] = SINGLE_WRITE;
	ADS_COMMAND[1] = ADS7142_REG_OPMODE_SEL;
	ADS_COMMAND[2] = ADS7142_VAL_OPMODE_SEL_HIGH_PRECISION_MODE;
	HAL_I2C_Master_Transmit(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, ADS_COMMAND, 3, 10);
	/*Select Auto sequence channel enable*/
	ADS_COMMAND[0] = SINGLE_WRITE;
	ADS_COMMAND[1] = ADS7142_REG_AUTO_SEQ_CHEN;
	ADS_COMMAND[2] = ADS7142_VAL_AUTO_SEQ_CHENAUTO_SEQ_CH0_CH1;
	HAL_I2C_Master_Transmit(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, ADS_COMMAND, 3, 10);
	/*Select High speed oscillator*/
	ADS_COMMAND[0] = SINGLE_WRITE;
	ADS_COMMAND[1] = ADS7142_REG_OSC_SEL;
	ADS_COMMAND[2] = ADS7142_VAL_OSC_SEL_HSZ_HSO;
	HAL_I2C_Master_Transmit(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, ADS_COMMAND, 3, 10);
	/*Select nCLK parameter*/
	ADS_COMMAND[0] = SINGLE_WRITE;
	ADS_COMMAND[1] = ADS7142_REG_nCLK_SEL;
	ADS_COMMAND[2] = 0x60; 				//default value 0x15 = 21 cycles
	HAL_I2C_Master_Transmit(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, ADS_COMMAND, 3, 10);
	/*Enable accumulator*/
	ADS_COMMAND[0] = SINGLE_WRITE;
	ADS_COMMAND[1] = ADS7142_REG_ACC_EN;
	ADS_COMMAND[2] = ADS7142_VAL_ACC_EN;
	HAL_I2C_Master_Transmit(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, ADS_COMMAND, 3, 10);
}

和读取:

for(int i=0;i<loopcount;i++){
		ADS_COMMAND[0] = SET_BIT_ADS7142;
		ADS_COMMAND[1] = ADS7142_REG_START_SEQUENCE;
		ADS_COMMAND[2] = ADS7142_VAL_START_SEQUENCE;
		HAL_I2C_Master_Transmit(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, ADS_COMMAND, 3, 10);
		for (int k=0;k<3;k++){
			ADS_COMMAND[0] = SINGLE_READ;
			ADS_COMMAND[1] = ADS7142_REG_ACCUMULATOR_STATUS;
			HAL_I2C_Master_Transmit(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, ADS_COMMAND, 2, 10);
			HAL_I2C_Master_Receive(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, TEST, 1, 10);
//			printf("number: %d\r\n", TEST[0]);
			if (TEST[0] < 16){
				delay_us(20);
			}
			else{
				k=3;
			}
		}
//		HAL_Delay(1);
//		delay_us(20);
		/*Read ACC_0 MSB and LSB*/
		ADS_COMMAND[0] = BLOCK_READ;
		ADS_COMMAND[1] = ADS7142_REG_ACC_CH0_LSB;
		HAL_I2C_Master_Transmit(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, ADS_COMMAND, 2, 10);
		HAL_I2C_Master_Receive(&hi2c1, ADS7142_I2C_ADDRESS_PT1000, TEST, 4, 10);

BR、

Pauli

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

    您好 Pauli、

    如果我理解正确、请告诉我。 问题似乎是在转换值中随机出现的不连续跳变。  有时、即使在温度没有变化的情况下、也很少出现导致两次转换之间 16LSB 发生变化的尖峰。  

    您能分享更完整的原理图吗? 什么元件连接到 ADC 输入? 是否使用热敏电阻测量温度、如果是、您能否分享器件型号?

    此致、
    Joel

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

    尊敬的 Joel:

    本身不存在不连续的跳跃、而是器件在启动期间稳定到两个可能的电压失调电平中的一个。 请注意、图中显示的是完全平坦的线。 1 和 2 是器件断电、因此不记录。 在这种情况下、会记录器件读取的最新值。 图中看到的不连续跳跃是由于在测试运行期间关闭设备后打开电源造成的(图 1 和图 2) 通过电源开/关开关。 请注意、图 3 中的跳转消失、其中设备持续通电而不重新启动。 用于图 3 我们使用众所周知且值得信赖的铂电阻。

    如果将较高电压失调电平的幅度表示为 a、将较低电压电平表示为 b、并且器件稳定至 A 的实例表示为 a、类似地表示为 B、则可以根据图中所示。 1 和 2  

    a - b ~= 500uV、  和             (1)

    P (A)= 1 - P (B)、

    P (A | T = 15°C)= 100%、         (2)

    P (A | T = 44°C)~= 80%、         

    P (A | T = 3°C)~= 5%。

    输入原理图如图所示。 5.

    如图 1 表示 AD1、OUT1(与图中的原理图相同) 5) 连接到 GND 作为已知基准、节点 R38-R36 也是如此。  我们还尝试了将 C11 值更改为 470pF 和 200nF。 更改输入侧原理图、如图 6、以及更改 图 4 似乎修改了 EQS 中的概率函数 2. 然而、在介于 (45°C、–60°C) 之间的某个温度范围内、我们始终观察到 A 和 B 都有一些非零概率。

    图 5. AD 转换器输入侧的原理图。 OUT2 连接到转换器的 AD2。

    图 6. ADS7142 的不同用例。 尽管 ADC 输入原理图发生了变化、但这种现象仍然可以观察到。

    希望这一点澄清,

    Pauli

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

    您好 Pauli、

    我想我是在把握这个问题。 在两个不同的下电上电之间、尽管执行了失调电压校准、但测量结果可能会有所差异、并且输入电压保持不变。

    我不太明白的是你所说的 16 LSB 和 500 μ V 数据之间的区别。 在 1.8V 时、16 LSB 增量为 7mV。 您能解释一下差异吗? 500uV 的差值将接近 1 LSB。

    如果您能够对图形进行注释以及对问题的发生位置、这也会很有帮助。  遗憾的是、我很难遵循时间标度以及与 ADC 代码的关系。

    此外、我们很乐意通过电话与您会面、帮助您进一步澄清问题并更直接地提供帮助。 我最早的时间是 9 月 4 日。 Jorgen Larsson(现场应用工程师)似乎已经意识到这个问题、因此我们可以通过他协调一些时间。

    此致、
    Joel

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

    如果阅读得更仔细、则会更清晰一些。 主要说明因素是 a 和 b 之间差异的幅度、以 LSB 和电压表示。 此时、似乎处于数据表规格范围内(±2.9LSB)、这是失调电压校准变化导致的不幸结果。  

    此致、
    Joel

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

    尊敬的 Joel:

    我们使用高分辨率模式(16 位分辨率)、可在 1v8 时将 LSB 降至~27uV。

    然而、重新查看规格后、在该模式下、失调电压误差看起来为+–10LSB、这确实适合我们观察到的失调电压。

    谢谢、

    Pauli