产品用了TM4C123内部温度传感器用来测量温度,根据参考程序写的代码,代码如下,目前测下来的问题是测量出来的温度波动范围很大,每隔一秒采样一次,取了平均值后范围在20度到30度之间,有个别几次能够到80度以上,甚至能采集到147度。所以想请教一下可能是什么问题,是代码问题?亦或是电源质量不好影响参考电压导致采样不准?或者是计算温度时浮点计算溢出出问题了?我用的ucosIII所以没有打开浮点
void init_adc0(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_ADC0);
SysCtlPeripheralReset(SYSCTL_PERIPH_ADC0);
ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END);
}
void get_tempurate(void)
{
INT32U pui32ADC0Value[4];
INT32U ui32TempValueC = 0;
ADCSequenceEnable(ADC0_BASE, 3);
ADCIntClear(ADC0_BASE, 3);
ADCProcessorTrigger(ADC0_BASE, 3);
while(!ADCIntStatus(ADC0_BASE, 3, false))
{
}
ADCIntClear(ADC0_BASE, 3);
ADCSequenceDataGet(ADC0_BASE, 3, &pui32ADC0Value[0]);
ADCIntClear(ADC0_BASE, 3);
ADCProcessorTrigger(ADC0_BASE, 3);
while(!ADCIntStatus(ADC0_BASE, 3, false))
{
}
ADCIntClear(ADC0_BASE, 3);
ADCSequenceDataGet(ADC0_BASE, 3, &pui32ADC0Value[1]);
ADCIntClear(ADC0_BASE, 3);
ADCProcessorTrigger(ADC0_BASE, 3);
while(!ADCIntStatus(ADC0_BASE, 3, false))
{
}
ADCIntClear(ADC0_BASE, 3);
ADCSequenceDataGet(ADC0_BASE, 3, &pui32ADC0Value[2]);
ADCIntClear(ADC0_BASE, 3);
ADCProcessorTrigger(ADC0_BASE, 3);
while(!ADCIntStatus(ADC0_BASE, 3, false))
{
}
ADCIntClear(ADC0_BASE, 3);
ADCSequenceDataGet(ADC0_BASE, 3, &pui32ADC0Value[3]);
ADCSequenceDisable(ADC0_BASE, 3);
ui32TempValueC = (pui32ADC0Value[0] + pui32ADC0Value[1] + pui32ADC0Value[2] + pui32ADC0Value[3]) / 4;
ui32TempValueC = (uint32_t)(147.5 - ((75.0*3.3 *(float)ui32TempValueC)) / 4096.0);
}