在倍福控制器中,我们难免会遇到用伺服实现分度盘的功能,一般需要实现以下几个功能:
1.每次旋转角度相同,不能有累计误差
2.一直向一个方向旋转,且不能发生溢出,掉电位置要保持
3.旋转出现故障后要记忆当前的位置,恢复后继续之前的位置旋转
接下来我们逐一分析功能实现。
首先,每次旋转角度相同,我们优先想到的是MC_MoveRelative功能,但是容易有累计误差,所以此处轴控制选择MC_MoveModulo模长定位,如下图,在NC轴控制处选择Modulo,单位选择°
接下来在NC轴Encoder参数下的reference system选择如图所示,防止编码器数值产生突变,若
选择ABSOLUTE模式,电机在旋转一定圈数后会出现编码器溢出,定位异常
另外,当伺服一直向一个方向旋转,编码器数值一直增大,而倍福中存储编码器数值的寄存器分为高32位和低32位,如下图所示,其中低32位可掉电保持,高32位无法掉电保持。为了使当前模内位置能够保持,我们需要对电子齿轮比进行设定,使2^32刚好为模长的N倍,这样即使高32位数据丢失,那么对于我们来说只是丢失了圈数,我们的模内位置不会发生改变。
若编码器为26位,减速比为M,伺服内部电子齿轮比为K,那么分度盘旋转一个模长360°则需要脉冲数为2^26*M/K
假设 :2^32=2^26*M/K*N 则N = (2^32/2^26)*K/M=2^6*K/M ,若要使N为一个整数,K/M有许多取值,为了使后续计算方便,我们这里取最简单的K/M=1,那么伺服驱动器参数中的电子齿轮比
K=M 分子/分母=M/1
这样一来,即使高32位溢出,那么我们的模内位置也是不会发生变化的
接下来设置NC编码器的参数,Scaling Factor Numerator 设置为模长360°,Scaling Factor DenoMinator 设置为分度盘转一圈的脉冲数 2^26/K*M,K=M,该参数就要设置为2^26
这里需要说明的是,若使用模长定位,那么当前的位置需要获取当前模内位置
变量为AxisRef.NcToPlc.ModuloActPos
关于“旋转出现故障后要记忆当前的位置,恢复后继续之前的位置旋转”,需要我们每次启动运行时,记录一下目标位置,在出现故障恢复第一时间,首先移动至目标位,这样就可以与之前的运动完美衔接
关于目标位置的计算,使用下图指令
首先计算当前位置对应最近的分割位置(此处模长360,分割数3,每次旋转120),然后再计算下一分割位置,防止直接使用当前位置会有累计误差;且计算出的下一或者上一分割位置需要使用MODABS指令进行处理,防止出现模内位置为负值,以及超过模长