【ADC转换】NTC热敏电阻测温
下载例程代码:
热敏电阻简介
通过ADC转换器,读取NTC热敏电阻的电压,实现温度测量
套件NTC热敏传感器主要参数:
参数 | 值 |
|---|---|
常温电阻 | 10KΩ (25℃) |
B值 | 3950 |
精度 | ± 1% |
工作温度 | -20 ~ 105 ℃ |
热时间常数 | ≤ 12 s |
如何使用例程
下载程序,并连接硬件,即可看到效果
硬件连接
- 将配套的NTC热敏线插到学习板
- 使用配套TYPE-C数据线,将学习板连接到计算机
程序效果
- 打开 波特律动 串口助手 (baud-dance.com) 在线串口调试助手,点击"选择串口",选择USB Single Serial,即可收到ADC转换结果,如图所示
例程讲解
下面介绍了如何自己实现该例程的功能
1、工程配置
- 打开ADC1:在Pinout&Configuration页面,将 PA4 设置为 ADC1_IN4
- 配置ADC:在Pinout&Configuration -> Analog -> ADC1 -> Configuration中
- ADC_Settings -> Continuous Conversion Mode设为Enable,使 ADC 转换持续进行,不用每次手动触发
- ADC_Regular_ConversionMode -> Rank -> Sampling Time设为239.5 Cycles,最长采样时间,可以获得更稳定的转换结果
采样时间越长,转换结果越准确
- **打开串口2外设:**Pinout&Configuration -> Connectivity -> USART2,将 Mode 选择为 Asynchronous
- **启用float打印:**在cubeIDE菜单栏中,Project Properties -> C/C++ Build -> Settings -> Tool Settings -> MCU Settings,勾选 Use float with printf ... -nano
默认情况下,sprintf函数不能打印小数。因此我们需要配置一下编译器,使其能够打印小数
2、代码
(1) 初始化过程
- 引用头文件:需要使用 sprintf 打印输出,以及数学函数,在 main.c 引用头文件:
C语言
1#include "stdio.h"2#include "string.h"3#include "math.h"
- 启动连续ADC转换
C语言
1// 启动连续ADC转换2HAL_ADC_Start(&hadc1);3// 等待ADC稳定4HAL_Delay(500);
(2) 温度计算
- 通过ADC值计算NTC电阻值
- adc_value 输入ADC结果,范围 0 - 4095
- return 返回NTC电阻值,浮点数类型,单位Ω
C语言1float ADC2Resistance(uint32_t adc_value) {2 return (adc_value / (4095.0f - adc_value)) * 10000.0f;3}- 通过NTC阻值计算温度
- R1 NTC电阻值
- return 返回温度,float类型,单位摄氏度
C语言
1float resistance2Temperature(float R1) {2 float B = 3950.0f;3 float R2 = 10000.0f;4 float T2 = 25.0f;5 return (1.0 / ((1.0 / B) * log(R1 / R2) + (1.0 / (T2 + 273.15))) - 273.15);6}