4. 将记录的数值输入系统之内,系统会自动生成X轴Z向的直线度误差(图2)
% G7 H/ @' A. u( N& H1 J
+ z: k+ d1 G1 p' ]+ E0 D图1 X轴Z向直线度检测示意图
/ _( G+ g$ z6 ~$ f2 p2 g
1 C6 }" I& ?) m! l& V4 R/ A
; b8 m1 z1 `9 l# S/ X7 x
0 L+ N7 c( t, g: Q, n5 F图2 检验结果样例
. F) j" X; Y0 X# Z/ D: u) _7 V8 ~2 o4 q O8 J. m
问题的提出:
2 P6 e1 V3 r4 @( z1 b公司规定的该处直线度误差应为11μm之内,据车间及工艺反映:,自从该机型量产后的几十台检验结果,该处直线度误差一直在超差边缘,机械调整非常困难,公司内部不允许在工厂阶段进行软件优化补偿,因为现在我主管该产品了,恰好之前按照总部的要求将导轨及丝杠都做了优化改进,铸件也都做了更改,超差的两台机器正好是前两台样机,于是质量部门召开了一次会议,要求从机械上想办法对该问题做出一些分析,并提出改进的办法。
/ I: a& [# {, u4 T5 l% u4 X解决问题的思路:
* s+ F A/ s& j+ X& x8 T' B联想到该机床的基本结构,立柱中间为了放置转台开了一个很大的口子,这必然影响到整个机床在此处的刚性,反映到上面提到的x轴z方向直线度便是两侧高而中间低的情况,这在软件上也非常清楚的显示了出来(图3),解决的办法就是在立柱的导轨上加工出一个中凸的曲线来抵消重力对直线度的影响。
8 A; S$ {0 N& Y3 k9 U$ J2 v$ r5 D% V2 m7 R
图3 直线度误差曲线图
1 Q. y. Z4 T N ]% ]0 f9 _" D
问题的一般化:( o( _* s5 p4 v$ p
我的雄心绝不仅仅是随便给出一个结果这么简单,我想把这个问题更加一般化:
( D& p) e/ m* ?5 j4 F5 J) s# C
1.如何根据输入的几个点求整条轴的直线度?
1 r$ T' B: ~) e9 q1 L# _
2.如果该直线度的走向有规律可循,如何找到该规律?换言之,该直线度的走向能否被一条曲线拟合,如果能,那曲线的方程应该是什么?
7 ?7 I. m7 X; ~/ N: j; [5 K* K1 b2 r0 h3.如果我手上有几十台该直线度的检测数据,我如何来求得最适合的一条拟合曲线?
- F4 p' {( F: M+ {" E) A
4.如何求得3中提出来的拟合曲线的补偿曲线?
" D3 m1 K( x/ X+ o2 C4 N
5.补偿曲线求好后,如何反推其正确性(通过已有的机床直线度数据反求)
$ u$ S2 b( r; B" V3 v具体的解决思路:. e; e3 `2 R# M( L) _( J) |/ V* L
为了便于理解,我对机床轴和坐标轴的对应关系做一个描述:令机床轴X轴的中点作为坐标的原点,坐标轴X轴的正向为机床轴X轴行程的正向,这样,这个问题中700mm的行程可以在坐标轴上对应为为X轴的-350,-320,…,0,…,320,350,单位为毫米,坐标轴Y轴和机床Z轴重合,方向一直,单位为微米。
' i& F, v! L. O8 H# D+ p7 ?3 Z
1.如何根据输入的几个点求整条轴的直线度?
j6 M# e2 M9 L. H; b) |. S( R4 O8 r这个问题比较简单,只要在坐标轴上画出每个点对应的X轴Z方向的直线度测量数据,然后通过最小二乘法拟合出一条直线,每个点与该直线的竖直距离(注意是Z方向差值的绝对值,而不是点到直线的垂直距离,这个具体可以参考最小二乘法的定义及求法)的差值即为该点的偏差值,这个行程上点与点之间偏差值的差的最大值就是X轴在Z方向的直线度。下面就以图2的检测数据为例编程求出该机床的X轴Z方向直线度(图4)。
2 r; t2 f l$ |) [. S' L
图4 X轴Z方向的直线度求法模拟
- J; H$ }5 H: u3 L1 V由图中可以看出,用该方法求出的偏差值及直线度误差与系统给出的完全一致,这里给出的精度甚至更高。(具体的编程代码我就不给出了,熟悉编程的朋友可以自己去编个看看)
2.如果该直线度的走向有规律可循,如何找到该规律?换言之,该直线度的走向能否被一条曲线拟合,如果能,那曲线的方程应该是什么?
1 o0 F4 u1 J; A
上面既然求出了每个点的实际偏差值,问题就简单了:把实际偏差值输入到坐标轴中,用合适的曲线模拟出偏差的趋势或走向,用的当然还是最小二乘法。至于拟合曲线的选取,我这里选择了二次曲线,当然读者也可以选更高次的曲线模拟。(图5)
. t1 g: |0 S b
4 N, X( K* V5 ~3 m3 ^图5 用二次曲线拟合直线度偏差点
4 ] \; |" M4 }- ^* o) U! h5 Q, p( t( k! X6 f
从图中可见,模拟的效果还是不错的,点的位置基本上符合了二次曲线的规律。
3 n% s& r D2 Q8 R s0 Z/ C3 a9 G
) r: T2 {6 y0 H& {, ^2 \. m3.如果我手上有几十台该直线度的检测数据,我如何来求得最适合的一条拟合曲线?
6 b3 m3 C' t0 E d: G2 ]从问题2中我们可以求得每台机床的直线度情况,但是供应商加工铸件的精度在一定范围内是随机的,这就需要我们从大数据中求得最适合的一条曲线,通过该条曲线的加工补偿,可以使得每台机床直线度都不至于偏离太远。这个最适合应该怎么定义呢?我还是使用最小二乘法的原理,在轴的每个特定位置求出刚刚拟合出的几十条曲线的直线度偏差值,然后找到该位置上的一个偏差值使得该值到其他机床在该位置偏差的距离的平方和最小,如此再做最小二乘拟合,所得的二次曲线便是几十台机床直线度误差的平均值了。(图6)
: ~: o! L+ Q' H \, {0 I e6 h2 ^( o/ ~) f$ W. M
图6 多台机床直线度数据拟合& s7 F* Y8 @' Y4 n
8 w- X0 t* T+ l+ u' _
本次我一共拟合了10台的数据,得到了上述的表达式和函数图像
7 k3 X6 T, w2 `. m4 i4.如何求得3中提出来的拟合曲线的补偿曲线?
( T8 n' Y* D- V* O+ }. u0 s% u1 R
上面的曲线方程出来以后,这一步也就可以顺利解答了,只要把上面的方程按X轴对称即可得到补偿函数,当然这个函数还不是我们要的,为了方便加工,给出的函数需要假设两头为0,中间高,从而让加工厂不必费力再去计算各点的差值,直接从函数中就可以计算出每个点的补偿值。(图7)当然考虑的实际的精度,中间一项可以删除。从而得到更加简洁的函数表达式。
, C d( U2 r+ M9 S; y1 i0 k# y图7 最终得到的可用于加工的补偿函数及图像
+ B4 `" @# J" \1 c
& p( M) [* G7 B- W% ?5.补偿曲线求好后,如何反推其正确性(通过已有的机床直线度数据反求)
把上面求出的补偿曲线与每台机床的直线度误差曲线合并后,再使用步骤1的方法可以得到补偿后的结果。(图8)
) G& k: a+ `8 [' ]- e# g& J, o/ p, y
图8 补偿前后直线度误差对比
) X, c$ F; [, M# F
: }( \) W4 f% a9 Q W1 n4 Y 由上图可以看出,补偿后的直线度误差没有超过6微米的,除了第5台机床,其他的都要明显好于补偿前的结果。
* F/ d ?* n7 k结论:1 _" _* i7 b: d, w T, B* t) d
通过机械的补偿可以达到预期的效果,但是值得注意的是,补偿后的误差仍然可以通过系统插值法来进一步补偿。而软件补偿是针对单台机床来说的,从下图可以看到,如果需要,二次补偿后直线度在1微米之内甚至更高精度要求内完全没有问题。
* c; i: J% I* w1 A. P6 D. P
& ~7 k/ {7 Q5 l! `. o+ Q4 y- d0 z
图9 补偿后的偏差仍然可以通过二次曲线在软件中补偿
! z) O2 X: A6 {2 V& g
6 g7 D% u& I- n) Q
! P5 b' j* p' S# k
) d7 t) M9 a- {6 I9 d' F% Y9 b
# P+ \. I, Z! ]( ?+ p