USB 6009 thermocouple noise

I'm using NI-DAQmx 7.5, Labview 7.0, and a USB-6009.
I'm trying to get a more accurate reading from my j-type thermocouple.  It is now distorted with noise and jumps rapidly +/- 20 degrees around room temp without any heat being applied.  When heat is applied, it climbs as it should but with the same variation.  I haven't moved to the labview side of it yet, I'm still trying to get a usable reading in MAX.  I have it wired as a differential input with a floating signal source.  I've installed 10k ohm resistors for bias current return as instructed.  Installing the resistors helped but still leaves me with the readings shown in the attached pic.  I've also tried grounding my USB 6009 with no results.  Please help. john
Attachments:
thermocouple reading.jpg ‏41 KB

Hi John,
What you are running into is a problem with the actual voltage resolution of your USB-6009.  This device has 14-bits of resolution over a minimum range of +/- 1V.  That means that the voltage resolution is (1 - (-1))V / (2^14) = 2V / (16384) = 122uV.  While this is an excellent resolution for such a low cost USB device, you will still notice problems when trying to make a thermocouple measurement.  The reason for that is that Thermocouples make a very small output voltage (see image below).
Common thermocouple types have the following response:
K type: 41 microVolts per degree Celsius
J type: 56 microVolts per degree Celsius
T type: 52 microVolts per degree Celsius
There are a few options for ways to get around this limitation.
Good: You could read the signal in as a voltage and then manually convert that voltage into a temperature.  This would be the least accurate method, but it should allow you to average out your signal and then use the Convert Thermocouple Reading.vi to show the voltage as a temperature.
Better: If you want to keep using the USB-6009 to measure thermocouple, what you really need to do is first amplify your signal before you connect it with your device.  This should increase your resolution of the thermocouple allowing you to get more accurate temperature specs.  This will require some more complex programming to properly scale your measurements, but it will give you more accurate readings for relatively little cost.
Best: Opt for getting a USB device that is designed for taking temperature measurements such as the USB-9211A.  This device would give you a voltage resolution of 160mV/2^24 = 9.54 nV!  That's over 12500x the resolution of the USB-6009 that you currently have.
Hopefully the above information helps you better understand what is going on and why.  If you have any other questions feel free to post them here.
Message Edited by Otis [DE] on 01-13-2006 11:37 AM
Message Edited by Otis [DE] on 01-13-2006 11:38 AM
Otis
Training and Certification
Product Support Engineer
National Instruments
Attachments:
761029-Thermocouple_Voltages.GIF ‏10 KB

Similar Messages

  • USB 6009 Data Acquisitio​n noise

    When I acquire the voltage from USB 6009, It gives some fluctuation/Noise (Please check the image, green color).
    What is the reason for that?. How to overcome this noise? One way is averaging, is there any other ways to do or overcome this problem
    Could you please suggest me?
    Thank you,
    Best Regards,
    Rathan
    Attachments:
    Noise.GIF ‏16 KB

    Dear Rathan
    The correct Terminal configuration depends on if your power supply is floating or grounded. Please have a look at tabel below.
    As to the filter, which type of filter to use depends on the frequency of your signal. If your frequency (or frequencies) is low a lowpass with a cutoff frequency a bit over your frequency would be best. Conversly if your frequency is high a highpass with a lower cutoff frequency would do the job. If you are interested in only a single or small spann of frequencies a bandpass could be used.
    You can filter your signal either via a hardware filter before you acquire it via your DAQ, but that would require that you have or can build a hardware filter that fits your needs. Else you can filter the signal in software after you've aquired it. The filters in LabVIEW can be found in the functions palette under Signal Processing -> Filters. I think a butterworth filter would do nicely. You can find an example through the LV Help.
    Best Regards
    David
    Message Edited by DavidEk on 07-29-2009 05:03 AM
    Attachments:
    Connection Configs.PNG ‏66 KB

  • Measuring temperature Via Thermocouple and USB-6009?

    Hi,
    I am trying to perform temperature measurements using a k type thermocouple and the USB-6009 DAQ. I tried to use the Cont Acq Thermocouple Sample.vi from LabVIEW's example list, but unfortunately I don't know how to fit my DAQ and thermocouple in the vi code. I don't know how to create a thermocouple temperature measurement channel or how to get all the channels in the task, etc.
    Any help is appreciated.
    Thanks.

    bilbeigg,
    It should be noted that the USB-6009 is not well suited for thermocouple measurements.  It has 14 bits of precision with a minimum input range of +/-1V, which means it can only detect a voltage change as small as about 122 microvolts.  This is much too large a change to get a good temperature reading with most types of thermocouples.  Here is a discussion thread on the same topic (Note that the USB-6008 and 6009 are very similar):
    http://forums.ni.com/ni/board/message?board.id=170&message.id=294080#M294080
    Here is a knowledgebase that explains what you are seeing:
    http://digital.ni.com/public.nsf/allkb/8166630BD6965EEA86256FDD0052E89C?OpenDocument
    Chris M
    Message Edited by CMal on 03-12-2008 12:17 PM

  • USB-6009 Temperature Acquisition

    Hi All
    I seem to have some brain fade today. I need to use the USB-6009 to with a J type thermocouple. When I hook it up the temperature is not correct and widely varies. I am getting reading from 0 to 60 C at room temperature. I need to incorporate this into another circuit for testing. I assume that I am overlooking the simple and obvious. I have tried using a DAQ Assistant and a DAQmx. Any help will be appreciated.
    Thanks
    Gerald

    Hello Gerald,
    You don't have a brain fade! I recently got in a few usb-6009's and am seeing a similar response when trying to measure temperature with thermocouples.
    I don't believe this is noise as much as resolution on the usb-6009. At this point I have added resistors to bring down noise but am seeing the same "waver" that you describe (although not quite as extreme). I am looking into building a signal amplifier or alternatively purchasing a  TAC80 thermocouple-to-analog converter for use with the usb-6009.
    Have you had any progress with your issue?
    Adzel

  • Usb-6009 high-speed continuous acquisition for slow control loop application

    Hi,
    After watching a few Youtube videos, I successfully built a control loop in LabVIEW using my USB-6009. Currently, this loop is limited by the speed my actuator can take and respond to commands, topping out at 200 Hz. This is completely sufficient for my application. My question is more regarding the wasted potential of the USB-6009 to acquire samples at a much higher rate than what would be obtained if I used a simple single sample-on-demand during every iteration of the loop.
    It seems to me that having the USB-6009 continuously acquire samples and having my control loop periodically check in for the latest data when it is ready to execute would have the advantage of allowing me to average groups of samples together to lower the overall noise associated with the measurement process (I am reading voltages from an amplified photodiode).
    1) Does anyone know how I would instruct the USB-6009 to continuously acquire at say 10 kHz, so that on each loop I will have 50 or so samples that can be averaged together for a more accurate measurement of my control variable? Unfortunately, I'm new to this and not too familiar with DAQmx Timing.vi.
    2) I've heard that reading into a buffer can increase latency for moving data into the computer. Given the low speed of my control loop, I don't foresee this as being a problem. Is this a correct assumption? I can probably live with an extra millisecond of latency.
    3) I goofed around briefly with DAQmx Timing and managed to see a buffer overflow error. Certain rare events will by necessity cause my control loop to take much longer to execute, so I cannot guarantee that occasionally during normal operation I will not overflow the buffer. Can I suppress this error so that the dialog box does not pop up and the program continues to run uninterrupted? If the buffer overflows and old data gets overwritten it isn't a big deal for me since the control loop is only concerned with the latest data anyway.
    Thanks for any info!

    Howdy Patrick!
    Here is a picture of the front panel:
    Here is the block diagram:
    And I've attached a copy of the VI saved for LabVIEW 7.1.
    Regards,
    Barron
    Applications Engineering
    National Instruments
    Attachments:
    most recent samples.vi ‏73 KB

  • USB 6009 lock-ups?

    Hello,
    I'm having a strange problem with my newly aquired USB 6009. I've written an app to read the temperature from a temperature controller using the 6009 and that all works fine. However, the problem comes when I port this code into another application. The code is intended to run in a parallel loop to the main execution loop, to continuously read the temperature whilst other data is captured and process (all done in the main loop). Both applications run quite happily when separate. When I bring them together the applications sometimes, but not all the time, refuse to quit and just lock up. I have no idea what is happening as it is not a case of one loop remaining running (I've tried separate stop buttons) and they will run together quite happily. The problem only comes when I hit the button that terminates the main loop (this also triggers the other loop to stop - I'm sure this bit works as I've used the same method in another vi).
    The main loop should, in theory, just close. The loop with the USB reads (using DAQmx Base) will stop and then clear the task (DAQmx Base Clear I think). Sometimes the DAQmx Base Clear runs and the program stops fine, other times it runs and the program locks, other times it locks as soon as I hit the quit button.
    Any thoughts as I'm completely stumped on this one? Like I say, apart from the one button triggering both loops to terminate there is no link between the two loops.
    My only thought is it could be a USB issue as the PC also has a USB keyboard and mouse. I know from my home experience, when for instance plugging in my camera, it can cause the USB to lock if, say, my USB modem is running.

    See the thread
    http://forums.ni.com/ni/board/message?board.id=250&message.id=13722
    John Weeks
    WaveMetrics, Inc.
    Phone (503) 620-3001
    Fax (503) 620-6754
    www.wavemetrics.com

  • Usb 6009 digital input

    Dear All!!
    With the following vi. I'm trying to receive a 5V signal in a digital input, using a usb-6009 device.
    I would like to use the 5 VCC supply, available in pin 31 of the same device and send it to pin 17, representing line0 of port0. During execution, 'm physically connecting and disconnecting  these pins in order to see the difference in a led indicator. Unfortunatelly, the led is always on, even if both pins are disconnected.
    Could somebody help me? I would be very pleased.
    Thank you very much in advance,
    Miren
    Attachments:
    proof.vi ‏38 KB

    Hi Miren,
    "the led is always on, even if both pins are disconnected"
    RTFM?!
    They use open collector inputs with an internal pullup resistor of 4.7k, so you actively have to pull down the input to GND to see a difference...
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • USB-6009 Sine Wave

    Hi,
    I am new to LabView and am having some trouble. I need to input two sine waves into a USB-6009. I have a voltmeter that should read the output. Two of the problems that I have had thus far: I can only use "On Demand" in DAQ Assistant and even when I throw the DAQ Assistant into a while loop I still do not get a readout on my voltmeter. Any suggestions? Thanks for the help.

    That is confusing. You say you need to input 2 sine waves into a 6009 and that to me implies that you are doing a DAQmx Read. Then you say you have a voltmeter to read the output. That implies you are doing a DAQmx Write. If you are really doing a write from the 6009, then on demand is, of course your only choice. As the specs clearly indicate, the output of the 6009 is strictly software timed so you would need to pass a sine wave point by point and then you would have very little control over the frequency. And, again as the specs clearly state, the fastest output rate you could expect is 150Samples/sec.

  • Usb 6009 acquisition fall after 15min

    Hello,
    Like it's said on the name of my post i have some problem with my new usb 6009. When i start it all work good but after a while my two AI fall to 0V. I put my code in joint pieces. I use AI0 and AI1 with a 220ohm resistance.
    Thank you
    Samuel Rioux
    Attachments:
    test.vi ‏30 KB

    Hi skling,
    DON'T use an additional Wait function when you have set your DAQmxRead to use a certain sample rate!
    It will wait on it's own and after some time you will miss to read samples in time...
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • Usb 6009 continuous analog output

    Hi
    I'm pretty new to Labview, so you may have to bear with me. I have a USB-6009 and I want to generate a continuos analog output voltage. I've got the example you have posted 'Gen Mult Volt Updates-SW Timed_LV7.1 (0 to 4).vi' working and it outputs a continuous sine wave.
    In a similar manner I need to generate:
    1. Ramp up voltage (and ramp down voltage): starting with a continuos constant voltage, which after a period of time linearly increases to another constant voltage, and which allows me to specify the 3 time intervals and the rate of increase.
    2. Pulsations: whereby I can specify the amplitude and time interval of each pulsation
    This is so that I can control voltage to a valve which regulates my pipe flow. In the example I have (one stated above), I do not understand specifically:
    i. Why I need both a 'Software Loop Time (ms)' as well as 'Timeout'
    ii. The 'Sinusoidal Pattern' input which seems to generate data for a sine wave- I can't get a description of that and there are no similar VIs for other waveforms; and what is the function of the two numbers it has?
    iv. How do I change amplitude and time period for the wave?
    iii. What does 'Index Array' do?
    thank you

    Hi there,
    I'm guessing the VI you are using is the one from this KB:
    http://digital.ni.com/public.nsf/allkb/6F2C2B49A89D685C8625711D007BDD64
    i. The software timed loop control is to control the rate at which you change the voltage output.  The timeout on the DAQmx Write VI is the maximum time in seconds the VI will wait to output a sample (eg. if the write buffer is full, the Write VI will wait for it to become available for 'timeout' seconds before outputting an error).
    ii. The sine pattern is just an array constant of doubles that make up the sine wave voltage values, and the for loop adds an offset (of two volts) to every single one of those values. You might want to replace that entire array constant and for loop with a Simulate Signal Express VI (just search for Simulate Sig or look in the Functions >> Input palette) and convert the dynamic data output to an array of doubles.  You can configure the type of waveform, amplitude, and time period from that express VI as well.
    iii.  Refer to previous answer.
    iv.  Index array returns an element of an array based on the index input.  You can turn on the context help and move your mouse over functions to get more help on them.
    I hope that helps!
    Way S.
    NI UK Applications Engineer

  • Usb 6009 multiple analog inputs

    I am currently attempting to sample two different analog inputs at different sampling rates using a USB 6009.  I keep getting the 'resource reserved' error and am wondering if this is not possible using this DAQ.  Questions:
    1.  Does creating two analog input channels on the device cause this error?
    2.  Is it possible to sample at different rates on channels created in the same task?  (i am trying to 'slow down' the second analog input to display switch points to a customer)
    3.  Running multiple analog inputs using independent timing would be better achieved by switching to a higher end DAQ?  If so which would you recommend?
    I have attached my vi.  Thank you in advance for your help. 
    I surf therefore I am....
    Attachments:
    demo_nolvl.vi ‏27 KB

    The DAQ boards only have 1 timing clock for the analog inputs/outputs.  So you can only have 1 sample rate on a given card.  I would recommend just sampling at the highest of the desired rates in a single task.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines

  • USB-6009 with "redy to run" datalogger SW

    To get a quick and low cost solution to my data logging need, I bought a USB-6009 which ships with "ready to run" data logger software, NI Data logger. Well, I guess this SW is nice to see if you data USB-6009 works, but for anything else it seems quite useless. It seems that I am only able to log one channel at a time. Whats the use then of having 8 channels? Or am I just missing the functionality in the undocumented SW?

    You can specify a series or group of channels in one of two ways:
    - A colon specifies a channel range (e.g. Dev1/ai0:7 for channels 0 to 7)
    - a comma seperates a group of channels in any order (e.g. Dev1/ai1,Dev1/ai4, Dev1/ai5 for channels 1, 4, and 5)
    This is the standard channel string for NI-DAQmx and NI-DAQmx Base.

  • USB-6009

    I am electrical engineering student and i design a project which the sensor signals through USB-6009 to PC labview for monitoring, but i dont know this sensor and USB-6009 can do this function or not? anyone can help, Thank you!
    Attachments:
    FFP350_product.pdf ‏61 KB
    ForceSensorFFP350.pdf ‏144 KB

    johnsold wrote:
    Kchiman,
    As an electrical engineering student it is time you learned to read and interpret data sheets. You will spend much of your career doing that.  And none of your professors ever mentioned it, right?
    Data sheets are the source of much of the information which is critical to the success (or failure) of your designs.  Of course none of your professors actually knows much about design either.
    Lynn
    MSEE, P.E., and 40 years of experience
    Lynn,  YMMD
    Spoiler (Highlight to read)
    Connecting the sensor could be done via screw terminals....  no risc for ppt high performers to touch the solder iron on the wrong side
    Connecting the sensor could be done via screw terminals....  no risc for ppt high performers to touch the solder iron on the wrong side
    Greetings from Germany
    Henrik
    LV since v3.1
    “ground” is a convenient fantasy
    '˙˙˙˙uıɐƃɐ lɐıp puɐ °06 ǝuoɥd ɹnoʎ uɹnʇ ǝsɐǝld 'ʎɹɐuıƃɐɯı sı pǝlɐıp ǝʌɐɥ noʎ ɹǝqɯnu ǝɥʇ'

  • USB 6009 DAQmx Deployment

    Hi.
       I have created a 4 channel differential data logging scope with a NI USB-6009. I would like to deploy this 'easily' to many of my colegues. I have app builder and the ability to build apps, but I would like to include the correct drivers for the 6009 in with the installer (although I have selected NI_DAQmx Core Runtime and NI_DAQmx MAX config support).
       For the running of the app, I have created a Task that consists of 4 channels. I would like it for my end user not to have to configure this. Does anyone know how I might acheive this? My experience of deployment is limited.
    Many thanks, Alec

    Hi Alec,
    It's also worth installing DAQmx MAX Configuration Support from the install builder if you still want to be able to modify the tasks from MAX as well.
    Best Regards,
    Chris
    National Instruments - Tech Support

  • USB 6009 Python Control

     Hello, 
    I am attempting to use python (with ctypes) to control my USB-6009.  The goal is to write out an analog voltage and then read in the voltage through an analog input with ability to change the number of points averaged and the number of times this is repeated(sweeps) averaging the analog input array.  The issue is that as we increase the number of times the voltage ramp is repeated (sweeps) we get a time out error (nidaq call failed with error -200284: 'Some or all of the samples requested have not yet been acquired).  This has us confused because the sweeps are in a larger loop and the Daq function should be the same if there are 10 sweeps (works) or 1000 sweeps (crashes).  Any insight would be greatly appreciated.  I have included the code below for reference.  
    import ctypes
    import numpy
    from time import *
    from operator import add
    nidaq = ctypes.windll.nicaiu # load the DLL
    # Setup some typedefs and constants
    # to correspond with values in
    # C:\Program Files\National Instruments\NI-DAQ\DAQmx ANSI C Dev\include\NIDAQmx.h
    # Scan Settings
    aoDevice = "Dev2/ao0"
    aiDevice = "Dev2/ai0"
    NumAvgPts = 10
    NumSweeps = 50
    NumSpecPts = 100
    filename = '12Feb15_CO2 Test_12.txt'
    Readrate = 40000.0
    Samplerate = 1000
    StartVolt = 0.01
    FinalVolt = 1.01
    voltInc = (FinalVolt - StartVolt)/NumSpecPts
    # the typedefs
    int32 = ctypes.c_long
    uInt32 = ctypes.c_ulong
    uInt64 = ctypes.c_ulonglong
    float64 = ctypes.c_double
    TaskHandle = uInt32
    # the constants
    DAQmx_Val_Cfg_Default = int32(-1)
    DAQmx_Val_Volts = 10348
    DAQmx_Val_Rising = 10280
    DAQmx_Val_FiniteSamps = 10178
    DAQmx_Val_GroupByChannel = 0
    def CHK_ao( err ):
    """a simple error checking routine"""
    if err < 0:
    buf_size = 100
    buf = ctypes.create_string_buffer('\000' * buf_size)
    nidaq.DAQmxGetErrorString(err,ctypes.byref(buf),buf_size)
    raise RuntimeError('nidaq call failed with error %d: %s'%(err,repr(buf.value)))
    if err > 0:
    buf_size = 100
    buf = ctypes.create_string_buffer('\000' * buf_size)
    nidaq.DAQmxGetErrorString(err,ctypes.byref(buf),buf_size)
    raise RuntimeError('nidaq generated warning %d: %s'%(err,repr(buf.value)))
    def CHK_ai(err):
    """a simple error checking routine"""
    if err < 0:
    buf_size = NumAvgPts*10
    buf = ctypes.create_string_buffer('\000' * buf_size)
    nidaq.DAQmxGetErrorString(err,ctypes.byref(buf),buf_size)
    raise RuntimeError('nidaq call failed with error %d: %s'%(err,repr(buf.value)))
    def Analog_Output():
    taskHandle = TaskHandle(0)
    (nidaq.DAQmxCreateTask("",ctypes.byref(taskHandle )))
    (nidaq.DAQmxCreateAOVoltageChan(taskHandle,
    aoDevice,
    float64(0),
    float64(5),
    DAQmx_Val_Volts,
    None))
    (nidaq.DAQmxCfgSampClkTiming(taskHandle,"",float64(Samplerate),
    DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,
    uInt64(NumAvgPts))); # means we could turn in this to continuously ramping and reading
    (nidaq.DAQmxStartTask(taskHandle))
    (nidaq.DAQmxWriteAnalogScalarF64(taskHandle, True, float64(10.0), float64(CurrentVolt), None))
    nidaq.DAQmxStopTask( taskHandle )
    nidaq.DAQmxClearTask( taskHandle )
    def Analog_Input():
    global average
    # initialize variables
    taskHandle = TaskHandle(0)
    data = numpy.zeros((NumAvgPts,),dtype=numpy.float64)
    # now, on with the program
    CHK_ai(nidaq.DAQmxCreateTask("",ctypes.byref(taskHandle)))
    CHK_ai(nidaq.DAQmxCreateAIVoltageChan(taskHandle,aiDevice,"",
    DAQmx_Val_Cfg_Default,
    float64(-10.0),float64(10.0),
    DAQmx_Val_Volts,None))
    CHK_ai(nidaq.DAQmxCfgSampClkTiming(taskHandle,"",float64(Readrate),
    DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,
    uInt64(NumAvgPts)));
    CHK_ai(nidaq.DAQmxStartTask(taskHandle))
    read = int32()
    CHK_ai(nidaq.DAQmxReadAnalogF64(taskHandle,NumAvgPts,float64(10.0),
    DAQmx_Val_GroupByChannel,data.ctypes.data,
    NumAvgPts,ctypes.byref(read),None))
    #print "Acquired %d points"%(read.value)
    if taskHandle.value != 0:
    nidaq.DAQmxStopTask(taskHandle)
    nidaq.DAQmxClearTask(taskHandle)
    average = sum(data)/data.size
    Thanks, 
    Erin
    Solved!
    Go to Solution.

    This forum is for LabVIEW questions.

Maybe you are looking for

  • Creating a popup to return more than one value

    Hi I am trying to create a POPUP item on my page. I have created a List of Values with the following queries select NAME d, ID r from EMPLOYEE order by 1 The page displays a text box with a popup icon adjacent to it. On clicking the popup icon the po

  • Custom Module

    Hi All, Is it possible to add custom module to RFC adapter..?  Also using custom module is it possible to convert a payload into attachment in XI..?

  • Slideshows on TV

    I have been making slideshows with transitions and music, for some time now, in iMovie then iDVD and burning to disk, and all has been playing well through my dvd player to my 12 year old TV. Problem: I have just bought a far better and good quality

  • Questionnaire in Business Activities

    Hello Experts i have a question about displaying Questionnaires in the "Questionnaires" assignment block on a Business Activity. can you please tell me if i miss some key information? here under the steps i've followed 1) I've Created a Transaction T

  • UML Plugin for Eclipse3.0

    Hi All, I am looking for UML plugin - freeware for Eclipse 3.0. If anybody knows about any good pluggin let me know. Thanks, Alok