概述:
1、本文主要介绍如何测试正余弦编码器的绝对精度。
2、本文介绍如何使用傅里叶变化算法优化正余弦编码器精度。
被测品及测试设备简介:
1、被测编码器每旋转一个机械360°,sin cos分别输出5个周期。
2、被测编码器的sin cos信号理论信号幅值为0.5V。
3、被测编码器没有Z相信号。
4、测试设备使用西门子伺服电机(V90驱动器,PC通过485控制)+海德汉标准增量编码器,标准编码器绝对精度0.005°
5、sin cos 标准增量编码器信号使用NI PCI-6374同步采集卡采集,并使用共享采样时钟和开始触发的方式硬件同步了SIN COS和标准编码器的采集信号。
6、系统设计精度为0.01°。
倒叙,先上测试结论:
此编码器原始波形误差为0.94°,软件算法修正后误差为0.23°。
信号处理步骤
Step1:确保Sin Cos 标准的增量编码器信号 采样的同步性
这个设备对采集的同步性要求非常高,不光sin cos电压信号需要同步,电压信号与标准编码器的信号采集也要同步,否则会引入采集误差。
解决方案:
本项目使用NI的同步采集卡同步各采样信号,在物理层面完全消除了采集不同步造成的误差,具体原理见我另外一篇文章:
https://blog.csdn.net/HOHO333/article/details/107124503
采集到的原始同步波形有三个:
波形1:标准编码器的波形。
波形2:sin电压波形
波形3:cos电压波形
Step2:重采样,去除电机转速稳定性误差
一般的伺服转速控制精度在±1RPM左右,这个转速抖动会对FFT变换的结果产生影响。理论上来说,使用绝对匀速的信号进行FFT变换才是最完美的。这里我多说一句,控制伺服的转速一般由两种模式,一种是速度模式,一种是脉冲模式。一般来说,使用速度模式的控速稳定性更高。本项目使用西门子V90伺服控制器,LabVIEW使用RS232转485总线+modbus协议控制伺服运动。
同时,如果要进行FFT变换,必须使用转速绝对匀速的原始数据(此时,sin cos理论值才是绝对的正弦波),否则就会引入由于测试设备造成的误差。
解决方案:
大力出奇迹法~由于标准编码器与被测品编码器是同轴+同步采集,所有的伺服电机抖动也都表现在了标准编码器上。本系统使用了一个较高的采样时钟(1MHz)采集原始数据,然后以标准编码器的波形为基准,以指定角度步进(0.01°)对标准编码器插值,并使用插值索引找到对应的时刻的SinCos电压值,从而重采样出SinCos波形。因为这个波形均是以0.01°的步进重采样而成,因此是绝对意义上的匀速。从而完全剔除了由于电机转速抖动造成的误差。
至此得到以下波形,此波形在转速上时绝对稳定的。 仔细观察,蓝线有直流偏置。
Step3:原始数据公差计算
根据正余弦编码器的反正切算法,直接使用上图的sin cos原始电压进行角度计算。
电角度=arctan(同一时刻的sin电压÷同一时刻的cos电压)
额外注意的地方:
1、电角度与机械角度不是一个概念,本案例使用的被测品5个电角度=1个机械角度。
2、反正切算法需要配合相位判断才能出连续多圈的角度。
使用sin cos电压波形可以求出一个电角度的波形,同时利用相位判断及电角度、机械角度算法把sin cos(被测品)的机械连续角度算出来,与标准编码器的角度作差,求出原始波形的公差:
下图红色曲线为原始波形的公差,可以看到公差以5个波峰为周期抖动。(这是因为一个机械周期对应5个电周期决定的)此时公差为0.94°左右
Step4:FFT变化,求被测品编码器特征
使用FFT函数对sin cos信号处理,获取以下特征:
sin和cos信号的(别的信号没用):
1、主频相位。
2、直流分量
3、主频幅值
可以看到,理论上sin cos的相位差应该是90°,实际算下来多了0.25°,所有sin cos的原始信号并不正交信号,有些正交误差。
Step5:修正算法
sin cos指原始电压波形
φ=SinCos相位差-π/2=0.25°
sin1=sin-直流分量
cos1=cos-直流分量
sin2=sin1/主频幅值
cos2=cos1/主频幅值
相位补偿公式:
sin3=[sin2-cos2*sin(-φ)]÷cos(-φ)
角度=arctan(sin3/cos2)
修正后的曲线为蓝色曲线,可以看到,精度提高到了0.23°