Motion Control and Motor Drives

cancel
Showing results for 
Search instead for 
Did you mean: 

Breakpoints in 2D motion

Hello,

 

I am trying to send an output every time a vector space position is reached. The motion is usually a multiple number of points (say 6), that repeat for about 120 cycles at 1 Hz. I can get excellent performance with using flex_blend, and it is perfect for application as there needs to be a delay of about 10 ms between each move. At the end of each move a breakpoint needs to be output. 

 

I am using a 7340 controller. As of right now I am not even able to set up a buffer with NIMC_BREAKPOINT_DATA as for some reason it is not supported by this controller. I thought it was. However, even if I set it up, I would need to do this on 2 axes, and I will run a chance of getting multiple triggers (one axis reaching the target position sooner than the other).

 

I tried using flex_start for every point, instead of just the first one. However, for some reason the flex_check_move_complete returns true way too soon, and the loop to load the points gets disrupted. If I put in a pause between the start and the check move complete, then the loop proceeds fine. For some reason the card returns move complete, before the motion is actually stopped. At any rate this would be suboptimal as I would have to implement the delays in the program rather than on the onboard controller.

 

Could you please suggest what to do? I also have a 7350 controller as the successor of this current one. Is there an easier solution with it?

 

Thanks so much!

 

0 Kudos
Message 1 of 3
(2,997 Views)

Hi bosonoga,

  1. Buffered breakpoint generation is only supported by 735x controllers, but not by 734x and 733x controllers.
  2. The breakpoint feature is meant to generate a trigger signal exactly at a certain position. For 1D moves this is possible, but for 2D and 3D moves this would mean, that 2 or 3 axes need to be at exactly defined positions at the same time during the move and that's almost impossible. That's why breakpoint generation is not supported for vector spaces.
  3. By default the Move Complete flag is set, when the trajectory generation is done. This doesn't mean necessarily, that the axes have already reached their destinations at that point, as, depending on your system setup and tuning, there might be some following error.
    In MAX you can configure the Move Complete Criteria (Trajectory Settings). E. g. you could define a deadband around the target position. If the axis is within this deadband, the Move Complete flag is set.

As breakpoints don't work in a vector space, here is an idea. This idea requires a spare axis:

  1. Configure axis 1 and axis 2 as servo axis and axis 3 as an open loop stepper axis. Axis 3 is just a dummy axis with no physical axis attached.
  2. Combine axis 1 and axis 3 in a vector space.
  3. Configure electronic gearing with axis 3 as master ans axis 2 as slave.
  4. Activate breakpoint generation for axis 2
  5. Control the vector space as usual.
  6. Now you should be able to generate breakpoint signals for axis 2, that fires at the end of the vector space moves.

That's just an idea and I'm sorry, that I can't try this within the next days, but you could give it a try.
Alternative options involve onboard programming or the use of an additional counter board.

 

I hope this helps,

 

Jochen Klier

National Instruments

0 Kudos
Message 2 of 3
(2,988 Views)

Thanks a lot for a quick reply and confirming/clearing up everything:)

 

I will try this.  It would be a shame if I had to wait on move complete in the software just because of breakpoints.

 

If anyone else has done anything similar successfully, please let us know.

 

Aleksandra 

0 Kudos
Message 3 of 3
(2,986 Views)