主题中讨论的其他器件: MSP430FR2422
我尝试使用内部温度传感器通过 MSP430FR2522读取环境温度。
我正在使用器件中存储的校准数据(链接)将 ADC 计数转换为温度。
我看到输出会受到温度变化的影响、但问题是 我似乎获得了相对于实际温度的大约+57 °C 偏移值。
下面是我的代码的要点:
/* Minimalistic example code (not actual implementation) */ // Calibration values #define ADC_TC_15V_30C (*((uint16_t *) 0x1A1A)) // Temp sensor cal at 30 °C #define ADC_TC_15V_85C (*((uint16_t *) 0x1A1C)) // Temp sensor cal at 85 °C // ADC initialization PMMCTL0 = PMMPW; // Unlock PMM control register PMMCTL2 |= TSENSOREN | INTREFEN; // Enable temperature sensor and internal VREF ADCCTL0 &= ~ADCENC; // Disable ADC conversion before writing configuration ADCCTL0 |= ADCSHT_8; // S&H time = 256 ADCCLK cycles ADCCTL1 |= ADCSHP; // S&H source: ADCSC bit, S&H signal generated from timer, ADCCLK from MODCLK, single-channel mode ADCCTL2 |= ADCPDIV__4 | ADCRES_1; // 10-bit conversion results, ADCCLK = MODCLK/4, unsigned data, 200ksps ADCMCTL0 |= ADCINCH_12 | ADCSREF_1; // Channel A12 (temp sensor), V(R+)=VREF=1.5V, V(R-)=AVSS ADCIE |= ADCIE0; // Enable ADC interrupt // Start ADC ADCCTL0 &= ~ADCENC; ADCCTL0 |= ADCON; ADCCTL0 |= ADCENC | ADCSC; // Temperature readout (inside ADC ISR) ADCCTL0 &= ~ADCENC; ADCCTL0 = ADCON_0;// Turn ADC off uint16_t temperature; temperature = 30 + ((ADCMEM0 - ADC_TC_15V_30C)*(85 - 30))/(ADC_TC_15V_85C - ADC_TC_15V_30C);
我是否正确地使用这样的校准值?
数据表指出(链接)"温度传感器偏移量可能会显著变化。 TI 建议进行单点校准、以更大限度地减少内置温度传感器的失调电压误差。" 但我不明白这是否意味着 除了已经提供的校准之外还要执行。
感谢您对此事的任何帮助。