Part Number: ADS1248
Hello,
We're using an ADS1248 for measuring thermocouples and are experiencing some strange results from the System and Self-Offset calibrations.
When performing a self-offset calibration, using the SELFOCAL command, we are getting offset values of about -15 to -17 microvolts.
But when we perform a system calibration by applying a 0V differential input to the input pins we measure an offset of (averaged over 4096 measurements) -6.851 to 9.421 depending on which input we use.
We also lifted the pins of the ADS1248 and then we measure an offset of -1 to -3 microvolts.
We are having difficulties explaining these differences in calibrations and we're not sure if we're doing everything correctly because of it.
Our schematic:
And the 7100_7400_Thermocouple inputs part:
And the code we use for self-offset calibration:
int32_t DRV_ADS1248_SelfOffset(void)
{
uint8_t writeBuffer[3] = {0};
uint8_t readBuffer[3] = {0};
uint32_t preExtended = 0;
int32_t extended = 0;
dataReady = false;
// Clear the offset register
writeBuffer[0] = 0x00;
writeBuffer[1] = 0x00;
writeBuffer[2] = 0x00;
DRV_ADS1248_WriteReg(ADS_OFC0_OFFSET, writeBuffer, readBuffer, 3);
// Set the FSC to 0x400000
writeBuffer[0] = 0x00;
writeBuffer[1] = 0x00;
writeBuffer[2] = 0x40;
DRV_ADS1248_WriteReg(ADS_FSC0_OFFSET, writeBuffer, readBuffer, 3);
// Start self offset calibration
DRV_ADS1248_WriteCmd(ADS_SELFOCAL);
while(!dataReady);
// Read the calibration result
DRV_ADS1248_ReadReg(ADS_OFC0_OFFSET, readBuffer, 3);
preExtended = (readBuffer[2]<<16 | readBuffer[1]<<8 | readBuffer[0]);
extended = 0;
// If bit ADC_SIGN_BIT is 1, extend the sign, otherwise copy
if(preExtended >> 23 == 1)
{
extended = preExtended | (0xFF << 24);
}
else
{
extended = preExtended;
}
//Return extended ADC value
return extended;
}
We'd like to know why we are experiencing such big (for thermocouples this is big) differences in System Offset calibrations and Self Offset calibrations