桑坤,,朱向冰,,金慧敏
(安徽師范大學 物理與電子信息學院,安徽 蕪湖 241000)
摘要:自整角機是一種用于角度測量的微型電機,,其輸出包含角度的模擬信號經過簡單處理和A/D變換后再通過CORDI算法解碼,。CODIC算法具有精度靈活可調、運算速度快,、硬件實現(xiàn)簡單等優(yōu)點,;通過對CORDC算法角度及對自整角機輸出信號的象限修正,設計了一種基于CORDIC算法流水線技術的自整角機解碼算法,,并以FPGA為平臺進行模擬和仿真,,驗證其準確性及可行性。
關鍵詞:CORDIC算法,;自整角機,;解碼;FPGA
0引言
自整角機是一種高精度的角度位置傳感器[1],,廣泛應用于航海,、航天、方位同步指示系統(tǒng)火炮等伺服系統(tǒng)中,。自整角機輸出信號主要以模擬信號進行傳送,,減少角度信號在較長距離傳輸時其他信號干擾,,同時方便人們控制目標元件。傳統(tǒng)的軸角測量通常采用峰值采樣,、相干解調或專用的軸角數(shù)字轉換芯片實現(xiàn)[2],但是這幾種算法也存在精度不高,、運算速度較慢及價格昂貴等缺點,。本文使用的坐標旋轉數(shù)字計算(Coordinate Rotation Digital Computer,CORDIC)算法采用迭代的思想,,不進行乘法運算,,提高了運算速度。由于該算法是一種數(shù)字數(shù)字的算法,,有線性的收斂域和序列及迭代次數(shù)可有效提高精度[3],。
本文利用CORDIC算法[4]計算反正切函數(shù)并結合自整角機輸入輸出信號的特點,實現(xiàn)一種運算速度高,、可靠性好,、精度高、硬件設計簡單的角度解碼,,并用FPGA豐富硬件資源簡化程序,,提高電路的運算速度和可靠性。
1自整角機基本原理
自整角機是利用自整步特性將轉角變?yōu)榻涣麟妷夯蛴山涣麟妷鹤優(yōu)檗D角的感應式微型電機,,當激勵繞組以一定的頻率交流電壓勵磁時,,輸出繞組的電壓幅值與轉子轉角成正余弦函數(shù)關系[5]。在結構上,,自整角機主要由轉子和定子組成,,轉子軸上的單相繞組通過電刷和滑環(huán)與外界連接,引出端用Z1和Z2表示,;定子的三相對稱繞組以Y型連接,,空間位置上依次落后120°,如圖1所示,。
設轉子轉動θ,,自整角機三路輸出模擬信號,但是需要電壓激勵,。激勵電壓為:
S1,、S2、S3三路定子的感應電動勢分別為:
上式中sinωt為交流信號,,θ是自整角機偏轉的角度,。
2CORDIC算法原理
CORDIC算法基本思想是迭代,通過多個固定的及與運算有關的角度逐次遞減,,從而逐漸逼近需要的角度,。
CORDIC算法的基本公式在一些文獻中有詳細推導,,這里僅作簡要的說明。
如圖2所示,,假設向量(xi,yi)按照一定角度旋轉到(xj,yj)則有:
起始位置到終點位置可以通過多步迭代旋轉過程實現(xiàn),,每一步旋轉一定的相位,則:
提取cosθn,,則有:
定義每一步的旋轉角度為θn=arctan(12n),,總的旋轉相位為θ=∑Snθn,其中Sn=±1,,則:
其中K為增益因子,,其值的變化取決于迭代次數(shù),當?shù)螖?shù)N很大時:
CORDIC算法有旋轉模式(rotation)和矢量模式(vectoring)兩種旋轉模式[6],,該解碼算法采用矢量模式,。迭代方程如下:
其中zj是角度累加器,di=-sgn(yi)=1,y<0(順時針旋轉)
?。?,y>0(逆時針旋轉),。
假設初始條件為x0=x,y0=y,z0=0,經過n次迭代后,矢量模式的表達式為:
3自整角機解碼算法設計
3.1自整角機輸出信號的象限修正
利用CORDIC算法計算反正切值[7],由于arctan2-i(0≤i≤n)所能計算的值區(qū)域為-π2,,π2,,要計算全角度時必須對角度進行預處理。將公式(2)-(4)整理得:
對自整角機三路輸出的模擬信號進行簡單運算,,得到只含角度θ的正余弦值和正切值,;然后對得到的正余弦函數(shù)進行修正,得到角度θ所在的范圍,。
將得到的正弦和余弦函數(shù)進行區(qū)間范圍的判斷,,sinθ和cosθ所在的區(qū)間范圍如下:當|cosθ|-|sinθ|≥0,θ在
定義一個中間變量α,則有:
sinθ,、cosθ在不同區(qū)域的值如表1所示,。
上述輸出角度θ的劃分修正,將角量全部轉換到0,,π4,,可有效避免討論sinθ或cosθ等于0的情況,在計算過程中,,也避免了反正切函數(shù)在±π2和±π附近角度不收斂無法計算的情況,,因此不占用和浪費大量資源,提高了運算速度,。
3.2CORDIC求全角量反正切
對于自整角機輸出信號,,在旋轉的角度一定時,可將輸出的信號理解為勵磁信號Eref=ERLO-RHIsinωt對sinθ和cosθ進行的幅度調制[6],而勵磁信號的變化只是幅值發(fā)生變化,,對自整角機輸出信號的正確解碼不產生影響,,只要能正確地解碼出角度值,則幅值的變化可以忽略不計,,本文選擇CORDIC算法的矢量模式,,令Uxin=cosθ,Uyin=sinθ,z0=0,經過n次迭代后得到式(11),。
3.3CORDIC算法的角度輸出
自整角機解碼算法采用20位二進制數(shù)表示輸出信號,,輸入信號為16位二進制數(shù)。1°=216360≈18210=101101102,;arctan(2-n)可表示為2202π·arctan(2-n),當?shù)螖?shù)n不少于16時,,就能夠達到一定的精度,。
4CORDIC自整角機解碼算法的實現(xiàn)及仿真
4.1CORDIC自整角機解碼算法的實現(xiàn)
基于CORDIC算法實現(xiàn)的設計有迭代結構和流水線結構[7],流水線結構運算速度比迭代結構快,,采用流水線結構可有效提高算法速度,。在流水線結構中,旋轉角度集的各個值均是直接聯(lián)到累加器的[6] ,。流水線結構如圖3所示,。
4.2FPGA實驗仿真
采用VHDL語言描述并在FPGA上實現(xiàn)流水線結構的CORDIC解碼算法,利用QuartuesII進行仿真,,驗證其可行性與正確性,。
設定系統(tǒng)時鐘為98 MHz,輸入一位時鐘信號clk,1位使能信號ena,16位輸入信號Xin,、Yin,,及20位角度解碼信號輸出Aout,仿真選取50°和260°進行模擬,,驗證該解碼算法的正確性,。
當自整角機的角度為50°時,QuartuesII仿真圖及仿真數(shù)據(jù)如圖4和表2所示,。
當自整角機的角度為260°時,,仿真圖及仿真數(shù)據(jù)如圖5和表3所示。
由上述數(shù)據(jù)可知,,在角度一定,、Eref變化的情況下,該算法可以正確地解碼θ,,并且達到一定的精度,;仿真中的冒險競爭不是發(fā)生在時鐘上升沿,不影響角度的正確解碼,。從仿真圖上可以看出有一定的延時,,這是由迭代運算造成的效果,,可以通過改變時鐘頻率進行改善。
5結論
本文采用CORDIC算法在FPGA上實現(xiàn)自整角機輸出角度的解碼,,并對自整角機的輸出信號進行簡單的運算和角度的象限修正預處理,,在可計算的范圍內,通過QuartuesII驗證其可行性與正確性,,提升了運行速度和精度,,從而驗證了該設計的正確可行。
參考文獻
?。?] 楊桂華. 高精度自整角機精度的分析[J]. 微電機,1990(1):11-15.
?。?] 李全.正交三角函數(shù)的CORDIC實現(xiàn)[J].微計算機信息,2008,24(12-3):268-269.
[3] 陳石平,,廖丁毅,,張權.CORDIC算法在正角調制技術的應用[J].廣西通信技術,2015(2):49-52.
?。?]王華華,陳雷成,陳發(fā)堂,,等.基于FPGA的STACORDIC算法在SCME中的應用[J].電子技術應用,2014,40(8):109-111,115.
[5] ANDRAKA R. A survey of CORDIC algorithms for FPGA based computers[M]. New York: ACM Press, 1998.
?。?] VOLDER E. The CORDIC trigonometric computing technique[J].IRE Transactions on Electronic Computers,1959, 8:379-385.
?。?] 李滔,韓月秋.基于流水線CORDIC 算法的三角函數(shù)發(fā)生器[J].電子技術應用, 2000, 25(4):85-87.