Skip to main content

Kollmorgen Support Network

To better serve our Kollmorgen users with questions too complex to be addressed in this space, we made the painful decision to close this Community forum.

Please submit your question using the contact us form to reach our application engineering team.

For the immediate future, you can still access and read past posts.

Thank you for understanding and for participating in the community over the years.

Define Velocity and Acceleration for a Motiontask using Custom Profile Tables | 26 Oct 2017 | |

Define Velocity and Acceleration for a Motiontask using Custom Profile Tables

Hello,

I have a question concerning AKD Servo drive. I implemented a python library to control the drive motion using the telnet protocoll and with your help it already works very well.

Now, I have issues with a specific feature:

First I define a non harmonic oscillating motion task, using a profile table, defined with a normalised curve shape, which is cut into two (due to its unsymmetric shape) which is uploaded to the drive. (please see attached photo)

Second I add velocity and acceleration to obtain the motion law and to fit the oscillation frequency. With iterative adaption of the velocitiess and accellerations I achieved the desired curve.

Problem:

Now I want to raise the frequency but keep the curve shape and the ratio between the two parts. Indeed the curves t0/t1 (ratio between first temporal part of the oscillation and second temporal part of it) is not constant.

How can I calculate the values for velocity and acceleration. It is obvious that he doesn't directly follow in terms of maxAngle/velocity = time, neither max acceleration for the given shape corresponds to the behavior.

Thank you in advance
Movement.jpg (2.48 MB)

Comments & Answers

Martin Rupf said ...

Martin Rupf |

Hi Stewart,

Not sure I completely understand your issue, but I give it a try. I just setup a short test command for doing a similar motion like your drawing. This has been done by using profile table and the 1:1 curve. To achieve the slow acceleration and fast deceleration MT.ACC/DEC have been calculated.

MT.ACC = MT.V / time acceleration

MT.DEC = MT.V / time deceleration

image

This example uses the following values:

MT.NUM 8: MT.P = 90.0°, MT.V = 60rpm, MT.ACC = 160rpm/s, MT.DEC = 480rpm/s

MT.NUM 9: MT.P = -90.0°, MT.V = 150rpm, MT.ACC = 1000rpm/s, MT.DEC = 3000rpm/s

So the ratio between acc/dec stays but the oscillation frequency is adjusted. If adjusting the MT.ACC/DEC the ration could be changed. Also if you want the amplitude to stay the same the MT.V could stay the same and MT.P needs to reduced by what MT.ACC/MT.DEC are raised. So all adjustment of the oscillation should be possible.

Regards,

Martin

Raju | Wed, 04/21/2021 - 06:18

Hello Martin,
Can you please help me to write a simple python program to communicate with the AKD Drive using telnet protocol?

Raju | Wed, 03/31/2021 - 05:39

Hello Stewart,
Can you please share that python library? I'm also trying to implement this kind of application. My AKD drive model is AKD-P00606-NBAN-0000 and motor model is AKM31H-ACMN2-00.

Thank you in advance.

Raju | Wed, 04/21/2021 - 06:16

Hello Stewart,
Can you please share one python telnet example like reading the position of axis or enabling the drive?

Stewart | Thu, 04/22/2021 - 06:13

Hi Raju,
sorry for delay. I will find and share my codes. But for first step you can try to activate the Kollmorgen via telnet with :

###################################################################

import telnetlib
import time
###############################################################################
class KollmorgenInverter(object):
def __init__(self, IP="192.168.0.1"):
"192.168.0.1 is the default value for AKD inverter"
self._tn = telnetlib.Telnet(IP)

def initDrv(self, arg=0):
"""function to initialize the drive equipped with a encoder
possible Arguments 0,1,2 (see Kollmorgen manual as reference)"""
self._tn.write(("ws.mode %d \r\n" % arg).encode('ascii'))
self._tn.write(("ws.arm \r\n").encode('ascii'))

def en(self):
"""function that specifies motion task acceleration; Active only in
position operation mode (opmode 2)"""
self._tn.write(("drv.en \r\n").encode('ascii'))

def dis(self):
"""function that specifies motion task acceleration; Active only in
position operation mode (opmode 2)"""
self._tn.write(("drv.dis \r\n").encode('ascii'))

if __name__ == '__main__':
inv = KollmorgenInverter()
inv.en()
time.sleep(5)
inv.dis()

About this Question

Stewart