摘要: 由于數控機床的絲杠在制造、安裝上存在誤差以及長期使用造成的磨損,導致螺距實際移動值與預期設定值之間存在差異。提出了螺距誤差的單向補償方法和雙向補償方法。介紹了螺距補償的原理,包括單向補償方法、雙向補償方法的原理; 提供了一種實現單向補償、雙向補償的設計方案; 編寫了簡單的零件位置移動程序來測試雙向補償方法是否生效。實驗結果證明,該方案能夠解決數控系統中的螺距誤差。
關鍵詞: 數控系統; 螺距補償; 單向補償; 雙向補償; 補償表
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