G38.2 指令

4,Grbl项目与arduino
    arduino是使用8位AVR单片机的开源硬件。而Grbl是致力于在arduino上实现CNC机床控制的开源软件项目。Grbl的当前最新版本是0.9版,支持一个关键的指令——G38.2指令。在这一节中,我最想提的就是0.9版本支持G38.2指令。G38.2是G代码中的probe指令。正如字面意思,这是个“探针”指令。它的会把刀具当作一个探针向某一个指定方向移动,直到收到脉冲中断。在收到脉冲中断后,会有机器当前刀具的位置信息读取。举一个例子:G91G38.1Z-10。这是一条G代码,G91代表本指令使用相对坐标,G38.2代表执行探针指令,Z-10表示探针(刀具)沿Z的负方向探索10个单位长度(可以通过G20/G21将单位设置为英寸/厘米)。如果探针(刀具)在移动过程中,收到了脉冲信号,则停止移动,并记录当前位置。如果在整个10个单位的移动过程中都没有收到脉冲信号,则返回探测
失败。这一个指令对于本项目而言,可以用来探测将要被雕刻的电路板的平面信息。由于刀具通常是导体,而将要被雕刻电路板的表面也是导体。当刀具碰到电路板表面时,刀具和电路板表面将处于导通状态。于是,将电路板表面接地,刀具接中断引脚。这样,当刀具碰到电路板表面时,将会产生一个脉冲信号。
于是,凭借G38.2这个指令,就可以实现根据电路板的平面信息,对电路雕刻G代码做补偿修正。
5,铜面的自平衡算法和现存软件
    让探针(刀具)在电路板平面的多个点做探测指令(G38.2),探测出多个点的具体位置信息,再根据这些点的位置信息,计算出平面上任意点的位置信息。最后,根据这些位置信息,对隔离电路G代码文件的所有指令做Z轴上的补偿。这就是铜面实现自平衡算法的基本思路。
    下面按步骤来介绍整个实现自平衡算法的软件。
1,生成被探测点平面坐标。微观的角度看,世界上不存在真正的理想平面。我们的电路板,看起来平,但事实上也不是完美的平面。而是凹凸不平的。在追究零点几毫米一下精度的加工中,我们需要刀具能够更完美的帖着表面走。我们知道,确定一个平面只需要3个点。那么我们在这个电路板上找无数个不重合的3个点,就可以把整个电路板的表面信息获取了。当然,我们不可能做到取那么多,但是可以朝这个方向前进。有这样一种方法,我叫它矩形分割法。把电路板表面分割成很多个小矩形。就像是棋盘一样,把电路板表面分成纵横好几排的矩形。每个矩形再分割成两个三角形。我们把每个三角形看成一个完美的平面(当然不可能完美,这里是取近似)。这个三角形面积越小,也就是铜面分割的矩形越多,所测得平面的误差就越小。用探针(刀具)去探测每一个矩形的顶点(也就是每一个三角形的顶点),根据顶点的坐标高度,来计算该顶点围成的三角形面积内任意顶点的高度。
2,计算任意三个点确定的平面内的任意一点的坐标。平面的坐标方程如下:
|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的坐标,又知道需要被确定点的x,y坐标上的值,那么就可以求出该点的z坐标值。在现实工程中,确实可以做到获取这些已知条件。通过第一步矩形分割,可以确定每个矩形顶点的横纵坐标。再对每个顶点做G38.2指令,就可以获得每个顶点的z坐标。于是,上述方程中的P1,P2,P3点的坐标确定。再读G代码文件,解析G代码的每一条指令,就可以获取当前刀具在执行当前一条指令后的刀具位置。也就是能够解析出刀具的x,y和z坐标值。刀具的x,y坐标是不需要变化的,因此,目的坐标的x,y的值确定。将将确定的值,代入上述方程,就可以求出此G代码执行后刀具所在点对应的平面高度。如果平面比原点(0,0,0)坐标高出0.1mm,那么修改这条G代码,将G代码的目的坐标的Z值加上0.1mm。这里给出实现方程计算的参考伪代码:
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
通过以上伪代码,就可以计算出由P1,P2,P3三个坐标围成三角形内,任意点的Z轴补偿值。
    当然要完全实现铜面的高度自动补偿,还需要至少一下功能:1,与Grbl的简单通讯协议(包括发送G代码和读G38.2指令的返回值);2,解析G代码(计算刀具的位置)。
    在现实中,你可以用很大语言来实现这个算法。而且也存在一个叫作chilipepper.com的网站提供在线自平衡服务。其自平衡算法,与本文所述基本一致。但是,这个网站提供的在线软件仍然存在Bug。比如,其生成的矩形无法全部包括指定区域,无法解析inch为单位的G代码,并生成自平衡路径

你可能感兴趣的:(G38.2 指令)