这里是记录一下自己项目中用到的温度测量所用到的温度表 和 计算公式。
虽然有各种型号的温度传感器,但很多要求并不高,只需基本合理即可,所以稍作修改,都是可以通用的。
一、查表获取温度
const uint16_t ntc_adc_tem_table[] =
{
/*
8.458, 8.774, 9.19, 9.643, 10.05, 10.65, 11.1, 11.82, 12.4, 12.91, // -50~
13.53, 14.44, 15.4, 16.41, 17.48, 18.62, 19.81, 21.07, 22.39, 23.79, // -40~
25.26, 26.8, 28.42, 30.13, 31.92, 33.8, 35.77, 37.84, 40.01, 42.28, // -30~
44.67, 47.22, 49.89, 52.68, 55.61, 58.67, 61.87, 65.22, 68.72, 72.38, // -20~
76.19, 80.17, 84.32, 88.65, 93.16, 97.86, 102.8, 107.9, 113.2, 118.7, // -10~
124.4, 130.5, 136.8, 143.3, 150, 157, 164.5, 172.3, 180.4, 188.8, // 0
197.5, 206.5, 215.8, 225.4, 235.4, 245.7, 256.6, 267.9, 279.5, 291.4, // 10~
303.8, 316.7, 330, 343.7, 357.8, 372.4, 387.3, 402.6, 418.4, 434.6, // 20~
451.3, 468.8, 486.7, 505.1, 524, 543.3, 562.9, 583.1, 603.6, 624.6, // 30~
646.1, 668.4, 691.1, 714.3, 738, 762.2, 787.1, 812.4, 838.1, 864.3, // 40~
*/
124 , 130 , 136 , 143 , 150, 157, 164 , 172 , 180 , 188 , // 0
197 , 206 , 215 , 225 , 235 , 245 , 256 , 267 , 279 , 291 , // 10~
303 , 316 , 330, 343 , 357 , 372 , 387 , 402 , 418 , 434 , // 20~
451 , 468 , 486 , 505 , 524, 543 , 562 , 583 , 603 , 624 , // 30~
646 , 668 , 691 , 714 , 738, 762 , 787 , 812 , 838 , 864 , // 40~
891, 918, 945, 973, 1001, 1030, 1059, 1088, 1118, 1147, // 50~
1178, 1208, 1238, 1269, 1299, 1330, 1362, 1394, 1426, 1458, // 60~
1490, 1522, 1554, 1586, 1618, 1650, 1684, 1717, 1750, 1784, // 70~
1818, 1851, 1884, 1917, 1950, 1982, 2014, 2046, 2078, 2110, // 80~
2141, 2173, 2205, 2237, 2268, 2299, 2329, 2358, 2387, 2417, // 90~
2444, 2473, 2502, 2530, 2558, 2586, 2614, 2641, 2668, 2695, // 100~
2722, 2747, 2771, 2796, 2819, 2842, 2866, 2889, 2911, 2934, // 110~
2955, 2977, 2999, 3021, 3043, 3064, 3084, 3105, 3124, 3144, // 120~
3163, 3180, 3198, 3213, 3230, 3246, 3261, 3277, 3293, 3306, // 130~
3322, 3336, 3352, 3366, 3380, 3394, 3408, 3419, 3433, 3445, // 140~
3459, 3471, 3483, 3495, 3507, 3519, 3531, 3540, 3552, 3562, // 150~
3571, 3584, 3593, 3602, 3612, 3622, 3631, 3638, 3647, 3657, // 160~
3664, 3674, 3680, 3687, 3697, 3703, 3710, 3717, 3724, 3730, // 170~
3737, 3744, 3751, 3758, 3761, 3768, 3775, 3779, 3786, 3789, // 180~
/*
3796, 3800, 3807, 3810, 3817, 3821, 3824, 3832, 3835, 3839, // 190~
3842, 3850, 3853, 3857, 3861, 3864, 3868, 3871, 3879, 3882 // 200~
3842, 3850, 3853, 3857, 3861, 3864, 3868, 3871, 3879, 3882, // 200~
3886, 3890, 3890, 3894, 3897, 3901, 3905, 3908, 3912, 3916, // 210~
3916, 3920, 3923, 3927, 3927, 3931, 3935, 3935, 3938, 3942, // 220~
3942, 3946, 3946, 3950, 3950, 3954, 3954, 3957, 3957, 3961, // 230~
3961, 3965, 3965, 3969, 3969, 3973, 3973, 3973, 3977, 3977, // 240~
3981, 3981, 3981, 3984, 3984, 3988, 3988, 3988, 3992, 3992, // 250~
3996, 3996, 4000, 4000, 4000, 4004, 4004, 4008, 4008, 4012, // 260~
4012, 4016, 4016, 4016, 4020, 4020, 4024, 4024, 4028, 4028, // 270~
4031, 4031, 4031, 4035, 4035, 4039, 4039, 4043, 4043, 4043, // 280~
4047, 4047, 4051, 4051, 4055, 4055, 4055, 4059, 4059, 4059, // 290~
*/
};
// 查表用
int find_from_ntc_table( uint16_t adcv )
{
int i;
for( i = 0; i < 200; i ++ ) // 200根据自己表的元素数目来定
if( ntc_adc_tem_table[i] >=adcv )break;
return i;
}
二、这里是用公式 计算
//本计算式对应热敏电阻型号为:玻璃封装MF58-103J-3950
float MEAS_GetTemprature( uint16_t adcv) //读取温度
{
//拟合函数获取
return 0.054*log(0.021/(1000*(4096/adcv-1))) + 0.396954;
}