Multifunction DAQ

cancel
Showing results for 
Search instead for 
Did you mean: 

NI 9211 AutoZero

Hi,

     I am using NI 9211 (thermocouple module) with cDAQ-9172 to measure small temperature change using thermocouple. My interested temperature range is between -2 and 0 C, and I am hoping to be able to reach <0.05 C accuracy. In the setting, I used the built in CJC. I used a well-made ice bath (error +/- 0.003 C ) to calibrate the offset.

     First I set the AutoZero to 'One sample'. But I found that the temperature read from 9211 changes over long time. The reading at current moment will be quite different (~0.3 C) from 5 minutes later.

     Then I set the AutoZero to 'Every sample'. Then I found that the every reading was quite differen (~ 0.1 C).

     Then I set the AutoZero at 'off'. I found that the temperature reading was ~ 0.05 C change between each other and in long term.

     My question is, should I really use 'none', or I should use 'every time'.The manual said that the autozero is for measuring the offset error at < 15 C or > 35 C (none of them are in my case).Turn the AutoZero 'off' looks better for a few hours, but if the ambient temperature changes from 20 C to 25 C, will this cause a big change in the reading? How autozero works?

 

Thanks,

 

ryan

0 Kudos
Message 1 of 9
(6,719 Views)

Hi RyanWu,

 

This thread discusses how the auto zero works.  With your application's temperature range in mind, I recommend leaving it set to off.  The accuracy achievable is dependent not only on the 9211 but also the thermocouple, and as can be seen in this KnowledgeBase, the accuracy of a thermocouple cannot be lower than 1 degree C.

David
Applications Engineer
National Instruments


Digital Multimeters
0 Kudos
Message 2 of 9
(6,688 Views)

Hi David,

     Thanks for the information.

     The URL to the knowledge base did not work. However, I found a document in Knowledgebase titled 'Thermocouple Accuracy Table by Type and Temperature'. My understanding of the +/- 1.5C error of type J thermocouple at 0 C, for example, is that between the temperature 0 and 200 C,the J-type thermocouples have the error range of +/- 1.5C. That is not the case when we using one specific thermocouple to measure the specific temperature of a reference temperature. And the later is my case. I have two proofs that TC can achieve this accuracy:

1.  I can do this with a Fluke 54II digital thermometer. For example, a well made ice-bath, whose temperature can be restricted within +/- 0.003C, I can use the Fluke meter to read the temperature repeatively < 0.1C difference. However, using the NI 9211, the difference between readings > 0.3C.

2. The vendor of the thermocouple calibrated the TC's < 0.01 C error at a specific temperature.

     You may suggest thermistor or RTD, but these sensors are unlikely to survive in my environment.

     I worked with one of your field engineer for one afternoon and did some more test after that, and I found that the 9211 unit can't acheive what the Fluke 54II can do (read a specific temp at the accuracy within 0.1 C). Both he and I started to suspect the CJC compensation and the AutoZero channel accuracy. I can view the CJC channel in MAX but I don't know how to write a VI to record the CJC and AutoZero value. Could anyone provide me a sample vi which can output the CJC and AutoZero voltage?

     By learning more about the CJC and AutoZero, I hope I could get reproducible reading of specific temperature using one specific TC. 

Thanks,

 

Ryan

0 Kudos
Message 3 of 9
(6,653 Views)

Hi RyanWu,

 

This thread discusses how to programmatically read the CJC value.  The same method can be followed, substituting _cjtemp in step 5 with _aignd_vs_aignd to read the auto zero channel.

David
Applications Engineer
National Instruments


Digital Multimeters
0 Kudos
Message 4 of 9
(6,628 Views)

David,

     Thanks. The CJC channel (_cjtemp) worked but the AutoZero (_aignd_vs_aignd) did not. The following is the error message:

Error - 200072 occurred at DAQmx Create Channel (AI-Voltage-Basic).vi:3

Possible reason(s):

Measurements: Duplicate channels in the list of physical cahnnels are not supported by this device.

Channel Name: _cDAQ1Mod1/_aignd_vs_aignd

Duplicate Channel:  _cDAQ1Mod1/_aignd_vs_aignd

Physical Channel:  _aignd_vs_aignd

Device: cDAQ1Mod1

 Task Name: _unnamedTask <1A>

 

     I have attached my VI below. Is this message telling me that my device does not support direct reading of AutoZero channel?

     Also, how to convert the thermocouple voltage and CJC, AutoZero information into temperature?

 

Thanks,

 

Ryan

0 Kudos
Message 5 of 9
(6,609 Views)

Hi Ryan,

 

Adding cDAQ1Mod1/ai0 automatically adds cDAQ1Mod1/_aignd_vs_aignd to the task as a hidden channel, and you can't have duplicate physical channels in the same task on CompactDAQ. To work around this, you need to add all of the other channels to the task first, then set AI.AutoZeroMode = None using a DAQmx Channel property node (look in Analog Input >> General Properties >> Advanced >> High Accuracy Settings for the property), and finally add _aignd_vs_aignd to the task. Setting AI.AutoZeroMode = None will remove the hidden channel from the task. It will also disable autozero, so you will have to subtract the offset in your application.

 

Brad

---
Brad Keryan
NI R&D
0 Kudos
Message 6 of 9
(6,602 Views)

Brad,

     It is working. Thanks.

     How to convert the voltage to temperature? I found a link which talks about the thermocouple coefficients (http://groups.google.com/group/natinst.public.daq.general/browse_thread/thread/6a95267f26279491). But how about the CJC, autozero channels work together?

 

Thanks,

 

Ryan

0 Kudos
Message 7 of 9
(6,597 Views)

Hi Ryan,

 

The _aignd_vs_aignd channel gives you the voltage offset you would get if the ai0, ai1, ai2, or ai3 channel had its inputs shorted together. So you should pass (ai0 - _aignd_vs_aignd) to your thermocouple scaling code instead of passing it ai0 directly.

 

As for how to manually scale thermocouple voltages into temperature, Manually Scaling Thermocouple Measurements in DAQmx demonstrates how to do it for SCXI (which I think requires a couple of scaling VIs from Traditional NI-DAQ). Note that in addition to the channel creation workarounds I've already mentioned, the CJC thermistor on the NI 9211 has different Steinhart-Hart coefficients and R1/Vex constants than the values hardcoded in to the Traditional NI-DAQ thermistor VIs: A=1.2873851E-3, B=2.3575235E-4, C=9.4978060E-8, R1=10000.0, Vex=2.5 . Also, DAQmx subtracts a 0.7 K temperature offset from the thermistor reading to account for the thermal difference between the CJC thermistor and the actual cold junction. Performing the scaling manually adds a lot of extra complexity to your application, so having DAQmx do the scaling is preferable.


Brad

Message Edited by Brad K on 04-14-2009 02:12 PM
---
Brad Keryan
NI R&D
0 Kudos
Message 8 of 9
(6,590 Views)

Hi Brad,

     Thanks.

     I just downloaded the example code in the link you provided, quite tideous. Manually scaling the TC measurement is the last thing I want to do. But, as I mentioned earlier, using the DAQmx reads a well-made ice bath generates drifting readings (>0.3C), no matter how I set the CJC channel and AutoZero. This big error is not tolerable in my application. I am collecting the data now. In a day or two I will know which causes the problem and hope there is a remedy.

 

Ryan

0 Kudos
Message 9 of 9
(6,584 Views)