14_内部温度传感器
- 格式:pdf
- 大小:885.06 KB
- 文档页数:12
L
e i
)
LTK
女娲STM32开发板使用手册
修订历史
L T
K (L
e i
T e
k )
目录
第14 内部温度传感器 (3)
章 内部温度传感器简介 ......................................................................... 3 14.1 内部温度传感器应用实例 ----- 检测芯片内部温度 (4)
14.2 实例描述 ................................................................................ 4 14.2.1 实验效果 ................................................................................ 4 14.2.2 硬件设计 ................................................................................ 4 14.2.3 软件设计 .. (4)
14.2.4
L T
K
(L
e i
T e
k )
内部温度传感器
第14章 内部温度传感器简介
14.1温度传感器可以用来测量器件周围的温度(TA)。温度传感器在内部和ADC1_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。温度传感器模拟输入推荐采样时间是17.1μs 。 当没有被使用时,传感器可以置于关电模式。 注意: 必须设置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) 温度传感器通道方框图:
L T
K
(L
e i
T e
k )
内部温度传感器应用实例 ----- 检测芯片内部温度
14.2 实例描述
14.2.1本实例使用内部温度传感器来测试芯片内部温度,由上图温度传感器通道方框图看到,内部温度传感器固定在ADCx 的通道16。
实验效果
14.2.2烧录该软件后,用USB 线连接到开发板上标有UART 的USB 口,在电脑的串口终端工具(如 secureCRT )内会输出芯片内部的温度。注意,由于当地气温,以及不同芯片之间的差异,温度输出可能会不一致。
硬件设计
14.2.3该实例无需外部硬件
软件设计
14.2.4我们先从main 开始,该函数在应用层文件temperature_main.c 内实现,主函数首先初始化系统滴答,用于精确延迟,然后再初始化ADC 和串口,在主循环内,采样芯片内部温度传感器的输出,并且转换为温度,通过串口输出。在25℃左右时,温度的计算公式为:
Temperature = (1.43 - ADC_Value * 3.3 / 4096) * 1000 / 4.35 + 25
1 /**
2 * 描述: 主函数,ADC 采样检测芯片内部温度
3 * 参数: 无
L T
K (L
e i
T e
k )
4 * 返回: 无
5 */
6 int main(void )
7 {
8 float temperature;
9 /* 系统滴答频率设置为 1000,即1毫秒一次 */ 10 ltk_systick_init(1000); 11
12 ltk_adc_init(ADC_NUM, ADC_TEMP_CHAN); 13 ltk_adc_start(); 14
15 ltk_usart_init();
16 USART_Cmd(USART1, ENABLE); 17
18 while (1)
19 {
20 /* 公式: Temperature = (1.43 - ADC_Value * 3.3 / 4096) * 1000 / 4.35 + 25 */
21 temperature = (1.43 - get_adc_value() * 3.3 / 4096) * 1000 / 4.35 + 25;
22 ltk_printf("%2.2f celsius\n", temperature); 23 ltk_systick_delay(500); 24 } 25 }
内部温度传感器对应的ADC 在文件ltk_board_nvwa.h 内定义,
1 /* KEY0 -> ADC1_CH
2 -> PA2 */
2 #define ADC_GPIO_PORT GPIOA
3 #define ADC_GPIO_PIN GPIO_Pin_2
4 #define ADC_GPIO_RCC RCC_APB2Periph_GPIOA
5 #define ADC_NUM ADC1
6 #define ADC_CHAN ADC_Channel_2
7 #define ADC_RCC RCC_APB2Periph_ADC1
8 #define ADC_TEMP_CHAN ADC_Channel_16
ADC 的初始化和启动在文件ltk_adc.c 内,ADC1,通道16配置为独立模式,无外部触发,数据右对齐,为规则通道。并且使能了传输完成中断,在ADC 传输完成后会触发中断函数ADC1_2_IRQHandler ,在文件stm32f10x_it.c 内,该函数会一直读取ADC 采样值。在开始采样之前,ADC 需要先校正,由函数
ltk_adc_start 实现。
1 static uint16_t volatile adc_converted_value; 2