鮑克勤, 張雪健, 倪 蓉
(上海電力學院 自動化工程學院, 上海 200090)
隨著工業(yè)控制技術的不斷進步與快速發(fā)展,該行業(yè)對光電編碼器精度的要求也不斷提高。對光電編碼器進行深入研究不難發(fā)現(xiàn),其最主要的測量誤差來源是細分精度誤差,而光電編碼器輸出信號的質(zhì)量也對其細分精度產(chǎn)生較大的影響[1-2]。在理想狀態(tài)下,光電編碼器的輸出信號是兩個相位差為 π/2的標準正弦波形信號,然而實際采集到的光電編碼器莫爾條紋光電信號受到碼盤刻畫工藝、系統(tǒng)噪聲、器件安裝工藝等各種因素的影響,會導致實際信號中含有多項誤差,嚴重影響了編碼器的細分精度。實際的兩路莫爾條紋信號由于一些因素的影響而存在直流電平漂移、高次諧波等信號誤差[3-4]。
在各項指標中,光柵莫爾條紋信號的正交性誤差是衡量其測量精度的一項重要指標。因此,開展對光電編碼器輸出信號的正交性誤差測量研究是提高其精度測量的一個重要環(huán)節(jié)。目前,美國天文臺提出了基于Heidenhain模型的補償方法,但是該方法計算量大;羅剛等人[5]采用了一種基于鎖相環(huán)的檢測方法,但該方法存在“高頻失鎖”現(xiàn)象。本文在前人研究的基礎上引入了一種基于改進型的坐標旋轉(zhuǎn)數(shù)字計算機(Coordinate Rotation Digital Computer,CORDIC)算法來實時檢測光電編碼器的正交性誤差。該方法很少被運用到編碼器正交性偏差的實時檢測領域。
CORDIC算法是VOLDER J D在1959年發(fā)表的一篇關于設計航空控制系統(tǒng)的文章中首次提出的,通過簡單的移位運算和加減法運算的循環(huán)迭代完成對一些常用復雜函數(shù)的算術運算。該算法在隨后的幾十年里得到了不斷的改進與優(yōu)化[6-8]。
在笛卡爾坐標系中,向量旋轉(zhuǎn)示意圖如圖1所示。

圖1 向量旋轉(zhuǎn)示意
(1)

(2)
式中:kn——校模因子,其取值的大小只與迭代次數(shù)n有關;
δi—— 判斷因子,主要是用來表示旋轉(zhuǎn)方向的一個參數(shù),δi∈{-1,1},當δi=1則表示下一次的旋轉(zhuǎn)方向為逆時針,當δi=-1則表示下一次的旋轉(zhuǎn)方向為順時針。
當n足夠大時,校模因子kn可以表示為
(3)
傳統(tǒng)CORDIC算法在笛卡爾坐標系下的基本迭代關系公式為
(4)
式中:i——旋轉(zhuǎn)次數(shù)。
該算法的收斂域約為[-99.88°,99.88°]。CORDIC算法存在有兩種不同的工作模式:旋轉(zhuǎn)模式(Vectoring Mode,VM)和向量(Rotation Mode,RM)模式。根據(jù)判斷因子δi取值的正負,來表征傳統(tǒng)CORDIC算法的工作方式是處于向量模式下還是處于旋轉(zhuǎn)模式下。
CORDIC算法作為一種角度計算的方法,本身在角度解算等方面存在一些算法誤差。在仿真軟件MATLAB環(huán)境下,利用傳統(tǒng)的CORDIC算法對[0°,90°]范圍內(nèi)的角度進行計算,其解算誤差如圖2所示。

圖2 傳統(tǒng)CORDIC算法角度解算誤差
從圖2可以看到,傳統(tǒng)的CORDIC算法在[0°,90°]范圍內(nèi)的角度解算誤差范圍在[-0.1°,0.1°],角度解算誤差較大。傳統(tǒng)的CORDIC算法迭代過程中,每一級的旋轉(zhuǎn)方向都要取決于上一級的旋轉(zhuǎn)迭代結(jié)果,運算速度低,且存在循環(huán)迭代次數(shù)過長、輸出延時較大等不足,故需要對其進行改進。
常規(guī)的CORDIC算法迭代在角度計算時,會引入乘法和平方根運算,增加運算量,因此本文引入雙迭代法(Double Iteration Algorithm)。其原理是進行兩次基本角度的迭代旋轉(zhuǎn),主要優(yōu)勢在于將隨著向量旋轉(zhuǎn)而變化的參數(shù)由乘法平方根變?yōu)榧臃ê鸵莆贿\算,公式如下
(5)
由于改進的CORDIC算法的迭代次數(shù)發(fā)生變化,改變了kn的大小,所以改進的CORDIC算法的增益因子為
(6)
本文通過對迭代過程進行觀察發(fā)現(xiàn),當輸入的數(shù)據(jù)參數(shù)接近1時,向量可能會旋轉(zhuǎn)至第二象限,此時x的值變?yōu)樨撝?得出的角度也會大于90°。在任何一級迭代過程中,只要向量旋轉(zhuǎn)至第二象限,則在下一級迭代過程中必須旋轉(zhuǎn)至第一象限。因此,需要增加一個條件,即
(7)
在仿真軟件MATLAB環(huán)境下,利用該算法對[0°,90°]范圍內(nèi)的余弦角度進行解算,其解算誤差如圖3所示。

圖3 改進的CORDIC算法角度解算誤差
對比圖2和圖3可以發(fā)現(xiàn),改進的CORDIC算法誤差明顯減小,在[0°,90°]范圍內(nèi)的最大解算誤差僅為3×10-5°。由此可知,基于改進的CORDIC算法可以更有效地實現(xiàn)對角度的計算。
在MATLAB仿真環(huán)境下,模擬產(chǎn)生兩路正弦的信號,并設置其在[0°,10°]范圍內(nèi)產(chǎn)生不同的相位差,再利用改進的CORDIC算法對這兩路正弦信號的相位差進行檢測,最后得出信號的相位差測量誤差。其仿真結(jié)果如圖4所示。

圖4 相位差測量誤差數(shù)據(jù)
由圖4可知,利用相位差計算算法的誤差范圍在[-0.03°,0.03°],誤差最大值為0.027°,最小值為0.004°。將本文中提出的改進的CORDIC算法與相關函數(shù)法、傅里葉變換法的測量誤差在相同的條件下進行比較[10],取光電莫爾條紋的100個采樣點進行測量,實際的正交性誤差在[0°,10°]范圍內(nèi),對兩路正弦信號的正交性誤差進行測量,測量誤差范圍如表1所示。

表1 不同方法下正交性誤差測量誤差范圍
實驗結(jié)果表明,在相同條件下,改進的CORDIC算法與其他測量方法相比,正交性測量誤差范圍更小,精度更高。
由此可見,本文提出的正交性誤差測量方法能夠有效地保證光電莫爾條紋信號的測量精度,實現(xiàn)對光電編碼器輸出信號的正交性誤差進行動態(tài)實時測量。
本文對光電編碼器輸出信號的正交性誤差進行了研究,在傳統(tǒng)的CORDIC算法基礎上進行了改進,改進優(yōu)化后的CORDIC算法在角度解算上的誤差明顯減小,提高了檢測準確度。在MATLAB仿真環(huán)境下利用改進的CORDIC算法檢測正弦仿真信號的相位差,并在相同條件下將此算法的測量誤差與其他的檢測方法進行比較,結(jié)果顯示,改進的CORDIC算法對輸出信號的正交性誤差測量的誤差范圍更小,對光電編碼器的自動校準系統(tǒng)具有現(xiàn)實應用意義。