15k NTC temperature sensor support

I’ve tying to use tstat10 for controlling combined underfloor and wall heating. I have multiple temperature sensors, all 15k NTC.
Main sensor is air temperature sensor, but I have also 2 temperature sensors inside of floor and 2 inside of wall.
For output I have 5 on/off loop actuators (24V).
As first thing I want Tstat10 to control all loop actuators together, eg if air temperature falls below setpoint, tstat will turn on all 5 actuators and when air temperature exceeds setpoint, tstat will turn off actuators (or use PID controller logic).
Main obstacle is currently that tstat10 doesn’t support 15k NTC. I need to use user table to map 15k NTC to temperature. In T3000 user table can be defined as volts, but I have 15k NTC characteristic as ohms. Can you help to create user table?
Oms to temp table can beh found here:
https://www.ovenind.com/departments/temperature-sensors/one-degree/tr67/
Interesting range for me is 10-40 degrees celsius

Second question is how to display input 1 temperature on main screen, instead of internal temperature?

I’ve created following Table 1 for 15k NTC sensor:
Points: 11
First Point: Volts: 1.0 Value: 52
Last Point: Volts: 2.5 Value: 0
Voltage Value
1.0 52
1.2 45
1.4 38
1.5 34
1.6 31
1.7 28
1.8 25
1.9 22
2.1 15
2.3 8
2.5 0
This sort of works, but problem is that reading changes in few degree steps, not smoothly. I guess problem is that voltage can be specified only 0.1 volt steps. Please advise how to use more precise reading

Thanks for your work with the product Priit.

Option 1 will be for us to add a table for 15k thermistors, if its something you see often we can do this.

Option2: I see you have worked up a custom table, the resistance change is very small so we don’t get much voltage range to work with which results in jumpy, stepped readings. I will discuss with the team if there’s anything we can do to improve the resolution.

Display Settings: We’re working on a feature to change the input for the display to any of the inputs. Should be ready this week.

Thanks again.

15k thermistors are quite common for dumb underfloor heating thermostats. For example DEVI themostats by Danfoss
But in my opinion, if custom table approach works, eg instead of volts you could specify raw ADC values and interpolate between 2 table entries, then there is no point to code it as separate selection. We can post final table here, so if somebody needs it in the future can find it

Yes, I’ve already noticed T3000 GitHub checkin for display, great news!

BTW: is Tstat10 opensource like Tstat8? I didn’t find it’s repository in the GitHub

Tstat10 source code is in the same repo as the ‘CM5’ boiler controller repo which in fact is the same as the T3-BB series controllers, they all make use of the same code base.

I’ve checked source code and there is indeed problem with precision truncation when using custom tables. In inputs.c, function control_input, in case of input type table1-5:

sample = conver_byunit_custable(point,sample) / 100; <- this division is problem, as input 1.1 - 1.1999 becomes 1.1V
sample = test_match_custom((int)ins->range, (int)sample);

May I suggest following fix, which is backwards-compatible and doesn’t require any logic changes:
change

sample = conver_byunit_custable(point,sample) / 100;
to
sample = conver_byunit_custable(point,sample);

and in test_match_custom() change:

if( ( raw == swap_word(table_point->value) ) )
to
if( ( raw == swap_word(table_point->value)*100 ) )

if( ( raw < swap_word(table_point->value) ) &&
( raw > swap_word((table_point-1)->value) ) )
to
if( ( raw < swap_word(table_point->value)*100 ) &&
( raw > swap_word((table_point-1)->value)*100 ) )

index = swap_word((table_point+1)->value) - swap_word(table_point->value);
to
index = (swap_word((table_point+1)->value) - swap_word(table_point->value))*100;

val = ( raw - swap_word(table_point->value) );
to
val = ( raw - swap_word(table_point->value)*100 );

this change gets rid of precision loss

1 Like

I’ve managed to add 15k NTC support by replacing 3K thermistor table with 15k table in firmware file. I’ve attached python script to patch firmware file if somebody needs 15k support 15kntc.py (3.0 KB)

Can you confirm that Tstat10 ADC full range is from 0 to 1023? Eg if thermistor resistance is 10k, ADC output is 511? Or is there some small offset in reading?

Now I’m waiting change to display temperature from other than internal source

We need to be careful handling the ADC in counts, there are many products out there using high resolution and others with higher resolution. Chelsea will add a new range for 15k thermistor in the next week or so. Thanks for the heads up about the math issue, she will check that as well.