Возник такой вопрос. Существует 2 вида получение температуры с термистора.
1
2 Делать выборку из таблиц соответствия значения температуры и значения ацп с резестивного делителя .
Насколько я знаю такой подход используется в прошивках 3d принтеров. Так как при вычислительном методе считаются десятые и сотые градусов а точность термистора +-3 градуса в 2х соседних измерениях приходится все это округлять, усреднять 5 -7 выборками. От таких вычислений ардуина тормозить начинает. Насколько больше или меньше флеша занимает скомпилированная программа при использовании таблиц ну скажем на 250 значений. Скорость сопоставления из таблицы скорее всего на порядок должна быть выше. У кого есть опыт, мысли, поделитесь.
1
// термистор
#define B 3950 // B-коэффициент
#define SERIAL_R 4700 // сопротивление последовательного резистора, 102 кОм
#define THERMISTOR_R 100000 // номинальное сопротивления термистора, 100 кОм
#define NOMINAL_T 25 // номинальная температура (при которой TR = 100 кОм)
float NTC3950(const byte tempPin)
{
int t = analogRead( tempPin );
float tr = 1023.0 / t - 1;
tr = SERIAL_R / tr;
// Serial.print(", t=");
float steinhart;
steinhart = tr / THERMISTOR_R; // (R/Ro)
steinhart = log(steinhart); // ln(R/Ro)
steinhart /= B; // 1/B * ln(R/Ro)
steinhart += 1.0 / (NOMINAL_T + 273.15); // + (1/To)
steinhart = 1.0 / steinhart; // Invert
steinhart -= 273.15;
// Serial.println(steinhart);
return steinhart;
//delay(1000);
}
#define B 3950 // B-коэффициент
#define SERIAL_R 4700 // сопротивление последовательного резистора, 102 кОм
#define THERMISTOR_R 100000 // номинальное сопротивления термистора, 100 кОм
#define NOMINAL_T 25 // номинальная температура (при которой TR = 100 кОм)
float NTC3950(const byte tempPin)
{
int t = analogRead( tempPin );
float tr = 1023.0 / t - 1;
tr = SERIAL_R / tr;
// Serial.print(", t=");
float steinhart;
steinhart = tr / THERMISTOR_R; // (R/Ro)
steinhart = log(steinhart); // ln(R/Ro)
steinhart /= B; // 1/B * ln(R/Ro)
steinhart += 1.0 / (NOMINAL_T + 273.15); // + (1/To)
steinhart = 1.0 / steinhart; // Invert
steinhart -= 273.15;
// Serial.println(steinhart);
return steinhart;
//delay(1000);
}
2 Делать выборку из таблиц соответствия значения температуры и значения ацп с резестивного делителя .
Насколько я знаю такой подход используется в прошивках 3d принтеров. Так как при вычислительном методе считаются десятые и сотые градусов а точность термистора +-3 градуса в 2х соседних измерениях приходится все это округлять, усреднять 5 -7 выборками. От таких вычислений ардуина тормозить начинает. Насколько больше или меньше флеша занимает скомпилированная программа при использовании таблиц ну скажем на 250 значений. Скорость сопоставления из таблицы скорее всего на порядок должна быть выше. У кого есть опыт, мысли, поделитесь.