当前位置:首页 > 单片机 > 单片机
[导读] 温度传感器可以用来测量器件周围的温度(TA)。温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。温度传感器模拟输入推荐采样时间是17.1μs。当没有被使用时,传感器可

 

温度传感器可以用来测量器件周围的温度(TA)。
温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。
温度传感器模拟输入推荐采样时间是17.1μs。
当没有被使用时,传感器可以置于关电模式。
注意:必须设置TSVREFE位激活内部通道:ADCx_IN16(温度传感器)和ADCx_IN17(VREFINT)的转换。

主要特征
●支持的温度范围:-40到125度
●精确度:+/- 1.5° C

读温度
为使用传感器:
1.选择ADCx_IN16输入通道
2.选择采样时间大于2.2 μs
3.设置ADC控制寄存器2(ADC_CR2)的TSVREFE位,以唤醒关电模式下的温度传感器
4.通过设置ADON位启动ADC转换(或用外部触发)
5.读ADC数据寄存器上的VSENSE 数据结果
6.利用下列公式得出温度
温度(°C) = {(V25 - VSENSE) / Avg_Slope} + 25
这里:
V25 = VSENSE
在25°C时的数值
Avg_Slope = 温度与VSENSE曲线的平均斜率(单位为mV/° C 或 μV/ °C)
参考电气特性章节中V25 和Avg_Slope的实际值。
注意:传感器从关电模式唤醒后到可以输出正确水平的VSENSE前,有一个建立时间。ADC在上电后也
有一个建立时间,为了缩短延时,应该同时设置ADON和TSVREFE位。

以下部分来自wolaiye945的博客:

首先将数据进行比例转化,可以使用微软系统自带的计算器,根据参考电压3.3V在12位AD转换对应最大值0xFFF可知,1.42V对应0x6E2(1762D),而斜率每摄氏度4.35mV对应每摄氏度0x05,故此时公式可以修正为:温度(°C) = {(0x6E2- VSENSE) / 5} + 25

综上所述,芯片的温度已经可以通过计算存入变量,在经过相应的位处理就可以显示在LCD上。
本人使用的代码仅供参考,如下:
//变量声明部分略去
mytemp = (0x6E2- ADC_ConvertedValue_Bak) / 0x05 + 25;

for (v2=3;v2;v2--)
{
v1=mytemp;
mytemp/=10;
LCD_DrawChar(3,(v2-1)<<3,HexValueOffset[v1]);
}

最后,还需要提示一下,在使用的时候不要忘记唤醒温度传感器(默认处于休眠状态),也就是需要设置ADC控制寄存器2(ADC_CR2)的TSVREFE位为1,否则会得到一个几乎为零的极小AD值,通过公式得到一个远远超出范围的温度值,显然是错误的。
给控制寄存器置位可以使用直接置位的方法,但为了增强程序的模块化程度,我建议使用STM32预定义的函数ADC_TempSensorVrefintCmd(ENABLE);
在初始化ADC后和开始转换前的代码段中调用该函数,即可唤醒温度传感器的检测。

以下来自泡桐树

 

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式CR1
ADC_InitStructure.ADC_ScanConvMode = ENABLE;//扫描模式使能
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//连续转换模式使能
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//启动转换的外部事件--无CR2
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//转换后的数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 2;//转换的通道数为2
ADC_Init(ADC1, &ADC_InitStructure);

//内部温度传感器添加这一句

ADC_TempSensorVrefintCmd(ENABLE);


ADC_RegularChannelConfig(ADC1,ADC_Channel_11, 1, ADC_SampleTime_55Cycles5);//通道11采样时间


//################ Channel 11(电位器)###### 内部温度传感器改为 Channel 16 ###################
ADC_RegularChannelConfig(ADC1,ADC_Channel_16, 2, ADC_SampleTime_239Cycles5);



ADC_Cmd(ADC1, ENABLE);

 

显示和转换公式如下

u16 GetVolt(u16 advalue)
{
return (u16)(advalue*330/4096);
}

u16 GetTemp(u16 advalue)
{
u32 Vtemp_sensor;
s32 Current_Temp;

Vtemp_sensor=advalue*330/4096;
Current_Temp=(s32)(143-Vtemp_sensor)*10000/43+2500;
return (s16)Current_Temp;
}

初始化ADC,DMA后,循环读取AD_Value[2]来获取计数值,进而进行转换。

 

 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式系统开发中,STM32系列微控制器的内部温度传感器因其低成本、高集成度特性,广泛应用于设备自检、环境监测等场景。然而,受芯片工艺差异和电源噪声影响,其原始数据存在±1.5℃的固有误差。本文从硬件配置、校准算法、软...

关键字: STM32 温度传感器

中国 上海,2025年7月18日——全球领先的智能传感和发射器解决方案供应商艾迈斯欧司朗(SIX:AMS)今日宣布,推出的一款紧凑型温度传感器——AS6211,可监测奶牛体内状况,揭示外部无法观测的信息。该传感器内置于s...

关键字: 温度传感器 AS6221

本文讨论如何为特定应用选择合适的温度传感器。我们将介绍不同类型的温度传感器及其优缺点。最后,我们将探讨远程和本地检测技术的最新进展如何推动科技进步,从而创造出更多更先进的温度传感器。

关键字: 温度传感器 CPU FPGA

如果您愿意,您甚至可以使用I2Ctools在总线上读写。这可以使用命令sudo i2cget 3 0x3f 0x01来实现。这是从I2C总线3中获得的,在设备地址0x3F处,寄存器0x01的内容,这是温度传感器上的who...

关键字: ZUBoard 无刷直流电机 温度传感器

TDK株式会社(东京证券交易所代码:6762)隆重推出新系列温度传感器的首款产品—B58101A0851A000。该新元件专为电动车 (EV) 的动力系统冷却应用而设计,是一款灵敏度高的全密封型NTC热敏电阻,可实现快速...

关键字: 电动车 温度传感器 电驱系统
关闭