如何控制两台速度不同的伺服电机同步起停
最近在弄一个多轴伺服系统。目前只控两轴。PLC控制伺服电机。
需求是在一个运动周期内,两轴的运动位移不同,但是要求同时启动、同时到达(因为要控制轨迹)。
目前的做法,是简单的通过数学计算,给两个轴赋不同的速度值,以求同步到达。(简单来说,就是给定1轴速度V1,计算t=S1/V1,由于要求时间相同,则V2=S2/t)。
但是实际上运行时,两轴惯量不同,电机有加减速,导致两轴还是有肉眼可见的不同步现象,停止时间差估计有200ms,这个达不到要求。
请问有什么办法可以解决这个问题,两轴并不是完全同步(完全同步是指时间、速度、位移全部一致,本项目只要求时间一致),那么如何做到同步起停呢。
谢谢各位大神。
我想知道,你的是不是两轴直线插补?
运动中间有加减速,就要计算其在对应路径上的等效平均速度,用等效平均速度作为二者的转换关键。
你要建立数学模型的!
建立数学模型,估计你要用PID,比如差速运动!
是的是的,一语中的!本质就是实现两轴直线插补,我也是刚刚意识到的。
请问有没有成本比较低的,改动比较小的两轴直线插补硬件。
我现在用的是西门子PLC,S7-1200,貌似没有直线插补功能。
上位机是Labview,用OPC通讯。
软件插补,速度应该跟不上的呀。
不太懂你的意思哎。加减速过程怎么考虑啊,现在已经把加速时间设的非常低了。
S7-1200我没用过,不知道,但它是小型PLC,估计是没有,你可以用ST写个软件插补,完全可以做到的,只要你把加减整调好就行了,正确的软件插补不是你想的那么简单,只有运行速度,它是包含了加减整和运行速度的计算的,我之前用过基恩士的做过,脉冲的同步能做到一两个脉冲之内,但实际运动是带负载的,所以实际的运动不会完美同步,只有把加减速度调整好,就可以降低因负载产生的不同步。软件插补应该能满足你的需要,我之前做的速度也是很快的
软件插补我自己没写过,我的同学写过,出来的效果很差,用的是最普通的插补算法,两个轴一小段一小段地走,机构振动感很强,而且速度上不去。不知道您所说的软件插补,是不是这种一小段一小段逼近的思想呢?是不是有什么更高级的处理方案,而不是像这种等一个轴停止再进行下一步。有没有相关的关键词呢?
实验室里有一张PC用的运动控制卡,带有直线插补功能,我刚尝试了一下,插补速度还是很快的,而且宏观上看不出任何分段和振动感,不知道这种硬件插补,有什么关键技术和思想?
资料查得少,问题没什么水平,谢谢您的时间,非常感谢!
直线插补又怎么会一段段的走呢?
哦哦哦,同学尝试的是圆弧插补,我理解的直线插补的思想与圆弧插补差不多,都是X、Y每次独立运行一段。您说的直线插补,是对速度进行计算,然后设定脉冲速度和脉冲数量,来控制电机运行,是这样的么?没有在运动过程中进行实时计算么。
带有直线插补功能的运动控制卡有很多选择,雷赛、众为兴等等
你的两个物体运动的速度很快?你还可以调整你的加速的时间起点啊!
好的,谢谢。不过下位机目前用的是PLC,不方便换过来。
加速时间已经设置得很小了。
迟点我把我以前做的软件插补程序给你
我只是路过打酱油的
速度控制难,装个编码器行否
我说的不是加速时间,是加速开始的时刻向后移!
好的好的,谢谢!
想过,但是也不知道怎么弄哎。
这种被动补偿的方案,不够稳定吧,我觉得。
你理解一下,是用基恩士写的,其实你能看懂参数计算那部分就行了
主轴编号 = V0
从轴编号 = V1
点编号 = V2
主轴目标坐标 = V3.L
从轴目标坐标 = V4.L
合成加速度 = V5
合成减速度 = V6
合成速度 = TODF(V7.D)
动作模式 = V8' 0:INC 1:ABS
合成起动速度 = V9
'-------------------------------------------------------动作模式设定------------------------------------------------------
@DM10 = (V0 - 1) * 40
@DM11 = (V1 - 1) * 40
@DM12 = (V0 - 1) * 200 + (V2 - 1) * 10
@DM13 = (V1 - 1) * 200 + (V2 - 1) * 10
SELECT CASE V8
CASE 0
BRES(CM8006:@DM12,0)'将主轴动作模式设定为定位INC
BRES(CM8006:@DM12,1)
BRES(CM8006:@DM13,0)'将插补轴动作模式设定为定位INC
BRES(CM8006:@DM13,1)
主轴移动量 = ABS(主轴目标坐标)'主轴的移动量
从轴移动量 = ABS(从轴目标坐标)'插补轴的移动量
CASE 1
BSET(CM8006:@DM12,0)'将主轴动作模式设定为定位ABS
BRES(CM8006:@DM12,1)
BSET(CM8006:@DM13,0)'将插补轴动作模式设定为定位ABS
BRES(CM8006:@DM13,1)
主轴移动量 = ABS(主轴目标坐标 - CM8830.L:@DM10)'主轴的移动量
从轴移动量 = ABS(从轴目标坐标 - CM8830.L:@DM11)'插补轴的移动量
END SELECT
'---------------------------------------------------------参数计算----------------------------------------------------------
#PRAGMA DOUBLE ON
合成距离 = ROOT(TODF(主轴移动量)^2 + TODF(从轴移动量)^2)
'--------------------------------------------------------加减速度是否为0----------------------------------------------------
IF 合成速度 = 合成起动速度 THEN
加速距离 = 0
减速距离 = 0
ELSE
SELECT CASE 合成加速度
CASE 0
加速距离 = 0
CASE ELSE
加速时间 = ABS((合成速度 - 合成起动速度) / (合成加速度 * 1000))
加速距离 = 0.5 * (合成起动速度 + 合成速度) * 加速时间
END SELECT
SELECT CASE 合成减速度
CASE 0
减速距离 = 0
CASE ELSE
减速时间 = ABS((合成速度-合成起动速度)/(合成减速度*1000))
减速距离 = 0.5*(合成起动速度+合成速度)*减速时间
END SELECT
END IF
IF 合成距离 >= (加速距离+减速距离) THEN'-----------------------------合成距离>=加减速距离 速度能达到合成速度的情况
主轴起动速度 = 合成起动速度 * 主轴移动量 / 合成距离
主轴运行速度 = 合成速度 * 主轴移动量 / 合成距离
主轴加速度 = 合成加速度 * 主轴移动量 / 合成距离
主轴减速度 = 合成减速度 * 主轴移动量 / 合成距离
从轴起动速度 = 合成起动速度 * 从轴移动量 / 合成距离
从轴运行速度 = 合成速度 * 从轴移动量 / 合成距离
从轴加速度 = 合成加速度 * 从轴移动量 / 合成距离
从轴减速度 = 合成减速度 * 从轴移动量 / 合成距离
ELSE'----------------------------------------------------------------合成距离<加减速距离 速度达不到合成速度的情况
T加 = ROOT(2 * 合成距离 / (合成加速度 * (1 + 合成加速度 / 合成减速度)) + (合成起动速度 / 合成加速度)^2) - 合成起动速度 / 合成加速度
最大速度 = 合成起动速度 + T加 * 合成加速度
主轴起动速度 = 合成起动速度 * 主轴移动量 / 合成距离
主轴运行速度 = 最大速度 * 主轴移动量 / 合成距离
主轴加速度 = 合成加速度 * 主轴移动量 / 合成距离
主轴减速度 = 合成减速度 * 主轴移动量 / 合成距离
从轴起动速度 = 合成起动速度 * 从轴移动量 / 合成距离
从轴运行速度 = 最大速度 * 从轴移动量 / 合成距离
从轴加速度 = 合成加速度 * 从轴移动量 / 合成距离
从轴减速度 = 合成减速度 * 从轴移动量 / 合成距离
END IF
#PRAGMA DOUBLE OFF
'---------------------------------------------------------参数写入----------------------------------------------------------
CM8000.L:@DM12 = 主轴目标坐标
CM8808:@DM10 = TOU(主轴起动速度 + 0.5)
IF 主轴运行速度 = 0 THEN
CM8004.D:@DM12 = 1
ELSE
CM8004.D:@DM12 = TOD(主轴运行速度 + 0.5)
END IF
CM8002:@DM12 = TOU(主轴加速度 + 0.5)
CM8003:@DM12 = TOU(主轴减速度 + 0.5)
'-------------------------------------------
CM8000.L:@DM13 = 从轴目标坐标
CM8808:@DM11 = TOU(从轴起动速度 + 0.5)
IF 从轴运行速度 = 0 THEN
CM8004.D:@DM13 = 1
ELSE
CM8004.D:@DM13 = TOD(从轴运行速度 + 0.5)
END IF
CM8002:@DM13 = TOU(从轴加速度 + 0.5)
CM8003:@DM13 = TOU(从轴减速度 + 0.5)



谢谢!非常厉害!
