基于改进CORDIC算法的光电编码器正交性误差测量

2019-11-06 03:30鲍克勤张雪健
上海电力大学学报 2019年5期
关键词:测量误差编码器向量

鲍克勤, 张雪健, 倪 蓉

(上海电力学院 自动化工程学院, 上海 200090)

随着工业控制技术的不断进步与快速发展,该行业对光电编码器精度的要求也不断提高。对光电编码器进行深入研究不难发现,其最主要的测量误差来源是细分精度误差,而光电编码器输出信号的质量也对其细分精度产生较大的影响[1-2]。在理想状态下,光电编码器的输出信号是两个相位差为 π/2的标准正弦波形信号,然而实际采集到的光电编码器莫尔条纹光电信号受到码盘刻画工艺、系统噪声、器件安装工艺等各种因素的影响,会导致实际信号中含有多项误差,严重影响了编码器的细分精度。实际的两路莫尔条纹信号由于一些因素的影响而存在直流电平漂移、高次谐波等信号误差[3-4]。

在各项指标中,光栅莫尔条纹信号的正交性误差是衡量其测量精度的一项重要指标。因此,开展对光电编码器输出信号的正交性误差测量研究是提高其精度测量的一个重要环节。目前,美国天文台提出了基于Heidenhain模型的补偿方法,但是该方法计算量大;罗刚等人[5]采用了一种基于锁相环的检测方法,但该方法存在“高频失锁”现象。本文在前人研究的基础上引入了一种基于改进型的坐标旋转数字计算机(Coordinate Rotation Digital Computer,CORDIC)算法来实时检测光电编码器的正交性误差。该方法很少被运用到编码器正交性偏差的实时检测领域。

1 CORDIC算法

CORDIC算法是VOLDER J D在1959年发表的一篇关于设计航空控制系统的文章中首次提出的,通过简单的移位运算和加减法运算的循环迭代完成对一些常用复杂函数的算术运算。该算法在随后的几十年里得到了不断的改进与优化[6-8]。

1.1 CORDIC算法的基本原理

在笛卡尔坐标系中,向量旋转示意图如图1所示。

图1 向量旋转示意

(1)

(2)

式中:kn——校模因子,其取值的大小只与迭代次数n有关;

δi—— 判断因子,主要是用来表示旋转方向的一个参数,δi∈{-1,1},当δi=1则表示下一次的旋转方向为逆时针,当δi=-1则表示下一次的旋转方向为顺时针。

当n足够大时,校模因子kn可以表示为

(3)

传统CORDIC算法在笛卡尔坐标系下的基本迭代关系公式为

(4)

式中:i——旋转次数。

该算法的收敛域约为[-99.88°,99.88°]。CORDIC算法存在有两种不同的工作模式:旋转模式(Vectoring Mode,VM)和向量(Rotation Mode,RM)模式。根据判断因子δi取值的正负,来表征传统CORDIC算法的工作方式是处于向量模式下还是处于旋转模式下。

1.2 传统的CORDIC算法的误差

CORDIC算法作为一种角度计算的方法,本身在角度解算等方面存在一些算法误差。在仿真软件MATLAB环境下,利用传统的CORDIC算法对[0°,90°]范围内的角度进行计算,其解算误差如图2所示。

图2 传统CORDIC算法角度解算误差

从图2可以看到,传统的CORDIC算法在[0°,90°]范围内的角度解算误差范围在[-0.1°,0.1°],角度解算误差较大。传统的CORDIC算法迭代过程中,每一级的旋转方向都要取决于上一级的旋转迭代结果,运算速度低,且存在循环迭代次数过长、输出延时较大等不足,故需要对其进行改进。

2 改进的CORIDC算法

常规的CORDIC算法迭代在角度计算时,会引入乘法和平方根运算,增加运算量,因此本文引入双迭代法(Double Iteration Algorithm)。其原理是进行两次基本角度的迭代旋转,主要优势在于将随着向量旋转而变化的参数由乘法平方根变为加法和移位运算,公式如下

(5)

由于改进的CORDIC算法的迭代次数发生变化,改变了kn的大小,所以改进的CORDIC算法的增益因子为

(6)

本文通过对迭代过程进行观察发现,当输入的数据参数接近1时,向量可能会旋转至第二象限,此时x的值变为负值,得出的角度也会大于90°。在任何一级迭代过程中,只要向量旋转至第二象限,则在下一级迭代过程中必须旋转至第一象限。因此,需要增加一个条件,即

(7)

在仿真软件MATLAB环境下,利用该算法对[0°,90°]范围内的余弦角度进行解算,其解算误差如图3所示。

图3 改进的CORDIC算法角度解算误差

对比图2和图3可以发现,改进的CORDIC算法误差明显减小,在[0°,90°]范围内的最大解算误差仅为3×10-5°。由此可知,基于改进的CORDIC算法可以更有效地实现对角度的计算。

3 正交性误差仿真检测

在MATLAB仿真环境下,模拟产生两路正弦的信号,并设置其在[0°,10°]范围内产生不同的相位差,再利用改进的CORDIC算法对这两路正弦信号的相位差进行检测,最后得出信号的相位差测量误差。其仿真结果如图4所示。

图4 相位差测量误差数据

由图4可知,利用相位差计算算法的误差范围在[-0.03°,0.03°],误差最大值为0.027°,最小值为0.004°。将本文中提出的改进的CORDIC算法与相关函数法、傅里叶变换法的测量误差在相同的条件下进行比较[10],取光电莫尔条纹的100个采样点进行测量,实际的正交性误差在[0°,10°]范围内,对两路正弦信号的正交性误差进行测量,测量误差范围如表1所示。

表1 不同方法下正交性误差测量误差范围

实验结果表明,在相同条件下,改进的CORDIC算法与其他测量方法相比,正交性测量误差范围更小,精度更高。

由此可见,本文提出的正交性误差测量方法能够有效地保证光电莫尔条纹信号的测量精度,实现对光电编码器输出信号的正交性误差进行动态实时测量。

4 结 语

本文对光电编码器输出信号的正交性误差进行了研究,在传统的CORDIC算法基础上进行了改进,改进优化后的CORDIC算法在角度解算上的误差明显减小,提高了检测准确度。在MATLAB仿真环境下利用改进的CORDIC算法检测正弦仿真信号的相位差,并在相同条件下将此算法的测量误差与其他的检测方法进行比较,结果显示,改进的CORDIC算法对输出信号的正交性误差测量的误差范围更小,对光电编码器的自动校准系统具有现实应用意义。

猜你喜欢
测量误差编码器向量
融合CNN和Transformer编码器的变声语音鉴别与还原
向量的分解
《疯狂的计量单位》
密度测量误差分析
聚焦“向量与三角”创新题
基于双增量码道的绝对式编码器设计
向量垂直在解析几何中的应用
向量五种“变身” 玩转圆锥曲线
基于数字信号处理的脉冲编码器
基于敏感因子的GPS速度测量误差补偿算法