请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430F6734A 您好!
我尝试读取由 TI 校准的温度传感器值。
我使用由 TLV 提供的两个校准点、位于 01A00h。
但我的问题是、MSP430测量值与实际值之间始终存在大约10度的差异。
Fluke 289可将 MSP430温度测量为-20C、但 MSP430内部传感器返回-6C。 (环境温度稳定3-4小时)
Fluke 289可将 MSP430温度测量为+60C、但 MSP430内部传感器返回67C。
Fluke 的温度恰好位于 MSP430的顶部。 MCU 在 测量时仅消耗5mA 的电流、8MHz MCLK 时、我认为它自身不会发热。
我认为、TLV 校准数据后的内部温度传感器精度为3度。 因此10度是不可接受的。 潜在的问题可能是什么?
ADC10CTL0 = 0; ADC10CTL0 = ADC10SHT_7 | ADC10ON;// S&H = 192 ADC CLKS;启用 ADC10、温度采样周期必须大于30us、所以最小 s/h 为168个 adcclk ADC10CTL1 = ADC10SHP;// MODCLK = 5.6Mhz 、从 ADC10L2取值;ADC10CC 最大值= ADC10CC// 10位转换结果 ADC10MCTL0 = ADC10SREF_1 | ADC10INCH_10;//内部 Vref+、A10温度 传感器 REFCTL0 = REFMSTR | REFVSEL_1 | REFON;//选择内部基准= 2.0V __DELAY_CYCLS (750u);//提供基准趋稳延迟~75US //启用 ADC10并开始转换 ADC10CTL0 || ADC10ENC | ADC10SC; while (ADTEMPERATE & ADC10ENC = ADC10EN0)= ADC10EN0 ~ADC10ENC = ADC10EN0;while (ADC10ENC & ADC10ENC = ADC10ENC = ADC10EN0 = ADC10EN0) temperate_adc_val =((temperate_adc_val - m_DeviceDesc.Content.ADC20T30)*(85L - 30L)* 4096L /(m_DeviceDesc.Content.ADC20T85 - m_DeviceDesc.Content.ADC20T30))+(4096L * 30L); temper温度_adc_val= ( 如果温度 值大于4096L)、则温度值=/ADC_val =(如果温度值)/ADC_val =(如果温度值大于4096L)、则保持在之前的范围内)+(如果温度值= 4096L)(如果 ADC_val =/ADC_val 值)(如果 ADC_val =/ADC_val 值)(如果
--------------------
typedef struct { u8InfoLength; // 1A00h1u8 CRCLhength; // 1A01h1 U16CRCValue; // 1A02h2 U16DeviceID; // 1A04h2 u8硬件修订版; // 1A06h1 u8FirmwareRevision; // 1A07h1u8 DieRecordTag; // 1A08h1u8 DieRecordLength; // 1A09h1u32 LotID; // 1A0Ah4 U16XPosition; // 1A0Eh2 U16YPosition; // 1A10h2 U16TestResult;// 1A12h2 u8ADCCalibrationTag; // 1A14h1 u8ADCCalibrationLength;// 1A15h1 S16ADCGainFactor; // 1A16h2 S16ADCOffset; // 1A18h2 S16ADC15T30; // 1A1Ah2 S16ADC15T85; // 1A1Ch2 S16ADC20T30; // 1A1Eh2 S16ADC20T85; // 1A20h2 S16ADC25T30; // 1A22h2 S16ADC25T85; // 1A24h2 }TDeviceDescriptors;