1772 lines
34 KiB
C
1772 lines
34 KiB
C
//
|
||
// Created by cfif on 02.12.2025.
|
||
//
|
||
#include "stdint.h"
|
||
#include "ADC_Temp_KST45-14-2.h"
|
||
#include <math.h>
|
||
|
||
// Константы
|
||
#define ADC_MAX 4095.0f // 12-битный АЦП
|
||
#define R1 3000.0f // Сопротивление делителя напряжения
|
||
#define TABLE_START_TEMP (-40)
|
||
#define TABLE_END_TEMP 85
|
||
#define TABLE_SIZE 38
|
||
|
||
// Параметры Steinhart-Hart для термистора
|
||
#define koef_A 0.001741624168166423
|
||
#define koef_B 0.00017003940268680147
|
||
#define koef_C 0.0000004890545443703666
|
||
|
||
#define TABLE_SIZE_LOOKUP 512
|
||
|
||
// Структура для хранения табличных данных
|
||
typedef struct {
|
||
int temp_c; // Температура (°C)
|
||
float r_nom; // Номинальное сопротивление (Ω)
|
||
} ntc_table_entry;
|
||
|
||
/*
|
||
// Таблица из документа KST45-14-2
|
||
static const ntc_table_entry ntc_table[] = {
|
||
{-40, 100950.0f},
|
||
{-35, 72777.0f},
|
||
{-30, 53100.0f},
|
||
{-25, 39111.0f},
|
||
{-20, 29121.0f},
|
||
{-15, 21879.0f},
|
||
{-10, 16599.0f},
|
||
{-5, 12695.0f},
|
||
{0, 9795.0f},
|
||
{5, 7616.0f},
|
||
{10, 5970.0f},
|
||
{15, 4712.0f},
|
||
{20, 3747.0f},
|
||
{25, 3000.0f},
|
||
{30, 2417.0f},
|
||
{35, 1959.0f},
|
||
{40, 1598.0f},
|
||
{45, 1311.0f},
|
||
{50, 1081.0f},
|
||
{55, 895.9f},
|
||
{60, 746.4f},
|
||
{65, 624.9f},
|
||
{70, 525.6f},
|
||
{75, 444.4f},
|
||
{80, 377.4f},
|
||
{85, 321.7f}
|
||
};
|
||
*/
|
||
|
||
/*
|
||
ntc_table_entry ntc_table[] = {
|
||
{0,-2731},
|
||
{8,2605},
|
||
{16,2164},
|
||
{24,1937},
|
||
{32,1789},
|
||
{40,1680},
|
||
{48,1594},
|
||
{56,1524},
|
||
{64,1466},
|
||
{72,1415},
|
||
{80,1371},
|
||
{88,1331},
|
||
{96,1296},
|
||
{104,1264},
|
||
{112,1234},
|
||
{120,1207},
|
||
{128,1182},
|
||
{136,1159},
|
||
{144,1138},
|
||
{152,1117},
|
||
{160,1098},
|
||
{168,1080},
|
||
{176,1063},
|
||
{184,1047},
|
||
{192,1032},
|
||
{200,1017},
|
||
{208,1003},
|
||
{216,989},
|
||
{224,976},
|
||
{232,964},
|
||
{240,952},
|
||
{248,941},
|
||
{256,930},
|
||
{264,919},
|
||
{272,909},
|
||
{280,899},
|
||
{288,889},
|
||
{296,880},
|
||
{304,871},
|
||
{312,862},
|
||
{320,853},
|
||
{328,845},
|
||
{336,837},
|
||
{344,829},
|
||
{352,821},
|
||
{360,813},
|
||
{368,806},
|
||
{376,799},
|
||
{384,792},
|
||
{392,785},
|
||
{400,778},
|
||
{408,772},
|
||
{416,766},
|
||
{424,759},
|
||
{432,753},
|
||
{440,747},
|
||
{448,741},
|
||
{456,735},
|
||
{464,730},
|
||
{472,724},
|
||
{480,718},
|
||
{488,713},
|
||
{496,708},
|
||
{504,702},
|
||
{512,697},
|
||
{520,692},
|
||
{528,687},
|
||
{536,682},
|
||
{544,678},
|
||
{552,673},
|
||
{560,668},
|
||
{568,664},
|
||
{576,659},
|
||
{584,655},
|
||
{592,650},
|
||
{600,646},
|
||
{608,641},
|
||
{616,637},
|
||
{624,633},
|
||
{632,629},
|
||
{640,625},
|
||
{648,621},
|
||
{656,617},
|
||
{664,613},
|
||
{672,609},
|
||
{680,605},
|
||
{688,601},
|
||
{696,597},
|
||
{704,594},
|
||
{712,590},
|
||
{720,586},
|
||
{728,583},
|
||
{736,579},
|
||
{744,576},
|
||
{752,572},
|
||
{760,569},
|
||
{768,565},
|
||
{776,562},
|
||
{784,559},
|
||
{792,555},
|
||
{800,552},
|
||
{808,549},
|
||
{816,546},
|
||
{824,542},
|
||
{832,539},
|
||
{840,536},
|
||
{848,533},
|
||
{856,530},
|
||
{864,527},
|
||
{872,524},
|
||
{880,521},
|
||
{888,518},
|
||
{896,515},
|
||
{904,512},
|
||
{912,509},
|
||
{920,506},
|
||
{928,503},
|
||
{936,500},
|
||
{944,497},
|
||
{952,494},
|
||
{960,492},
|
||
{968,489},
|
||
{976,486},
|
||
{984,483},
|
||
{992,481},
|
||
{1000,478},
|
||
{1008,475},
|
||
{1016,473},
|
||
{1024,470},
|
||
{1032,468},
|
||
{1040,465},
|
||
{1048,462},
|
||
{1056,460},
|
||
{1064,457},
|
||
{1072,455},
|
||
{1080,452},
|
||
{1088,450},
|
||
{1096,447},
|
||
{1104,445},
|
||
{1112,442},
|
||
{1120,440},
|
||
{1128,437},
|
||
{1136,435},
|
||
{1144,433},
|
||
{1152,430},
|
||
{1160,428},
|
||
{1168,425},
|
||
{1176,423},
|
||
{1184,421},
|
||
{1192,418},
|
||
{1200,416},
|
||
{1208,414},
|
||
{1216,411},
|
||
{1224,409},
|
||
{1232,407},
|
||
{1240,405},
|
||
{1248,402},
|
||
{1256,400},
|
||
{1264,398},
|
||
{1272,396},
|
||
{1280,394},
|
||
{1288,391},
|
||
{1296,389},
|
||
{1304,387},
|
||
{1312,385},
|
||
{1320,383},
|
||
{1328,381},
|
||
{1336,378},
|
||
{1344,376},
|
||
{1352,374},
|
||
{1360,372},
|
||
{1368,370},
|
||
{1376,368},
|
||
{1384,366},
|
||
{1392,364},
|
||
{1400,362},
|
||
{1408,360},
|
||
{1416,358},
|
||
{1424,356},
|
||
{1432,354},
|
||
{1440,352},
|
||
{1448,350},
|
||
{1456,348},
|
||
{1464,346},
|
||
{1472,344},
|
||
{1480,342},
|
||
{1488,340},
|
||
{1496,338},
|
||
{1504,336},
|
||
{1512,334},
|
||
{1520,332},
|
||
{1528,330},
|
||
{1536,328},
|
||
{1544,326},
|
||
{1552,324},
|
||
{1560,322},
|
||
{1568,320},
|
||
{1576,318},
|
||
{1584,316},
|
||
{1592,314},
|
||
{1600,312},
|
||
{1608,311},
|
||
{1616,309},
|
||
{1624,307},
|
||
{1632,305},
|
||
{1640,303},
|
||
{1648,301},
|
||
{1656,299},
|
||
{1664,297},
|
||
{1672,296},
|
||
{1680,294},
|
||
{1688,292},
|
||
{1696,290},
|
||
{1704,288},
|
||
{1712,286},
|
||
{1720,285},
|
||
{1728,283},
|
||
{1736,281},
|
||
{1744,279},
|
||
{1752,277},
|
||
{1760,276},
|
||
{1768,274},
|
||
{1776,272},
|
||
{1784,270},
|
||
{1792,268},
|
||
{1800,267},
|
||
{1808,265},
|
||
{1816,263},
|
||
{1824,261},
|
||
{1832,260},
|
||
{1840,258},
|
||
{1848,256},
|
||
{1856,254},
|
||
{1864,253},
|
||
{1872,251},
|
||
{1880,249},
|
||
{1888,247},
|
||
{1896,246},
|
||
{1904,244},
|
||
{1912,242},
|
||
{1920,240},
|
||
{1928,239},
|
||
{1936,237},
|
||
{1944,235},
|
||
{1952,233},
|
||
{1960,232},
|
||
{1968,230},
|
||
{1976,228},
|
||
{1984,227},
|
||
{1992,225},
|
||
{2000,223},
|
||
{2008,221},
|
||
{2016,220},
|
||
{2024,218},
|
||
{2032,216},
|
||
{2040,215},
|
||
{2048,213},
|
||
{2056,211},
|
||
{2064,209},
|
||
{2072,208},
|
||
{2080,206},
|
||
{2088,204},
|
||
{2096,203},
|
||
{2104,201},
|
||
{2112,199},
|
||
{2120,198},
|
||
{2128,196},
|
||
{2136,194},
|
||
{2144,193},
|
||
{2152,191},
|
||
{2160,189},
|
||
{2168,188},
|
||
{2176,186},
|
||
{2184,184},
|
||
{2192,182},
|
||
{2200,181},
|
||
{2208,179},
|
||
{2216,177},
|
||
{2224,176},
|
||
{2232,174},
|
||
{2240,172},
|
||
{2248,171},
|
||
{2256,169},
|
||
{2264,167},
|
||
{2272,166},
|
||
{2280,164},
|
||
{2288,162},
|
||
{2296,161},
|
||
{2304,159},
|
||
{2312,157},
|
||
{2320,156},
|
||
{2328,154},
|
||
{2336,152},
|
||
{2344,151},
|
||
{2352,149},
|
||
{2360,147},
|
||
{2368,146},
|
||
{2376,144},
|
||
{2384,142},
|
||
{2392,141},
|
||
{2400,139},
|
||
{2408,137},
|
||
{2416,136},
|
||
{2424,134},
|
||
{2432,132},
|
||
{2440,130},
|
||
{2448,129},
|
||
{2456,127},
|
||
{2464,125},
|
||
{2472,124},
|
||
{2480,122},
|
||
{2488,120},
|
||
{2496,119},
|
||
{2504,117},
|
||
{2512,115},
|
||
{2520,114},
|
||
{2528,112},
|
||
{2536,110},
|
||
{2544,109},
|
||
{2552,107},
|
||
{2560,105},
|
||
{2568,104},
|
||
{2576,102},
|
||
{2584,100},
|
||
{2592,98},
|
||
{2600,97},
|
||
{2608,95},
|
||
{2616,93},
|
||
{2624,92},
|
||
{2632,90},
|
||
{2640,88},
|
||
{2648,86},
|
||
{2656,85},
|
||
{2664,83},
|
||
{2672,81},
|
||
{2680,79},
|
||
{2688,78},
|
||
{2696,76},
|
||
{2704,74},
|
||
{2712,73},
|
||
{2720,71},
|
||
{2728,69},
|
||
{2736,67},
|
||
{2744,66},
|
||
{2752,64},
|
||
{2760,62},
|
||
{2768,60},
|
||
{2776,58},
|
||
{2784,57},
|
||
{2792,55},
|
||
{2800,53},
|
||
{2808,51},
|
||
{2816,50},
|
||
{2824,48},
|
||
{2832,46},
|
||
{2840,44},
|
||
{2848,42},
|
||
{2856,41},
|
||
{2864,39},
|
||
{2872,37},
|
||
{2880,35},
|
||
{2888,33},
|
||
{2896,31},
|
||
{2904,30},
|
||
{2912,28},
|
||
{2920,26},
|
||
{2928,24},
|
||
{2936,22},
|
||
{2944,20},
|
||
{2952,18},
|
||
{2960,16},
|
||
{2968,15},
|
||
{2976,13},
|
||
{2984,11},
|
||
{2992,9},
|
||
{3000,7},
|
||
{3008,5},
|
||
{3016,3},
|
||
{3024,1},
|
||
{3032,0},
|
||
{3040,-2},
|
||
{3048,-4},
|
||
{3056,-6},
|
||
{3064,-8},
|
||
{3072,-10},
|
||
{3080,-12},
|
||
{3088,-14},
|
||
{3096,-16},
|
||
{3104,-18},
|
||
{3112,-20},
|
||
{3120,-22},
|
||
{3128,-24},
|
||
{3136,-26},
|
||
{3144,-28},
|
||
{3152,-30},
|
||
{3160,-32},
|
||
{3168,-34},
|
||
{3176,-36},
|
||
{3184,-38},
|
||
{3192,-40},
|
||
{3200,-42},
|
||
{3208,-44},
|
||
{3216,-47},
|
||
{3224,-49},
|
||
{3232,-51},
|
||
{3240,-53},
|
||
{3248,-55},
|
||
{3256,-58},
|
||
{3264,-60},
|
||
{3272,-62},
|
||
{3280,-64},
|
||
{3288,-67},
|
||
{3296,-69},
|
||
{3304,-71},
|
||
{3312,-73},
|
||
{3320,-76},
|
||
{3328,-78},
|
||
{3336,-80},
|
||
{3344,-83},
|
||
{3352,-85},
|
||
{3360,-88},
|
||
{3368,-90},
|
||
{3376,-92},
|
||
{3384,-95},
|
||
{3392,-97},
|
||
{3400,-100},
|
||
{3408,-102},
|
||
{3416,-105},
|
||
{3424,-107},
|
||
{3432,-110},
|
||
{3440,-112},
|
||
{3448,-115},
|
||
{3456,-118},
|
||
{3464,-120},
|
||
{3472,-123},
|
||
{3480,-126},
|
||
{3488,-128},
|
||
{3496,-131},
|
||
{3504,-134},
|
||
{3512,-137},
|
||
{3520,-140},
|
||
{3528,-142},
|
||
{3536,-145},
|
||
{3544,-148},
|
||
{3552,-151},
|
||
{3560,-154},
|
||
{3568,-157},
|
||
{3576,-160},
|
||
{3584,-163},
|
||
{3592,-166},
|
||
{3600,-170},
|
||
{3608,-173},
|
||
{3616,-176},
|
||
{3624,-179},
|
||
{3632,-182},
|
||
{3640,-186},
|
||
{3648,-189},
|
||
{3656,-193},
|
||
{3664,-196},
|
||
{3672,-200},
|
||
{3680,-203},
|
||
{3688,-207},
|
||
{3696,-211},
|
||
{3704,-214},
|
||
{3712,-218},
|
||
{3720,-222},
|
||
{3728,-226},
|
||
{3736,-230},
|
||
{3744,-234},
|
||
{3752,-238},
|
||
{3760,-242},
|
||
{3768,-247},
|
||
{3776,-251},
|
||
{3784,-256},
|
||
{3792,-260},
|
||
{3800,-265},
|
||
{3808,-270},
|
||
{3816,-275},
|
||
{3824,-280},
|
||
{3832,-285},
|
||
{3840,-290},
|
||
{3848,-296},
|
||
{3856,-301},
|
||
{3864,-307},
|
||
{3872,-313},
|
||
{3880,-319},
|
||
{3888,-325},
|
||
{3896,-332},
|
||
{3904,-338},
|
||
{3912,-345},
|
||
{3920,-352},
|
||
{3928,-360},
|
||
{3936,-368},
|
||
{3944,-376},
|
||
{3952,-384},
|
||
{3960,-393},
|
||
{3968,-403},
|
||
{3976,-412},
|
||
{3984,-423},
|
||
{3992,-434},
|
||
{4000,-446},
|
||
{4008,-459},
|
||
{4016,-472},
|
||
{4024,-487},
|
||
{4032,-504},
|
||
{4040,-522},
|
||
{4048,-543},
|
||
{4056,-568},
|
||
{4064,-597},
|
||
{4072,-634},
|
||
{4080,-684},
|
||
{4088,-768}
|
||
};
|
||
*/
|
||
|
||
ntc_table_entry ntc_table[] = {
|
||
{0,-2731},
|
||
{8,0},
|
||
{16,0},
|
||
{24,0},
|
||
{32,0},
|
||
{40,0},
|
||
{48,0},
|
||
{56,0},
|
||
{64,0},
|
||
{72,0},
|
||
{80,0},
|
||
{88,0},
|
||
{96,0},
|
||
{104,0},
|
||
{112,0},
|
||
{120,0},
|
||
{128,0},
|
||
{136,0},
|
||
{144,0},
|
||
{152,0},
|
||
{160,0},
|
||
{168,0},
|
||
{176,0},
|
||
{184,0},
|
||
{192,0},
|
||
{200,0},
|
||
{208,0},
|
||
{216,0},
|
||
{224,0},
|
||
{232,0},
|
||
{240,0},
|
||
{248,0},
|
||
{256,0},
|
||
{264,0},
|
||
{272,0},
|
||
{280,0},
|
||
{288,0},
|
||
{296,0},
|
||
{304,0},
|
||
{312,0},
|
||
{320,0},
|
||
{328,0},
|
||
{336,0},
|
||
{344,0},
|
||
{352,0},
|
||
{360,0},
|
||
{368,845},
|
||
{376,838},
|
||
{384,831},
|
||
{392,824},
|
||
{400,817},
|
||
{408,810},
|
||
{416,803},
|
||
{424,796},
|
||
{432,790},
|
||
{440,784},
|
||
{448,777},
|
||
{456,771},
|
||
{464,765},
|
||
{472,760},
|
||
{480,754},
|
||
{488,748},
|
||
{496,743},
|
||
{504,737},
|
||
{512,732},
|
||
{520,726},
|
||
{528,721},
|
||
{536,716},
|
||
{544,711},
|
||
{552,706},
|
||
{560,701},
|
||
{568,696},
|
||
{576,692},
|
||
{584,687},
|
||
{592,682},
|
||
{600,678},
|
||
{608,673},
|
||
{616,669},
|
||
{624,664},
|
||
{632,660},
|
||
{640,656},
|
||
{648,652},
|
||
{656,647},
|
||
{664,643},
|
||
{672,639},
|
||
{680,635},
|
||
{688,631},
|
||
{696,627},
|
||
{704,623},
|
||
{712,620},
|
||
{720,616},
|
||
{728,612},
|
||
{736,608},
|
||
{744,605},
|
||
{752,601},
|
||
{760,597},
|
||
{768,594},
|
||
{776,590},
|
||
{784,587},
|
||
{792,583},
|
||
{800,580},
|
||
{808,577},
|
||
{816,573},
|
||
{824,570},
|
||
{832,567},
|
||
{840,563},
|
||
{848,560},
|
||
{856,557},
|
||
{864,554},
|
||
{872,550},
|
||
{880,547},
|
||
{888,544},
|
||
{896,541},
|
||
{904,538},
|
||
{912,535},
|
||
{920,532},
|
||
{928,529},
|
||
{936,526},
|
||
{944,523},
|
||
{952,520},
|
||
{960,517},
|
||
{968,514},
|
||
{976,512},
|
||
{984,509},
|
||
{992,506},
|
||
{1000,503},
|
||
{1008,500},
|
||
{1016,498},
|
||
{1024,495},
|
||
{1032,492},
|
||
{1040,489},
|
||
{1048,487},
|
||
{1056,484},
|
||
{1064,481},
|
||
{1072,479},
|
||
{1080,476},
|
||
{1088,474},
|
||
{1096,471},
|
||
{1104,468},
|
||
{1112,466},
|
||
{1120,463},
|
||
{1128,461},
|
||
{1136,458},
|
||
{1144,456},
|
||
{1152,453},
|
||
{1160,451},
|
||
{1168,448},
|
||
{1176,446},
|
||
{1184,443},
|
||
{1192,441},
|
||
{1200,439},
|
||
{1208,436},
|
||
{1216,434},
|
||
{1224,431},
|
||
{1232,429},
|
||
{1240,427},
|
||
{1248,424},
|
||
{1256,422},
|
||
{1264,420},
|
||
{1272,418},
|
||
{1280,415},
|
||
{1288,413},
|
||
{1296,411},
|
||
{1304,408},
|
||
{1312,406},
|
||
{1320,404},
|
||
{1328,402},
|
||
{1336,400},
|
||
{1344,397},
|
||
{1352,395},
|
||
{1360,393},
|
||
{1368,391},
|
||
{1376,389},
|
||
{1384,386},
|
||
{1392,384},
|
||
{1400,382},
|
||
{1408,380},
|
||
{1416,378},
|
||
{1424,376},
|
||
{1432,374},
|
||
{1440,371},
|
||
{1448,369},
|
||
{1456,367},
|
||
{1464,365},
|
||
{1472,363},
|
||
{1480,361},
|
||
{1488,359},
|
||
{1496,357},
|
||
{1504,355},
|
||
{1512,353},
|
||
{1520,351},
|
||
{1528,349},
|
||
{1536,347},
|
||
{1544,345},
|
||
{1552,343},
|
||
{1560,341},
|
||
{1568,339},
|
||
{1576,337},
|
||
{1584,335},
|
||
{1592,333},
|
||
{1600,331},
|
||
{1608,329},
|
||
{1616,327},
|
||
{1624,325},
|
||
{1632,323},
|
||
{1640,321},
|
||
{1648,319},
|
||
{1656,317},
|
||
{1664,315},
|
||
{1672,314},
|
||
{1680,312},
|
||
{1688,310},
|
||
{1696,308},
|
||
{1704,306},
|
||
{1712,304},
|
||
{1720,302},
|
||
{1728,300},
|
||
{1736,298},
|
||
{1744,297},
|
||
{1752,295},
|
||
{1760,293},
|
||
{1768,291},
|
||
{1776,289},
|
||
{1784,287},
|
||
{1792,285},
|
||
{1800,283},
|
||
{1808,282},
|
||
{1816,280},
|
||
{1824,278},
|
||
{1832,276},
|
||
{1840,274},
|
||
{1848,272},
|
||
{1856,271},
|
||
{1864,269},
|
||
{1872,267},
|
||
{1880,265},
|
||
{1888,263},
|
||
{1896,262},
|
||
{1904,260},
|
||
{1912,258},
|
||
{1920,256},
|
||
{1928,254},
|
||
{1936,253},
|
||
{1944,251},
|
||
{1952,249},
|
||
{1960,247},
|
||
{1968,245},
|
||
{1976,244},
|
||
{1984,242},
|
||
{1992,240},
|
||
{2000,238},
|
||
{2008,237},
|
||
{2016,235},
|
||
{2024,233},
|
||
{2032,231},
|
||
{2040,230},
|
||
{2048,228},
|
||
{2056,226},
|
||
{2064,224},
|
||
{2072,222},
|
||
{2080,221},
|
||
{2088,219},
|
||
{2096,217},
|
||
{2104,215},
|
||
{2112,214},
|
||
{2120,212},
|
||
{2128,210},
|
||
{2136,208},
|
||
{2144,207},
|
||
{2152,205},
|
||
{2160,203},
|
||
{2168,202},
|
||
{2176,200},
|
||
{2184,198},
|
||
{2192,196},
|
||
{2200,195},
|
||
{2208,193},
|
||
{2216,191},
|
||
{2224,189},
|
||
{2232,188},
|
||
{2240,186},
|
||
{2248,184},
|
||
{2256,182},
|
||
{2264,181},
|
||
{2272,179},
|
||
{2280,177},
|
||
{2288,176},
|
||
{2296,174},
|
||
{2304,172},
|
||
{2312,170},
|
||
{2320,169},
|
||
{2328,167},
|
||
{2336,165},
|
||
{2344,163},
|
||
{2352,162},
|
||
{2360,160},
|
||
{2368,158},
|
||
{2376,156},
|
||
{2384,155},
|
||
{2392,153},
|
||
{2400,151},
|
||
{2408,150},
|
||
{2416,148},
|
||
{2424,146},
|
||
{2432,144},
|
||
{2440,143},
|
||
{2448,141},
|
||
{2456,139},
|
||
{2464,137},
|
||
{2472,136},
|
||
{2480,134},
|
||
{2488,132},
|
||
{2496,130},
|
||
{2504,129},
|
||
{2512,127},
|
||
{2520,125},
|
||
{2528,123},
|
||
{2536,122},
|
||
{2544,120},
|
||
{2552,118},
|
||
{2560,116},
|
||
{2568,115},
|
||
{2576,113},
|
||
{2584,111},
|
||
{2592,109},
|
||
{2600,108},
|
||
{2608,106},
|
||
{2616,104},
|
||
{2624,102},
|
||
{2632,101},
|
||
{2640,99},
|
||
{2648,97},
|
||
{2656,95},
|
||
{2664,94},
|
||
{2672,92},
|
||
{2680,90},
|
||
{2688,88},
|
||
{2696,86},
|
||
{2704,85},
|
||
{2712,83},
|
||
{2720,81},
|
||
{2728,79},
|
||
{2736,77},
|
||
{2744,76},
|
||
{2752,74},
|
||
{2760,72},
|
||
{2768,70},
|
||
{2776,68},
|
||
{2784,66},
|
||
{2792,65},
|
||
{2800,63},
|
||
{2808,61},
|
||
{2816,59},
|
||
{2824,57},
|
||
{2832,55},
|
||
{2840,53},
|
||
{2848,52},
|
||
{2856,50},
|
||
{2864,48},
|
||
{2872,46},
|
||
{2880,44},
|
||
{2888,42},
|
||
{2896,40},
|
||
{2904,38},
|
||
{2912,37},
|
||
{2920,35},
|
||
{2928,33},
|
||
{2936,31},
|
||
{2944,29},
|
||
{2952,27},
|
||
{2960,25},
|
||
{2968,23},
|
||
{2976,21},
|
||
{2984,19},
|
||
{2992,17},
|
||
{3000,15},
|
||
{3008,13},
|
||
{3016,11},
|
||
{3024,9},
|
||
{3032,7},
|
||
{3040,5},
|
||
{3048,3},
|
||
{3056,1},
|
||
{3064,0},
|
||
{3072,-2},
|
||
{3080,-4},
|
||
{3088,-6},
|
||
{3096,-8},
|
||
{3104,-10},
|
||
{3112,-12},
|
||
{3120,-14},
|
||
{3128,-16},
|
||
{3136,-18},
|
||
{3144,-21},
|
||
{3152,-23},
|
||
{3160,-25},
|
||
{3168,-27},
|
||
{3176,-29},
|
||
{3184,-31},
|
||
{3192,-33},
|
||
{3200,-36},
|
||
{3208,-38},
|
||
{3216,-40},
|
||
{3224,-42},
|
||
{3232,-44},
|
||
{3240,-47},
|
||
{3248,-49},
|
||
{3256,-51},
|
||
{3264,-53},
|
||
{3272,-56},
|
||
{3280,-58},
|
||
{3288,-60},
|
||
{3296,-63},
|
||
{3304,-65},
|
||
{3312,-67},
|
||
{3320,-70},
|
||
{3328,-72},
|
||
{3336,-75},
|
||
{3344,-77},
|
||
{3352,-79},
|
||
{3360,-82},
|
||
{3368,-84},
|
||
{3376,-87},
|
||
{3384,-89},
|
||
{3392,-92},
|
||
{3400,-94},
|
||
{3408,-97},
|
||
{3416,-100},
|
||
{3424,-102},
|
||
{3432,-105},
|
||
{3440,-107},
|
||
{3448,-110},
|
||
{3456,-113},
|
||
{3464,-116},
|
||
{3472,-118},
|
||
{3480,-121},
|
||
{3488,-124},
|
||
{3496,-127},
|
||
{3504,-129},
|
||
{3512,-132},
|
||
{3520,-135},
|
||
{3528,-138},
|
||
{3536,-141},
|
||
{3544,-144},
|
||
{3552,-147},
|
||
{3560,-150},
|
||
{3568,-153},
|
||
{3576,-156},
|
||
{3584,-159},
|
||
{3592,-163},
|
||
{3600,-166},
|
||
{3608,-169},
|
||
{3616,-172},
|
||
{3624,-176},
|
||
{3632,-179},
|
||
{3640,-183},
|
||
{3648,-186},
|
||
{3656,-190},
|
||
{3664,-193},
|
||
{3672,-197},
|
||
{3680,-200},
|
||
{3688,-204},
|
||
{3696,-208},
|
||
{3704,-212},
|
||
{3712,-216},
|
||
{3720,-220},
|
||
{3728,-224},
|
||
{3736,-228},
|
||
{3744,-232},
|
||
{3752,-236},
|
||
{3760,-240},
|
||
{3768,-245},
|
||
{3776,-249},
|
||
{3784,-254},
|
||
{3792,-259},
|
||
{3800,-263},
|
||
{3808,-268},
|
||
{3816,-273},
|
||
{3824,-278},
|
||
{3832,-283},
|
||
{3840,-289},
|
||
{3848,-294},
|
||
{3856,-300},
|
||
{3864,-306},
|
||
{3872,-312},
|
||
{3880,-318},
|
||
{3888,-324},
|
||
{3896,-331},
|
||
{3904,-338},
|
||
{3912,-345},
|
||
{3920,-352},
|
||
{3928,-360},
|
||
{3936,-367},
|
||
{3944,-376},
|
||
{3952,-384},
|
||
{3960,-393},
|
||
{3968,-403},
|
||
{3976,-413},
|
||
{3984,-423},
|
||
{3992,-434},
|
||
{4000,-446},
|
||
{4008,-459},
|
||
{4016,-473},
|
||
{4024,-488},
|
||
{4032,-505},
|
||
{4040,-524},
|
||
{4048,-545},
|
||
{4056,-569},
|
||
{4064,-599},
|
||
{4072,-636},
|
||
{4080,-686},
|
||
{4088,-770},
|
||
};
|
||
|
||
// Функция расчёта сопротивления NTC из значения АЦП
|
||
static float calculate_resistance(uint16_t adc_value) {
|
||
if (adc_value == 0 || adc_value >= (uint16_t) ADC_MAX) {
|
||
return 0.0f;
|
||
}
|
||
// Формула делителя напряжения: R_ntc = R1 * (ADC_MAX / adc_value - 1)
|
||
// float R_ntc = R1 * (ADC_MAX / (float)adc_value - 1.0f);
|
||
|
||
float R_ntc = R1 * (float) adc_value / (ADC_MAX - (float) adc_value);
|
||
|
||
return R_ntc;
|
||
}
|
||
|
||
|
||
// Бинарный поиск в таблице
|
||
static int find_interval_index(float resistance) {
|
||
int left = 0;
|
||
int right = TABLE_SIZE - 1;
|
||
|
||
// Проверка границ
|
||
if (resistance >= ntc_table[0].r_nom) return 0;
|
||
if (resistance <= ntc_table[right].r_nom) return right - 1;
|
||
|
||
// Бинарный поиск
|
||
while (left <= right) {
|
||
int mid = left + (right - left) / 2;
|
||
|
||
if (mid < TABLE_SIZE - 1 &&
|
||
resistance <= ntc_table[mid].r_nom &&
|
||
resistance >= ntc_table[mid + 1].r_nom) {
|
||
return mid;
|
||
}
|
||
|
||
if (resistance > ntc_table[mid].r_nom) {
|
||
right = mid - 1;
|
||
} else {
|
||
left = mid + 1;
|
||
}
|
||
}
|
||
|
||
return -1; // Не найден
|
||
}
|
||
|
||
// Интерполяция с использованием уравнения Стейнхарта-Харта между точками
|
||
static float interpolate_steinhart(float resistance, int index) {
|
||
// Берем две соседние точки из таблицы
|
||
float t1 = (float) ntc_table[index].temp_c + 273.15f; // в Кельвинах
|
||
float t2 = (float) ntc_table[index + 1].temp_c + 273.15f;
|
||
float r1 = ntc_table[index].r_nom;
|
||
float r2 = ntc_table[index + 1].r_nom;
|
||
|
||
// Вычисляем коэффициент B для интервала
|
||
float B = logf(r1 / r2) / (1.0f / t1 - 1.0f / t2);
|
||
|
||
// Используем уравнение Стейнхарта-Харта для вычисления температуры
|
||
float steinhart = logf(resistance / r1) / B + 1.0f / t1;
|
||
float temp_k = 1.0f / steinhart;
|
||
|
||
return temp_k - 273.15f; // Конвертация в °C
|
||
}
|
||
|
||
// Линейная интерполяция в логарифмическом масштабе
|
||
static float interpolate_log_linear(float resistance, int index) {
|
||
float t1 = (float) ntc_table[index].temp_c;
|
||
float t2 = (float) ntc_table[index + 1].temp_c;
|
||
float r1 = ntc_table[index].r_nom;
|
||
float r2 = ntc_table[index + 1].r_nom;
|
||
|
||
float log_r1 = logf(r1);
|
||
float log_r2 = logf(r2);
|
||
float log_r = logf(resistance);
|
||
|
||
return t1 + (t2 - t1) * (log_r - log_r1) / (log_r2 - log_r1);
|
||
}
|
||
|
||
// Более надежная версия с проверкой параметров
|
||
static float interpolate_steinhart_full(float resistance, int index) {
|
||
// Проверка корректности входных данных
|
||
if (resistance <= 0.0f) {
|
||
return -273.15f; // Абсолютный ноль при некорректном сопротивлении
|
||
}
|
||
|
||
// Для повышения точности можно использовать таблицу как справочную,
|
||
// но основное вычисление - по уравнению с коэффициентами
|
||
double L = logf(resistance);
|
||
|
||
// Для термисторов NTC коэффициент C обычно очень маленький (порядка 1e-7...1e-8)
|
||
// Убедимся, что кубический член вычислен корректно
|
||
double L3 = L * L * L;
|
||
double inv_T = koef_A + koef_B * L + koef_C * L3;
|
||
|
||
// Проверка на физическую реализуемость (температура должна быть положительной в Кельвинах)
|
||
if (inv_T <= 0.0f || inv_T > 1.0f) { // 1/T не может быть <= 0 (T < 0K) или слишком большим
|
||
// В случае ошибки возвращаем температуру из таблицы по индексу
|
||
return (float) ntc_table[index].temp_c;
|
||
}
|
||
|
||
double temp_K = 1.0f / inv_T;
|
||
|
||
// Дополнительная проверка диапазона (например, для NTC обычно -50...+150°C)
|
||
if (temp_K < 223.15f || temp_K > 423.15f) { // -50°C...150°C в Кельвинах
|
||
// Возвращаем значение из таблицы как запасной вариант
|
||
return (float) ntc_table[index].temp_c;
|
||
}
|
||
|
||
return (float) (temp_K - 273.15f);
|
||
}
|
||
|
||
// Основная функция для получения температуры
|
||
float get_temperature_from_adc_KST45(uint16_t adc_value, eAlg use_alg) {
|
||
float resistance = calculate_resistance(adc_value);
|
||
|
||
if (resistance <= 0.0f) {
|
||
return -273.15f; // Ошибка
|
||
}
|
||
|
||
int index = find_interval_index(resistance);
|
||
|
||
if (index < 0 || index >= TABLE_SIZE - 1) {
|
||
// Вне диапазона таблицы
|
||
if (resistance >= ntc_table[0].r_nom) return TABLE_START_TEMP;
|
||
if (resistance <= ntc_table[TABLE_SIZE - 1].r_nom) return TABLE_END_TEMP;
|
||
return -273.15f; // Ошибка
|
||
}
|
||
|
||
if (use_alg == ALG_STEINHART) {
|
||
return interpolate_steinhart(resistance, index);
|
||
} else if (use_alg == ALG_STEINHART_FULL) {
|
||
return interpolate_steinhart_full(resistance, index);
|
||
} else {
|
||
return interpolate_log_linear(resistance, index);
|
||
}
|
||
}
|
||
|
||
|
||
// Предварительно вычисленная таблица для быстрого доступа
|
||
typedef struct {
|
||
uint16_t adc_value; // Значение АЦП
|
||
int16_t temp_c; // Температура в °C * 10 (для фиксированной точки)
|
||
} adc_temp_lookup;
|
||
|
||
static adc_temp_lookup fast_lookup[TABLE_SIZE_LOOKUP] = {
|
||
{0,-2731},
|
||
{8,2672},
|
||
{16,2220},
|
||
{24,1988},
|
||
{32,1837},
|
||
{40,1725},
|
||
{48,1638},
|
||
{56,1567},
|
||
{64,1507},
|
||
{72,1455},
|
||
{80,1410},
|
||
{88,1370},
|
||
{96,1334},
|
||
{104,1301},
|
||
{112,1271},
|
||
{120,1244},
|
||
{128,1218},
|
||
{136,1195},
|
||
{144,1173},
|
||
{152,1152},
|
||
{160,1133},
|
||
{168,1114},
|
||
{176,1097},
|
||
{184,1080},
|
||
{192,1065},
|
||
{200,1050},
|
||
{208,1035},
|
||
{216,1022},
|
||
{224,1009},
|
||
{232,996},
|
||
{240,984},
|
||
{248,972},
|
||
{256,961},
|
||
{264,950},
|
||
{272,940},
|
||
{280,929},
|
||
{288,920},
|
||
{296,910},
|
||
{304,901},
|
||
{312,892},
|
||
{320,883},
|
||
{328,875},
|
||
{336,866},
|
||
{344,858},
|
||
{352,850},
|
||
{360,843},
|
||
{368,835},
|
||
{376,828},
|
||
{384,821},
|
||
{392,814},
|
||
{400,807},
|
||
{408,800},
|
||
{416,794},
|
||
{424,788},
|
||
{432,781},
|
||
{440,775},
|
||
{448,769},
|
||
{456,763},
|
||
{464,758},
|
||
{472,752},
|
||
{480,746},
|
||
{488,741},
|
||
{496,735},
|
||
{504,730},
|
||
{512,725},
|
||
{520,720},
|
||
{528,715},
|
||
{536,710},
|
||
{544,705},
|
||
{552,700},
|
||
{560,695},
|
||
{568,690},
|
||
{576,686},
|
||
{584,681},
|
||
{592,677},
|
||
{600,672},
|
||
{608,668},
|
||
{616,664},
|
||
{624,659},
|
||
{632,655},
|
||
{640,651},
|
||
{648,647},
|
||
{656,643},
|
||
{664,639},
|
||
{672,635},
|
||
{680,631},
|
||
{688,627},
|
||
{696,623},
|
||
{704,619},
|
||
{712,616},
|
||
{720,612},
|
||
{728,608},
|
||
{736,605},
|
||
{744,601},
|
||
{752,598},
|
||
{760,594},
|
||
{768,591},
|
||
{776,587},
|
||
{784,584},
|
||
{792,580},
|
||
{800,577},
|
||
{808,574},
|
||
{816,571},
|
||
{824,567},
|
||
{832,564},
|
||
{840,561},
|
||
{848,558},
|
||
{856,555},
|
||
{864,552},
|
||
{872,549},
|
||
{880,546},
|
||
{888,543},
|
||
{896,539},
|
||
{904,536},
|
||
{912,534},
|
||
{920,531},
|
||
{928,528},
|
||
{936,525},
|
||
{944,522},
|
||
{952,519},
|
||
{960,516},
|
||
{968,513},
|
||
{976,511},
|
||
{984,508},
|
||
{992,505},
|
||
{1000,502},
|
||
{1008,500},
|
||
{1016,497},
|
||
{1024,494},
|
||
{1032,492},
|
||
{1040,489},
|
||
{1048,486},
|
||
{1056,484},
|
||
{1064,481},
|
||
{1072,479},
|
||
{1080,476},
|
||
{1088,474},
|
||
{1096,471},
|
||
{1104,469},
|
||
{1112,466},
|
||
{1120,464},
|
||
{1128,461},
|
||
{1136,459},
|
||
{1144,456},
|
||
{1152,454},
|
||
{1160,451},
|
||
{1168,449},
|
||
{1176,447},
|
||
{1184,444},
|
||
{1192,442},
|
||
{1200,440},
|
||
{1208,437},
|
||
{1216,435},
|
||
{1224,433},
|
||
{1232,430},
|
||
{1240,428},
|
||
{1248,426},
|
||
{1256,423},
|
||
{1264,421},
|
||
{1272,419},
|
||
{1280,417},
|
||
{1288,415},
|
||
{1296,412},
|
||
{1304,410},
|
||
{1312,408},
|
||
{1320,406},
|
||
{1328,404},
|
||
{1336,401},
|
||
{1344,399},
|
||
{1352,397},
|
||
{1360,395},
|
||
{1368,393},
|
||
{1376,391},
|
||
{1384,389},
|
||
{1392,387},
|
||
{1400,384},
|
||
{1408,382},
|
||
{1416,380},
|
||
{1424,378},
|
||
{1432,376},
|
||
{1440,374},
|
||
{1448,372},
|
||
{1456,370},
|
||
{1464,368},
|
||
{1472,366},
|
||
{1480,364},
|
||
{1488,362},
|
||
{1496,360},
|
||
{1504,358},
|
||
{1512,356},
|
||
{1520,354},
|
||
{1528,352},
|
||
{1536,350},
|
||
{1544,348},
|
||
{1552,346},
|
||
{1560,344},
|
||
{1568,342},
|
||
{1576,340},
|
||
{1584,338},
|
||
{1592,337},
|
||
{1600,335},
|
||
{1608,333},
|
||
{1616,331},
|
||
{1624,329},
|
||
{1632,327},
|
||
{1640,325},
|
||
{1648,323},
|
||
{1656,321},
|
||
{1664,319},
|
||
{1672,318},
|
||
{1680,316},
|
||
{1688,314},
|
||
{1696,312},
|
||
{1704,310},
|
||
{1712,308},
|
||
{1720,306},
|
||
{1728,305},
|
||
{1736,303},
|
||
{1744,301},
|
||
{1752,299},
|
||
{1760,297},
|
||
{1768,295},
|
||
{1776,294},
|
||
{1784,292},
|
||
{1792,290},
|
||
{1800,288},
|
||
{1808,286},
|
||
{1816,285},
|
||
{1824,283},
|
||
{1832,281},
|
||
{1840,279},
|
||
{1848,277},
|
||
{1856,276},
|
||
{1864,274},
|
||
{1872,272},
|
||
{1880,270},
|
||
{1888,269},
|
||
{1896,267},
|
||
{1904,265},
|
||
{1912,263},
|
||
{1920,262},
|
||
{1928,260},
|
||
{1936,258},
|
||
{1944,256},
|
||
{1952,255},
|
||
{1960,253},
|
||
{1968,251},
|
||
{1976,249},
|
||
{1984,248},
|
||
{1992,246},
|
||
{2000,244},
|
||
{2008,242},
|
||
{2016,241},
|
||
{2024,239},
|
||
{2032,237},
|
||
{2040,235},
|
||
{2048,234},
|
||
{2056,232},
|
||
{2064,230},
|
||
{2072,229},
|
||
{2080,227},
|
||
{2088,225},
|
||
{2096,223},
|
||
{2104,222},
|
||
{2112,220},
|
||
{2120,218},
|
||
{2128,217},
|
||
{2136,215},
|
||
{2144,213},
|
||
{2152,211},
|
||
{2160,210},
|
||
{2168,208},
|
||
{2176,206},
|
||
{2184,205},
|
||
{2192,203},
|
||
{2200,201},
|
||
{2208,200},
|
||
{2216,198},
|
||
{2224,196},
|
||
{2232,194},
|
||
{2240,193},
|
||
{2248,191},
|
||
{2256,189},
|
||
{2264,188},
|
||
{2272,186},
|
||
{2280,184},
|
||
{2288,183},
|
||
{2296,181},
|
||
{2304,179},
|
||
{2312,178},
|
||
{2320,176},
|
||
{2328,174},
|
||
{2336,172},
|
||
{2344,171},
|
||
{2352,169},
|
||
{2360,167},
|
||
{2368,166},
|
||
{2376,164},
|
||
{2384,162},
|
||
{2392,161},
|
||
{2400,159},
|
||
{2408,157},
|
||
{2416,155},
|
||
{2424,154},
|
||
{2432,152},
|
||
{2440,150},
|
||
{2448,149},
|
||
{2456,147},
|
||
{2464,145},
|
||
{2472,144},
|
||
{2480,142},
|
||
{2488,140},
|
||
{2496,138},
|
||
{2504,137},
|
||
{2512,135},
|
||
{2520,133},
|
||
{2528,132},
|
||
{2536,130},
|
||
{2544,128},
|
||
{2552,126},
|
||
{2560,125},
|
||
{2568,123},
|
||
{2576,121},
|
||
{2584,120},
|
||
{2592,118},
|
||
{2600,116},
|
||
{2608,114},
|
||
{2616,113},
|
||
{2624,111},
|
||
{2632,109},
|
||
{2640,107},
|
||
{2648,106},
|
||
{2656,104},
|
||
{2664,102},
|
||
{2672,100},
|
||
{2680,99},
|
||
{2688,97},
|
||
{2696,95},
|
||
{2704,93},
|
||
{2712,92},
|
||
{2720,90},
|
||
{2728,88},
|
||
{2736,86},
|
||
{2744,85},
|
||
{2752,83},
|
||
{2760,81},
|
||
{2768,79},
|
||
{2776,77},
|
||
{2784,76},
|
||
{2792,74},
|
||
{2800,72},
|
||
{2808,70},
|
||
{2816,68},
|
||
{2824,67},
|
||
{2832,65},
|
||
{2840,63},
|
||
{2848,61},
|
||
{2856,59},
|
||
{2864,57},
|
||
{2872,56},
|
||
{2880,54},
|
||
{2888,52},
|
||
{2896,50},
|
||
{2904,48},
|
||
{2912,46},
|
||
{2920,44},
|
||
{2928,43},
|
||
{2936,41},
|
||
{2944,39},
|
||
{2952,37},
|
||
{2960,35},
|
||
{2968,33},
|
||
{2976,31},
|
||
{2984,29},
|
||
{2992,27},
|
||
{3000,25},
|
||
{3008,23},
|
||
{3016,22},
|
||
{3024,20},
|
||
{3032,18},
|
||
{3040,16},
|
||
{3048,14},
|
||
{3056,12},
|
||
{3064,10},
|
||
{3072,8},
|
||
{3080,6},
|
||
{3088,4},
|
||
{3096,2},
|
||
{3104,0},
|
||
{3112,-1},
|
||
{3120,-4},
|
||
{3128,-6},
|
||
{3136,-8},
|
||
{3144,-10},
|
||
{3152,-12},
|
||
{3160,-14},
|
||
{3168,-16},
|
||
{3176,-18},
|
||
{3184,-20},
|
||
{3192,-22},
|
||
{3200,-25},
|
||
{3208,-27},
|
||
{3216,-29},
|
||
{3224,-31},
|
||
{3232,-33},
|
||
{3240,-35},
|
||
{3248,-38},
|
||
{3256,-40},
|
||
{3264,-42},
|
||
{3272,-44},
|
||
{3280,-47},
|
||
{3288,-49},
|
||
{3296,-51},
|
||
{3304,-54},
|
||
{3312,-56},
|
||
{3320,-58},
|
||
{3328,-61},
|
||
{3336,-63},
|
||
{3344,-65},
|
||
{3352,-68},
|
||
{3360,-70},
|
||
{3368,-73},
|
||
{3376,-75},
|
||
{3384,-78},
|
||
{3392,-80},
|
||
{3400,-83},
|
||
{3408,-85},
|
||
{3416,-88},
|
||
{3424,-90},
|
||
{3432,-93},
|
||
{3440,-95},
|
||
{3448,-98},
|
||
{3456,-101},
|
||
{3464,-103},
|
||
{3472,-106},
|
||
{3480,-109},
|
||
{3488,-112},
|
||
{3496,-114},
|
||
{3504,-117},
|
||
{3512,-120},
|
||
{3520,-123},
|
||
{3528,-126},
|
||
{3536,-129},
|
||
{3544,-132},
|
||
{3552,-134},
|
||
{3560,-137},
|
||
{3568,-140},
|
||
{3576,-144},
|
||
{3584,-147},
|
||
{3592,-150},
|
||
{3600,-153},
|
||
{3608,-156},
|
||
{3616,-159},
|
||
{3624,-163},
|
||
{3632,-166},
|
||
{3640,-170},
|
||
{3648,-173},
|
||
{3656,-176},
|
||
{3664,-180},
|
||
{3672,-184},
|
||
{3680,-187},
|
||
{3688,-191},
|
||
{3696,-195},
|
||
{3704,-198},
|
||
{3712,-202},
|
||
{3720,-206},
|
||
{3728,-210},
|
||
{3736,-214},
|
||
{3744,-218},
|
||
{3752,-222},
|
||
{3760,-227},
|
||
{3768,-231},
|
||
{3776,-236},
|
||
{3784,-240},
|
||
{3792,-245},
|
||
{3800,-249},
|
||
{3808,-254},
|
||
{3816,-259},
|
||
{3824,-264},
|
||
{3832,-270},
|
||
{3840,-275},
|
||
{3848,-280},
|
||
{3856,-286},
|
||
{3864,-292},
|
||
{3872,-298},
|
||
{3880,-304},
|
||
{3888,-310},
|
||
{3896,-317},
|
||
{3904,-323},
|
||
{3912,-330},
|
||
{3920,-338},
|
||
{3928,-345},
|
||
{3936,-353},
|
||
{3944,-361},
|
||
{3952,-370},
|
||
{3960,-379},
|
||
{3968,-388},
|
||
{3976,-398},
|
||
{3984,-409},
|
||
{3992,-420},
|
||
{4000,-432},
|
||
{4008,-445},
|
||
{4016,-459},
|
||
{4024,-474},
|
||
{4032,-491},
|
||
{4040,-510},
|
||
{4048,-531},
|
||
{4056,-556},
|
||
{4064,-585},
|
||
{4072,-622},
|
||
{4080,-673},
|
||
{4088,-758},
|
||
}; // Таблица на TABLE_SIZE_LOOKUP значений
|
||
|
||
void init_fast_lookup_table(eAlg use_alg) {
|
||
// Создаем таблицу для быстрого преобразования АЦП->температура
|
||
for (uint16_t i = 0; i < TABLE_SIZE_LOOKUP; i++) {
|
||
uint16_t adc = i * (uint8_t) roundf(ADC_MAX / (TABLE_SIZE_LOOKUP - 1)); // Для 12-битного АЦП (0-4095)
|
||
float temp = get_temperature_from_adc_KST45(adc, use_alg);
|
||
fast_lookup[i].adc_value = adc;
|
||
fast_lookup[i].temp_c = (int16_t) (temp * 10.0f); // Храним с точностью 0.1°C
|
||
}
|
||
}
|
||
|
||
int16_t get_temperature_fast_KST45(uint16_t adc_value) {
|
||
// Простой поиск в таблице с линейной интерполяцией
|
||
uint16_t index =
|
||
adc_value / (uint8_t) roundf(ADC_MAX / (TABLE_SIZE_LOOKUP - 1)); // Делим на 16 для TABLE_SIZE_LOOKUP = 256
|
||
if (index >= (TABLE_SIZE_LOOKUP - 1)) return fast_lookup[TABLE_SIZE_LOOKUP - 1].temp_c;
|
||
|
||
uint16_t adc1 = fast_lookup[index].adc_value;
|
||
uint16_t adc2 = fast_lookup[index + 1].adc_value;
|
||
int16_t temp1 = fast_lookup[index].temp_c;
|
||
int16_t temp2 = fast_lookup[index + 1].temp_c;
|
||
|
||
// Линейная интерполяция
|
||
return temp1 + ((temp2 - temp1) * (adc_value - adc1)) / (adc2 - adc1);
|
||
}
|