The Open Loop to Closed Loop Problem

A fairly common support question is “Sometimes when I issue a move command to an axis, it goes the opposite direction first, before heading in the right direction. What is happening with my axis?” This is a symptom of sending a closed loop command to an axis that is currently in open loop. Why does this happen?

The answer is noisy feedback. The conditions where this problem usually occur are:

  • the axis is stopped,
  • the feedback signal is noisy,
  • and the Actual Acceleration value is low.

When a closed-loop command is issued, the Target Generator uses the current Actual Position and Actual Velocity as the starting point. If the feedback is noisy, the Actual Velocity will bounce around, making it appear that the axis is moving, even though it is actually stopped.

If a motion command is sent when the actual velocity happens to be some large value in the opposite direction of the commanded motion, then the RMC will think the axis is currently moving in that opposite direction. It generates a target profile starting at that opposite velocity and ramps the velocity to the commanded direction, at the rate specified by the commanded acceleration. The axis will move in that opposite direction until the velocity gets turned around to the commanded direction. This makes the axis ‘back up’ before moving in the right direction.

It can be confusing that it only happens sometimes. The problem will only show up if the actual velocity, at the instant the command is issued, happens to be some large value in the opposite direction of the commanded motion. If the actual velocity happens to be in the same direction as the commanded velocity, the problem will not happen. In addition, if the commanded acceleration is low, it will amplify the problem, since it takes longer to turn the velocity around.

A similar situation can also happen when using the Quick Move Absolute (15) command. In this case, the transition from closed loop to open loop happens when the axis is moving quickly.

Solution

The way to fix the problem is to move the axis to closed-loop control first, then issue a closed-loop motion command. When a move is commanded, the axis will start with the Target Velocity, which, if the axis is stopped, will be exactly zero and have no noise. The move will then always happen as expected. One way to do this is:

  • Send a Hold Current Position (5) command to the axis. This puts the axis into closed-loop control.
  • Then send the closed-loop motion command to the axis.

image

If this happens while sending a Quick Move Absolute (15) command, the solution is different. You will need to filter the actual velocity to reduce the noise. This way the velocity will be less noisy and the transition into closed-loop control will happen appropriately.

NOTE!

Only issue the Hold Current Position command to a stopped axis! Sending this command to an axis that is moving can result in an abrupt halt that might damage the axis and any tooling attached to it. If the axis is moving, you can send a Stop Closed Loop (6) command to control the deceleration rate of the axis and bring it to a controlled stop.

1 Like