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:
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.
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.
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.
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.
Now we can simply copy-paste the resulting table into the custom values window in 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.
At this point the GUI should display a wiring diagram which matches our test setup.
Let’s test! First let’s validate our config using the green checkmark up top.
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).
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.
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.
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. 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.
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.
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.
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.