【LabVIEW技巧】使用傅里叶变换修正正余弦编码器误差

概述:

1、本文主要介绍如何测试正余弦编码器的绝对精度。

2、本文介绍如何使用傅里叶变化算法优化正余弦编码器精度。

被测品及测试设备简介:

1、被测编码器每旋转一个机械360°,sin cos分别输出5个周期。

2、被测编码器的sin cos信号理论信号幅值为0.5V。

3、被测编码器没有Z相信号。

4、测试设备使用西门子伺服电机(V90驱动器,PC通过485控制)+海德汉标准增量编码器,标准编码器绝对精度0.005°

【LabVIEW技巧】使用傅里叶变换修正正余弦编码器误差

5、sin cos 标准增量编码器信号使用NI PCI-6374同步采集卡采集,并使用共享采样时钟和开始触发的方式硬件同步了SIN COS和标准编码器的采集信号。

6、系统设计精度为0.01°。

倒叙,先上测试结论:

此编码器原始波形误差为0.94°,软件算法修正后误差为0.23°

【LabVIEW技巧】使用傅里叶变换修正正余弦编码器误差

信号处理步骤

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°的步进重采样而成,因此是绝对意义上的匀速。从而完全剔除了由于电机转速抖动造成的误差。

至此得到以下波形,此波形在转速上时绝对稳定的。 仔细观察,蓝线有直流偏置。

【LabVIEW技巧】使用傅里叶变换修正正余弦编码器误差

Step3:原始数据公差计算

根据正余弦编码器的反正切算法,直接使用上图的sin cos原始电压进行角度计算。

电角度=arctan(同一时刻的sin电压÷同一时刻的cos电压)

额外注意的地方:

1、电角度与机械角度不是一个概念,本案例使用的被测品5个电角度=1个机械角度。

2、反正切算法需要配合相位判断才能出连续多圈的角度。

使用sin cos电压波形可以求出一个电角度的波形,同时利用相位判断及电角度、机械角度算法把sin cos(被测品)的机械连续角度算出来,与标准编码器的角度作差,求出原始波形的公差:

下图红色曲线为原始波形的公差,可以看到公差以5个波峰为周期抖动。(这是因为一个机械周期对应5个电周期决定的)此时公差为0.94°左右

【LabVIEW技巧】使用傅里叶变换修正正余弦编码器误差

 Step4:FFT变化,求被测品编码器特征

使用FFT函数对sin cos信号处理,获取以下特征:

sin和cos信号的(别的信号没用):

1、主频相位。

2、直流分量

3、主频幅值

可以看到,理论上sin cos的相位差应该是90°,实际算下来多了0.25°,所有sin cos的原始信号并不正交信号,有些正交误差。

【LabVIEW技巧】使用傅里叶变换修正正余弦编码器误差

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°

【LabVIEW技巧】使用傅里叶变换修正正余弦编码器误差

 

上一篇:多元微积分_闭合路径线积分实例


下一篇:mapbox获取各种经纬度