4. 將記錄的數值輸入系統之內,系統會自動生成X軸Z向的直線度誤差(圖2)
; [ y* e1 h% y2 r2 t3 y) y; ^
. X( K+ h# z" f* ~' g0 P. o% x' W
圖1 X軸Z向直線度檢測示意圖
# p l/ Z- V9 z9 x# J5 I+ D9 R
7 ~, v8 r4 Y) U" @ b/ ]9 i
2 Y6 c/ h1 c+ t! q; y2 x+ F5 C; T6 M0 Z6 K* M9 S6 t7 S
圖2 檢驗結果樣例
$ u3 M, d1 q5 o( a/ D3 o# m
/ d" Y, o; ]$ y) Y5 O2 a問題的提出:# F& b5 f: r) @4 W) D
公司規定的該處直線度誤差應為11μm之內,據車間及工藝反映:,自從該機型量產后的幾十臺檢驗結果,該處直線度誤差一直在超差邊緣,機械調整非常困難,公司內部不允許在工廠階段進行軟件優化補償,因為現在我主管該產品了,恰好之前按照總部的要求將導軌及絲杠都做了優化改進,鑄件也都做了更改,超差的兩臺機器正好是前兩臺樣機,于是質量部門召開了一次會議,要求從機械上想辦法對該問題做出一些分析,并提出改進的辦法。
# r0 h5 a1 X4 k$ [$ o; n; q解決問題的思路: ) j& ?9 [, V+ k/ M% m& r. a+ i
聯想到該機床的基本結構,立柱中間為了放置轉臺開了一個很大的口子,這必然影響到整個機床在此處的剛性,反映到上面提到的x軸z方向直線度便是兩側高而中間低的情況,這在軟件上也非常清楚的顯示了出來(圖3),解決的辦法就是在立柱的導軌上加工出一個中凸的曲線來抵消重力對直線度的影響。+ \, R$ n+ Z- I! P1 ]
$ Z [4 |2 A! |/ L& D
圖3 直線度誤差曲線圖
/ P4 i- j0 ?# c' w- C$ U
問題的一般化:
$ G) L4 E/ z* N# G" g我的雄心絕不僅僅是隨便給出一個結果這么簡單,我想把這個問題更加一般化:
1 [: `" W# a6 R P7 r9 H1.如何根據輸入的幾個點求整條軸的直線度?
7 s% M0 S4 M7 {0 P
2.如果該直線度的走向有規律可循,如何找到該規律?換言之,該直線度的走向能否被一條曲線擬合,如果能,那曲線的方程應該是什么?
$ \' b. I5 L- H% h8 e9 p3.如果我手上有幾十臺該直線度的檢測數據,我如何來求得最適合的一條擬合曲線?
5 \3 W" |- h; B" w& W m! \" l
4.如何求得3中提出來的擬合曲線的補償曲線?
# L% h% j- U5 u) E; W9 @5.補償曲線求好后,如何反推其正確性(通過已有的機床直線度數據反求)
]0 v9 L/ ]% U. V$ P. a, }- j- }6 X
具體的解決思路:" u: u9 F. b9 a
為了便于理解,我對機床軸和坐標軸的對應關系做一個描述:令機床軸X軸的中點作為坐標的原點,坐標軸X軸的正向為機床軸X軸行程的正向,這樣,這個問題中700mm的行程可以在坐標軸上對應為為X軸的-350,-320,…,0,…,320,350,單位為毫米,坐標軸Y軸和機床Z軸重合,方向一直,單位為微米。
j* f! S: w1 i, J1 ~) ]" l8 Z, n1 m1.如何根據輸入的幾個點求整條軸的直線度?
+ c; P( i0 |+ e. V9 E" j+ A
這個問題比較簡單,只要在坐標軸上畫出每個點對應的X軸Z方向的直線度測量數據,然后通過最小二乘法擬合出一條直線,每個點與該直線的豎直距離(注意是Z方向差值的絕對值,而不是點到直線的垂直距離,這個具體可以參考最小二乘法的定義及求法)的差值即為該點的偏差值,這個行程上點與點之間偏差值的差的最大值就是X軸在Z方向的直線度。下面就以圖2的檢測數據為例編程求出該機床的X軸Z方向直線度(圖4)。
! v& n* c. ~% M, M1 x圖4 X軸Z方向的直線度求法模擬
* P" I2 g5 B+ n( A; w
由圖中可以看出,用該方法求出的偏差值及直線度誤差與系統給出的完全一致,這里給出的精度甚至更高。(具體的編程代碼我就不給出了,熟悉編程的朋友可以自己去編個看看)
2.如果該直線度的走向有規律可循,如何找到該規律?換言之,該直線度的走向能否被一條曲線擬合,如果能,那曲線的方程應該是什么?
3 A H& x& s0 x7 N( e+ r, B
上面既然求出了每個點的實際偏差值,問題就簡單了:把實際偏差值輸入到坐標軸中,用合適的曲線模擬出偏差的趨勢或走向,用的當然還是最小二乘法。至于擬合曲線的選取,我這里選擇了二次曲線,當然讀者也可以選更高次的曲線模擬。(圖5)
& Q/ H2 D: p3 ~1 t! J
% M, ~/ b z& H4 B5 c圖5 用二次曲線擬合直線度偏差點
) o( J" h- w& r+ v4 `# K b3 M: _8 a! I, u4 w/ ^; x. G# o
從圖中可見,模擬的效果還是不錯的,點的位置基本上符合了二次曲線的規律。
5 I8 z8 `$ T. P8 S5 ^: ~
' Y+ a9 A1 _- A4 b
3.如果我手上有幾十臺該直線度的檢測數據,我如何來求得最適合的一條擬合曲線?
2 K/ l4 D# ~$ p) ~2 c
從問題2中我們可以求得每臺機床的直線度情況,但是供應商加工鑄件的精度在一定范圍內是隨機的,這就需要我們從大數據中求得最適合的一條曲線,通過該條曲線的加工補償,可以使得每臺機床直線度都不至于偏離太遠。這個最適合應該怎么定義呢?我還是使用最小二乘法的原理,在軸的每個特定位置求出剛剛擬合出的幾十條曲線的直線度偏差值,然后找到該位置上的一個偏差值使得該值到其他機床在該位置偏差的距離的平方和最小,如此再做最小二乘擬合,所得的二次曲線便是幾十臺機床直線度誤差的平均值了。(圖6)6 {; i5 {% r6 W+ R3 J1 \7 {
4 ~3 M& C( @4 g
圖6 多臺機床直線度數據擬合
) N. @* c2 m9 e+ g3 E4 r; ^ ]6 n9 S0 Y9 @: q( I1 x
本次我一共擬合了10臺的數據,得到了上述的表達式和函數圖像
6 K: N; E$ e0 w n
4.如何求得3中提出來的擬合曲線的補償曲線?
, N- @, d: \: y; g5 _" T1 ]上面的曲線方程出來以后,這一步也就可以順利解答了,只要把上面的方程按X軸對稱即可得到補償函數,當然這個函數還不是我們要的,為了方便加工,給出的函數需要假設兩頭為0,中間高,從而讓加工廠不必費力再去計算各點的差值,直接從函數中就可以計算出每個點的補償值。(圖7)當然考慮的實際的精度,中間一項可以刪除。從而得到更加簡潔的函數表達式。
( F0 Q2 w2 u+ {6 y! c圖7 最終得到的可用于加工的補償函數及圖像
" c" X% z8 z7 ?% [" }2 `
t% _% ]" \2 o) o, R$ p
5.補償曲線求好后,如何反推其正確性(通過已有的機床直線度數據反求)
把上面求出的補償曲線與每臺機床的直線度誤差曲線合并后,再使用步驟1的方法可以得到補償后的結果。(圖8)
- G; L, f" x4 D T: ]# a4 _7 m+ L
( G2 } B2 ^# O圖8 補償前后直線度誤差對比
+ |9 p z$ S7 C- l# G9 M! C4 n: B N0 P; K
由上圖可以看出,補償后的直線度誤差沒有超過6微米的,除了第5臺機床,其他的都要明顯好于補償前的結果。
) P2 x- v6 W, D2 X/ Q P, D8 m
結論:% J/ K' L# _! v& _+ U9 y7 e }
通過機械的補償可以達到預期的效果,但是值得注意的是,補償后的誤差仍然可以通過系統插值法來進一步補償。而軟件補償是針對單臺機床來說的,從下圖可以看到,如果需要,二次補償后直線度在1微米之內甚至更高精度要求內完全沒有問題。
6 R& ]7 \6 W7 q
$ V4 P# i) I+ i Q) x1 ]
圖9 補償后的偏差仍然可以通過二次曲線在軟件中補償
6 v; J5 C K2 |; p5 Q2 G. P
8 j2 u2 q3 [* ^9 d
" v+ i& ~, \$ n8 C( x4 m( N/ K" |/ o' ]: Y. t6 O$ t
: g5 }% o5 G6 M2 [* t$ [