background image

表累加数,当 dn 累加到达 N 时,延迟一个定时周期进给一步。则:

  V 代表的是指定的加工速度,做加减速控制的加速过程需要将速度从起
跳速度按照一定的曲线加速到 V,减速过程需要将速度从 V 再减到起跳速度。
  本文设计了一系列速度档位,最低档位就是起跳速度,然后逐步增加到
V,每档速度同时对应一个脉冲数组,及走过多少脉冲后切换到另外一个速度
档位。脉冲与速度构成的曲线可以是梯形曲线、指数型加减速曲线或 S 型加减
速曲线。每个速度档位都按照相同的比例缩小速度 V,三轴都按照相同的比例,
就满足了线性插补原理,可以在保证空间轨迹的同时,各轴按照相同的加减
速方法进行加减速。但计算速度档位必须在加工线段前进行,而且不能有除法
运算,否则一般的单片机难以达到实时性的要求。按一定的比例缩小 V 必须用
到除法,要避免除法运算就只能采用移位运算来代替。由式(1)~(3)可知,
k 与 V 成反比,而 n 和 dn 分别对应 k 的整数和小数部分。假设要得到 V*p/q 
对应的 n 和 dn,其中 p、q 都是自然数且 p<q。则 k’=k*q/p,要用移位来代
替除法必须 p=2m,而且要争取各速度档位相对均匀。
  本文设计的速度档位因子分别是: 1/16, 1/8, 1/4, 2/5,1/2, 2/3, 4/5, 
8/9, 共八个档位。对精度要求高的还可以设置更多的档位。确定速度档位因子
后,就可以通过一系列的移位指令来计算 V*p/q 对应的 n 和 dn,以 4/5 为例:
计算步骤如下:
  n=ctrlDatas[i].n*5;// ctrlDatas[i].n 是给定速度对应的 n,*5 也可以用
左移位+加法代替
  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: