Using Custom Thermistors with the Temp-to-Bits Family

Using Custom Thermistors with the Temp-to-Bits Family

Author's Contact Information


Logan Cummings

The LTC2983, LTC2984, LTC2986 and LTC2986-1 Temp-to-Bits converters allow the use of custom sensors in addition to built-in standard types. This post focuses on custom thermistors and two ways of configuring the converter.

Thermistors are resistive temperature sensors based on semiconductor materials. They are available in two types—those that have a negative temperature coefficient [NTC], and those that have a positive temperature coefficient [PTC]. While many metals, including Nickel and Platinum used in RTDs have a positive temperature coefficient, they differ from thermistors in both the linearity of their response as well as the range of resistances they exhibit for a given temperature range (due to the logarithmic response of the thermistor).

Users of thermistors must determine temperature from a measured resistance with help from the thermistor vendor. The Temp-to-Bits family includes built-in coefficients for many common thermistors including the popular 44004/44033 2.252kΩ, 44006/44031 10kΩ, and 44008/44032 30kΩ devices. Using one of these standard types is the simplest way to make thermistor temperature measurements. However, as this is not always possible or desired, support for custom sensors is also provided.

Vendors will supply either a Resistance-Temperature table, coefficients for the Steinhart-Hart equation, or a Beta value. Beta used here is a single number that approximates the Steinhart-Hart equation over a limited range. Since most vendors who supply a Beta value also provide Resistance-Temperature tables that cover the sensor’s full range, we will focus on the Steinhart-Hart and table entry methods for our custom thermistors.

Entering a Custom Thermistor into Memory

We will use the TestBench GUI to demonstrate this functionality. Note that by starting with the GUI we are not shooting ourselves in the foot if we need C code later – the GUI can help by generating C code including tables and coefficients, while showing effective ways to load the custom sensor parameters into RAM. Testing a new sensor configuration with the GUI and demo circuits is a great way to ensure the trickier parts of using a custom sensor are working.

The most straightforward way to use a custom resistive sensor is by entering an R-T table into memory. Let’s choose a random NTC thermistor and get started. The Murata NCP15XM472J03RC 4.7kΩ nominal @ 25°C happens to be tied for least expensive thermistor on Digi-Key, and 4.7kΩ nominal is not found in our standard curves.

A click on the datasheet shows us a Resistance-Temperature table nearly instantly:

Figure 1. Murata Datasheet showing R-T Table.

I’ve highlighted the sensor we’re looking at – we have a nice Temperature column and a matching Resistance column. That’s all the data we need to configure our custom thermistor so let’s go ahead and get set up for a bench test.

Configuring the DC2210, TestBench GUI, Custom Sensor, and Performing a Bench Verification Test

First I’ll get some hardware set up so that when I configure the custom sensor I can test right away.

I’m using the DC2026C Linduino One to interface with the DC2209A LTC2983 Demo Circuit. Finally, to connect test resistors I’m using the DC2210A experimenter board. On the DC2210A here in the lab I’ve installed a jumper between COM and GND and some headers for convenience.

For this application, I will choose an RSENSE of the same order of magnitude as largest resistance I expect to encounter – this will give me the most excitation current range and accuracy. 10kΩ is a great starting point for most thermistor designs. In this case I chose a precision 5kΩ resistor for RSENSE, and have installed it between CH1 and CH2. I’ve installed a 2.2kΩ test resistor in place of the thermistor, which if the custom sensor is configured correctly, should read between 45°C and 50°C according to the datasheet. Since the test resistor is between CH7 and CH8, I’ll need a jumper between the bottom of the sense resistor on CH2 and the top of my sensor on CH7. The test setup is shown in Figure 2.

Figure 2. DC2210A setup for Thermistor Test (Linduino One not shown).

Now that we have our hardware set-up, let’s take a look at the GUI configuration. First we’ll need to configure a 5kΩ sense resistor on channel 2.

Figure 3. Sense Resistor Configuration.

Next, we’ll configure our Thermistor Custom Table on channel 8. The datasheet lists a maximum excitation current of 0.31mA. The LTC2983 has a maximum differential voltage of 1.25V, so with our 5kΩ maximum resistance we can use up to 250μA of excitation current – fitting nicely under the datasheet maximum. Since the actual sensor chosen is a small device, we’ll lower this to 100μA to reduce self-heating. Note that my favorite excitation current selection, Auto-range, is not allowed for custom sensors, so I am using one current that will continue to work well at higher temperatures where the NTC resistance is lower.

Now we’re nearly ready to enter our custom data. Custom sensor data can be placed anywhere within user RAM so we’ll need to be cautious of overlap. Since this is my first custom sensor the RAM is a blank slate and I do not need to offset the data in memory, so we’ll leave the custom address at 0. I also haven’t counted our data points yet, so we’ll leave the table length to 0 for now – we’ll have to set this before closing the dialog box.

Let’s look at the custom value entry window.

Figure 4. The custom value table must be in Ohms, deg K.

Right off the bat I notice it’s going to be a little work to type in each value, and that the datasheet table isn’t quite in the right format – the datasheet has temperature in Celsius and kilo-ohms instead of Ω, which the LTC2983 needs. Instead of trying to modify these one by one as I type them in, I’ll get some help from a spreadsheet.

Thankfully, Murata’s PDF is text-copyable, so a couple of copy-pastes later we have some data. Other vendors are not so nice, but with the spreadsheet method you only do data-entry once.

Next we’ll create new columns for Temp in Kelvin, and Resistance in Ohms, these are simple formula columns (e.g. “=A2+273.15” “=B2*1000”). Noting that the custom data must be in Ω, Temp (K) and must be monotonically increasing (ohms), we’ll sort the sheet to be increasing by Resistance. See page 65 of the LTC2983 datasheet for more.

Finally, we’ll create a column to give us a comma separated value ready for import into the TestBench GUI – again, this is a built-in Excel function (e.g. “=CONCATENATE(E2, ",", D2)”). Our spreadsheet shown in Figure 5 is now complete.

Figure 5. Using a spreadsheet program gets us CSV formatted data ready for import into the TestBench GUI.

Now we can simply copy-paste the resulting table into the custom values window in the TestBench GUI.

Figure 6. The correctly formatted CSV column directly copies into the TestBench GUI.

Hit OK. We know from our spreadsheet that we have 34 rows of data, or 34 table entries. Since the GUI needs length-1, we’ll enter 33 for our table length, and hit accept changes.

Figure 7. Final Custom Table Configuration window showing length of table data in User RAM.

At this point the GUI should display a wiring diagram which matches our test setup.

Figure 8. Verifying the wiring diagram in the GUI is a great way to catch configuration issues early.

Let’s test! First let’s validate our config using the green checkmark up top.

Figure 9. The TestBench GUI can validate a config including checks for overlapping leads and missing RSENSE connections.

If all went well, when we run to evaluate our config (green button) we should see a temperature reported in Degrees C right around 46°C (guesstimate from the datasheet table).

Figure 10. The GUI displays the calculated temperature as well as measured resistance, enabling quick checks of RSENSE value.

Success! The resistance shown in Figure 10 is correct, meaning our sense resistor configuration was spot on, and the temperature is correctly interpolated between our 45°C and 50°C data points from the table.

Let’s check one more value to make sure our table works, a 330Ω resistor as this should display exactly 110°C.

Figure 11. A second resistance value shows our table is being interpolated correctly.

Not bad.

Thermistor Custom Steinhart-Hart

Now what about the other custom method – Steinhart-Hart coefficients? Some vendors provide these directly usable for our method (e.g. Omega) while others provide them in a slightly different, but still valid way (e.g. Vishay) – we’ll take a look at one that needs some minor manipulation to give an idea of what’s required.

The Vishay NTCLE100E3 family of leaded NTC thermistors are popular low cost sensors. Let’s take a look at the 10kΩ nominal at 25°C which has a Beta(25/85) of 3997K. Vishay provides a table of coefficients, shown in Figure 11.

Figure 12. Vishay uses a slightly different form of the Steinhart-Hart equation in their thermistor datasheets.

I've highlighted the coefficients of interest, as well as the Steinhart-Hart equation Vishay uses. Note that Vishay’s equation is a little different than the one the LTC2983 expects. We can set E and F to zero, so there is no issue not having them in the Vishay datasheet.

Figure 13. The full Steinhart-Hart equation as built into the LTC2983, LTC2984, LTC2986, and LTC2986-1.

However, the LTC2983 equation uses coefficients based on R values in Ω, while the Vishay coefficients take R relative to RREF, or R25 – the nominal value at 25°C. There’s a little arithmetic involved in the conversion.

First we'll want to get rid of the fraction inside the logarithm. For that we can use the identity.

Equation 1.

So then the Vishay equation becomes:

Equation 2.

Expanding the polynomial terms and multiplying the coefficients through gives us:

Equation 3.

Vishay gives us A1, B1, C1, D1 and R25 which are constants and allow us to rearrange the above so that we have an equation in terms of In(R), (In(R))2, etc. to match our datasheet format. Our new coefficients then become:

Equation 4.

Figure 14. Using a spreadsheet to convert coefficients between Vishay's form of the Steinhart-Hart coefficients and ours.

Now we can calculate our new coefficients and enter them into the GUI. Again, a spreadsheet helps here to maintain the equations and perform some rudimentary testing.

We’ll set up a new custom thermistor on channel 12 to test the coefficients.

Figure 15. The new custom sensor configuration window shows the required offset to not overwrite our existing table data.

We’ll share the same sense resistor on channel 2 as before, but in this case since we are already storing table data in user RAM starting at position 0, we’ll need to offset the location of the new coefficients to prevent any overlap. Since we had 34 entries in the table starting at address 0, we’ll put the new coefficients right after them at position 34 as shown in Figure 15. Using the verify configuration tool of the GUI we can confirm we have no conflicts.

Finally, looking back at the datasheet we find an R-T table that we can use to verify our coefficients work – for example, 1070Ω should give 85°C – setting up a bench test with a grab bag 5% resistor we can check our results.

Figure 16. Two custom thermistors—two valid measured resistance to temperature conversions.

Looks like it’s working!


In this post we’ve taken a look at two ways of entering custom thermistor data into the Temp-to-Bits family. One noticeable result is that resistance-temperature tables are by far more straightforward to adapt and enter, while Steinhart-Hart coefficients use far less memory and may give better results due to the interpolation methods used.

It should also be mentioned that fitting methods can be used to calculate Steinhart-Hart coefficients from resistance-temperature table data. In some ways this can be very useful if multiple types of custom sensors are used in a single system as the memory saved can be large.

For questions about custom thermistor setup and the Temp-to-Bits family, please do not hesitate to get in touch.