I'm struggling to understand just how fast I should be able to run my PCI-MIO-16E-1 (6070E). The card is rated for 1.25MS/s. I'm clear that running multiple channels divides this. I'm perfectly fine with this. Specifically, I need 2 channels running at 625KHz, each, so this card should be perfect. However, in practice (using MAX or SignalExpress), I can't get the card to run faster than about half this speed. In other words, I can take 2 channels at 315KHz. If I go slightly over this, I get "strange" behavior, including a machine so overloaded and sluggish that I have a hard time killing the process. If I go straight to maximum speed, I just get an error about the ADC not completing in time.
I've been over this here: http://forums.ni.com/ni/board/message?board.id=250&thread.id=52447, but I had marked that thread as solved. Indeed, that advice got me running full speed on a single channel, and it's a thing of beauty. However, I've hit a different limit, so I'm trying a new thread.
This seems like a really simple question: What should be theoretical maximum speed be on this card, once I start trying to take more than one channel? Am I limited to less than a total of 1.25MS/s because of the switching action of the ADC as it polls channels? Can I only get 1.25MS/s on a single channel? Should I be able to do 2 channels at 625KS/s each, or do I lose time because the card doesn't do simultaneous sampling? If I can't wring out the full throughput I think I should get, I need to get a different card and move on. I just don't know if I'm doing something wrong, or hitting a hardware limitation that I don't know about.
Thanks for reading!
Solved! Go to Solution.
I'm continuing to scour docs and Google for an answer on this, but it seems to me to come down to how fast the card can switch channels and take a reading. At full speed -- 1.25MS/s -- it needs to acquire a sample every .8us. So the question is: what's the maximum settling time of the card? It would seem to me that I need to invert that value to get my maximum sampling speed for multiple channels.
If I read the _family_ specification document for the 607x series, I see a chart that has accuracy across the columns, and full scale voltage across the rows. The best I can hope for is .9us. I'm trying to run -5v to +5v, so the best case scenario for me would seem to be 1.5us, or 666KHz. THIS MAKES SENSE, as I can run just a hair over half-speed
What I'm stuck on now is that I know I can run FULL SPEED on 1 channel, which means that, despite running at 10v full scale, I'm able to achieve the best settling time, so why can't I run 2 channels at full speed?
Also, how can I programmatically control what accuracy level I'm on? I don't mind giving up accuracy for speed here. Maybe that's what I'm missing. Maybe the card is being slowed by trying to run at a higher accuracy.
I'm sorry it's taken someone so long to reply to your post. The 1.25MS/s rate specified for E Series boards is an aggregate rate. Thus, as you add channels, the maximum possible rate decreases. If the maximum aggregate rate is 1.25MS\s, then the fastest you can sample on two channels will be sample is 625 kS/s on each channel. On three channels, the fastest you can sample is 416.6 kS/s.
The reason for this reduced rate is that non-simultaneous boards such as this E Series board use a multiplexer to connect each of the channels to one ADC. Due to it's settling time, the fastest this ADC can sample is 1.25MS/s. Since it needs to take one measurement per channel, your overall sampling rate is reduced by a factor equal to the number of channels you are using. At the risk of anthropomorphizing an electronic component, the ADC doesn't see a difference between sampling one channel at 1.25 MS/s and two channels at 625 kS/s. The ADC just sees a sample that needs to be digitized every 0.8 uS. The multiplexer handles which channel is connected to the ADC for each sample and the driver handles associating the samples with the correct channel. The ADC just samples as quickly as it is instructed to.
You may be able to push the card a bit over 625 kS/s on two channels (which it sounds like you've seen) but you start to risk accuracy as the ADC no longer has enough time to settle. Past a certain point, though, the ADC can't settle enough to resolve a usable sample and the driver will return an error. Additionally, the multiplexer adds a small amount of settling time as well. If you are reading from a high-impedence source, this also increases the settling time.
The bottom line is that, with this card, if you want to maintain the listed accuracy in the specs, the best you'll be able to do is 625 kS/s on two channels.
Well, I tried to be as precise as possible, but I'm still new to this, and I guess I didn't describe what I'm seeing correctly. I understand that I should be able to get 1 channel at 1.25MHz, or 2 channels at 625KHz, or 4 channels at 315KHz, and so on. However, although I can run 1 channel at 1.25MHz just fine, I'm lucky if I'm getting 315KHz out of just 2 channels. (When I said I was getting "half" speed, that's what I meant.) So my question hinged around whether or not I was losing a sample-conversion "window" of time to switch the multiplexor between channels. In any case, your post answered the question with a negative. I should, indeed, be able to get a full 625KHz per 2 channels with this card.
Now, that being said, no matter what I do to try to set this up in either MAX or SignalExpress, I can't get 2 channels at 625KHz each without some sort of ADC or buffer error. I would have thought this would be really straightforward, but I just can't seem to do it. Are there any sort of tricks to try? I'm considering downgrading to 8.x, just to be thorough. I'm sort of at the end of the buttons I can press. Is there any use in posting screen shots of my task so that someone could tell me what I'm doing wrong?
I went and grabbed a PCI-MIO-16E-1 to test. Are you getting an error or a warning when you read two channels at 625kS/s? Because 625kS/s is faster than the most accurate recommended settling time, we return Warning 200011, which basically is a warning that you are reading faster than the recommended settling time. This is just a warning though, and shouldn't stop acquisition.
I was able to get it to return Error -200279 (Attempted to read samples that are no longer available) by opening PowerPoint while taking data. Because the PCI-MIO-16-1 only has a 512 sample buffer on board, it is critical that the application be able to keep up with a very fast reading rate. Basically, if we can't pull 512 samples at least ever 0.8 ms, then we will start to overwrite sample that are in the buffer. By opening PowerPoint, I cause my test machine to transfer CPU and memory resources away from my data acquisition application and to the opening of power point. As a result, my program slowed down and stopped pulling data from the buffer as quickly.
To maintain a 625 kS/s rate on two channels, you should make sure nothing is running in the background (virus scan, weather apps, email, browser, etc.), and your application should be written in such a way that the data acquisition portion is partitioned away from any processing or logging to disk. This can be made easier with a higher-end CPU.
Yeah, I was able to get the buffer overrun on a P4 2.8 GHz with 1.5GB of RAM test machine. Using a simulated device on my main machine (Core 2, 1.86 GHz, 2.0 GB RAM) I was able to run constantly with several programs open. CPU will be the biggest help with this.
Wow. Thank you SO MUCH for actually trying this out on your own equipment. Do you have an Amazon wish list or a PayPal tip jar or something?
It begs a question: If I have enough computer to run one channel full out, why does running 2 channels at half speed make a difference?
I don't have a good answer for you on this just yet. I'm going to play around with this for a while and figure out where the extra overhead is coming from.
I put the card in my main computer (3GHz Core2 Duo, 8GB RAM (I know, XP only sees 4)) and loaded up DAQmx 9. I ran into the same problem. I could run 1 channel full blast, but had to slow things down for multiple channels. However, I was able to eek out some more performance due to using this computer. Instead of only getting a TOTAL bandwidth of about 650KHz (i.e., just over half) on the PIII I had been using, I was able to push this computer up to 825KHz.
I know this is a really old card, and I got to thinking that maybe things weren't entirely backwards compatible in newer versions of DAQmx. So I downgraded to 7.5 in order to get something closer to when the card was made. For better or worse, depending on how you look at it, it made no difference.
The big question in my mind was whether this slowdown was progressive as I added channels. Turns out that this is true. When I went to 4 channels, I had to slow my DAQmxCfgSampClkTiming call down to 415KHz to get it to run. So the more channels I run, the worse the situation gets.