« Close

Datasheets and User Guides

App Notes

Software & Driver

 

Thermocouples with the U6 (App Note)

LabJack T7-Pro, Multifunction USB Thermocouple Data Acquisition and Control DAQ Device, 20+ Channels, Thermocouple Types J, K, R, T, E with Cold Junction Compensation

The U6 family of devices has the resolution and amplification necessary to directly measure raw thermocouple signals.  If you save 1 channel for an external cold junction temperature sensor (e.g. LM34), a single U6 can measure up to 13 thermocouples itself (you might want the CB37).  To handle more signals, it is easy to use multiple U6s (depending on software) or you can use a Mux80 multiplexer board to handle up to 83 thermocouples with a single U6.

The -Pro devices have a 24-bit low-speed sigma-delta converter that is excellent for thermocouples.  In addition to the improved resolution, this converter provides excellent rejection of 50/60 Hz noise (with ResolutionIndex = 11 or 12) which can be a common problem in thermocouple applications.

See the information on the main page of the Thermocouple App Note.  In particular, read through the complications 1-5, decide what you will use for CJC, and avoid complication #5 (ground loops) if at all possible.

Resolution:

What's the difference between resolution and accuracy?  See the Resolution and Accuracy app note.

A type K thermocouple provides roughly 37 μV/°C.  Output is -6.458 mV at -270 °C to +54.886 mV at 1372 °C.

The maximum ResolutionIndex for a U6 is 8, and for a U6-Pro is 12, and the typical range used with thermocouples is ±100 mV.  From Appendix B of the U6 User's Guide, looking at the ±0.1 range, the typical device resolution at ResolutionIndex=8 is about 6.3 μV noise-free and 1.3 μV effective (0.2 and 0.04 °C for a type K).  At ResolutionIndex=12 it is about 1.2 μV noise-free and 0.2 μV effective (0.03 and 0.005 °C for a type K).  The effective numbers mean that most samples (1 standard deviation) will fall in that range.

Note that the actual signal from a thermocouple will likely have real noise with it, beyond the internal noise of the device itself noted above.  The high-resolution sigma-delta converter on the U6-Pro has excellent noise rejection, and in particular rejects 50/60 Hz noise when set to ResolutionIndex=12.

Also note that temperature in air tends to have lots of small fluctuations.  What looks like noise on a thermocouple signal might be real temperature changes.

Accuracy:

From Appendix A of the U6 User's Guide, the device is calibrated to an absolute accuracy of ±0.01% full-span on the ±0.1 V range.  Full-span is 0.2 V so that equates to an accuracy of ±20 μV, which corresponds to an accuracy of about ±0.5 °C for a type K thermocouple, which is more accurate than the thermocouple itself (per complication #4).

There are other sources of error in a thermocouple system, and in particular any error in cold junction temperature measurement is reflected as error in the thermocouple temperature.  Expect about ±2.0 °C with the Internal Temperature Sensor, or if using the common LM34CAZ sensor it is accurate to about ±0.5 °C at room temperature.  If the local ends of the thermocouples are all at the same temperature, then CJC error will affect them all equally and will not affect relative accuracy between the thermocouples.

 

Tutorial - Type K with U6:

Start with just one type K thermocouple connected to the U6, and nothing else (except for USB of course).  Connect the positive to AIN1 and the negative to GND.

Run LJControlPanel, find and select the U6, and open the test panel.  You should see that Resolution is set to 0 (which is translated to an index of 8 on a normal U6 or an index of 9 on a U6-Pro).  In the row for AIN1, change the Gain/Range to "BI 0.1V".  That means the ±0.1 V range which corresponds to a gain of x100 on the U6's internal amplifier.

Now some basic tests to see if your thermocouple is working right.  If the remote end of the thermocouple is at the same temperature as the U6, you should see a voltage close to 0.0 for AIN1, and it should have just a few microvolts of noise.  Likely you will see about -120 μV, which means the screw-terminals are a few degrees warmer than the ambient air, and thus the remote end of the thermocouple is a few degrees cooler than the cold junction (U6).  If using the CB37 (discussed later), you will not see this as the CB37 does not have self-heating.

Now put your fingers on the remote end of the thermocouple to warm it up.  You should see the voltage increase by roughly 40 μV per °C that the remote end is warmer than the U6 end.

If that all looks good, move on to LJLogUD, which is a good way to view and log the data you want.  When you run LJLogUD, row 0 (the first row) is doing a single-ended reading of AIN0. Lets use the first row for cold junction temperature and use the other rows for thermocouples, so start by changing +Ch from 0 to 14.  Channel 14 is the internal temperature sensor and returns degrees Kelvin on the U6, so if the U6 is at room temperature you should see ~298 in the Voltage column for row 0.  To see degrees C or F change the scaling equation:

y=a                            // degrees K
y=a-273.15                 // degrees C
y=(1.8*a)-459.67        // degrees F

Leave the range at BIP10V for the internal temp sensor on row 0, but for all thermocouple rows set the range to BIPP1V (with 2 Ps for "bipolar point 1 volt").  That means the ±0.1 V range which corresponds to a gain of x100 on the U6's internal amplifier.

Leave -Ch set to 199 for all rows.  That means you are doing single-ended measurements.

A Type K thermocouple should still be connected to AIN1/GND as described at the beginning of this tutorial.  In row 1 (2nd row) of LJLogUD, set +Ch to 1, and you should now read the same voltages you saw in the test panel in LJCP above.

Now lets change the scaling equation for row 1, so that instead of showing the raw thermocouple voltage it converts it to temperature.  See the Scaling Equations description on the LJLogUD web page.  The equation you want in this case is:

y=TCVoltsToTemp[K:b:a]                             // degrees K
y=TCVoltsToTemp[K:b:a]-273.15                 // degrees C
y=1.8*(TCVoltsToTemp[K:b:a])-459.67        // degrees F

At this point you might notice that the thermocouple reading is low by a few degrees C.  That is because the equation above is specifying "a" (raw value from row 0) as the cold junction temperature.  That is the internal temp sensor, which is calibrated to report ambient temp, but the built-in screw-terminals on the U6 are typically a few degrees warmer than ambient.  To account for this add a few degrees to the cold junction temp in the scaling equation:

y=TCVoltsToTemp[K:b:a+3]                             // degrees K
y=TCVoltsToTemp[K:b:a+3]-273.15                 // degrees C
y=1.8*(TCVoltsToTemp[K:b:a+3])-459.67        // degrees F

Add a 2nd & 3rd thermocouple with the positives connected to AIN2 & AIN3 and both negatives connected to GND.  All GND terminals are the same.  In row 2 (the 3rd row) in LJLogUD, so set +Ch to 2, and in row 3 set +Ch to 3.  Use scaling equations of the form:

y=TCVoltsToTemp[K:c:a]    //Type K, t/c voltage from 3rd row, CJ temp from 1st row
y=TCVoltsToTemp[K:d:a]    //Type K, t/c voltage from 4th row, CJ temp from 1st row

AIN0-AIN3 appear on the built-in screw-terminals of the U6, but to access all 14 analog inputs you need to use the DB37 connector.  The CB37 terminal board is a handy way to access the DB37 connector, as it provides screw-terminal connections.  To proceed with this tutorial, move all thermocouples to the CB37.

Attach a thermocouple to AIN9/GND.  Lets use the 5th row of LJLogUD, so in row 4 change +Ch to 9 and use a scaling equation of the form:

y=TCVoltsToTemp[K:e:a]    //Type K, t/c voltage from 5th row, CJ temp from 1st row

Change # Channels to 5 so LJLogUD starts reading the first 5 rows.

Now lets use an LJM34CAZ on the CB37 for cold junction temperature, rather than the internal sensor on the U6.  Bend the leads as needed and connect the LM34CAZ directly to AIN0/VS/GND on the CB37.  Watch for correct polarity, as the diagram of the TO-92 package on the LM34 datasheet is showing the bottom view.

The screw-terminals on the CB37 are the actual cold junction for all thermocouples, so with the LM34 we are wanting to measure the actual temperature of the screw-terminals on the CB37.  The CB37 does not warm up like the U6, so the screw-terminals on the CB37 will typically be at the same temperature as ambient air.

In row 0 (the first row) of LJLogUD, set +Ch to 0.  You can leave the range for this row at BIP10V, or if the LM34 temperature will stay below 100 °F you can use the BIP1V range.  You should now see a voltage around 0.7 if the LM34 is at room temperature.  Use the following scaling equations:

y=100*a                     // EI-1034/LM34 voltage to °F
y=55.56*a - 17.78       // EI-1034/LM34 voltage to °C
y=55.56*a + 255.37    // EI-1034/LM34 voltage to °K

We now need to change all the scaling equations for the thermocouple rows.  The last parameter in the TCVoltsToTemp function is cold junction temperature in °K.  Since the raw value from the internal temp sensor was in °K, we simply used "a" in all the scaling equations, but now the raw value is in volts so we need to add scaling for the last parameter.  The equation for the thermocouple connected to AIN9, which we put in row 4 (the 5th row) of LJLogUD, would look like:

y=TCVoltsToTemp[K:e:(55.56*a)+255.37]    //t/c voltage from 5th row, CJ temp from LM34 in 1st row

 

With multiple thermocouples, depending on the nature of the thermocouples and what they might be touching, there could be concern about the "Bad Ground Loops" issue mentioned above (complication #5).  Sometimes using differential measurements without a direct ground connection can solve this.  To try differential measurements, move the positive/negative thermocouple leads of 3 thermocouples to AIN2/AIN3, AIN4/AIN5, and AIN6/AIN7.  You also need some 10k resistors to go from AIN3 to GND, AIN5 to GND, and AIN7 to GND.  Pull on both wires in AIN3/AIN5/AIN7 to make sure both are securely clamped in the terminal.  In rows 1-3 (2nd to 4th rows) of LJLogUD, change the +CH/-CH to 2/3, 4/5, and 6/7.  Now the voltages and scaled values should read the same as before.

 

6 comments

These instructions are very helpful. However, following these we encountered difficultly accurately reading the temperature from the LM34CAZ sensor on the CB37 board. It turns out that the sensor will only report accurate temperature if the range is set to LJ_BIP1V or a greater value. Setting it at 0.1V and 0.01V results in erroneous, but stable measurements.

If the LM34 is at 70 °F it will give you 0.7 volts, so you have to use a range bigger than that.  I added an extra comment above:

"You can leave the range for this row at BIP10V, or if the LM34 temperature will stay below 100 °F you can use the BIP1V range."


darteaga's picture

Will this work well with a theromocouple type T class 1 with 5 calibration points?

On the other hand, what kind of physical connectors does the U6 support? Can a thermocouple standard connector easily adapted?

LabJack Support's picture

When you say "5 calibration points", do you mean that someone has done a 5-point calibration and provided a special table or equation for your thermocouple, or that you are going to do a 5-point calibration and come up with your own table or equation?  Either way, you would have to apply that special calibration in software.  The U6 returns a voltage, and the UD library provides a software function to convert the voltage to temperature using standard thermocouple conversions, so if you have a special conversion you would have to handle that yourself.

I just added a new "Connectors & Connections" section to the main Thermocouples App Note.

darteaga's picture

According to your experience, when measuring thermocouples iwht the U6, is it worth to do periodic repeated measurements of the temperature voltage and add some kind of digital low-pass filtering (e.g. moving average) to reduce the noise?

LabJack Support's picture

If you think you have too much noise, start with the "Too much noise" tips in the troubleshooting section of the Thermocouples App Note.  After that, if you want to hide real noise in your signal, then what you describe is a fine idea and oversampling & averaging often works good.