123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #include "ntc_temperature.h"
- // 热敏电阻表,单位 kΩ,温度范围 -20°C ~ 125°C,对应146个点
- const float ntc_r_table[] = {
- 470.0207, 444.1102, 419.7806, 396.9266, 375.4503, 355.2610, 336.2743, 318.4118, 301.6008, 285.7737,
- 270.8672, 256.8230, 243.5863, 231.1064, 219.3359, 208.2307, 197.7495, 187.8540, 178.5083, 169.6789,
- 161.3346, 153.4462, 145.9864, 138.9297, 132.2521, 125.9314, 119.9466, 114.2781, 108.9076, 103.8180,
- 98.9930, 94.4176, 90.0777, 85.9599, 82.0517, 78.3414, 74.8180, 71.4712, 68.2913, 65.2690,
- 62.3959, 59.6638, 57.0651, 54.5927, 52.2398, 50.0000, 47.8674, 45.8364, 43.9015, 42.0579,
- 40.3007, 38.6256, 37.0282, 35.5047, 34.0512, 32.6642, 31.3404, 30.0766, 28.8698, 27.7172,
- 26.6160, 25.5638, 24.5582, 23.5969, 22.6776, 21.7985, 20.9576, 20.1530, 19.3830, 18.6459,
- 17.9403, 17.2647, 16.6175, 15.9976, 15.4036, 14.8343, 14.2886, 13.7655, 13.2639, 12.7828,
- 12.3213, 11.8785, 11.4535, 11.0457, 10.6541, 10.2782, 9.9172, 9.5704, 9.2373, 8.9172,
- 8.6096, 8.3139, 8.0297, 7.7564, 7.4935, 7.2407, 6.9975, 6.7635, 6.5383, 6.3216,
- 6.1129, 5.9120, 5.7186, 5.5323, 5.3528, 5.1800, 5.0134, 4.8528, 4.6981, 4.5489,
- 4.4051, 4.2664, 4.1326, 4.0036, 3.8792, 3.7591, 3.6432, 3.5313, 3.4234, 3.3191,
- 3.2185, 3.1213, 3.0274, 2.9367, 2.8491, 2.7645, 2.6827, 2.6037, 2.5273, 2.4534,
- 2.3820, 2.3129, 2.2461, 2.1815, 2.1190, 2.0586, 2.0001, 1.9434, 1.8886, 1.8356,
- 1.7842, 1.7345, 1.6864, 1.6398, 1.5946, 1.5509
- };
- #define NTC_TEMP_MIN -20
- #define NTC_TEMP_MAX 125
- // 线性插值查找温度
- float NTC_GetTemperature(float r_ntc_kohm)
- {
- const int table_size = sizeof(ntc_r_table) / sizeof(ntc_r_table[0]);
- for (int i = 0; i < table_size - 1; ++i)
- {
- if (r_ntc_kohm >= ntc_r_table[i + 1] && r_ntc_kohm <= ntc_r_table[i])
- {
- float r1 = ntc_r_table[i];
- float r2 = ntc_r_table[i + 1];
- float t1 = NTC_TEMP_MIN + i;
- float t2 = NTC_TEMP_MIN + i + 1;
- // 线性插值
- return t1 + (r_ntc_kohm - r1) * (t2 - t1) / (r2 - r1);
- }
- }
- // 超出范围
- return -999.9f;
- }
- // 通过电压计算热敏电阻值
- float NTC_CalculateResistance(float v_ntc, float v_ref, float r_fixed)
- {
- if (v_ntc <= 0.0f || v_ntc >= v_ref)
- return -1.0f;
- return r_fixed * (v_ref / v_ntc - 1.0f); // 单位:kΩ
- }
|