I have an X4 quadrature encoder that measures position, and I'd like to take a sample in another task every time the quadrature signal counts. This would give me a [data] vs position plot instead of a [data] vs time plot. I thought you could export the "quadrature conversion event" (i.e., the event that causes the quadrature channel to count) but I can't find the documentation on that. I don't think it's the Counter n Internal Output, as the documentation says that output event fires when the counter rolls over... but one example seemed to use that anyway. Perhaps the Internal Output triggers every time a quadrature signal counts, and it's hidden away in the documentation somewhere I can't find.
I swear I've read this before but can't find it. My Google-fu has failed me. I've been searching and obviously there are a ton of posts and examples that show how to take data off either A or B, but not the decoded quadrature signal. Is it possible?
[The "what I'm actually trying to do": I need to measure the speed of a fairly slowly rotating shaft. If I sample the encoder position at x Hz, I get position vs. time but it's very noisy, as there are frequently very few (if any) encoder pulses between measurements. Slowing down my rate reduces my noise, but I don't get data as often. This method is basically "measure distance over a known time".
I'd prefer to just sample the internal clock every time I get a new quadrature position. That way I have a known distance traveled, and can use "measure time over known distance" which will get me the instantaneous speed every time it crosses either A or B. This doesn't work for bidirectional motion, but it works great for the unidirectional motion of my system. This method worked great in the past for measuring the time between individual photons hitting a crazy sensitive detector, but I can't figure out how to export the quadrature signal.]
Solved! Go to Solution.
Here's what I'd do, assuming a device that supports both quadrature and digital change detection. (For example, X-series and most M-series, probably most cDAQ chassis from the past decade or so).
If you're using PCI/PCIe or PXI/PXIe, you'll likely need to parallel wire to both PFI terminals for the encoder task and also to port 0 digital terminals which don't carry a PFI designation on the boards I've been familiar with. A cDAQ system may not need such parallel wiring.
You'd set up a change detection task for DI and then export the "change detection event" that the counter task would use as its sample clock. I don't remember its polarity, but it'll be best to sample on the trailing edge to be sure the quad decode is done before the sample is latched.
That's the overview, post back if something doesn't go smoothly.
[Edit] P.S. There isn't otherwise direct access to any "quadrature state change" signal as far as I know. This method with DI change detection acting as a CTR sample clock is the only way I know of on standard-issue NI data acq devices.
Ah, thanks for the info. I could've sworn there was a way to export the quadrature clock. I threw up an idea in the exchange, though I doubt this would be a very popular feature:
I'll look into the chip, and will maybe just live with a lower sample rate. Thanks for the help.