STM32 HAL NTC(3950 10k)查表法

        NTC(Negative Temperature Coefficient)是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料。该材料是利用锰、铜、硅、钴、铁、镍、锌等两种或两种以上的金属氧化物进行充分混合、成型、烧结等工艺而成的半导体陶瓷,可制成具有负温度系数(NTC)的热敏电阻。其电阻率和材料常数随材料成分比例、烧结气氛、烧结温度和结构状态不同而变化。现在还出现了以碳化硅、硒化锡、氮化钽等为代表的非氧化物系NTC热敏电阻材料。

在实际电路中,则是采用分压的方式进行,该点的电压采集,其NTC设计原理图如图所示:

而图中的下面则是接NTC的接口。

下面则是ntc程序

ntc_3950.c

#include "ntc_3950.h"

#define SHORT_CIRCUIT_THRESHOLD 15
#define OPEN_CIRCUIT_THRESHOLD 4080
uint16_t DATA_BUFF1[ADC_LOOP1_MARK] = {0};
uint16_t DATA_BUFF2[ADC_LOOP2_MARK] = {0};

/*定义一个结构体类型数组:(温度-阻值)表 温度按降序填*/
const NTC_10KTYPE  ntc_10k_table[] = {
125,325, 	
124,333, 	
123,342,  	
122,352, 	
121,361, 	
120,371, 		
119,381, 
118,392,
117,403,
116,414,	
115,426, 	
114,438, 	
113,450,
112,463,
111,476,
110,490,
109,504,
108,519,
107,534,
106,549,
105,566,
104,582,
103,600,
102,618,
101,636,
100,656,
99,675,
98,696,
97,718,
96,740,
95,763,
94,786,
93,811,
92,837,
91,863,
90,891,
89,919,
88,949,
87,980,
86,1011,
85,1045,
84,1079,
83,1114,
82,1151,
81,1190,
80,1230,
79,1271,
78,1314,
77,1359,
76,1406,
75,1454,
74,1504,
73,1557,
72,1611,
71,1668,
70,1726,
69,1788,
68,1851,		
6
### STM32 NTC 3950 热敏电阻温度测量配置 #### 定义硬件连接 NTC热敏电阻通常与固定电阻组成分压电路,其一端接电源另一端接地。中间节点接入ADC输入引脚用于采样电压。 对于STM32来说,假设使用PA0作为ADC输入通道来读取NTC热敏电阻的电压值[^3]。 ```c // 假设已经初始化好GPIOA PA0为模拟输入模式 ``` #### 初始化ADC模块 设置ADC参数以便能够正确获取来自NTC热敏电阻的数据: - 设置分辨率为12位; - 启用连续转换模式; - 单周期工作模式下启动一次转换; - 结果右对齐存储于寄存器内; ```c static void MX_ADC_Init(void) { ADC_ChannelConfTypeDef sConfig = {0}; hadc.Instance = ADC1; // 配置ADC基本属性... if (HAL_ADC_Init(&hadc) != HAL_OK) { Error_Handler(); } sConfig.Channel = ADC_CHANNEL_0; /* 对应PA0 */ sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) { Error_Handler(); /* 错误处理函数 */ } } ``` #### 数据采集过程中的注意事项 由于环境因素可能引入干扰,在实际应用中建议加入简单的平均滤波或其他形式的去噪手段以提高稳定性[^1]。 #### 将ADC数值转化为温度值 通过已知的NTC特性曲线计算当前温度。这里给出一个简化版的例子,具体实现取决于所使用的NTC型号及其B常数等参数。 ```c float GetTemperature(uint16_t adc_value) { float voltage_ratio = ((float)(adc_value * 3.3f)) / 4095.0f; // 计算得到的实际电压比例 const float Rntc_nominal = 10000.0f; // 标准阻值(欧姆), 如10kΩ const float Tnominal = 25 + 273.15; // 参考温度(Kelvin),即室温25°C转成绝对零度以上单位 const float Bconstant = 3950.0f; // Beta系数(B) float resistance = Rntc_nominal / (((1.0f/voltage_ratio)-1)); // 计算此时对应的电阻值 return 1/(log(resistance/Rntc_nominal)/Bconstant+(1/Tnominal))-273.15; // 返回摄氏度表示的结果 } ``` 上述代码片段展示了如何基于ADC返回的原始数据推导出相应的物理量——温度,并考虑到不同器件间的差异性进行了适当调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啵啵520520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值