02-07-2012 10:06 AM
Hello everyone: I am having trouble getting my head around this problem I am having, so I'm hoping someone here has run into something like this and has a tip for me.
I have a PXI-7354 that I am using to control a rotary stage which has an 8000 lpr encoder, and a 10:1 reduction gear, so I have 80,000 lpr effectively.
I am using the 7354 to generate a Breakpoint Pulse every 100 encoder counts, so I should be getting 800 pulses per revolution. (I use the breakpoint pulses to trigger a second device and aPXIe-5122 data acquisition card to synchronize the production and acquisition of a data record.)
However, and here's the problem:
When I rotate 1 revolution, I see 799 pulses
When I rotate 2 revolutions, I see 1598 pulses
When I rotate 3 revolutions, I see 2397 pulses
I am losing 1 pulse per revolution. I haven't figured this out yet, as I am using periodic breakpoints with a whole number of breakpoints as a period.
THe problem is that I "count" the number of breakpoint pulses that I get in order to derive the angular position where the breakpoint occurs. For instance, if I start at 0 degrees, and I have 0.45 degree spacing between breakpoints, after 10 pulses, I should be at 4.05 degrees. After 100 pulses, I should be at 44.55 degrees.
As I am missing one count per rev, however, my derived angular position is incorrect.
I need a way to determine the actual position of each breakpoint. The most obvious way to do this is to use the HS capture functionality of the board, and I could (further) share the breakpoint pulse with the HS Capture input on the motion card to do HS capture, but is there any way to do this internally on the 7354?
Thanks for looking at this, any help is appreciated.
Solved! Go to Solution.
02-08-2012 04:13 AM
Hi Wes Ramm,
The NI 73xx controller allows you to use up to eight RTSI trigger lines as sources for trigger inputs, or as destinations for breakpoint (position compare) outputs and encoder signals. The RTSI trigger lines also can serve as a generic digital I/O port. The RTSI star trigger line, which is available only on the PXI-7350, can be used only for a trigger input. Breakpoint (position compare) outputs are output-only signals that generate an active high pulse of 200 ns duration across RTSI.Encoder and Index signals are output-only signals across RTSI that are the digitally-filtered versions of the raw signals coming into the controller. If you are using the RTSI bus for motion I/O or generic digital I/O, all signals are passed through unaltered.
This Tutoral shows how to use Motion synchronization using RTSI
If you have any further questions please feel free to post back.
02-08-2012 04:24 AM
Thanks for your response, Matt.
I have already got the BP signal going to my external device via a UMI-7774, so this is not a problem. The tricky part of this question is whether there is an easy way to "share" the BP information with the HS Capture INPUT line so that I can grab a HS position when the BPs are generated, so that I'd have a buffer of ACTUAL position, rather than relying on the BPs being in the correct location (and DERIVING the instantaneous position of the BPs by counting the BPs). It seems that it is NOT possible to share the signal by routing the BP1 Out simultaneously to the external UMI 7774 pin AND to either the HS Capture INPUT OR to my data acquisition card. I know that I can route my encoder signal and other things to my DAQ card, but this won't help me in this case. Furthermore, I can only have 1 BP per axis, so it isn't possible to replicate that functionality on a second BP generator.
I am working on setting up a third device to count the pulses generated by the 7354 when I exercise the stage through motion, so I'll have more data later today.
I'll post here any findings.
02-20-2012 04:09 AM - edited 02-20-2012 04:10 AM
The problem is solved, but the solution was not crazy straight-forward, so I'll write up my lessons leared here:
I was searching for a way of doing a HS Capture at the same time as doing the BP generation. This is redundant since the BPs really only occur wherever you tell them to occur.
Between the tuning of the servo drive and the BP parameters in MAX, we were generating fewer than needed BP pulses at the end of moves. Once the drive was set so that the overshoot was less than the re-adjusted BP "window", the BPs started behaving perfectly.
The drive was adjusted so that it is just this side of "overdamped". I then characterized the amount of overshoot that I normally see, and in the "Compare and Cature" settings in MAX for my 7350, I set the Position Breakpoints "Window" to a value that was comfortably larger than this overshoot.
So, lesson learned: Make sure that the servo system is well tuned (not just at the output stage), and that the BP configuration is appropriate to your system.
By the way, Credit goes to Daniel at NI AE for helping me through this problem. THANKS DANIEL!