数控技术 - 直线插补 - 数字积分法(DDA)
前言:还有4天要考《数控技术》了,开始(
复习)预习时发现,考点之一是直线插补。这个知识点不是我上个学期的课程设计——运动控制卡的主要功能之一吗。我当时对直线插补的理解还是很简单的:一边两点取中间打折,使线段更加平滑。现在看了理论实现后发现,可以说不是一个东西了,所以甚是感觉有趣。排除掉要应付大学考试,直线插补这个知识点还是很主要的。特地写篇笔记记录,防止以后忘记。
- 推荐视频:《逐点比较法-478-机床数控系统综合设计-远程教育|夜大|面授|函授|家里蹲大学|宅在家|在家宅_哔哩哔哩_bilibili》北京理工大学老师讲解,up主应该是转载或代传。
1.解释
-
积分的概念不过多说明,不是重点。只需明白是 周期性累加值 即可。
-
数字积分法的操作很简单,就是将路程分割
n
份,每 周期 累加一份,如果 溢出 就进给。一般溢出值就是单位1
,大概因为是坐标系的分度值,起点终点也在整数坐标上。
类比逐点比较法,同样是累加,不过 数字积分法 只 累加正数 。同样有个分割线,不过不是零而是 溢出值 。
-
注意 !累加 是每周期都会固定进行的操作,进给 是只有在溢出时才会进行的操作。
-
重要定义: 各轴 累加计算都是 独立 进行的,是否进给也是 独立 的,相互之间不影响!可能各轴都进给,也可能 各轴 都不进给。
类比逐点比较法,因为比较偏差是通过斜率反应,进给也是每次只能选一个轴方向。所以逐点比较法只适用于平面,局限性很大,但是简单易用。数字积分法则不限于两轴,可多轴运用,适用空间运动。
- 因为各轴独立运动,运动轨迹就是各轴运动的合成效果,会出现斜线。比如
45°
。看起来也更加接近理想曲线。下图示意,来源网络。
2.计算
- 正如上面所说,只需要将各轴的路程统一分割
n
份,再周期累加,溢出就进给即可。列个表格一下子就清晰了。
例题:第一象限直线OE,起点为O(0,0),终点为E(6,3)。
- 试着
X
轴和Y
轴路程分割8
份试试。然后累加8
次,就得到结果。
T | X位移 | X进给 | Y位移 | Y进给 |
---|---|---|---|---|
1 | 6/8 | 无 | 3/8 | 无 |
2 | 12/8=1+4/8 | 有 | 6/8 | 无 |
3 | 10/8=1+2/8 | 有 | 9/8=1+1/8 | 有 |
4 | 8/8=1+0/8 | 有 | 4/8 | 无 |
5 | 6/8 | 无 | 7/8 | 无 |
6 | 12/8=1+4/8 | 有 | 10/8=1+2/8 | 有 |
7 | 10/8=1+2/8 | 有 | 5/8 | 无 |
8 | 8/8=1+0/8 | 有 | 8/8=1+0 | 有 |
- 小数形式不方便运算,避免使用浮点数。可以采用整体放大的方法,溢出值和累加值都乘以相同倍数即可。就相当于去分母操作,同时乘于
8
。
T | X位移 | X进给 | Y位移 | Y进给 |
---|---|---|---|---|
1 | 6 | 无 | 3 | 无 |
2 | 12=8+4 | 有 | 6 | 无 |
3 | 10=8+2 | 有 | 9=8+1 | 有 |
4 | 8=8+0 | 有 | 4 | 无 |
5 | 6 | 无 | 7 | 无 |
6 | 12=8+4 | 有 | 10=8+2 | 有 |
7 | 10=8+2 | 有 | 5 | 无 |
8 | 8=8+0 | 有 | 8=8+0 | 有 |
和逐点比较法类似,起点和终点的计算结果都是0。
- 分割几份不是一定的,下面示例分割
16
份看看。作图的话,会发现轨迹图和分割8
份是一样。从列表中也可以发现二者是存在比例性的。
T | X位移 | X进给 | Y位移 | Y进给 |
---|---|---|---|---|
1 | 6/16 | 无 | 3/16 | 无 |
2 | 12/16 | 无 | 6/16 | 无 |
3 | 18/16=1+2/16 | 有 | 9/16 | 无 |
4 | 8/16 | 无 | 12/16 | 无 |
5 | 14/16 | 无 | 15/16 | 无 |
6 | 20/16=1+4/16 | 有 | 18/16=1+2/16 | 有 |
7 | 10/16 | 无 | 5/16 | 无 |
8 | 16/16=1+0/16 | 有 | 8/16 | 无 |
9 | 6/16 | 无 | 11/16 | 无 |
10 | 12/16 | 无 | 14/16 | 无 |
11 | 18/16=1+2/16 | 有 | 17/16=1+1/16 | 有 |
12 | 8/16 | 无 | 4/16 | 无 |
13 | 14/16 | 无 | 7/16 | 无 |
14 | 20/16=1+4/16 | 有 | 10/16 | 无 |
15 | 10/16 | 无 | 13/16 | 无 |
16 | 16/16=1+0/16 | 有 | 16/16=1+0/16 | 有 |
- 分割
10
份也可以,只要分割后的每份不能超过溢出值1
即可,
( x e N < 1 ) & & ( y e N < 1 ) (\frac{x_e}{N} < 1) \&\& (\frac{y_e}{N} < 1) (Nxe<1)&&(Nye<1)
- 虽然分割分数不一定,但是肯定越少越好,计算过程简单点。在数控技术中,这个分割份数是有讲究的,也是原理的一部分。下面讲解如何计算 最小 的分割份数。
3.原理
以下内容是视频教程中老师讲的思路,例图我也是截图引用了。
- 因为各轴相互独立运动,实际运动是合成结果,所以速度和路程存在一个比例关系。
注意 :上图中的
k
只是代表系数,并不是指斜率。一开始没认真听,还懵逼了好久。为了避免这个问题,我下面采用a
代表这个系数。
V x X e = V y Y e = V X e 2 + Y e 2 2 = V O E = a \frac{V_x}{X_e} = \frac{V_y}{Y_e} = \frac{V}{\sqrt[2]{X_e^2 + Y_e^2}} = \frac{V}{OE} = a XeVx=YeVy=2Xe2+Ye2V=OEV=a
- 根据上面的比例关系,可以得到两个等式。
V x = a ∗ X e V y = a ∗ Y e V_x = a*X_e \\ V_y = a*Y_e Vx=a∗XeVy=a∗Ye
- 然后就可以表示每周期的微小 累加量 ,也就是分割份数后每一份。另外,微小的时间周期可以取
1
。
Δ X = V x ∗ Δ t = a ∗ X e ∗ Δ t = a ∗ X e Δ Y = V y ∗ Δ t = a ∗ Y e ∗ Δ t = a ∗ X e \Delta X = V_x * \Delta t = a * X_e * \Delta t = a * X_e \\ \Delta Y = V_y * \Delta t = a * Y_e * \Delta t = a * X_e ΔX=Vx∗Δt=a∗Xe∗Δt=a∗XeΔY=Vy∗Δt=a∗Ye∗Δt=a∗Xe
- 再假设分割的总份数为
m
,那么总位移量就可以表示了。
X e = m ∗ Δ X = m ∗ a ∗ X e Y e = m ∗ Δ Y = m ∗ a ∗ Y e X_e = m * \Delta X = m * a * X_e \\ Y_e = m * \Delta Y = m * a * Y_e Xe=m∗ΔX=m∗a∗XeYe=m∗ΔY=m∗a∗Ye
- 上式明显可以化简,那么就得到了分割份数
m
和系数a
之间关系了。
1 = m ∗ a 1 = m * a 1=m∗a
- 回顾第3步得到的累加量,之前讲原理时也提到,这个累加量是不能大于溢出值
1
的。不然就没有累加和溢出的意义了。
1 > Δ X = a ∗ X e = 1 m ∗ X e 1 > Δ Y = a ∗ Y e = 1 m ∗ Y e 1 > \Delta X = a * X_e = \frac{1}{m} * X_e \\ 1 > \Delta Y = a * Y_e = \frac{1}{m} * Y_e \\ 1>ΔX=a∗Xe=m1∗Xe1>ΔY=a∗Ye=m1∗Ye
- 因为不等式最终要小于
1
,要使不等式成立,取X_e
和Y_e
其中的最大值Max
,计算最小值m
即可。
m > M a x m > Max m>Max
其实也很好明白,反过去想,因为分割是路程除以份数。要想这个值小于1,只要份数比最大路程还大,算出来就一定小于1。同时份数要尽可能的小。
- 最后,为了方便计算,不除以分割数,而是乘于分割数,放大倍数计算。
4.数控技术
-
在数控技术中,对于分割数
m
还是有特别要求的,牵扯到 寄存器 的概念。 -
因为实际运用问题,机器在存储数据时是采用二进制的形式。为了节省空间和加快运算,
Max
是多少,就采用多少位的 累加器 运算。也就是2^n-1
,能放得下即可。比如终点E(7,5)
,Max
为7
,采用三位(最大可存8
)累加器计算。 -
所以分割份数
m
总是2的次方,而且列表时也不写十进制,而是写二进制。
考试做题时,题目会直接给出几位累加器,且使用DDA计算。
5.补充
- 其他象限的情况和逐点比较法类似,取绝对值计算。得到相对进给方向,然后对应的象限给轴进给即可。