摘要: 由于数控机床的丝杠在制造、安装上存在误差以及长期使用造成的磨损,导致螺距实际移动值与预期设定值之间存在差异。提出了螺距误差的单向补偿方法和双向补偿方法。介绍了螺距补偿的原理,包括单向补偿方法、双向补偿方法的原理; 提供了一种实现单向补偿、双向补偿的设计方案; 编写了简单的零件位置移动程序来测试双向补偿方法是否生效。实验结果证明,该方案能够解决数控系统中的螺距误差。
关键词: 数控系统; 螺距补偿; 单向补偿; 双向补偿; 补偿表
0 引言
数控机床大都采用滚珠丝杠作为机械传动部件,电机带动滚珠丝杠,将电机的旋转运动转换为丝杠直线运动。由于机床丝杠在制造、安装和调整等方面的误差,以及磨损等原因,造成机械实际进给值与预期信号值的不一致,导致零件加工精度不稳定。因此必须定期对机床坐标精度进行补偿。
不同的数控系统对螺距误差采取补偿的措施是不一样的。出于机械零件加工的需要,有时不仅要考虑单方向上的螺距误差补偿,甚至也要考虑双方向上的螺距误差补偿[1]。本文提出一种螺距误差补偿的设计方案,包括单向螺距误差补偿( EEC) 和双向螺距误差补偿( CEC) 。
1 、螺距误补偿的原理
1. 1 螺距误差补偿的方法描述
对螺距误差进行补偿时,在机床的运行轨道上取若干点,通过激光干涉仪[2]测得机床的实际定位位置,与预期设定的位置进行比较,得出偏移距离,并将其写入补偿文件中。选取的点越多,补偿精度越高。机床在下次运行时,将会把补偿文件的数据也计算在内,从而达到精度要求。
数控系统中设置螺距误差补偿需要NCK( numericcontrol kernel) 的支持,目前可针对某个点把它的补偿值写入NCK 补偿文件[3]。机械零件程序运行时自动地读取相应补偿文件中各点的补偿数据,并进行相应的调整,随之产生对应的机械位置变化。
1. 2 单向螺距误差补偿( EEC)
EEC 的原理是从起点到终点这个方向,在起点与终点之间等份若干点,如图1 所示。刀具在丝杠上的运动轨迹是先从起点运动,依次经过各个等份点,到达终点。
EC 补偿只对从起点到终点这个方向生效。当运动到某一个等份点时,根据刀具实际移动的距离与预期的距离的偏差,计算出该点的补偿值。例如,以图1 中10 这个点为例。预期希望刀具从0 点能够运动到10 点,其间移动距离为10mm。但是由于丝杠的误差,实际运动的距离是9mm,偏差为10-9 = 1mm,那么10 这个点的补偿值就是1mm; 如果其间实际移动距离为11mm,偏差为10-11 =-1mm,那么10 这个点的补偿值就是-1mm。其他各点的螺距误差补偿同理实现。
图1 EEC 原理图
1. 3 双向螺距误差补偿( CEC)
CEC 的原理支持两个方向,即从起点到终点方向和从终点返回到起点方向,如图2 所示。规定从起点到终点方向为正方向,从终点到起点方向为负方向。刀具在丝杠上的运动轨迹是先从起点运动,依次经过各个等份点,到达终点; 然后再从终点按原路返回到起点,逆向依次经过各个等份点,直至起点。CEC 补偿在两个方向上生效,分别计算每个方向上当运动到某一个等份点时,根据运动实际移动的距离与预期的距离的偏差计算出该点的补偿值。注意正向与负向的方向性。同一个点在两个方向上补偿不同。以图2 中10 点为例。当刀具从起点向终点运动即正方向,途中经过10 点; 假如从0 点向10 点实际移动了9mm,与预期移动距离10 的偏差是10-9 = 1mm,那么10 这个点在正方向上的补偿是1mm。
当刀具从终点向起点反向运动,途中反向地经过10 点;假如从20 点向10 点实际移动了9mm,与预期移动距离10 的偏差是10-9 = 1mm,但是由于从终点到起点是反方向,所以10 点在反方向上的补偿是-1mm; 假如实际移动距离为11mm,与预期移动距离10 的偏差是10-11 = -1mm,但是由于从终点到起点是反方向,所以10 这个点在反方向上的补偿是1mm。其他各点正方向和反方向上的补偿依此类推。
图2 CEC 原理图
2 、螺距补偿的设计
2. 1 螺距补偿的主界面
螺距补偿主界面包括三部分,如图3 所示。
图3 螺距补偿主界面
螺距误差补偿是按轴进行的。针对每一个轴可以设置每个轴的螺距误差补偿。主轴不设置。如图3 中第一排左边方框所示。这里可以通过按右上方的“轴+”或“轴-”按钮选择要设置补偿的轴。图3 中第一排右边方框所示内容为用户提供补偿的参考图示信息。图3 中第二排显示了当前需要进行补偿设置的点位置信息。图3 中右边有一个按钮“双向补偿”,该按钮可以在EEC 和CEC 之间切换。
2. 2 单向补偿EEC 设计
在设计单向螺距补偿( EEC) 时要用到下列信息:MD38000 表示数控系统中单向补偿支持的最大补偿点数。MD32700 表示螺距误差使能: 0 禁止,可以写补偿值;1 使能,补偿文件写保护。EEC 在NCK 中存储补偿数据的文件名是“/_N_COMPLETE_EEC_INI”。
设计单向补偿的操作步骤:
a) 读MD38000,获取系统支持的最大补偿点数。用户进行补偿设计分配的点数要小于等于这个值。
b) 输入补偿起点、补偿终点、测量间隔,用这3 个值到EEC 补偿文件中读取当前轴各点的数据补偿值。如果事先没有写入,则需要写入各点的补偿数据值,下次才能读取成功。操作步骤如下所示:
1) set MD32700[axis] = 0 / /轴axis 的写补偿文件功能生效
2) 写下列补偿属性到EEC 补偿表:
$ AA_ENC_COMP _STEP[< e >,<AXi >] / /补偿点之间的
距离
$ AA_ENC_COMP_MIN[<e>,<AXi>] / /开始补偿点的位置
$ AA_ENC_COMP_MAX[<e>,<AXi>] / /终结补偿点的
位置
$ AA_ENC_COMP_IS_MODULO[<e>,<AXi>] / /补偿表
是否支持modulo function,默认为0
$ AA_ENC_COMP[<e>,<N>,<AXi>] / /在补偿表中每个
补偿点的补偿值,可以有若干条记录。
3) set MD32700[axis] = 1 / / /轴axis 的写补偿文件功能失效
c) 第二次即可读取到上次设置的补偿数据。
d) EEC 补偿表示例:
$ AA_ENC_COMP[0,0
,AX1] = 2 '3a08
$ AA_ENC_COMP[0,1
,AX1] = 1 '399e
$ AA_ENC_COMP[0,2
,AX1] = 0. 9 '3df2
$ AA_ENC_COMP[0,3
,AX1] = 1. 88 '41fe
$ AA_ENC_COMP[0,4
,AX1] = 1 '38e6
$ AA_ENC_COMP[0,5
,AX1] = 0 '3928
$ AA_ENC_COMP[0,6
,AX1] = 0 '3ae0
$ AA_ENC_COMP[0,7
,AX1] = 0 '3e60
. . . . . .
$ AA_ENC_COMP_STEP[0,AX1] = 10 '4760
$ AA_ENC_COMP_MIN[0,AX1] = 0 '43ae
$ AA_ENC_COMP_MAX[0,AX1] = 300 '4256
$ AA_ENC_COMP_IS_MODULO[0,AX1] = 0 '630a
2. 3 双向螺距补偿CEC 设计
在设计双向螺距补偿时要使用下列信息: MD18342表示CEC 支持的最大补偿点数。MD32710 表示CEC 功能是否生效: 0,表示使CEC 功能不生效; 1,生效。
MD41300 表示某个轴补偿表是否生效。每一个轴要写两个表,包括正向补偿表,负向补偿表。使相应的补偿表生效,包括正向表和负向表。0: 可以写CEC 补偿某个特定
表; 1,不能。MD32720 表示CEC 最大补偿值。CEC 补偿数据写入NCK 补偿文件名: /_N_COMPLETE_CEC_INI。实现CEC 操作步骤如下:
a) 读MD18342,数控系统对CEC 功能支持的最大补偿点数。用户配置的补偿点数小于等于这个值。
b) 输入补偿起点、补偿终点、测量间隔,用这三个值到CEC 补偿文件中读取当前轴的相应点的补偿值。第一次时为空,则需将这些数据写入CEC 补偿表,操作步骤如下:
1) set MD32710[axis] = 0, set 41300[<t>] = 0 / /写补偿文件,设置哪个补偿表可写。
2) 写下列补偿属性到CEC 补偿表:
每一个轴要写两个表,包括正向补偿表,负向补偿表。要建立轴与补偿表的对应关系。
写正向表:
$ AN_CEC_INPUT_AXIS[<t>]( basic axis) / /建立轴与补偿
表的输入关系。
$ AN_CEC_OUTPUT_AXIS[<t>]( compensation axis) / /建
立轴与补偿表输出关系
$ AN_CEC_STEP[<t>]( interpolation point distance) / /点间
距离
$ AN_CEC_MIN[<t>]( initial position) / /起点位置
$ AN_CEC_MAX[<t>]( end position) / /终点位置
$ AN_CEC_DIRECTION[<t>]( direction) / /方向参数: 1 正;
-1 负
$ AN_CEC_MULT_BY_TABLE [<t>]( table multiplication)
/ / 表的多应用功能。默认值0
$ AN_CEC_ IS _MODULO[< t >]( compensation with modulo
function) / /是否支持modulo function,默认为0
$ AN_CEC[<t>,<N>]( compensation value for interpolation
point <N> of compensation table [<t>]) / /在正向补偿表中依次
写入每个补偿点的补偿值,可以有若干条记录
写负向表:
$ AN_CEC_INPUT_AXIS[<t>]( basic axis) / /建立轴与补偿
表的输入关系。
$ AN_CEC_OUTPUT_AXIS[<t>]( compensation axis) / /建
立轴与补偿表的输出关系。
$ AN_CEC_STEP[<t>]( interpolation point distance) / /点间
距离
$ AN_CEC_MIN[<t>]( initial position) / /起点位置
$ AN_CEC_MAX[<t>]( end position) / /终点位置
$ AN_CEC_DIRECTION[<t>]( direction) / /方向参数: 1 正;
-1 负
$ AN_CEC_MULT_BY_TABLE [<t>]( table multiplication)
/ / 表的多应用功能。默认值0
$ AN_CEC_ IS _MODULO[< t >]( compensation with modulo
function) / /是否支持modulo function,默认为0
$ AN_CEC[<t>,<N>]( compensation value for interpolation
point <N> of compensation table [<t>]) / /在负向补偿表中依次
写入每个补偿点的补偿值,可以有若干条。
3) 在写补偿表之后,将MD32710[axis]写入1; 设置已经操作的补偿表的41300 为1,包括正向表和负向表。
c) 第二次进入系统时,就能读取上次设置的补偿数据。
d) CEC 补偿表数据示例
1) 正向补偿表
$ AN_CEC[0,0
] = 1 '2ac2
$ AN_CEC[0,1
] = 1 '2b58
$ AN_CEC[0,2
] = 1 '2c8a
$ AN_CEC[0,3
] = 1 '2efa
$ AN_CEC[0,4
] = 1 '2ace
$ AN_CEC[0,5
] = 0 '2b0c
$ AN_CEC[0,6
] = 0 '2c56
$ AN_CEC[0,7
] = 0 '2ef6
$ AN_CEC[0,8
] = 0 '2a76
$ AN_CEC[0,9
] = 0. 99 '2f86
. . . . . .
$ AN_CEC_INPUT_NCU[0] = 1 '49fa
$ AN_CEC_INPUT_AXIS[0] = ( AX1) '4b12
$ AN_CEC_OUTPUT_NCU[0] = 1 '4aae
$ AN_CEC_OUTPUT_AXIS[0] = ( AX1) '5444
$ AN_CEC_STEP[0] = 10 '3432
$ AN_CEC_MIN[0] = 0 '3a9c
$ AN_CEC_MAX[0] = 300 '3e0c
$ AN_CEC_DIRECTION[0] = 1 '4760
$ AN_CEC_MULT_BY_TABLE[0] = 0 '4d50
$ AN_CEC_IS_MODULO[0] = 0 '49be
2) 负向补偿表
$ AN_CEC[1,0
] = 1 '2af4
$ AN_CEC[1,1
] = 1 '2b8a
$ AN_CEC[1,2
] = 1 '2cbc
$ AN_CEC[1,3
] = 1 '2f2c
$ AN_CEC[1,4
] = 1 '2b00
$ AN_CEC[1,5
] = 0 '2b3e
$ AN_CEC[1,6
] = 0 '2c88
$ AN_CEC[1,7
] = 0 '2f28
$ AN_CEC[1,8
] = 0 '2aa8
$ AN_CEC[1,9
] = 0. 99 '2fb8
. . . . . .
$ AN_CEC_INPUT_NCU[1] = 1 '4a90
$ AN_CEC_INPUT_AXIS[1] = ( AX1) '4bda
$ AN_CEC_OUTPUT_NCU[1] = 1 '4b76
$ AN_CEC_OUTPUT_AXIS[1] = ( AX1) '5476
$ AN_CEC_STEP[1] = 10 '3496
$ AN_CEC_MIN[1] = 0 '3ace
$ AN_CEC_MAX[1] = 300 '3e3e
$ AN_CEC_DIRECTION[1] = -1 '490c
$ AN_CEC_MULT_BY_TABLE[1] = 0 '4de6
$ AN_CEC_IS_MODULO[1] = 0 '4a54
2. 4 补偿数据的显示与编辑
在列表框中显示出所有补偿数据,分别显示EEC 和CEC 两种数据结果。支持列表框记录的KeyUp,KeyDown鼠标上下移动消息和PageUp,PageDown 屏幕上下翻页消息,并且当有多条记录时滚动条依序滚动。
2. 4. 1 EEC 补偿数据的显示与编辑,如图4 所示
图4 EEC 数据显示
2. 4. 2 CEC 补偿数据的显示与编辑,如图5 所示
图5 CEC 数据显示
2. 5 支持反向数据设置
1) 支持起点位置值大于终点位置值,即从大到小排列各个补偿点。
2) NCK 中对补偿表数据存储时总是把两者中最小值放入起点位置项$ AA_ENC_COMP_MIN 或$ AN_CEC_MIN,最大值放入终点位置项$ AA_ENC_COMP_MAX 或$ AN_CEC_MAX。而不能忽略起点位置值与终点位置值的大小关系,粗略地把第一个点放入起点位置项,把最后一个点放入终点位置项。由于目前NCK 还不支持这种功能。如果这样写入,虽然能够写入NCK 补偿表里( 偶尔会出现错误报警) ,但是在实际运转机械零件程序时补偿值不会生效。
3 、螺距补偿的测试
现以双向螺距补偿为例测试补偿数据是否生效。双向螺距补偿的测试方法: 使用扎带扣在电机上,当刀具位置移动时观察电机的转动,可以验证补偿数据是否准确。
写一个小零件程序,执行该零件程序,系统会自动调用内部已经生效的补偿进行零件位置移动的相应差补。
测试功能点: 针对x 轴进行CEC 螺距补偿的测试。测试步骤如下:
1) 数控系统回参考点。
2) 在螺距补偿界面设置好CEC 的螺距补偿值。
3) 进入数控系统的零件程序编辑操作模式,使用G 代码编写下列零件程序,针对x 轴进行螺距补偿的测试。
G0X0 / /从起点0 开始运动
G4F4 / /停等4s
G00X10 / /快速运动到10
G4F4 / /停等4s
G00X20 / /快速运动到20
G4F4 / /停等4s
G00X10 / /反向运动到10
G4F4 / /停等4s
G00X0 / /快速运动到起点0
4) 观察电机上扎带的初始位置。电机转动一圈转化为丝杠直线移动10 个单位。扎带一开始是处于时钟12点钟正点方向。
5) 运行零件测试程序,程序执行过程中观察扎带转动角度。如果某点的补偿值是在丝杠上1mm,那么电机转动略向左偏于时钟正点方向1mm; 如果某点的补偿是在丝杠上-1mm,那么电机转动略向右偏于时钟正点方向1mm。
4 、结语
不论单向螺距误差补偿还是双向螺距误差补偿都是先将各个点的螺距误差补偿值写入补偿文件。当零件程序运行时自动读取各个点的补偿值,调整各个点的实际移动位置值。经过在数控机床上充分测试验证,单向螺距误差补偿和双向螺距误差补偿能够准确地弥补丝杠上各个点的螺距误差。
如果您有机床行业、企业相关新闻稿件发表,或进行资讯合作,欢迎联系本网编辑部, 邮箱:skjcsc@vip.sina.com