工具/软件:Code Composer Studio
您好,
我正在尝试获取温度值,但有时它可以正常工作,但之后的数据是不相关的。首先,我使用ADC读取电压读数,然后读取温度读数
1.使用 以下代码读取电压。
ref_a_disableReferenceVoltageOutput();
ref_a_enableReferenceVoltage();
ref_a_setReferenceVoltage (REF_A_VREF2_5V);
ADC14_setResolution (ADC_14BIT );
/*初始化ADC (SMCLK)*/
ADC14_enableModule();
ADC14_INITModule (ADC_CLOCKSOURCE_SMCLK,ADC_PREDIVIDER_1,ADC_DIVIDER_1,0);
/*配置ADC内存*/
ADC14_enableReferenceBurst();
ADC14_configureSingleSampleMode (ADC_MEM0,TRUE);
/*配置采样计时器*/
ADC14_enableSampleTimer(ADC_AUTOMATICATE_IREDATE);
/*启用中断*/
ADC14_enableInterrupt (ADC_INT0);
ADC14_configureConversionMemory (ADC_MEM0,ADC_VREFPOS_INTBUF_VREFNEG_VSS,
ADC_INPUT_A1,FALSE);
/*启用/切换转换*/
ADC14_enableConversion();
ADC14_toggleConversionTrigger();
//i=0;
//while (i<=12)
{
UINT64_t status = ADC14_getEnabledInterruptStatus();
ADC14_clearInterruptFlag (状态);
IF (ADC_INT0和状态)
{
//vlg[i]= ADC14_getResult(ADC_MEM0);
vlg =((ADC14_getResult(ADC_MEM0)*2.5f)/ 1.6384万)*2)*100;
//I++;
}
}
ADC14_disableConversion();
然后我 使用读取温度,代码如下所示
浮动温度;
uINT16_t ltempC =0;
uINT32_t cal30,cal85;
/*将参考电压设置为2.5 并启用温度传感器*/
ref_a_setReferenceVoltage (REF_A_VREF2_5V);
ref_a_enableReferenceVoltage();
ref_a_enableTempSensor();
/*在温度传感器已布设的情况下初始化ADC (MCLK/1/1)*/
ADC14_enableModule();
ADC14_INITModule (ADC_CLOCKSOURCE_MCLK,ADC_PREDIVIDER_1,ADC_DIVIDER_1,
ADC_TEMPSENSEMAP);
/*重复配置ADC内存(ADC_MEM0 A22 (温度传感器)
*模式)。
*/
ADC14_configureSingleSampleMode (ADC_MEM0,TRUE);
ADC14_configureConversionMemory(ADC_MEM0,ADC_VREFPOS_INTBUF_VREFNEG_VSS,
ADC_INPUT_A22,FALSE);
/*为TBD */配置采样/保持时间
ADC14_setSampleHoldTime (ADC_PULSE_WIDES_192,ADC_PULSE_WIDES_192);
/*在自动迭代模式下启用采样计时器并中断*/
ADC14_enableSampleTimer(ADC_AUTOMATICATE_IREDATE);
ADC14_enableInterrupt (ADC_INT0);
/*触发样本开始*/
ADC14_enableConversion();
ADC14_toggleConversionTrigger();
/*进入睡眠状态*/
//i=0;
//while (i<=21)
{
UINT64_t status = ADC14_getEnabledInterruptStatus();
ADC14_clearInterruptFlag (状态);
IF (状态和ADC_INT0)
{
cal30 = sysctl_getTempCalibrationConstant (sysctl_2_5V_REF,
sysctl_30_degrees_C);
cal85 = sysctl_getTempCalibrationConstant (sysctl_2_5V_REF,
sysctl_85_degrees_C);
Temp =(浮点)(((Int32_t) ADC14_getResult (ADC_MEM0)- cal30)*(85 - 30))
/(cal85 - cal30)+ 30.0f;
ltempC =温度;
//tempF = tempC * 9.0f / 5.0f + 32.0f;
}
}
ADC14_disableConversion();
典型的温度传感器传输功能如图20-10所示。 此处所示为传输功能
只是一个示例。 需要校准以确定特定设备的相应电压。
µs温度传感器时,"采样周期必须大于5 ̊ C "。 温度
传感器偏移误差可能较大,必须针对大多数应用进行校准。 温度校准
这些值可用于TLV描述符中(请参阅特定于设备的数据表以了解位置)。
上述文本 位于 MSP432P4xx系列 技术参考手册中,页码为662 。我有疑问 的是 "采样周期必须大于5 µs "的含义是什么。
为我提供一些解决方案以获得一致的温度值。
谢谢,顺祝商祺
Praveen Kumar G.