主题中讨论的其他器件:REF5030
您好!
我不明白为什么温度读数比预期低大约10摄氏度。 (我知道数据表显示精度为+/-5degC)。
我的房间环境温度约为22摄氏度。 我的处理器位于功耗极低的电路板上、触摸时甚至不热。 我希望内部温度传感器读数至少为25摄氏度、但它明显地为我提供了大约15摄氏度的温度。 在多个不同的电路板上是相同的。 我已使用红外温度计检查封装温度、该温度计的读数约为24摄氏度。
下面是用于初始化 ADC 的代码、然后是用于读取温度的代码、该代码在我的应用中每秒运行一次。
是否有人可以发现错误或提出解释?
谢谢你。
Richard
void initTemperature (void)(空)
{
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_ADC1);
while (!(ROM_SysCtlPeripheralReady (SYSCTL_Periph_ADC1))); //等待外设就绪
///ROM_ADCReferenceSet (ADC0_BASE、ADC_REF_EXT_3V);
ROM_ADCReferenceSet (ADC1_base、ADC_REF_INT);
//需要丢弃温度传感器的前3个样本-勘误表
ROM_ADCSequenceDisable (ADC1_base、2); //禁用序列、然后再更改它
ROM_ADCSequenceConfigure (ADC1_base、2、ADC_TRIGGER_PROCESSOR, 1); //选择处理器(软件)触发器
ROM_ADCSequenceStepConfigure (ADC1_BASE、2、0、ADC_CTL_TS); //
ROM_ADCSequenceStepConfigure (ADC1_BASE、2、1、ADC_CTL_TS); //
ROM_ADCSequenceStepConfigure (ADC1_base、2、2、ADC_CTL_TS); //
ROM_ADCSequenceStepConfigure (ADC1_base、2、3、ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END); //
ROM_ADCIntClear (ADC1_BASE、2); //清除中断状态标志
ROM_ADCSequenceEnable (ADC1_BASE、2); //使能序列
}
从 数据表中#define OFFSET 147 //
#define 乘法 器247 //75*3.3V 参考
uint32_t ADC1_value[8];
uint32_t raW_temp;
uint8_t 温度、last_temperature;
uint8_t getTemperature (空)
{
uint8_t chng;
ADCProcessorTrigger (ADC1_base、2); //触发
while (!ADCIntStatus (ADC1_base、2、false) )//等待完成
{
}
ADCIntClear (ADC1_BASE、2); //清除 ADC 中断标志
ADCSequenceDataGet (ADC1_BASE、2、ADC1_VALUE); //读取 ADC 值
RAW_temp = ADC1_VALUE [3];
温度=(uint8_t)(偏移-((乘法器* raW_temp)>> 12)); //温度、单位为摄氏度
Chng = 0;
if (temperature!= last_temperature){
LAST_TEMRATURE =温度;
Chng = 1;
}
返回 chng;
}