ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
1203747 Топик полностью
Бoмж (28.04.2022 00:22, просмотров: 138) ответил Nikolaev_Aleksey на Наверное выгляжу дураком, но ни разу с ними не работал. Думал сейчас быстренько в ПО аппроксимацию по таблице введу и все. А тут логарифмы и экпоненты нужно в ПО добавлять...
Когда-то давно делал, в таблице использованы значения расчитанные для температур 0°..240°Ц. Терморезистор включен последовательно с резистором 2,7к 
volatile const uint16_t TemperatureToAdcLookUpTable[49] = { 1006, 1001, 996, 989, 980, 970, 958, 944, 927, 909, 888, 864, 838, 809, 778, 746, 711, 675, 638, 600, 563, 525, 489, 453, 419, 386, 355, 326, 299, 274, 250, 229, 209, 191, 174, 159, 145, 133, 122, 111, 102, 94, 86, 79, 73, 67, 62, 58, 53 };

static uint16_t LinearInterpolateTableToDegCelsius(uint8_t Index, uint16_t NTCValue) { uint16_t T1, T2, T3; uint16_t Top, Bottom; Bottom = TemperatureToAdcLookUpTable[Index]; Top = TemperatureToAdcLookUpTable[Index - 1]; T1 = NTCValue - Bottom; T1 *= 100; T2 = Top - Bottom; T3 = T1 / T2; T1 = Index * 5; T2 = 5 * T3; T2 /= 100; return (T1 - T2); }

bool SensorenMeasure(void) { uint16_t NTCValue; uint8_t Index; NTCValue = ReadADC(MuxNTCLeft); if ((NTCValue > TemperatureToAdcLookUpTable[0]) || (NTCValue < TemperatureToAdcLookUpTable[48])) { return false; } for (Index = 0; Index < 49; Index++) { if (NTCValue == TemperatureToAdcLookUpTable[Index]) { TemperatureActual = Index * 5; break; } else if (NTCValue > TemperatureToAdcLookUpTable[Index]) { TemperatureActual = LinearInterpolateTableToDegCelsius(Index, NTCValue); break; } } return true; }
memento mori