?!±?,朱向冰,金慧敏
(安徽師范大學(xué) 物理與電子信息學(xué)院,安徽 蕪湖 241000)
?
一種基于CORDIC算法的自整角機(jī)信號(hào)解碼研究*
桑坤,朱向冰,金慧敏
(安徽師范大學(xué) 物理與電子信息學(xué)院,安徽 蕪湖 241000)
自整角機(jī)是一種用于角度測(cè)量的微型電機(jī),其輸出包含角度的模擬信號(hào)經(jīng)過簡(jiǎn)單處理和A/D變換后再通過CORDI算法解碼。CODIC算法具有精度靈活可調(diào)、運(yùn)算速度快、硬件實(shí)現(xiàn)簡(jiǎn)單等優(yōu)點(diǎn);通過對(duì)CORDC算法角度及對(duì)自整角機(jī)輸出信號(hào)的象限修正,設(shè)計(jì)了一種基于CORDIC算法流水線技術(shù)的自整角機(jī)解碼算法,并以FPGA為平臺(tái)進(jìn)行模擬和仿真,驗(yàn)證其準(zhǔn)確性及可行性。
CORDIC算法;自整角機(jī);解碼;FPGA
引用格式:桑坤,朱向冰,金慧敏. 一種基于CORDIC算法的自整角機(jī)信號(hào)解碼研究[J].微型機(jī)與應(yīng)用,2016,35(18):78-80.
自整角機(jī)是一種高精度的角度位置傳感器[1],廣泛應(yīng)用于航海、航天、方位同步指示系統(tǒng)火炮等伺服系統(tǒng)中。自整角機(jī)輸出信號(hào)主要以模擬信號(hào)進(jìn)行傳送,減少角度信號(hào)在較長(zhǎng)距離傳輸時(shí)其他信號(hào)干擾,同時(shí)方便人們控制目標(biāo)元件。傳統(tǒng)的軸角測(cè)量通常采用峰值采樣、相干解調(diào)或?qū)S玫妮S角數(shù)字轉(zhuǎn)換芯片實(shí)現(xiàn)[2],但是這幾種算法也存在精度不高、運(yùn)算速度較慢及價(jià)格昂貴等缺點(diǎn)。本文使用的坐標(biāo)旋轉(zhuǎn)數(shù)字計(jì)算(Coordinate Rotation Digital Computer,CORDIC)算法采用迭代的思想,不進(jìn)行乘法運(yùn)算,提高了運(yùn)算速度。由于該算法是一種數(shù)字-數(shù)字的算法,有線性的收斂域和序列及迭代次數(shù)可有效提高精度[3]。
本文利用CORDIC算法[4]計(jì)算反正切函數(shù)并結(jié)合自整角機(jī)輸入輸出信號(hào)的特點(diǎn),實(shí)現(xiàn)一種運(yùn)算速度高、可靠性好、精度高、硬件設(shè)計(jì)簡(jiǎn)單的角度解碼,并用FPGA豐富硬件資源簡(jiǎn)化程序,提高電路的運(yùn)算速度和可靠性。
圖1 自整角機(jī)原理圖
自整角機(jī)是利用自整步特性將轉(zhuǎn)角變?yōu)榻涣麟妷夯蛴山涣麟妷鹤優(yōu)檗D(zhuǎn)角的感應(yīng)式微型電機(jī),當(dāng)激勵(lì)繞組以一定的頻率交流電壓勵(lì)磁時(shí),輸出繞組的電壓幅值與轉(zhuǎn)子轉(zhuǎn)角成正余弦函數(shù)關(guān)系[5]。在結(jié)構(gòu)上,自整角機(jī)主要由轉(zhuǎn)子和定子組成,轉(zhuǎn)子軸上的單相繞組通過電刷和滑環(huán)與外界連接,引出端用Z1和Z2表示;定子的三相對(duì)稱繞組以Y型連接,空間位置上依次落后120°,如圖1所示。
設(shè)轉(zhuǎn)子轉(zhuǎn)動(dòng)θ,自整角機(jī)三路輸出模擬信號(hào),但是需要電壓激勵(lì)。激勵(lì)電壓為:
Eref=ERLO-RHIsinωt
(1)
S1、S2、S3三路定子的感應(yīng)電動(dòng)勢(shì)分別為:
ES1-S3=ERLO-RHIsinωtsinθ
(2)
ES3-S2=ERLO-RHIsinωtsin(θ+120°)
(3)
ES2-S1=ERLO-RHIsinωtsin(θ+240°)
(4)
上式中sinωt為交流信號(hào),θ是自整角機(jī)偏轉(zhuǎn)的角度。
CORDIC算法基本思想是迭代,通過多個(gè)固定的及與運(yùn)算有關(guān)的角度逐次遞減,從而逐漸逼近需要的角度。
圖2 CORDIC旋轉(zhuǎn)示意圖
CORDIC算法的基本公式在一些文獻(xiàn)中有詳細(xì)推導(dǎo),這里僅作簡(jiǎn)要的說明。
如圖2所示,假設(shè)向量(xi,yi)按照一定角度旋轉(zhuǎn)到(xj,yj)則有:
(5)
起始位置到終點(diǎn)位置可以通過多步迭代旋轉(zhuǎn)過程實(shí)現(xiàn),每一步旋轉(zhuǎn)一定的相位,則:
(6)
提取cosθn,則有:
(7)
(8)
其中K為增益因子,其值的變化取決于迭代次數(shù),當(dāng)?shù)螖?shù)N很大時(shí):
(9)
CORDIC算法有旋轉(zhuǎn)模式(rotation)和矢量模式(vectoring)兩種旋轉(zhuǎn)模式[6],該解碼算法采用矢量模式。迭代方程如下:
(10)
假設(shè)初始條件為x0=x,y0=y,z0=0,經(jīng)過n次迭代后,矢量模式的表達(dá)式為:
(11)
3.1自整角機(jī)輸出信號(hào)的象限修正
(12)
對(duì)自整角機(jī)三路輸出的模擬信號(hào)進(jìn)行簡(jiǎn)單運(yùn)算,得到只含角度θ的正余弦值和正切值;然后對(duì)得到的正余弦函數(shù)進(jìn)行修正,得到角度θ所在的范圍。
定義一個(gè)中間變量α,則有:
(13)
sinθ、cosθ在不同區(qū)域的值如表1所示。
表1 不同區(qū)域的角度
3.2CORDIC求全角量反正切
對(duì)于自整角機(jī)輸出信號(hào),在旋轉(zhuǎn)的角度一定時(shí),可將輸出的信號(hào)理解為勵(lì)磁信號(hào)Eref=ERLO-RHIsinωt對(duì)sinθ和cosθ進(jìn)行的幅度調(diào)制[6],而勵(lì)磁信號(hào)的變化只是幅值發(fā)生變化,對(duì)自整角機(jī)輸出信號(hào)的正確解碼不產(chǎn)生影響,只要能正確地解碼出角度值,則幅值的變化可以忽略不計(jì),本文選擇CORDIC算法的矢量模式,令Uxin=cosθ,Uyin=sinθ,z0=0,經(jīng)過n次迭代后得到式(11)。
3.3CORDIC算法的角度輸出
4.1CORDIC自整角機(jī)解碼算法的實(shí)現(xiàn)
基于CORDIC算法實(shí)現(xiàn)的設(shè)計(jì)有迭代結(jié)構(gòu)和流水線結(jié)構(gòu)[7],流水線結(jié)構(gòu)運(yùn)算速度比迭代結(jié)構(gòu)快,采用流水線結(jié)構(gòu)可有效提高算法速度。在流水線結(jié)構(gòu)中,旋轉(zhuǎn)角度集的各個(gè)值均是直接聯(lián)到累加器的[6]。流水線結(jié)構(gòu)如圖3所示。
圖5 260°軟件仿真圖
圖3 流水線結(jié)構(gòu)示意圖
4.2FPGA實(shí)驗(yàn)仿真
采用VHDL語言描述并在FPGA上實(shí)現(xiàn)流水線結(jié)構(gòu)的CORDIC解碼算法,利用QuartuesII進(jìn)行仿真,驗(yàn)證其可行性與正確性。
設(shè)定系統(tǒng)時(shí)鐘為98 MHz,輸入一位時(shí)鐘信號(hào)clk,1位使能信號(hào)ena,16位輸入信號(hào)Xin、Yin,及20位角度解碼信號(hào)輸出Aout,仿真選取50°和260°進(jìn)行模擬,驗(yàn)證該解碼算法的正確性。
當(dāng)自整角機(jī)的角度為50°時(shí),QuartuesII仿真圖及仿真數(shù)據(jù)如圖4和表2所示。
圖4 50°軟件仿真圖
ErefUxinUyinXinYinθΔθ10.642790.76604210622510250.15770.15770.50.321390.38302105031255150.07530.07530.250.160690.191515252627650.07530.07530.050.032140.038301053125550.00530.00530.010.006430.0076621125150.00530.00530.0020.001290.00153425049.95580.04420.00040.0002580.0003181049.96340.0036
當(dāng)自整角機(jī)的角度為260°時(shí),仿真圖及仿真數(shù)據(jù)如圖5和表3所示。
由上述數(shù)據(jù)可知,在角度一定、Eref變化的情況下,該算法可以正確地解碼θ,并且達(dá)到一定的精度;仿真中的冒險(xiǎn)競(jìng)爭(zhēng)不是發(fā)生在時(shí)鐘上升沿,不影響角度的正確解碼。從仿真圖上可以看出有一定的延時(shí),這是由迭代運(yùn)算造成的效果,可以通過改變時(shí)鐘頻率進(jìn)行改善。
表3 自整角機(jī)輸出角度為260°時(shí)仿真數(shù)據(jù)
本文采用CORDIC算法在FPGA上實(shí)現(xiàn)自整角機(jī)輸出角度的解碼,并對(duì)自整角機(jī)的輸出信號(hào)進(jìn)行簡(jiǎn)單的運(yùn)算和角度的象限修正預(yù)處理,在可計(jì)算的范圍內(nèi),通過QuartuesII驗(yàn)證其可行性與正確性,提升了運(yùn)行速度和精度,從而驗(yàn)證了該設(shè)計(jì)的正確可行。
[1] 楊桂華. 高精度自整角機(jī)精度的分析[J]. 微電機(jī),1990(1):11-15.
[2] 李全.正交三角函數(shù)的CORDIC實(shí)
現(xiàn)[J].微計(jì)算機(jī)信息,2008,24(12-3):268-269.
[3] 陳石平,廖丁毅,張權(quán).CORDIC算法在正角調(diào)制技術(shù)的應(yīng)用[J].廣西通信技術(shù),2015(2):49-52.
[4]王華華,陳雷成,陳發(fā)堂,等.基于FPGA的STA-CORDIC算法在SCME中的應(yīng)用[J].電子技術(shù)應(yīng)用,2014,40(8):109-111,115.
[5] ANDRAKA R. A survey of CORDIC algorithms for FPGA based computers[M]. New York: ACM Press, 1998.
[6] VOLDER E. The CORDIC trigonometric computing technique[J].IRE Transactions on Electronic Computers,1959, 8:379-385.
[7] 李滔,韓月秋.基于流水線CORDIC 算法的三角函數(shù)發(fā)生器[J].電子技術(shù)應(yīng)用, 2000, 25(4):85-87.
Study on synchro signal decoding based on CORDIC algorithm
Sang Kun,Zhu Xiangbing,Jin Huimin
(College of Physics and Electronic Information,Anhui Normal University,Wuhu 241000,China)
Synchro is a miniature motor used for measurement of angle. It outputs analog signal transformed by A/D transform, and then uses the CORDIC algorithm for decoding .The CORDIC algorithm has the advantages of flexible and adjustable precision, fast calculation speed and easy hardware realization. Based on the CORDIC algorithm and synchro outputs angles correction in quadrants,this article designs a CORDIC algorithm based on pipelining for decoding, and simulates and verifies the accuracy and feasibility of the algorithm by FPGA.
CORDIC algorithm;synchro;signal decoding;FPGA
安徽省高校自然科學(xué)研究重大項(xiàng)目(KJ2015ZD23)
TN79+2
ADOI: 10.19358/j.issn.1674- 7720.2016.18.023
2016-04-22)
桑坤(1991-),男,碩士研究生,主要研究方向:電子信息技術(shù)。
朱向冰(1973-),通信作者,男,博士,教授,主要研究方向:光電技術(shù)。E-mail:skahnu@163.com。
金慧敏(1991-),女,碩士研究生,主要研究方向:信號(hào)處理。