stm32f030内部温度值 与室温差距过大。能不能用来检查室温?
void T_Adc_Init(void){
ADC_InitTypeDef ADC_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
ADC_DeInit(ADC1);
ADC_StructInit(&ADC_InitStructure);
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Backward;
ADC_Init(ADC1, &ADC_InitStructure);
ADC_ChannelConfig(ADC1,ADC_Channel_16, ADC_SampleTime_239_5Cycles );
ADC_TempSensorCmd(ENABLE);
ADC_GetCalibrationFactor(ADC1);
ADC_Cmd(ADC1, ENABLE);
while(ADC_GetFlagStatus(ADC1,ADC_FLAG_ADEN)==RESET);
ADC_StartOfConversion(ADC1);
}
uint16_t T_Get_Adc() //读取采样值
{
ADC_ChannelConfig(ADC1,ADC_Channel_16, ADC_SampleTime_239_5Cycles );
ADC_StartOfConversion(ADC1);
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
return ADC_GetConversionValue(ADC1);
}
uint16_t T_Get_Adc_Average(uint8_t times)//读取多次采样值求平均
{
uint32_t temp_val=0;
uint8_t t;
for(t=0;t<times;t++)
{
temp_val+=T_Get_Adc();
delay_ms(5);
}
return temp_val/times;
}
int main(void)
{
uint32_t adcx=0,temp_a=0;
float temp;
T_Adc_Init();
while(1)
{
adcx=T_Get_Adc_Average(10);
temp=((float)adcx*(3.3/4096));
temp=(1.43-temp)/0.0043+25;
temp_a=temp*1000;// 扩大温度值的1000倍
}
}
本帖最后由 andeyqi 于 2018-6-23 15:33 编辑
不能,内部的传感器 应该是检测CPU温度用的,CPU运行起来温度肯定和室温不是一个量级的,而且精度也相对低些,主要是用来查看CPU温度变化的趋势。要测室温建议加温度传感器把 完全不能,不管单片机工不工作,室温对芯片内部温度的影响都完全不可测。 用热敏电阻去检测吧 肯定不能,内部温度测试的是MCU的温度,和室内温度不是一回事 试想一下,MCU内部温度传感器不是直接和外部环境接触,能得到环境温度吗? 最好还是用外部的,内部的要考虑MCU本身发热的问题, 勿忘心安110 发表于 2018-6-24 11:56
用热敏电阻去检测吧
热敏电阻怎么检测温度? 不能,没有太大意义 一种方法是使用一个差分放大器接在热敏电阻两端,热敏电阻接在一个电阻分压器中,再将测量的电压和温度通过计算或实验一一对应起来。还有一种就是买现成的温度传感器,这样的传感器有很多,数字模拟的都有。
页:
[1]
2