跳到主要内容

【ADC转换】NTC热敏电阻测温

下载例程代码: 下载代码

热敏电阻简介

通过ADC转换器,读取NTC热敏电阻的电压,实现温度测量

套件NTC热敏传感器主要参数:

参数
常温电阻10KΩ (25℃)
B值3950
精度± 1%
工作温度-20 ~ 105 ℃
热时间常数≤ 12 s

如何使用例程

下载程序,并连接硬件,即可看到效果

硬件连接

  • 将配套的NTC热敏线插到学习板
NTC线
  • 使用配套TYPE-C数据线,将学习板连接到计算机
连接usb线

程序效果

串口数据

例程讲解

下面介绍了如何自己实现该例程的功能

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 - 4095
    • return 返回NTC电阻值,浮点数类型,单位Ω
float ADC2Resistance(uint32_t adc_value) {
return (adc_value / (4096.0f - adc_value)) * 10000.0f;
}
  • 通过NTC阻值计算温度
    • R1 NTC电阻值
    • 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);
}

故障排除

工程建立和配置