资讯详情

STM32内部温度传感器简述

STM32有一个内部温度传感器,可度传感器CPU周围的温度(TA)。 特点:

  1. ,该通道将传感器输出的电压转换为数字值

  2. STM支持32的内部温度传感器为:-40~125度。,为±1.5℃左右

  3. 内部温度传感器更适合,而不是测量绝对温度。如果需要测量绝度温度,应使用外部温度传感器,如DS18B20

我们必须在第一个地方使用它STM必须首先激活32的内部温度传感器ADC的内部通道,这里通过ADC_CR2的TSVREFE位(bit23)设置。将该位置设置为1,启用内部温度传感器。

ADC_TempSensorVrefintCmd(ENABLE); ///打开内部温度传感器 

T(℃)={ 
       (V25-Vsense)/Avg_Slope} 25 

V25=Vsense值为25度(典型值为:1.43)。 Avg_Slope=温度与Vsense曲线平均斜率(单位为mv/℃或uv/℃)(典型值为4.3Mv/℃)。 利用上述公式,我们可以轻松计算当前温度传感器的温度

void Adc_Init(void)  //ADC通道初始化 { 
         ADC_InitTypeDef ADC_InitStructure;   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE );   //使能GPIOA,ADC1通道时钟     RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //分频因子6时钟72M/6=12MHz    ADC_DeInit(ADC1);  //将外设 ADC1 所有寄存器重新设置为缺省值    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC在独立模式下工作  ADC_InitStructure.ADC_ScanConvMode = DISABLE; ///模数转换工作单通道模式   ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ///模数转换工作单次转换模式  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐  ADC_InitStructure.ADC_NbrOfChannel = 1; ///按顺序转换规则ADC通道的数目  ADC_Init(ADC1, &ADC_InitStructure); //根据ADC_InitStruct初始化外设中指定的参数ADCx的寄存器   ADC_TempSensorVrefintCmd(ENABLE); ///打开内部温度传感器      
      
       ADC_Cmd
       (ADC1
       , ENABLE
       )
       ; 
       //使能指定的ADC1 
       ADC_ResetCalibration
       (ADC1
       )
       ; 
       //重置指定的ADC1的复位寄存器 
       while
       (
       ADC_GetResetCalibrationStatus
       (ADC1
       )
       )
       ; 
       //获取ADC1重置校准寄存器的状态,设置状态则等待 
       ADC_StartCalibration
       (ADC1
       )
       ; 
       // 
       while
       (
       ADC_GetCalibrationStatus
       (ADC1
       )
       )
       ; 
       //获取指定ADC1的校准程序,设置状态则等待 
       } u16 
       Get_Adc
       (
       ) 
       { 
         
       ADC_RegularChannelConfig
       (ADC1
       , ADC_Channel_16
       , 
       1
       , ADC_SampleTime_239Cycles5 
       )
       ; 
       //ADC1,ADC通道16,第一个转换,采样时间为239.5周期  
       ADC_SoftwareStartConvCmd
       (ADC1
       , ENABLE
       )
       ; 
       //使能指定的ADC1的软件转换启动功能 
       while
       (
       !
       ADC_GetFlagStatus
       (ADC1
       , ADC_FLAG_EOC 
       )
       )
       ;
       //等待转换结束 
       return 
       ADC_GetConversionValue
       (ADC1
       )
       ; 
       //返回最近一次ADC1规则组的转换结果 
       } 
       //得到ADC采样内部温度传感器的值 
       //取10次,然后平均 u16 
       Get_Temp
       (
       void
       ) 
       { 
         u16 temp_val
       =
       0
       ; u8 t
       ; 
       for
       (t
       =
       0
       ;t
       <
       10
       ;t
       ++
       ) 
       { 
         temp_val
       +
       =
       Get_Adc
       (
       )
       ; 
       //TampSensor 
       delay_ms
       (
       5
       )
       ; 
       } 
       return temp_val
       /
       10
       ; 
       } 
       //获取通道ch的转换值 
       //取times次,然后平均 u16 
       Get_Adc_Average
       (u8 ch
       ,u8 times
       ) 
       { 
         u32 temp_val
       =
       0
       ; u8 t
       ; 
       for
       (t
       =
       0
       ;t
       <times
       ;t
       ++
       ) 
       { 
         temp_val
       +
       =
       T_Get_Adc
       (ch
       )
       ; 
       delay_ms
       (
       5
       )
       ; 
       } 
       return temp_val
       /times
       ; 
       } 
       //得到温度值 
       //返回值:温度值(扩大了100倍,单位:℃.) 
       short 
       Get_Temprate
       (
       void
       ) 
       //获取内部温度传感器温度值 
       { 
         u32 adcx
       ; 
       short result
       ; 
       double temperate
       ; adcx
       =
       T_Get_Adc_Average
       (ADC_Channel_16
       ,
       20
       )
       ; 
       //读取通道16,20次取平均 temperate
       =
       (
       float
       )adcx
       *
       (
       3.3
       /
       4096
       )
       ; 
       //电压值  temperate
       =
       (
       1.43
       -temperate
       )
       /
       0.0043
       +
       25
       ; 
       //转换为温度值 采样值转换成温度值 
       printf
       (
       "%.2f\n"
       ,temperate
       )
       ; 
       return result
       ; 
       } 
      

近期本人将更新关于自己所学到的全部ADC知识,敬请关注。 欢迎各位大佬交流

标签: 温度传感器40度f0温度传感器ta3130温度传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台