Sidecar (Customer) asked a question.

Linear Encoder, Closed Loop Stepper, Maintaining position-I'm confused

I am working on a system for a 3 axis (XYZ) motion control package for our scientific probe translators. Accuracy is constantly being pushed by our customers, we need to be better than 10 microns, but would like to approach 1 micron (.00004"). I am using a BX-DM1-18ED2-D plc, DM542E drives, NEMA 17 sure-step motors and a Renishaw LM10 series encoder with .244 micron resolution. I have been able to get the encoders working, and have the closed-loop encoder control enabled to the motor. System function-I need to clean up a bunch of things (was running without encoders in open-loop mode) but it works.

 

My main question-I am moving to position with the AXPOSTRAP command. The axis gets to position and stops-as expected. My issue is that it doesn't maintain control at that position. I would like the system to compensate for any drift or thermal expansion in the system. My understanding is that the motor should function and "dither" back and forth to keep the position (encoder input) within the defined deadband. It doesn't appear to do so-it gets to position and stops, with no control to hold position. I expect that is how it is intended to work. But I want that closed loop control. For example, if I turn the stepper motor shaft until I "jump" a step, I want the system to return to the defined position via the encoder input. So-am I using the wrong command? Or do I need to write some code to continuously cycle the AXPOSTRAP command repeatedly? I suspect this has been covered here before, but I haven't found the discussion.

 

Also, how am I supposed to use the "pulse output/encoder scale factor" value in a linear encoder application? I would think it would be my encoder pulses per inch of travel/motor pulses per inch of travel-but it doesn't get me what I expect.

 

Last but not least-should I be using the AXPOSSCRV command rather than TRAP?


  • Tinker (Customer)

    I'd suspect you'd be better off with a dedicated motion controller, e.g. something like a Galil or similar

     

    For the BRX, "do I need to write some code to continuously cycle the AXPOSTRAP command repeatedly?" That seems likely to me, one might monitor .FollowingError and repeat the move if it increases.

     

    Since I don't know how the BRX closed loop works, I would be tempted to run the motor open loop then monitor the position and command corrections as needed in my own code. While one would expect better performance from the built-in functions, that would only be if one can get them to work.

     

    "Also, how am I supposed to use the "pulse output/encoder scale factor" value in a linear encoder application? I would think it would be my encoder pulses per inch of travel/motor pulses per inch of travel-but it doesn't get me what I expect."

    That is what I'd expect too, except that if i didn't get the results I expected I'd try swapping divisor and dividend.

     

    The choice between s curve and trapezoid would likely depend some on the mechanical details of the system and required performance.. Trap seems to be easier to get started with.

     

    I wonder how one gets 1 micron resolution with a stepper? micro stepping is better for smooth motion than for specific positions. Also at one micron mechanical backlash is going to be a pain, sure you are using closed loop, but "tuning" might be interesting.

    Expand Post
  • Adisharr (Customer)

    I'm with Tinker, Microstepping is non-linear between steps and is more for anti-vibration than anything else. It's likely the BRX doesn't maintain an active closed loop but just uses the encoder feedback to get you to position. After that it's off.

     

    A small servo with secondary feedback capability would get you better results and could maintain position. I don't know much about the AD drives capability but have used Kollmorgen AKD drives with high resolution linear encoders on ballscrews. You can drive them with pulse/dir outputs as well and also get secondary emulated encoder output feedback.

    Expand Post
  • IdahoRenegade (Customer)

    I though I'd provide some feedback-should have done so some time ago. I found a way to get both the accuracy and closed-loop control I was looking for. I essentially am constantly running a move command, and driving it whenever my position error is greater than a defined amount (4 encounter counts is what I'm running with). I'm finding it easy to maintain 1 micron accuracy (as defined by the encoder) and the system compensates if the load position moves, either due to a physical movement or thermal expansion. After a jog command the program reads the current motor position and executes a move command to that position, when ever it moves off of it.

    Expand Post