## General Mechanical

#### Relative Position Control in Transient Structural

• nlj007
Subscriber

I am attempting to study the transient response of a simple system that will eventually represent a cnc machine. For simplicity, I have created a 1D model with motion occurring only in the X-axis.

My goal is to command a relative separation between two components and study the response of the full system. For example, the Z-stage of a CNC machine could be driven by a linear motor with an encoder that is attached to a Y-stage. The motor drives the Z-stage to a specified position and stops. In reality, the end of the Z-stage(where the tool is located) will overshoot this end position by some amount due to flexing in the Z-stage, and there will be oscillations in the overall response because the rest of the system flexes from the dynamic forces that occur from the masses moving.

From what I have seen, machine studies like this are done by applying a time-varying force to the end of the z-stage. However, the movement is actually happening where the motor is located, and defining the motion by position allows you to directly compare the commanded motion and true motion of the system (i.e. I told the motor to go to a position of 1mm and the tool actually overshoot that set point by 0.1mm and took 0.5s to settle to an acceptable value)

I did not see a way to easily control relative position, so I wrote an APDL command to pull the displacement of the Y-stage and set the displacement of the Z-stage to be the Y-stage displacement + the desired displacement:

d,Zstage,ux,dist(stepNum+1)+UX(Ystage)

where dist(stepNum+1) is an index into an array of displacement values in the command. With this approach, the Z-stage is always displaced the desired value no matter how the Y-stage moves. If the Y-stage moves 1mm +X, and the displacement is 0.5mm, the Z-stage will displace 1.5mm so that the true separation between the two is 0.5mm.

This approach has some problems. First, there is no dynamic force transferred through this APDL command since the command is making the Z-stage go to a specific displacement. In reality, pushing the Z-stage in the +X would in return push the Y-stage in the -X. To overcome this, I inserted a general joint with a tabular stiffness in the X-direction called DynamicSpring in the image above. I have an excel sheet that calculates the dynamic force caused by a mass moving along a specified motion profile. I take these displacement and force values and create a spring that applies the force associated with the motion occurring. This spring is supposed to replicate the force applied back through the Y-stage when the motor (APDL command) forces the Z-stage in the +X direction.

Here is a gif of the current system with the DynamicForce shown and a graph of the commanded position along with the encoder reading (difference in Z and Y displacements) and end mass displacement.

I was somewhat pleased with this approach as the results show the behavior I was expecting, but there is still a major problem. Forces from the Z-stage are not transferred back through the rest of the system after the spring reaches its final position. For example, if a force of 100N was applied to the far right block, it would displace relative to the block immediately to its left, but the distance between the Z-stage and Y-stage would not change since it is being forced to a specific separation distance as defined by the APDL command.

Given what I have done so far, how could I make sure that the system stays coupled together and responds realistically? I am hoping that there is a simpler and more effective approach to command a relative position between components in ANSYS Mechanical that allows the components to interact with each other.

Please let me know if you have any questions or suggestions on what to do next. I have linked my example file as well. Setting the components to rigid makes the model solve much faster, but then the scaled displacement views don't show the components.