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

Similar Messages

  • 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

  • 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 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 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 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

    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.

  • USB-6009 Analog Waveform Output

    I'm trying to create an analog waveform from a USB-6009 device through one of the analog output channels. However, through the DAQ Assistant, I can only select the 1 Sample (On Demand) setting. When I test the device, I can only push a constant voltage out. If anyone has any advice on how to create an analog voltage waveform using this device, I would like to know.

    >I am only a novice at LabVIEW and data acquisition in general.
    I don't use Labview (I write in C++) so I can't help you with that. I try to answer questions about C/C++ and general hardware questions.
    >What did you mean by software-timed waveform generation?
    That's where the software driving the device sends a sample to the DAQ device, waits for the prescribed time interval, then sends the next sample. So the timing of the waveform is driven by the software, using the computer's clock, instead of by the DAQ hardware. Software-timed is less reliable and has (often) lots more jitter because of competition for CPU resources.
    >Does this mean that I cannot generate a waveform that is more than 150 Hz?
    It's worse than that. It means you can't generate a waveform faster than 150/N Hz, where N is the number of samples (data points) that define the waveform.
    John Weeks
    WaveMetrics, Inc.
    Phone (503) 620-3001
    Fax (503) 620-6754
    www.wavemetrics.com

  • Usb 6009 not recognized in simulink/matlab 2012b

    i have matlab 2012b and when connect DAQ ni usb 6009 matlab recognize it but when i open simulink library and Data Acquisition Toolbox and when add analog input it belongs "winsound Michrophone...'
    so any body can help me to simulink/matlab recognize usb 6009
    thanks

    Hello,
    The Data Acquisition Toolbox that you are using is supported by MathWorks®. It is supported under the version of the software that you are using. Please contact The Mathworks, Inc. for further troubleshooting steps.
    MATLAB® and Simulink® are registered trademarks of The MathWorks, Inc.  All other trademarks are the property of their respective owners.
    Wear
    National Instruments
    Product Support Engineer

  • USB-6009 device not found problem

    Hello all,
    So my VI and USB-6009 have been working fine until recently.  I noticed the VI was not reading or graphing information from the analog input channel correctly.  My firmware is up to date, but I noticed a problem.  In Isdaq, it will recognize that the USB-6009 is connected, then when I run my VI and stop it, i check Isdaq for my device again, and it does not recognize any device.  I have to unplug the daq and replug it for Isdaq to recognize the usb-6009 again.  But each time I run my VI, it does not seem to collect any data, and it makes the device unrecognizable.  Do you know what the problem might be?  Attached is the VI I have been running in case you want to look at it.  Its been working fine until now.  
    btw, I am running Labview on a Mac OS X
    Thanks for the help!
    Solved!
    Go to Solution.
    Attachments:
    AO:AI Data Aquisition.vi ‏39 KB

    Hello Solis,
    I would recommend making changes to the parallel tasks to use the error cluster to force the order of execution, since NI-DAQmx Base is not multi-thread safe (review NI-DAQmx Readme). Please verify if this alleviates the issue.
    Best regards,
    Ali M
    Applications Engineer
    National Instruments
    www.ni.com/support

  • Usb 6009 output changes

    Hi, I'm using a NI USB 6009 device.  I am using the analog output to drive very small currents (less than 1 micro Amp) through a 1 MOhm resistor.  I find that the output often changes significantly when I begin to acquire data, or if the computer is doing something, such as fitting data, or even if I am simply opening other files or programs.  Any advice?
    Thanks!
    Micah

    Hi, thanks for the responses.
    I'm outputing a DC voltage with values typically ranging from 0.1 V to 1 V.  The signal goes through a 1 MOhm resistor in series with a coil for producing very small magnetic fields applied to an atomic magnetometer.   It appears that the output changes by tens of millivolts, as recorded by a yokogawa oscilloscope with input impedance of 1 MOhm.  The coil and scope are both grounded.  I am using only a single input channel on the USB6009, coming from an SRS voltage preamp with output impedance of 50 Ohms
    I can also infer that there are changes in the current when the computer "does something" by looking at the signal in the atomic magnetometer.   
    Perhaps it would help if I shunted the output with some smaller resistor, say 10kOhm?
    I will look at the document you mentioned.
    Thanks again.

  • USB 6009 DAQ to use in Simulink at External mode with DAQ toolbox

    hi
    Currently I am using usb 6009 daq board for data acquisition in using simulink. I have created a model with taking analog input from data acquisition toolbox. Then when i want to run in external mode and try to connet to target, the following error is coming up:
    Could not execute target data map file 'untitled_rtwin_win32\untitled_targ_data_map' or it does not exist. Stop the target, delete the untitled executable, rebuild the code,and try again. Note that execution of external mode requires the build directory to be present...
    How can I solve this problem? For your info, I am using 32-bit matlab, version: 2012a
    For your info, a snapshot of the error is attached,
    Any help would be appreciated Thanks
    Attachments:
    Untitled.jpg ‏130 KB

    Hi Mahmudur,
    what does MathWorks say about this error message?
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

Maybe you are looking for