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