微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32 内部温度传感器

STM32 内部温度传感器

时间:11-13 来源:互联网 点击:

这个是抄袭马七的均值数字滤波函数 呵呵

/*******************************************************************************
* Name : ADC_Filter
* Deion : ADC_Filter
* Input : None
* Output : None
* Return : ADC Converted Value
*******************************************************************************/
u16 ADC_Filter(void)
{
u16 result=0;
u8 i;
for(i=16;i>0;i--)
{
Delay_Ms(1);
result += ADCConvertedValue;
}
return result/16;
}

转换结果 往串口发送显示 (写的很烂哈)

ADC_Value = ADC_filter();

vu16 Temperature= (1.42 - ADC_Value*3.3/4096)*1000/4.35 + 25;
ADC_Value = Temperature;

a = ADC_Value/1000;
b = (ADC_Value - a*1000)/100;
c = (ADC_Value - a*1000 - b*100)/10;
d = ADC_Value - a*1000 - b*100 - c*10;

Uart1_PutString("STM32 Chip Temperature = ",strlen("STM32 Chip Temperature = "));
Uart1_PutChar(a+0);
Uart1_PutChar(b+0);
Uart1_PutChar(c+0);
Uart1_PutChar(d+0);
Uart1_PutString(" C\n",strlen(" C\n"));

==================================================

11.10 温度传感器温度传感器可以用来测量器件周围的温度(TA)。

温度传感器在内部和ADC1_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。

温度传感器模拟输入推荐采样时间是17.1μs。 图41是温度传感器的方框图。 当没有被使用时,传感器可以置于关电模式。


注意:必须设置TSVREFE位激活内部通道:ADC1_IN16(温度传感器)和ADC1_IN17(VREFINT)的转换。

温度传感器输出电压随温度线性变化,由于生产过程的变化,温度变化曲线的偏移在不同芯片上会有不同(最多相差45°C)。内部温度传感器更适合于检测温度的变化,而不是测量绝对的温度。如果需要测量精确的温度,应该使用一个外置的温度传感器。

读温度为使用传感器:

1. 选择ADC1_IN16输入通道

2. 选择采样时间为17.1 μ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位。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top