工具/软件:
您好!
我们在 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


