【ADC 转换】NTC 热敏电阻测温
下载例程代码: 下载代码
注意
请一定按照 例程使用方法 🔗 导入例程,否则下载的可能不是例程而是其他工程。
热敏电阻简介
通过 ADC 转换器,读取 NTC 热敏电阻的电压,实现温度测量
套件 NTC 热敏传感器主要参数:
| 参数 | 值 |
|---|---|
| 常温电阻 | 10KΩ (25℃) |
| B 值 | 3950 |
| 精度 | ± 1% |
| 工作温度 | -20 ~ 105 ℃ |
| 热时间常数 | ≤ 12 s |
如何使用例程
下载程序,并连接硬件,即可看到效果
硬件连接
- 将配套的 NTC 热敏线插到学习板

- 使用配套 TYPE-C 数据线,将学习板连接到计算机

程序效果
- 打开 小智精灵 串口助手 在线串口调试助手,点击“选择串口”,选择 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 引用头文件:
#include "stdio.h"
#include "string.h"
#include "math.h"
- 启动连续 ADC 转换
// 启动连续ADC转换
HAL_ADC_Start(&hadc1);
// 等待ADC稳定
HAL_Delay(500);
(2) 温度计算
- 通过 ADC 值计算 NTC 电阻值
adc_value输入 ADC 结果,范围 0 - 4095return返回 NTC 电阻值,浮点数类型,单位 Ω
float ADC2Resistance(uint32_t adc_value) {
return (adc_value / (4095.0f - adc_value)) * 10000.0f;
}
- 通过 NTC 阻值计算温度
R1NTC 电阻值return返回温度,float 类型,单位摄氏度
float resistance2Temperature(float R1) {
float B = 3950.0f;
float R2 = 10000.0f;
float T2 = 25.0f;
return (1.0 / ((1.0 / B) * log(R1 / R2) + (1.0 / (T2 + 273.15))) - 273.15);
}