如何使C3000实现四轴插补
C3000控制卡由于硬件上的限制,最多只能实现三轴插补动作.但有的客户需要四轴插补动作,常见的动作为双平台相互动作.即XY为一平台, ZU为一平台,并且此平台具有某种互动性,例如: 泡沫切割,定点跟踪.
当需要四轴插补函数时,可以用软件算法来完成,再调用多轴同时启动的函数,具体实现如下:
int MoveINP4( long x, long y, long z, long u,
long start, long speed, long accel, long decel )
{
long len = sqrt( x*x + y*y + z*z + u*u );
if( len < 1 )
return 0;
static struct MultiMoveData axis[4];
static double k=0;
axis[I].Pos = x; axis[1].Pos = y; axis[2].Pos=z;axis[3].Pos=u;
for( int I(0); I<4; I++)
{
k = double(axis[I].Pos)/double(len);//计算一个比例
axis[I].Axis = I;
axis[I].TS = 1;
//以下根据比例计算速度曲线
axis[I].StrVel = start*k;
axis[I].MaxVel= speed*k;
axis[I].Acc = accel*k;
axis[I].Dec = decel*k;
axis[I].Jerk = 1;
}
d3000_start_multi_move(4, axis );//同时启动多轴运动
}
如何使C3000实现四轴插补
C3000控制卡由于硬件上的限制,最多只能实现三轴插补动作.但有的客户需要四轴插补动作,常见的动作为双平台相互动作.即XY为一平台, ZU为一平台,并且此平台具有某种互动性,例如: 泡沫切割,定点跟踪.
当需要四轴插补函数时,可以用软件算法来完成,再调用多轴同时启动的函数,具体实现如下:
int MoveINP4( long x, long y, long z, long u,
long start, long speed, long accel, long decel )
{
long len = sqrt( x*x + y*y + z*z + u*u );
if( len < 1 )
return 0;
static struct MultiMoveData axis[4];
static double k=0;
axis[I].Pos = x; axis[1].Pos = y; axis[2].Pos=z;axis[3].Pos=u;
for( int I(0); I<4; I++)
{
k = double(axis[I].Pos)/double(len);//计算一个比例
axis[I].Axis = I;
axis[I].TS = 1;
//以下根据比例计算速度曲线
axis[I].StrVel = start*k;
axis[I].MaxVel= speed*k;
axis[I].Acc = accel*k;
axis[I].Dec = decel*k;
axis[I].Jerk = 1;
}
d3000_start_multi_move(4, axis );//同时启动多轴运动
}
举报