你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f030内部温度值 与室温差距过大。能不能用来检查室温?

[复制链接]
qianrushian 提问时间:2018-6-23 13:59 /
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倍

}
}

收藏 评论13 发布时间:2018-6-23 13:59

举报

13个回答
andeyqi 回答时间:2018-6-23 15:30:44
本帖最后由 andeyqi 于 2018-6-23 15:33 编辑

不能,内部的传感器 应该是检测CPU温度用的,CPU运行起来温度肯定和室温不是一个量级的,而且精度也相对低些,主要是用来查看CPU温度变化的趋势。要测室温建议加温度传感器把

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

电子星辰 回答时间:2018-6-23 19:10:09
完全不能,不管单片机工不工作,室温对芯片内部温度的影响都完全不可测。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

勿忘心安110 回答时间:2018-6-24 11:56:59
用热敏电阻去检测吧

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

strang 回答时间:2018-6-24 16:12:21
肯定不能,内部温度测试的是MCU的温度,和室内温度不是一回事

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

youxia 回答时间:2018-6-24 19:28:28
试想一下,MCU内部温度传感器不是直接和外部环境接触,能得到环境温度吗?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wudianjun2001 回答时间:2018-6-25 09:01:56
最好还是用外部的,内部的要考虑MCU本身发热的问题,

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

qianrushian 回答时间:2018-6-25 10:19:56
勿忘心安110 发表于 2018-6-24 11:56
用热敏电阻去检测吧

热敏电阻怎么检测温度?
stm1024 回答时间:2018-6-25 14:55:57
不能,没有太大意义
youxia 回答时间:2018-6-25 19:20:14
一种方法是使用一个差分放大器接在热敏电阻两端,热敏电阻接在一个电阻分压器中,再将测量的电压和温度通过计算或实验一一对应起来。还有一种就是买现成的温度传感器,这样的传感器有很多,数字模拟的都有。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版