G38.2 指令
4,Grbl項(xiàng)目與arduino
??? arduino是使用8位AVR單片機(jī)的開源硬件。而Grbl是致力于在arduino上實(shí)現(xiàn)CNC機(jī)床控制的開源軟件項(xiàng)目。Grbl的當(dāng)前最新版本是0.9版,支持一個(gè)關(guān)鍵的指令——G38.2指令。在這一節(jié)中,我最想提的就是0.9版本支持G38.2指令。G38.2是G代碼中的probe指令。正如字面意思,這是個(gè)“探針”指令。它的會(huì)把刀具當(dāng)作一個(gè)探針向某一個(gè)指定方向移動(dòng),直到收到脈沖中斷。在收到脈沖中斷后,會(huì)有機(jī)器當(dāng)前刀具的位置信息讀取。舉一個(gè)例子:G91G38.1Z-10。這是一條G代碼,G91代表本指令使用相對(duì)坐標(biāo),G38.2代表執(zhí)行探針指令,Z-10表示探針(刀具)沿Z的負(fù)方向探索10個(gè)單位長(zhǎng)度(可以通過G20/G21將單位設(shè)置為英寸/厘米)。如果探針(刀具)在移動(dòng)過程中,收到了脈沖信號(hào),則停止移動(dòng),并記錄當(dāng)前位置。如果在整個(gè)10個(gè)單位的移動(dòng)過程中都沒有收到脈沖信號(hào),則返回探測(cè)
失敗。這一個(gè)指令對(duì)于本項(xiàng)目而言,可以用來探測(cè)將要被雕刻的電路板的平面信息。由于刀具通常是導(dǎo)體,而將要被雕刻電路板的表面也是導(dǎo)體。當(dāng)?shù)毒吲龅诫娐钒灞砻鏁r(shí),刀具和電路板表面將處于導(dǎo)通狀態(tài)。于是,將電路板表面接地,刀具接中斷引腳。這樣,當(dāng)?shù)毒吲龅诫娐钒灞砻鏁r(shí),將會(huì)產(chǎn)生一個(gè)脈沖信號(hào)。
于是,憑借G38.2這個(gè)指令,就可以實(shí)現(xiàn)根據(jù)電路板的平面信息,對(duì)電路雕刻G代碼做補(bǔ)償修正。
5,銅面的自平衡算法和現(xiàn)存軟件
??? 讓探針(刀具)在電路板平面的多個(gè)點(diǎn)做探測(cè)指令(G38.2),探測(cè)出多個(gè)點(diǎn)的具體位置信息,再根據(jù)這些點(diǎn)的位置信息,計(jì)算出平面上任意點(diǎn)的位置信息。最后,根據(jù)這些位置信息,對(duì)隔離電路G代碼文件的所有指令做Z軸上的補(bǔ)償。這就是銅面實(shí)現(xiàn)自平衡算法的基本思路。
??? 下面按步驟來介紹整個(gè)實(shí)現(xiàn)自平衡算法的軟件。
1,生成被探測(cè)點(diǎn)平面坐標(biāo)。微觀的角度看,世界上不存在真正的理想平面。我們的電路板,看起來平,但事實(shí)上也不是完美的平面。而是凹凸不平的。在追究零點(diǎn)幾毫米一下精度的加工中,我們需要刀具能夠更完美的帖著表面走。我們知道,確定一個(gè)平面只需要3個(gè)點(diǎn)。那么我們?cè)谶@個(gè)電路板上找無數(shù)個(gè)不重合的3個(gè)點(diǎn),就可以把整個(gè)電路板的表面信息獲取了。當(dāng)然,我們不可能做到取那么多,但是可以朝這個(gè)方向前進(jìn)。有這樣一種方法,我叫它矩形分割法。把電路板表面分割成很多個(gè)小矩形。就像是棋盤一樣,把電路板表面分成縱橫好幾排的矩形。每個(gè)矩形再分割成兩個(gè)三角形。我們把每個(gè)三角形看成一個(gè)完美的平面(當(dāng)然不可能完美,這里是取近似)。這個(gè)三角形面積越小,也就是銅面分割的矩形越多,所測(cè)得平面的誤差就越小。用探針(刀具)去探測(cè)每一個(gè)矩形的頂點(diǎn)(也就是每一個(gè)三角形的頂點(diǎn)),根據(jù)頂點(diǎn)的坐標(biāo)高度,來計(jì)算該頂點(diǎn)圍成的三角形面積內(nèi)任意頂點(diǎn)的高度。
2,計(jì)算任意三個(gè)點(diǎn)確定的平面內(nèi)的任意一點(diǎn)的坐標(biāo)。平面的坐標(biāo)方程如下:
|x -? x1?? y - y1? z - z1????? |
|x2 - x1 y2 - y1? z2 - z1?? |? = 0
|x3 - x1? y3 - y1?? z3 - z1 |
以上行列式表示通過P1(x1,y1,z1),P1(x2,y2,z2)和P3(x3,y3,z3)的平面方程。
??? 如果已知P1,P2,P3的坐標(biāo),又知道需要被確定點(diǎn)的x,y坐標(biāo)上的值,那么就可以求出該點(diǎn)的z坐標(biāo)值。在現(xiàn)實(shí)工程中,確實(shí)可以做到獲取這些已知條件。通過第一步矩形分割,可以確定每個(gè)矩形頂點(diǎn)的橫縱坐標(biāo)。再對(duì)每個(gè)頂點(diǎn)做G38.2指令,就可以獲得每個(gè)頂點(diǎn)的z坐標(biāo)。于是,上述方程中的P1,P2,P3點(diǎn)的坐標(biāo)確定。再讀G代碼文件,解析G代碼的每一條指令,就可以獲取當(dāng)前刀具在執(zhí)行當(dāng)前一條指令后的刀具位置。也就是能夠解析出刀具的x,y和z坐標(biāo)值。刀具的x,y坐標(biāo)是不需要變化的,因此,目的坐標(biāo)的x,y的值確定。將將確定的值,代入上述方程,就可以求出此G代碼執(zhí)行后刀具所在點(diǎn)對(duì)應(yīng)的平面高度。如果平面比原點(diǎn)(0,0,0)坐標(biāo)高出0.1mm,那么修改這條G代碼,將G代碼的目的坐標(biāo)的Z值加上0.1mm。這里給出實(shí)現(xiàn)方程計(jì)算的參考偽代碼:
ZcompensationValue= (x-x1)*(y2-y1)*(z3-z1) - (x-x1)*(z2-z1)*(y3-y1)
ZcompensationValue+= (y-y1)*(x3-x1)*(z2-z1) - (y-y1)*(x2-x1)*(z3-z1)
ZcompensationValue= ZcompensationValue/((y2-y1)*(x3-x1) - (x2-x1)*(y3-y1))
ZcompensationValue+= z1
通過以上偽代碼,就可以計(jì)算出由P1,P2,P3三個(gè)坐標(biāo)圍成三角形內(nèi),任意點(diǎn)的Z軸補(bǔ)償值。
??? 當(dāng)然要完全實(shí)現(xiàn)銅面的高度自動(dòng)補(bǔ)償,還需要至少一下功能:1,與Grbl的簡(jiǎn)單通訊協(xié)議(包括發(fā)送G代碼和讀G38.2指令的返回值);2,解析G代碼(計(jì)算刀具的位置)。
??? 在現(xiàn)實(shí)中,你可以用很大語(yǔ)言來實(shí)現(xiàn)這個(gè)算法。而且也存在一個(gè)叫作chilipepper.com的網(wǎng)站提供在線自平衡服務(wù)。其自平衡算法,與本文所述基本一致。但是,這個(gè)網(wǎng)站提供的在線軟件仍然存在Bug。比如,其生成的矩形無法全部包括指定區(qū)域,無法解析inch為單位的G代碼,并生成自平衡路徑
??? arduino是使用8位AVR單片機(jī)的開源硬件。而Grbl是致力于在arduino上實(shí)現(xiàn)CNC機(jī)床控制的開源軟件項(xiàng)目。Grbl的當(dāng)前最新版本是0.9版,支持一個(gè)關(guān)鍵的指令——G38.2指令。在這一節(jié)中,我最想提的就是0.9版本支持G38.2指令。G38.2是G代碼中的probe指令。正如字面意思,這是個(gè)“探針”指令。它的會(huì)把刀具當(dāng)作一個(gè)探針向某一個(gè)指定方向移動(dòng),直到收到脈沖中斷。在收到脈沖中斷后,會(huì)有機(jī)器當(dāng)前刀具的位置信息讀取。舉一個(gè)例子:G91G38.1Z-10。這是一條G代碼,G91代表本指令使用相對(duì)坐標(biāo),G38.2代表執(zhí)行探針指令,Z-10表示探針(刀具)沿Z的負(fù)方向探索10個(gè)單位長(zhǎng)度(可以通過G20/G21將單位設(shè)置為英寸/厘米)。如果探針(刀具)在移動(dòng)過程中,收到了脈沖信號(hào),則停止移動(dòng),并記錄當(dāng)前位置。如果在整個(gè)10個(gè)單位的移動(dòng)過程中都沒有收到脈沖信號(hào),則返回探測(cè)
失敗。這一個(gè)指令對(duì)于本項(xiàng)目而言,可以用來探測(cè)將要被雕刻的電路板的平面信息。由于刀具通常是導(dǎo)體,而將要被雕刻電路板的表面也是導(dǎo)體。當(dāng)?shù)毒吲龅诫娐钒灞砻鏁r(shí),刀具和電路板表面將處于導(dǎo)通狀態(tài)。于是,將電路板表面接地,刀具接中斷引腳。這樣,當(dāng)?shù)毒吲龅诫娐钒灞砻鏁r(shí),將會(huì)產(chǎn)生一個(gè)脈沖信號(hào)。
于是,憑借G38.2這個(gè)指令,就可以實(shí)現(xiàn)根據(jù)電路板的平面信息,對(duì)電路雕刻G代碼做補(bǔ)償修正。
5,銅面的自平衡算法和現(xiàn)存軟件
??? 讓探針(刀具)在電路板平面的多個(gè)點(diǎn)做探測(cè)指令(G38.2),探測(cè)出多個(gè)點(diǎn)的具體位置信息,再根據(jù)這些點(diǎn)的位置信息,計(jì)算出平面上任意點(diǎn)的位置信息。最后,根據(jù)這些位置信息,對(duì)隔離電路G代碼文件的所有指令做Z軸上的補(bǔ)償。這就是銅面實(shí)現(xiàn)自平衡算法的基本思路。
??? 下面按步驟來介紹整個(gè)實(shí)現(xiàn)自平衡算法的軟件。
1,生成被探測(cè)點(diǎn)平面坐標(biāo)。微觀的角度看,世界上不存在真正的理想平面。我們的電路板,看起來平,但事實(shí)上也不是完美的平面。而是凹凸不平的。在追究零點(diǎn)幾毫米一下精度的加工中,我們需要刀具能夠更完美的帖著表面走。我們知道,確定一個(gè)平面只需要3個(gè)點(diǎn)。那么我們?cè)谶@個(gè)電路板上找無數(shù)個(gè)不重合的3個(gè)點(diǎn),就可以把整個(gè)電路板的表面信息獲取了。當(dāng)然,我們不可能做到取那么多,但是可以朝這個(gè)方向前進(jìn)。有這樣一種方法,我叫它矩形分割法。把電路板表面分割成很多個(gè)小矩形。就像是棋盤一樣,把電路板表面分成縱橫好幾排的矩形。每個(gè)矩形再分割成兩個(gè)三角形。我們把每個(gè)三角形看成一個(gè)完美的平面(當(dāng)然不可能完美,這里是取近似)。這個(gè)三角形面積越小,也就是銅面分割的矩形越多,所測(cè)得平面的誤差就越小。用探針(刀具)去探測(cè)每一個(gè)矩形的頂點(diǎn)(也就是每一個(gè)三角形的頂點(diǎn)),根據(jù)頂點(diǎn)的坐標(biāo)高度,來計(jì)算該頂點(diǎn)圍成的三角形面積內(nèi)任意頂點(diǎn)的高度。
2,計(jì)算任意三個(gè)點(diǎn)確定的平面內(nèi)的任意一點(diǎn)的坐標(biāo)。平面的坐標(biāo)方程如下:
|x -? x1?? y - y1? z - z1????? |
|x2 - x1 y2 - y1? z2 - z1?? |? = 0
|x3 - x1? y3 - y1?? z3 - z1 |
以上行列式表示通過P1(x1,y1,z1),P1(x2,y2,z2)和P3(x3,y3,z3)的平面方程。
??? 如果已知P1,P2,P3的坐標(biāo),又知道需要被確定點(diǎn)的x,y坐標(biāo)上的值,那么就可以求出該點(diǎn)的z坐標(biāo)值。在現(xiàn)實(shí)工程中,確實(shí)可以做到獲取這些已知條件。通過第一步矩形分割,可以確定每個(gè)矩形頂點(diǎn)的橫縱坐標(biāo)。再對(duì)每個(gè)頂點(diǎn)做G38.2指令,就可以獲得每個(gè)頂點(diǎn)的z坐標(biāo)。于是,上述方程中的P1,P2,P3點(diǎn)的坐標(biāo)確定。再讀G代碼文件,解析G代碼的每一條指令,就可以獲取當(dāng)前刀具在執(zhí)行當(dāng)前一條指令后的刀具位置。也就是能夠解析出刀具的x,y和z坐標(biāo)值。刀具的x,y坐標(biāo)是不需要變化的,因此,目的坐標(biāo)的x,y的值確定。將將確定的值,代入上述方程,就可以求出此G代碼執(zhí)行后刀具所在點(diǎn)對(duì)應(yīng)的平面高度。如果平面比原點(diǎn)(0,0,0)坐標(biāo)高出0.1mm,那么修改這條G代碼,將G代碼的目的坐標(biāo)的Z值加上0.1mm。這里給出實(shí)現(xiàn)方程計(jì)算的參考偽代碼:
ZcompensationValue= (x-x1)*(y2-y1)*(z3-z1) - (x-x1)*(z2-z1)*(y3-y1)
ZcompensationValue+= (y-y1)*(x3-x1)*(z2-z1) - (y-y1)*(x2-x1)*(z3-z1)
ZcompensationValue= ZcompensationValue/((y2-y1)*(x3-x1) - (x2-x1)*(y3-y1))
ZcompensationValue+= z1
通過以上偽代碼,就可以計(jì)算出由P1,P2,P3三個(gè)坐標(biāo)圍成三角形內(nèi),任意點(diǎn)的Z軸補(bǔ)償值。
??? 當(dāng)然要完全實(shí)現(xiàn)銅面的高度自動(dòng)補(bǔ)償,還需要至少一下功能:1,與Grbl的簡(jiǎn)單通訊協(xié)議(包括發(fā)送G代碼和讀G38.2指令的返回值);2,解析G代碼(計(jì)算刀具的位置)。
??? 在現(xiàn)實(shí)中,你可以用很大語(yǔ)言來實(shí)現(xiàn)這個(gè)算法。而且也存在一個(gè)叫作chilipepper.com的網(wǎng)站提供在線自平衡服務(wù)。其自平衡算法,與本文所述基本一致。但是,這個(gè)網(wǎng)站提供的在線軟件仍然存在Bug。比如,其生成的矩形無法全部包括指定區(qū)域,無法解析inch為單位的G代碼,并生成自平衡路徑
總結(jié)
- 上一篇: 手机扫码登陆原理
- 下一篇: Acrel-5000型建筑能耗监测系统在