軸
甚麼叫做四軸( 4-axis),或是五軸( 5-axis)工具機呢?
https://www.youtube.com/watch?v=jVUMk71IZsU
通常在工具機講幾軸機的軸是指axis,也就是直線進給軸或旋囀進給軸,至於廣意的軸,則有兩種含意:spindle及axis
1. 主軸(spindle),也稱加工軸或工作軸,主軸通常做快速旋轉用,在機台上常定為Z軸,以銑床來講Z軸用來夾持刀具,以車床來講Z軸是用來夾持工件
2. 進給軸(axis),進給有兩種方式,即直線進給、旋轉進給,分述如下:
2-1 直線進給軸 : 用來做直線移動的,命名上一般有X、Y、Z三軸,並習慣以刀軸所在之軸命名為Z軸。
2-2 旋轉進給之軸 : 通常用來做分度用,命名上稱之為A軸、B軸、或C軸,此三旋轉軸通常分別平行於X、Y、Z三直線軸,它們可能的存在方式有 :
2-2-1 兩個旋轉軸皆裝在床台上 : 這種五軸銑床就是俗稱的"搖屁銑床",它的床台會搖擺,理論上說來在床台的兩個旋轉軸有三種可能情況,即 : A、B軸,B、C軸,或A、C軸,但實際上,以B、C軸為最常見。
2-2-2 兩個旋轉軸皆裝在刀頭上: 這種五軸銑床就是俗稱的"搖頭銑床",亦即它的銑刀頭會搖擺,銑刀頭的兩個旋轉軸以A、B軸為最常見。
2-2-3 一個旋轉軸(B軸)裝在刀頭,另一個旋轉軸(C軸)裝在床台上,
2-2-4 複合機http://www.youtube.com/watch?v=E1Fj1j8Sg1g&feature=related(這機器是雙主軸,故算起來有六軸)。
X、Y、Z直線進給軸再加上A、B、C三軸旋轉進給軸,依理應該有六軸,為甚麼銑床大半只用到五軸就停止了呢?那是因為5個軸即已滿足求解條件,可讓銑刀到達任意之銑削位置。
至於車床,尤其是車銑複合機,常有耳聞九軸之多,那是因為車銑複合機為了增快加工速度,所以在工件的徑向多加了幾個平移進給軸所致。
軸除了數量的問題之外,還有連動與否的問題,早期工具機的很多軸都是只有單動或雙動而已,近20年大多數的數控工具機都已能多軸同動,以FANUC控制器11S30i—MODEL A系統為例,其最多軸數和最大主軸配置數為40軸,其中進給軸32軸,主軸為8軸,最大同時控制軸數為24軸。
以在圓筒上銑一個圓溝為例,如下圖所示,來說明各種不同加工
1. 兩軸加工 : 若以端銑刀直徑等於圓溝寬度來銑這個圓溝,這個工件只需兩軸連動(X軸+A軸)就可加工,以銑床言,工件夾在X軸方向,銑床床台X軸向移動並旋轉A軸即可銑出圓溝,又或者也可採車銑複合機台來加工,工件夾在Z軸,動力刀塔夾持直徑等於圓溝寬度的端銑刀,加工時端銑刀Z軸方向移動,工件由C軸旋轉進給。
2. 三軸加工 : 如果要用直徑較小的端銑刀銑出這個大圓溝,而且要求圓溝的兩壁要與直徑等於圓溝寬度的端銑刀銑出來的效果一模一樣,那就得成三軸連動(X軸+Y軸+A軸)的加工,(如果不要求圓溝兩壁,那用兩軸加工即可),加工時,以銑床言,工件夾在X軸方向,銑床床台X軸及Y軸皆需移動並旋轉A軸,又或者也可採車銑複合機台來加工,工件夾在Z軸,動力刀塔夾持直徑較小的端銑刀,加工時端銑刀Z軸及Y軸方向移動,工件由C軸旋轉進給,不過,有很多簡易型的車銑複合機台沒有Y軸,就無法銑了。
3. 四軸加工 : 當圓溝加工完之後,如果想要在這個圓溝的周邊稜線加以倒角以去除毛邊,基本上至少需要三軸連動(X軸+ Z軸+A軸),不過這需要精確地重新計算展開圖上各點的位置,又或者如果沿用前述二軸連動的A軸資料,那就可不用重新計算Y軸的值,但要以四軸連動(X軸+Y軸+ Z軸+A軸)的方式來加工,加工時,以銑床言,工件夾在X軸方向,銑床床台X軸及Y軸皆需移動並旋轉A軸,而球銑刀則夾在在Z軸方向做上下移動並旋轉銑削,又或者也可採車銑複合機台來加工,工件夾在Z軸,動力刀塔夾持球銑刀,加工時球銑刀Z軸Y軸及Y軸方向移動並旋轉銑削,工件由C軸旋轉進給,不過,這還是得要有Y軸的車銑複合機台才行。
本文將逐次說明這三種加工。
圓溝立體圖
圓溝側視圖
兩軸連動銑削加工(X軸+A軸)
如下圖所示,圓溝寬度64mm,將直徑64mm之端銑刀裝在Z軸,床台X軸向移動並旋轉A軸即可銑出下圖之圓溝。
換一個角度來看,如果A軸沒轉動,端銑刀除了X軸移動之外,Y軸也需移動才能銑削溝槽的轉折處,如下圖所示。
為了不讓Y軸移動,替代方案就是讓A軸旋轉,將端銑刀中心旋轉至X軸上,俾使Y軸的位移量為零,如下圖所示,這A軸旋轉的角度寫入CNC程式裡,就可銑出工件,A軸旋轉的角度計算方法如下:360*(旋轉弧長/圓筒直徑)
Autolisp寫法
1.開檔寫出CNC子程式片頭及關檔
.........
(setq file01 (open "C://test.nc" "w"))
(princ "%\n" file01)
(princ "O0005\n" file01)
(princ "G0X121.205 Y0. Z110. A0. F600\n" file01)
(princ "S800 M03\n" file01)
(princ "M08 F70\n" file01)
.........
(close file01)
第一行 :(setq file01 (open "C://test.nc" "w")) " , 這意思就是說 : Autolisp會寫(write)出一個檔, 檔名為"test.nc", 而這個test.nc是放在C碟的根目錄下, 所以在AutoCAD環境裡執行完lsp之後, 只要打開檔案總管, 找C碟的根目錄, 就可以發現這個test.nc檔
2.以AutoLisp計算A軸旋轉角度並寫出CNC程式
(defun c:kk()
(setq r1 10.0 xc 0.0 yc 0.0 d 0.0)
(setq r0 32.0 x1 0.0 y1 0.0 x2 0.0 y2 0.0 z2 0.0 xp 0.0 yp 0.0 zp 0.0 )
(setq xp 121.205 yp 0 zp 110.)
(setq file01 (open "C://test.nc" "w"))
(princ "%\n" file01)
(princ "O0005\n" file01)
(princ "G0X121.205 Y0. Z110. A0. F600\n" file01)
(princ "S800 M03\n" file01)
(princ "M08 F100\n" file01)
(setq x2 90. y1 0.0 y2 0.0 z2 75.0 ctype 1)
(princ "G1 " file01)
(pp1)
(princ " F30\n" file01)
(setq x2 121.205 ctype 1)
(princ "G1 " file01)
(pp1)
(setq radChg (/ 180.0 3.1415926) angChg (/ 3.1415926 180.0))
(setq cosCta (cos angChg) sinCta (sin angChg))
(setq iniCta 0.0 cta0 0.0 cta1 0.0 ctaTatal 0.0 iniAxial 0.0 wkAxial 0.0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq xp 121.205 yp -32 x2 149.9004 y2 -46.2611)
(setq ctype 2 ppr 36.0)
(scir) ;obtain xc, yc, iniCta, cta0, cta1,
(setq pillarDia (* 3.1415926 210) )
(setq i1 1 x1wk (- xp xc) y1wk (- yp yc))
(setq x2mem x2 y2mem y2 a2 0.0)
(while (< i1 ctaTatal)
(setq x2wk (+ (* x1wk cosCta) (* y1wk sinCta) ))
(setq y2wk (- (* y1wk cosCta) (* x1wk sinCta) ))
(setq x2 (+ xc (* (+ r0 ppr) (/ x2wk ppr))) )
(setq y2 (+ yc (* (+ r0 ppr) (/ y2wk ppr))) )
(if (= i1 1)
(princ "G1 " file01)
(princ " " file01) )
(setq a2 (* 360 (/ y2 pillarDia)) )
(pp2Axial)
(setq i1 (+ i1 1) x1wk x2wk y1wk y2wk) )
;;;;;;;;;the last endpoint of Arc
(setq y2 (+ yc (* (+ r0 ppr) (/ (- y2mem yc) ppr))) )
(setq x2 (+ xc (* (+ r0 ppr) (/ (- x2mem xc) ppr))) )
(setq a2 (* 360 (/ y2 pillarDia)) )
(pp2Axial)
;;;;;;;;; ;for slant line
(setq x2 254.4931 y2 -184.3234)
(setq d12 (sqrt (+ (* (- x2 x2mem)(- x2 x2mem)) (* (- y2 y2mem)(- y2 y2mem)) )))
(setq x3 (- x2 (* r0 (/ (- y2 y2mem) d12) )))
(setq y3 (+ y2 (* r0 (/ (- x2 x2mem) d12) )))
(setq x2 x3 a2 (* 360 (/ y3 pillarDia)))
(pp2Axial)
(princ "G0 Z150.\n" file01) ;raising tool
(princ "M99\n" file01)
(princ "%\n" file01)
(close file01)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;以下是子程式;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun pp1()
(setq pxs(rtos x2 2 3) pys(rtos y2 2 3) pzs(rtos z2 2 3))
(setq pxl(strlen pxs) pyl(strlen pys) pzl(strlen pzs))
(setq pxn(- 7 pxl) pyn(- 7 pyl) pzn(- 7 pzl))
(if (> (abs (- xp x2)) 0.001)
(progn
(princ " X" file01) (princ pxs file01)
(if ( or (< (abs (- (fix x2) x2)) 0.001) (< (- 1 (abs (- (fix x2) x2))) 0.001) ) (princ "." file01) )
(repeat pxn (princ " " file01)) ))
(if (> (abs (- yp y2)) 0.001)
(progn
(princ " " file01) (princ "Y" file01) (princ pys file01)
(if ( or (< (abs (- (fix y2) y2)) 0.001) (< (- 1 (abs (- (fix y2) y2))) 0.001) ) (princ "." file01) )
(repeat pyn (princ " " file01)) ))
(if (> (abs (- zp z2)) 0.001)
(progn
(princ " " file01) (princ "Z" file01) (princ pzs file01)
(if ( or (< (abs (- (fix z2) z2)) 0.001) (< (- 1 (abs (- (fix z2) z2))) 0.001) ) (princ "." file01) )))
(if (> ctype 1 )
(progn
(float ppr)
(princ " " file01) (princ "R" file01) (princ ppr file01) ))
(princ "\n" file01)
(setq xp x2 yp y2 zp z2)
)
(defun pp2Axial()
(setq pxs(rtos x2 2 3) pzs(rtos a2 2 3))
(setq pxl(strlen pxs) pzl(strlen pzs))
(setq pxn(- 7 pxl) pzn(- 7 pzl))
(princ " X" file01) (princ pxs file01)
(if ( or (< (abs (- (fix x2) x2)) 0.001) (< (- 1 (abs (- (fix x2) x2))) 0.001) ) (princ "." file01) )
(repeat pxn (princ " " file01))
(princ " A" file01) (princ pzs file01)
(if ( or (< (abs (- (fix z2) z2)) 0.001) (< (- 1 (abs (- (fix z2) z2))) 0.001) ) (princ "." file01) )
(princ "\n" file01)
)
(defun scir ()
(setq d (/ (distance (list xp yp) (list x2 y2)) 2))
(if (> d 0)
(progn
(setq k1 (sqrt (- (* ppr ppr) (* d d))) )
(if (< ctype 2.5)
(setq xc (+ (/ (+ xp x2) 2) (/ (* k1 (- y2 yp)) d 2))
yc (- (/ (+ yp y2) 2) (/ (* k1 (- x2 xp)) d 2)))
(setq xc (- (/ (+ xp x2) 2) (/ (* k1 (- y2 yp)) d 2))
yc (+ (/ (+ yp y2) 2) (/ (* k1 (- x2 xp)) d 2))) )))
(setq ctaTatal (* radChg (atan (/ d k1)) 2))
(setq x0 xp iniCta 0.0 cta0 0.0)
(if (< (abs (- xc xp )) 0.01)
(if (> yp yc)
(setq iniCta 90.0)
(setq iniCta 270.0) )
(if (< (abs (- yc yp )) 0.01)
(if (> xp xc)
(setq iniCta 0.0)
(setq iniCta 180.0) )
(progn
(setq cta0 (* radChg (atan (abs (/ (- yp yc) (- xp xc))))))
(if (> xp xc )
(if (> yp yc )
(setq iniCta cta0)
(setq iniCta (- 360.0 cta0) cta0 iniCta) )
(if (> yp yc )
(setq iniCta (- 180.0 cta0) cta0 iniCta)
(setq iniCta (+ 180.0 cta0) cta0 iniCta) )))))
)
限於篇幅請再看續文
http://fgcamtaiwan.blogspot.tw/2013/09/blog-post.html
你好
回覆刪除我對你的CNC有興趣可是有文章沒有圖片
有的網址也失效
請問有其他方式解決嗎?
我有興趣CNC想在學的更好
看你的一些文章我覺得對我有幫助
在同時做動a軸與x軸 a軸的角度計算 可以靠手寫 寫出圓溝螺旋溝槽嗎
回覆刪除因為文章關鍵部分的圖看不到 程式部分好像不是cnc的
刪除