一。STM32内部温度传感器概述

     学习这一节之前要对ADC有一个清楚的理解。因为STM32内部温度传感器本质上就是ADC。

(一)内部温度传感器框图

      51.内部温度传感器实验


内部温度传感器连接到ADC1的通道16,在使用之前要去使能相应的控制位TSVREFE,使能了之后内部温度传感器就连接到了通道16.

(二)STM32内部温度传感器概述

51.内部温度传感器实验

由于它在芯片的内部,因此一般都用了测试芯片内部的温度,不同于环境温度,要稍微偏高一些。

51.内部温度传感器实验
温度传感器模拟输入推荐采样时间是17.1us,不能太快。

(三)内部温度传感器使用注意是像。

51.内部温度传感器实验

把CR2的TSVREFE位(bit23)设置为1就启用了温度传感器。

51.内部温度传感器实验
V25是温度传感器在25度时输出的电压数值,典型值为1.43.
输出的电压跟温度的关系基本上是一条直线。我们以一条直线处理。

内部温度传感器温度和电压关系图


51.内部温度传感器实验

知道了这条直线的斜率,同时知道某一个点,那么这根线也就确定了。确定了这根线就可以确定在这根线上任何一点的对应关系。

公式的计算方法:

比如我们知道了斜率是A,同时知道了这个点:在25度的时候电压输出是V25

斜率是一个直角的高度/宽度。

A=(V25-V)/(T-25度)

因此 T=25+(V25-V)/A

(三)开启内部温度传感器的步骤

51.内部温度传感器实验

二。实验程序讲解

tsensor.c

//初始化ADC

//这里我们仅以规则通道为例

//我们默认将开启通道0~3

void T_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和ADC2工作在独立模式

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 T_Get_Adc(u8 ch)   

{

 

ADC_RegularChannelConfig(ADC1, ch, 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 T_Get_Temp(void)

{

u16 temp_val=0;

u8 t;

for(t=0;t<10;t++)

{

temp_val+=T_Get_Adc(ADC_Channel_16);  //TampSensor,获取通道16的ADC值

delay_ms(5);

}

return temp_val/10;

}

//得到温度值

//返回值:温度值(扩大了100倍,单位:℃.),比如温度是10.5度,返回值是1050.

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; //转换为温度值 

 

result=temperate*=100; //扩大100倍.

return result;

}

主函数main.c

int main(void)

 {  

short temp; 

delay_init();     //延时函数初始化  

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级

uart_init(115200); //串口初始化为115200

LED_Init();   //初始化与LED连接的硬件接口

  LCD_Init(); //初始化LCD

  T_Adc_Init();   //ADC初始化

   

POINT_COLOR=RED;//设置字体为红色 

LCD_ShowString(30,50,200,16,16,"WarShip STM32");

LCD_ShowString(30,70,200,16,16,"Temperature TEST");

LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");

LCD_ShowString(30,110,200,16,16,"2015/1/14");  

POINT_COLOR=BLUE;//设置字体为蓝色    

  

LCD_ShowString(30,140,200,16,16,"TEMPERATE: 00.00C"); 

     

while(1)

{

temp=Get_Temprate(); //得到温度值 

if(temp<0)

{

temp=-temp;

LCD_ShowString(30+10*8,140,16,16,16,"-"); //显示负号

}else LCD_ShowString(30+10*8,140,16,16,16," "); //无符号

LCD_ShowxNum(30+11*8,140,temp/100,2,16,0); //显示整数部分

LCD_ShowxNum(30+14*8,140,temp0,2,16, 0X80); //显示小数部分

LED0=!LED0;

delay_ms(250);

}

51.内部温度传感器实验


关键字:内部  温度传感器  STM32 引用地址:51.内部温度传感器实验

上一篇:52. STM32的DAC实验
下一篇:50.待机唤醒实验

推荐阅读

近些年,中国人工成本上升,招工难、用工荒等一系列问题困扰着企业。然而,失之东隅收之桑榆,中国成为全球第一大工业机器人应用市场,据统计2017年我国工业机器人产量达13万台之多,增速81%,而2018年上半年便有7万多台出售。 如今,工业机器人已经服务我国各行各业,如汽车、3C制造,而我国机器人产地则呈现东部布局的态势——即集中在以上海为主的...
据韩国先驱报报道,为在晶圆代工领域超越台积电,应对不断增长的半导体需求,三星电子向ASML订购15台先进EUV设备。光刻机是克服半导体制造工艺最小化限制的关键设备,其单价高达2000亿韩元。据报道,三星电子最近发出一份意向书(LOI),向ASML购买价值3万亿韩元的EUV设备,交付分三年进行。业内人士表示,由于三星增加EUV设备订单,三星即将在新晶圆代工...
日前,选车君从相关渠道获悉,沃尔沃汽车将在SPA2平台使用驾驶员监测传感器,以预防由于驾驶时分心导致的事故发生。 沃尔沃汽车表示,随着车载科技和智能移动终端的发展,越来越多的驾驶员在驾驶时会有分心的表现,毕竟在上世纪四十年代,车内还没有配备屏幕、电话甚至收音机时,当时的车辆在某种意义上比现在更安全,但是使用这些电子设备已经成为了大部...
近日,日本海关发布了8月份该国进出口贸易的最新数据。数据显示,8月份出口到中国大陆的总额为14210万亿日元,从中国大陆进口为16293万亿日元,贸易逆差为2082.4亿日元。其中,出口到中国大陆的半导体设备为6301台,同比下降25.5%,价值为952亿日元,同比下降10.1%,占出口到中国大陆所有商品价值的6.7%。出口到中国大陆的集成电路器件的数量为22.4亿个,...

史海拾趣

问答坊 | AI 解惑

SPEC 下载

各位请问一下有没有元件的SPEC 下载呀!…

查看全部问答∨

FPGA如何防盗?

FPGA加密有那些高招?请教高人!…

查看全部问答∨

如何精确处理模拟信号

大家好,现在实验中要对模拟信号精确处理,模拟信号Vo为电流传感器输出,经过隔离芯片后为Vin,然后送到跟随器,由于隔离芯片有误差,导致Vin高于Vo,差值为0.02v,为固定值,请问如何才能才能使用模拟电路抵消0.02v的差值?(见附件) [ 本帖最后 ...…

查看全部问答∨

PADS9.1 一分钟不到全部装完,问题少少的

PADS9.1 一分钟不到全部装完,问题少少的 这个软件我用了几个月了,还可以,跟大家分享一下…

查看全部问答∨

关于wince 在读写flash时候突然掉电的问题

昨天,一应用程序员反问了这个问题 在写向flash写数据的时候,突然断电,下次再启动的时候。这个文件变成不可读写了,说是写保护了。 请问大家是否遇到这种情况了? 我看了两个类似的帖子。 http://topic.eeworld.net/u/20080616/11/C34E5388-9 ...…

查看全部问答∨

请问BootSector的最后两个字节到底是什么

我最近在看《自己动手写操作系统》那本书,已经看到了保护模式,但尚有一问,第一章时,BootSector的代码的最后两个字节是0x55aa 但是我后来改成了0xaa55 也可以正常引导,请问这到底是怎么回事呢?…

查看全部问答∨

用制作LED16*16单行点阵屏通过RS232串口接收数据问题

本人用89C51做了一个LED16*16点阵单行显示屏,带RS232串行口,现在本人写的程序可显示4个中文汉字左或右、上或下循环显示,我懂用计时器0、方式1 设置9600波特率通过串口助手发十六进制01 、02控制带串口的LED单灯左循环的启停,现在有几点请教大家 ...…

查看全部问答∨

atmel程序

各位大虾,写atmega的C程序需要注意一些什么问题呀。。…

查看全部问答∨

S3C2416开发板ARM9EJ内核 完美替代S3C2440

一、S3C2416简介     S3C2416是低功耗、高性能、低成本的SAMSUNG ARM9(ARM926EJ)处理器,最具性价比优势的芯片,S3C2440最完美的替代者。    UT-S3C2416开发板是一款以S3C2416处理器为核心的高 ...…

查看全部问答∨

模拟量输入信号线能够距离plc多远 ?

模拟量输入信号线能够距离plc多远 ?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved