ns[j]=n>>2;//ns[j]是每个速度档位对应的n,>>2 代表除以4
dns[j]=(ctrlDatas[i].dn*5)>>2;// dns[j]是每个速度档位对应的dn
dns[j]=dns[j]+((n & 0x3)<<13);//将n 的余数补充到dn
ns[j]+=dns[j]>>15;//将dn 对应的整数部分补充到n
dns[j]=dns[j] & 0x7FFF;//取余数
可见通过一系列的位运算和加法运算实现了各速度档位的计算,而且精度非常高。实验证明,常规的单片机完全可以达到实时性的要求。
3 动态查表算法描述
动态查表算法有两部分,一是加工前计算各档位速度vc,另一个是实时的加减速控制rtvc。
下面分别描述。
3.1 算法vc,用于加工线段前的预处理,计算各轴各档位速度对应的n 和dn:
(1)求最长轴所在的索引longestIndex。本文将三轴分别编号成0,1,2,分别代表XYZ三轴,最长加工轴代表该轴加工速度最快,以该轴为基准进行加减速,其他轴同步按比例进行加减速
(2)如果最长加工轴的加工脉冲小于系统指定脉冲,以系统指定的低速进行加工,清除加减速标志,不进行加减速控制。算法结束,否则转第(3)步
(3)如果某轴的速度低于指定速度,该轴不进行加减速控制,全部按照指定速度进行加工。算法结束,否则转第(4)步
(4)按照第2 节的速度档位划分及移位算法计算各轴各档位速度对应的n 和dn。算法结束3.2 算法rtvc,用于实时加减速控制,根据发出脉冲计数进行相应的加减速控制:
(1)如果有加速标志,代表还需要进行加速控制,转第(2)步,否则转第(5)步
(2)如果最长加工轴的加工脉冲超过某档位对应的脉冲数,转第(3)步,否则转第(5)步
(3)如果达到最大档位,代表已经完成加速,设置各轴实时n 和dn 为指定正常加工速度V 对应的n 和dn,清除加速标志,转第(5)步。否则转第(4)步
(4)设置各轴实时n 和dn 为对应加速档位速度对应的n 和dn
(5)如果有减速标志,代表需要进行减速控制,转第(6)步,否则算法结束
(6)计算最长加工轴距离加工终点还有多少脉冲pulse
(7)如果pulse 小于某档位对应的脉冲数,转第(8)步,否则算法结束
(8)如果达到最大档位,代表已经完成减速,清除减速标志,算法结束,否则转第(9)步
(9)设置各轴实时n 和dn 为对应减速档位速度对应的n 和dn。
算法结束算法 rtvc 的流程图如图1 所示,算法vc 的流程图省略。

算法 vc 只需要在加工某线段前执行一次,而算法rtvc 用于实时加减速控制,需要在单片机的主循环里面反复调用,但由于调用rtvc 前速度表格已经计算好,只需查表即可,因此算法的实时性非常好。
在实际的加工程序中,除了增加以上两个算法之外,还是按照常规的DDA 算法进行积分插补,按照常规判断加工终点到达等等,不再赘述。
4 总结
动态查表法用到的表格有两个,一个是切换各档位速度需要走过的脉冲,另一个的各轴各档位速度对应的n 和dn。后一个表格是动态计算生成的。调整前一个表格可以实现不同的加减速曲线,因此动态查表法可以实现各种加减速曲线,根据实际加工情况自由选择,而不需要增加算法复杂度。同时,计算各档位速度对应的n 和dn 只需要进行一系列的位运算和加法运算,一般的单片机即可达到良好的实时性。
动态查表法已经在数控点胶机上得到了很好的应用,实践表明,用一般的ARM 芯片完全满足了实时性和高精度的要求。动态查表法同样可以应用到其他多轴联动运动控制场合。