企业网站开发哪个好薇,浪漫做爰网站,软件开发合同模板下载,软文广告推广在CNC机床的G代码中#xff0c;最常见的有G0、G1、G2、G3代码#xff0c;分别表示直线和圆弧插补#xff0c;直线插补对于单片机来说#xff0c;比较容易实现#xff0c;只需要将位移增量转换为脉冲增量然后输出给步进电机就可以了#xff0c;但对于圆弧插补#xff0c;… 在CNC机床的G代码中最常见的有G0、G1、G2、G3代码分别表示直线和圆弧插补直线插补对于单片机来说比较容易实现只需要将位移增量转换为脉冲增量然后输出给步进电机就可以了但对于圆弧插补则需要单片机根据G指令中给出的起始点、半径、结束点这三个参数来控制X Y轴进行圆周运动因此需要通过特定的圆弧插补算法来控制步进电机运动圆弧插补算法比较多常用的有逐点比较法、最小偏差法和数字积分法等等本文使用的是逐点比较法。 先不介绍逐点比较插补算法的原理给出一幅图下面再结合文字进行介绍。 一、判断圆弧所在象限 在G代码的圆弧插补指令中给出的圆弧可以是任意象限的而不同象限的圆弧绘制算法又不一样因此首先需要判断圆弧所在象限。当然给出的圆弧可以是在一个象限内也可能是跨两个相邻的象限比如图中四段橙色的弧线。象限的判断比较简单只要通过判断起始点坐标和结束点坐标的值便可。
二、找出圆弧运动过程中变化快的一轴 由上图可见当圆弧位于045度、135度180度、180225度和315360度区域时Y的变化大于X且X坐标值的绝对值大于Y坐标的绝对值而当圆弧位于4590度、90135度、225270度和270315度区域时X的变化大于Y且X坐标值的绝对值小于Y坐标的绝对值因此可通过XY坐标值的比较来找出运动过程中变化快的一轴。
三、偏差计算与判别 如果我们给变化快的那一轴假设是X进给一个脉冲则加工点到圆心的距离会发生变化而Y轴是否进给则通过偏差计算来判断。
众所周知圆心在坐标原点的圆方程为
x*xy*yr*r
设偏差Fx*xy*yr*r
假设Y轴不进给则F1x1*x1y*yr*r
假设Y轴进给则F2x1*x1y1*y1r*r 比较F1和F2的绝对值如果不进给时的偏差小则Y轴进给否则Y轴不进给。 若没到终点则一直循环。
注意电机动动的方向需要通过判断象限来决定的。
四、终点判别 如果到达终点则表示弧线绘制完毕退出插补循环体。
五、跨象限的圆弧段处理 跨象限的圆弧段处理也按照上述方法选择一变化快的轴进给另一轴通过偏差来判别是否进给。电机运动的方向同样通过象限来判断。 本人之前尝试过给变化快的轴进给N个脉冲量再通过解圆的方程来计算出Y的脉冲进给量由于解圆的方程需要进行开根号运算因此影响了插补的速度同时一次进给N个脉冲量会使电机运动不连续更重要的是加工的精度会有很大的影响。采用以上方法不但减少了大量的运算时间提高了插补的速度精度也得到了很大的提高。 该方法简单便于理解也适合在单片机平台上运行。 以下是某一象限的顺时针圆弧插补代码其它象限类似 #define e(x,y) (x)*(x)(y)*(y)-r_r //偏差计算 r_r为半径的平方#define DT 1//如果在第一象限case 1:while(yx) // 45°-90°此段X值变化比Y快{korig_xx; //orig_x原点坐标MoveToPosition(k,orig_yy); //移动电机至目标位置xDT; // 优先改变X fe(x,y); // Y不变时 所得点距圆周偏差ge(x,y-DT); // Y变时 所得点距圆周偏差if(abs_16(f)abs_16(g)) y-DT; // 如果变时偏差小则取改变Yif(kend_x)goto Exit; //如果到达终点则跳出循环体 }while(xy) // 0-45°此段Y值变化比X快{korig_yy;MoveToPosition( orig_xx, k); //移动电机至目标位置y-DT; // 优先改变Y fe(x,y); // X不变 所得点距圆周偏差ge(xDT,y); // X改变所得点距圆周偏差if(abs_16(f)abs_16(g))xDT; // 如果变时偏差小则取改变Xif(kend_y)goto Exit; //如果到达终点则跳出循环体 }
break;