一:原理介绍
通常电子产品中通过NTC电阻测量温度主要有两种方法,一种是用电阻和ntc串联,ntc电压连接一个运放跟随输入单片机ADC接口,精度一般。另一种是通过惠斯顿电桥方法,电路略复杂,精度比较高,我们在本篇文章中不予介绍。
二:背景介绍
本篇文章是根据一个实际的项目:测量电机温度,一般电机温度过高是需要关闭驱动器输出的,这是对电机本身的一种保护,尤其是带光栅码盘的,温度过高会引起码盘糊化。电机温度我们选择监测范围在零下20度到零上90度。
三:元器件选择
NTC选择型号:MF52A 683F3950,
资料请下载我的资源:MF52A683F3950-单片机文档类资源-CSDN文库
核心参数如下:
四:过程与核心代码:
过程原理:
1:设置DMA连接内存存储ADC采集数据
2:ADC采集的数据做一下中值滤波,通过比例算出NTC的电阻值。
3:电阻值查表来得出温度,精度1°。
核心代码:查表法得出温度值
int table68K(int resistance)
{
const int ntc[] = { 616174, 582464, 550797, 521044, 493082,
466797, 442082, 418836, 396965, 376380,
357000, 338745, 321545, 305332, 290043,
275620, 262007, 249154, 237013, 225539,
214757, 204432, 194724, 185534, 176831,
168585, 160770, 153359, 146329, 139658,
133326, 127312, 121599, 116169, 111008,
106099, 101430, 96987, 92757, 88730,
84895, 81241, 77759, 74440, 71276,
68000, 65379, 62633, 60013, 57511,
55123, 52843, 50665, 48585, 46598,
44699, 42884, 41150, 39491, 37906,
36389, 34939, 33551, 32224, 30954,
29739, 28576, 27462, 26396, 25375,
24398, 23462, 22565, 21706, 20883,
20094, 19339, 18614, 17920, 17254,
16616, 16004, 15417, 14853, 14313,
13795, 13297, 12820, 12362, 11922,
11499, 11094, 10704, 10330, 9970,
9625, 9293, 8974, 8668, 8373,
8090, 7817, 7555, 7303, 7060,
6827, 6602, 6386, 6178, 5977};
int r = resistance;
int i = 0;
int tmp = 0;
for(i=0; i < 110;)
{
if(ntc[i] >= r)
{
i++;
}else{
if (i == 0)
{
tmp = 0;
}else {
if((r-ntc[i]) > (ntc[i-1]-r))
{
tmp = i - 1;
} else {
tmp = i;
}
}
break;
}
}
tmp = tmp - 20;
return tmp;
}