毛群
(阿壩師范學(xué)院 電子信息與自動化學(xué)院,四川汶川, 623002)
頻率測量在信號處理、工程應(yīng)用中隨處可用,常見的頻率測量方法有直接測頻法和周期測頻法以及等精度測頻法。其中直接測頻、周期測頻法的弊端在于測頻誤差要隨待測信號本身頻率變化而變化,使其在工程應(yīng)用中有所限制。而等精度測頻法測量精度高且不會因待測信號頻率變化而發(fā)生變化[1]。
等精度測量頻率方法消除誤差的原理是采用被測信號觸發(fā)門控信號,使得實際門控信號周期不再是一個固定值,而剛好是被測信號周期的整數(shù)倍,這樣便消除傳統(tǒng)測量中產(chǎn)生±l的周期誤差,使測頻精度與待測信號頻率無關(guān),實現(xiàn)待測信號全頻率范圍等精度測量[2]。其時序如圖1所示,設(shè)在閘門時間T內(nèi),計數(shù)器計數(shù)N個待測時鐘,計數(shù)M個基準(zhǔn)時鐘。
圖1 等精度測頻工作時序圖
在時間T內(nèi),利用兩個計數(shù)器同步計數(shù)關(guān)系有:
則待測信號頻率為:
數(shù)字頻率計系統(tǒng)由自動增益控制AGC模塊、整形模塊、頻率采集模塊、主控模塊和液晶顯示模塊構(gòu)成,系統(tǒng)結(jié)構(gòu)框圖如圖2所示。頻率采集模塊采用FPGA實現(xiàn),用它設(shè)計等精度測量模塊和SPI通信模塊,對數(shù)據(jù)進(jìn)行采集后送給單片機(jī),完成對頻率數(shù)據(jù)的采集和與主模塊通信。主控模塊采用STM32F103C8T6單片機(jī),其內(nèi)置64K或128K閃存程序儲存器,具有快速處理數(shù)據(jù)、低功耗、價格低廉等優(yōu)點。STM32單片機(jī)接收數(shù)據(jù)后,對數(shù)據(jù)進(jìn)行處理計算,送LCD液晶顯示。系統(tǒng)前端主要是利用壓控放大器AD603和檢波電路實現(xiàn)信號增益控制,集成施密特觸發(fā)器74HC14電路模塊實現(xiàn)信號整形[3]。
圖2 系統(tǒng)結(jié)構(gòu)框圖
為適應(yīng)各種頻率、幅度的待測信號fs,頻率計系統(tǒng)設(shè)計了自動增益控制電路(AGC),該模塊主要由程控放大器AD603、高速比較器AD8561、集成放大器OPA690和檢波電路構(gòu)成,如圖3所示。電路基本原理:通過放大信號反饋改變電路放大倍數(shù),實現(xiàn)自動調(diào)節(jié),使放大信號幅度在一定的范圍內(nèi)保持穩(wěn)定[4]。從而控制其增益,使其輸出幅度穩(wěn)定的信號。輸出信號通過如圖4所示共射放大整形電路輸入FPGA。
圖3 自動增益控制電路圖
圖4 整形電路圖
基于等精度測頻原理,通過Verilog語言編寫代碼,設(shè)計等精度測頻模塊電路,電路如圖5所示,本設(shè)計采用的是FPGA CycloneII-EP2C5T144C8N。脈沖計數(shù)(signal)采用系統(tǒng)時鐘分頻。單片機(jī)發(fā)送清零信號對FPGA計數(shù)器清零,發(fā)啟動信號到FPGA的enable端口。經(jīng)過邏輯判斷后計數(shù)模塊輸出高電平的clken信號到DFF觸發(fā)器輸入D端口,此時觸發(fā)器輸出Q端是低電平,計數(shù)模塊還沒有開始計數(shù)和計時,只有當(dāng)輸入信號出現(xiàn)上升沿時,觸發(fā)器輸出Q端才輸出高電平到計數(shù)模塊的gate_ctr端口(門控信號),計數(shù)模塊在門控信號為高電平時開始對輸入信號和標(biāo)準(zhǔn)時鐘信號計數(shù)。當(dāng)計時到1s時,計數(shù)模塊控制邏輯輸出低電平的clken信號到DFF觸發(fā)器D端口,此時觸發(fā)器輸出Q端還是高電平,計數(shù)模塊還沒停止工作,只有當(dāng)輸入信號出現(xiàn)上升沿時,觸發(fā)器輸出Q端才輸出低電平到計數(shù)模塊的gate_ctr端口。因為計數(shù)器是在輸入信號上升沿開始工作,同樣在輸入信號的上升沿結(jié)束,實現(xiàn)了等精度測頻,沒有脈沖計數(shù)的誤差[5~6]。
圖5 等精度測頻原理的FPGA設(shè)計電路圖
在結(jié)束一次測量后,計數(shù)模塊(freq)輸出finish信號給單片機(jī),單片機(jī)分時讀取計數(shù)數(shù)據(jù)和計時數(shù)據(jù),并完成計算處理得出頻率。讀取數(shù)據(jù)需要sel、addr0、addr1控制信號參與,數(shù)據(jù)口(count)是8位,而計數(shù)(計時)32位,可分批讀取,當(dāng)SEL為1時,讀取計數(shù)值,分4次讀??;當(dāng)SEL為0時,讀取計時值,分4次讀取,然后進(jìn)行數(shù)據(jù)處理。讀取并處理完成數(shù)據(jù)的頻率值后,進(jìn)入下一次測量。下一次測量前,單片機(jī)發(fā)送clr清零信號到FPGA,把上一次的計數(shù)計時數(shù)據(jù)、信號標(biāo)志位等復(fù)位;單片機(jī)發(fā)送啟動信號(低電平)到FPGA的enable端口,開始新一輪測量。
FPGA除了完成等精度測量電路,還要實現(xiàn)將采集的頻率數(shù)據(jù)與主控單片機(jī)模塊通信,故在FPGA中設(shè)計SPI通信模塊。其工作時序為SCK上升沿數(shù)據(jù)采樣,下降沿輸出數(shù)據(jù)。在SPI通信模塊中先分別捕捉由STM32傳送的SCK信號的上升沿和下降沿,然后SCK上升沿且CS為低電平,F(xiàn)PGA作為從機(jī)逐位讀取STM32主機(jī)發(fā)送的命令數(shù)據(jù)并寄存在rxd_data中,再傳送freq模塊的rxd_command;SCK下降沿且CS為低電平,F(xiàn)PGA從機(jī)通過MISO通道向STM32主機(jī)逐位傳送寄存在txd_Data中的數(shù)據(jù)。采用Verilog語言編程實現(xiàn)的FPGA電路設(shè)計如圖6所示。
圖6 FPGA模塊整體電路圖
單片機(jī)主控與外圍電路連接如圖7所示,本設(shè)計使用STM32F103C8T6單片機(jī)。其中2腳~14腳外接一個LCD液晶顯示,用于顯示測得的信號頻率和周期;21腳~24腳是用于與FPGA通信的四條SPI串線:從設(shè)備片選CS、MISO通道、MOSI通道和時鐘信號SCLK。四條SPI串線控制整個系統(tǒng):通過SPICS選中FPGA或初始化FPGA,時鐘信號SCLK是由STM32控制,STM32向FPGA發(fā)送數(shù)據(jù)時設(shè)置為高電平,STM32接收FPGA傳回的數(shù)據(jù)時設(shè)置為低電平。MOSI通道用于STM32向FPGA發(fā)送數(shù)據(jù)或者命令,而MISO通道則是用于FPGA向STM32發(fā)送數(shù)據(jù)或者命令,通過這兩個通道,在時鐘信號的相應(yīng)階段,實現(xiàn)STM32和FPGA的通信。
圖7 STM32電路連接圖
STM32主控設(shè)計流程如圖8所示。當(dāng)系統(tǒng)開始運(yùn)行,STM32單片機(jī)初始化I/O端口和LCD液晶顯示后,根據(jù)SPI協(xié)議,通過MOSI端向FPGA發(fā)送初始化命令(其中包括使能清零和數(shù)據(jù)清零),再向FPGA發(fā)送測頻使能信號,控制FPGA開始測頻,F(xiàn)PGA計數(shù)器計數(shù)和定時。單片機(jī)檢測FPGA是否傳送回測頻結(jié)束信號,確定狀態(tài):如果接收到測頻結(jié)束信號,則從FPGA中讀取測頻數(shù)據(jù),同時控制FPGA停止測頻,然后對采集的數(shù)據(jù)進(jìn)行運(yùn)算處理得到所測的頻率和周期,并在LCD1602液晶上顯示,再將FPGA初始化,啟動下一次測量。
圖8 STM32單片機(jī)主控流程圖
由于自動增益控制電路帶寬設(shè)計約為45MHz。系統(tǒng)測試時,在選 擇1Hz~40MHz內(nèi) 選 取100Hz、100kHz、1MHz、10MHz、40MHz頻率點進(jìn)行測試,測量結(jié)果如表1所示。從測量結(jié)果可以看出,所設(shè)計的等精度數(shù)字頻率計系統(tǒng)消除了頻率測量中的±1誤差,在整個測量范圍內(nèi)測量相對誤差都在2×10-4以內(nèi),系統(tǒng)具有較寬測量范圍和一定精度。
表1 測量結(jié)果
本文設(shè)計的數(shù)字頻率計主要利用FPGA和單片機(jī)設(shè)計,由FPGA采集計數(shù)值,單片機(jī)進(jìn)行頻率值計算和顯示,規(guī)避了FPGA不便于浮點運(yùn)算的不足,有效利用單片機(jī)便于控制及人機(jī)交互的特點。實驗表明,提高系統(tǒng)晶振頻率和精度,可有效保證頻率計的測量精度,該設(shè)計具有潛在的實用價值。