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
-
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 KBHi 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 -
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 youHi 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
GeraldHello 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 -
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 KBjohnsold 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 ǝɥʇ' -
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, AlecHi 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 -
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
thanksHello,
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 KBHello 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 -
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!
MicahHi, 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 KBHi 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
-
After installing Firefox 5, replacing my previous version (4.5), I could see the new features. However, having closed and reopened Firefox, it seems as though it has reverted to the previous version, even though 'Help - About' says I'm running on ver
-
Daily Business Intelligence- DBI
Hi , Iam newbie to DBI. I have gone through the DBI implementation guide and tried to create a new report. Created a report and published it. In the process of creating Initial Request set (in Daily Business Intelligence Administrator), could not fin
-
Edit_defaults mode in JSR-268 portlet on Oracle Portal 11g
Hi all! I developed JSR-268 portlet using the wizard of JDeveloper (11.1.1.5.0). The portlet supports the following modes: - view (view.jsp) - edit (edit.jsp) - edit_defaults (edit_defaults.jsp) After deploy a portlet I can't get into the "edit_defau
-
Subscription Issue - Assembly could not be installed
Hi all I am attempting to replicate a database based on 2008 R2 to an SQL 2012 server. I have successfully made a transactional distribution on the source server with the snapshot created. The issue is when I create a subscription in the destinatio
-
Some email not making it through sometimes, other times no problem
I have a user on my server who complains that sometimes she receives email from a particular person and sometimes not. She receives all other email just fine. I need help trying to diagnose why some of those messages just disappear. In Server Admin,