工具与软件:
您好!
正如参考 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);