kckku

1S Servo for Pressing Operation

9 posts in this topic

I want to use a 1S servo drive and motor for a pressing operation. The intention is for the motor to drive downwards until it sees a preset torque value (1 kN). Is this possible with the 1S servo drive and motor? 

I know the servo drive has a MC_MoveFeed instruction which we have been using with an external load cell input. The load cell sends a hardwired input to the drive to stop when it sees enough loading on the part. The problem with this has always been overshoot so we have to drive downwards very slowly. The question now is if we can forgo the external load cell and do everything internally with the drive and motor and get a better response for stopping. 

I want to find out if it’s possible for me to do it this way:

  1.  Use a MC_MoveAbsolute instruction to move the axis to a start position

  2. Setup the buffer mode for the move absolute instruction to blending next. I think this will continue the axis movement without stopping the axis.

  3. The next instruction will be MC_TorqueControl

  4. The axis continues until it gets to the preset torque value

  5. Use the MC_Stop instruction to stop the execution of the MC_TorqueControl instruction

  6. Use a MC_MoveAbsolute instruction to retract the axis to the home position

 

Will this setup work?

 

Edited by kckku

Share this post


Link to post
Share on other sites

Are you trying to control torque or limit it?  

Buffer mode is set on the second instruction, the one interrupting the active axis.  MC_TorqueControl only supports abort and buffer, not blending.  It is for applications controlling torque directly, like turning a screw or a bottle cap.  I suppose it can be used that way with the InTorque output, but it's purpose it to maintain a specific torque at a commanded speed, not to indicate a torque level.

You could also run a velocity movement and simply do a compare against the current torque value (Axis.Act.Trq) for it to exceed your limit and trigger an MC_Stop then.

Share this post


Link to post
Share on other sites

I would just use TorqueControl immediately after your absolute move to start finishes. You're not trying to reach a position, you're trying to apply a force. The press(?) will travel at a limited speed until it encounters the object. If it passes a distance threshold you can stop it.

I'm not familiar with the process but this is my first thought.

Share this post


Link to post
Share on other sites
47 minutes ago, Crossbow said:

Are you trying to control torque or limit it?  

Buffer mode is set on the second instruction, the one interrupting the active axis.  MC_TorqueControl only supports abort and buffer, not blending.  It is for applications controlling torque directly, like turning a screw or a bottle cap.  I suppose it can be used that way with the InTorque output, but it's purpose it to maintain a specific torque at a commanded speed, not to indicate a torque level.

You could also run a velocity movement and simply do a compare against the current torque value (Axis.Act.Trq) for it to exceed your limit and trigger an MC_Stop then.

We are trying to control the torque. Once we see the torque exceed what is needed to seat the part then we retract the axis.

The problem we had before was applying too much strain on the part by over-pressing. The axis needed some time before it comes to a stop. We were able to minimize this by moving the axis really slowly during the last 3mm or so but of course everyone wants faster cycle times now. That's why we have to figure out how to do this faster.

Share this post


Link to post
Share on other sites
43 minutes ago, photovoltaic said:

I would just use TorqueControl immediately after your absolute move to start finishes. You're not trying to reach a position, you're trying to apply a force. The press(?) will travel at a limited speed until it encounters the object. If it passes a distance threshold you can stop it.

I'm not familiar with the process but this is my first thought.

The problem with the part is once it seats, the force spikes up almost vertically. This is why it's bad for strain and we want to stop the axis as fast as possible.

Share this post


Link to post
Share on other sites
22 minutes ago, kckku said:

The problem with the part is once it seats, the force spikes up almost vertically. This is why it's bad for strain and we want to stop the axis as fast as possible.

With torque control , in theory, you would stop the axis immediately at a given torque. This would happen much faster than you could detect high torque with logic.

Share this post


Link to post
Share on other sites

Torque control function block is to MAINTAIN a specific torque, not look for a limit. It does not have a high torque alarm function.

I think monitoring the torque variable and issuing a stop with very rapid decel is the best bet.

Share this post


Link to post
Share on other sites
18 hours ago, Crossbow said:

Torque control function block is to MAINTAIN a specific torque, not look for a limit. It does not have a high torque alarm function.

I think monitoring the torque variable and issuing a stop with very rapid decel is the best bet.

Our mechanical guys told me they will want to keep the external load cell after all. This is part of a Kistler force vs. distance monitoring system that can record a curve with evaluation objects to give a pass/fail to the PLC. We can also use this to record the maximum force and the distance that this occurred at for traceability purposes.

We are using this operation to seat a PCB into a plastic housing so torque/force overshoot and over straining the part is big issue. The requirements are then to have a system that can stop as quickly is possible.

Since we will still have the external load cell with the Kistler system, we can use this to correlate the load to the torque of the servo motor. I guess we can use this then to set the torque value for the MC_TorqueControl instruction. I guess this would be ok? And the force vs. motor torque curve is linear?

I have been reading the manual and I think maybe this is one possible way to do the press operation.

Step 1: Move Absolute (MC_MoveAbsolute)

  • Use this to move the axis down from the home/start position at a fast speed to the pressing start position
  • Buffer mode is set to ‘Blending Next’

Step 2: Move Velocity (MC_MoveVelocity)

  • Use this as the intermediate step to slow down the axis to a slower speed for the pressing operation
  • Buffer mode is set to ‘Blending Next’
  • Switch to next instruction once ‘InVelocity’ is on

Step 3: Torque Control (MC_TorqueControl)

  • The ‘Torque’ input comes from the product setting depending on product type.

Step 4: MC_Stop

  • Stop the axis motion once the ‘InTorque’ variable turns on

Step 5: Move Absolute

  • Retract the axis to the safe position

I attached a graph that I found online for what I am trying to do.

2021-10-21_16-30-57.bmp

Edited by kckku
Added screenshot

Share this post


Link to post
Share on other sites

This sounds like a good approach kckku.

 

The block's primary purpose is to maintain torque but the torque value you assign will never be exceeded which means a high torque alarm could never happen. You can stall the motor with this block in operation and it is fine with it.

1 person likes this

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now