引言 頻率的概念就是1 s時間內被測信號的周期個數,最直接的測量方法就是單位時間內計數法,這種方法比較適合高頻測量。低頻通常用測周期法。這兩種方法的測量精度不固定,與被測信號的范圍相關。 等精度頻率測量法融合以上兩種方法的優點,可兼顧低頻與高頻信號;但較以上兩種方法而言,等精度頻率測量有較高的測量精度,且誤差不會隨著被測信號頻率的改變而改變。 1 等精度頻率測量原理 等精度頻率測量原理框圖如圖1所示。圖中計數器是帶使能控制的32位計數器,EN是計數允許使能信號,高電平允許計數。計數器1對基準時鐘信號fb計數,計數器2對被測信號fx計數。D觸發器實現對被測信號fx上升沿檢測,實現門控信號與fx上升沿同步,從而保證計數器2對被測信號計數剛好為整數個周期,零誤差。 ![]() 測量過程控制時序波形如圖2所示。測量開始,t0時刻MCU發出一個清零信號 Clr,使計數器和D觸發器置0;t1時刻MCU發出測量啟動信號Gate,使D觸發器輸人D為高電平;在被測信號fb上升沿到來t2時刻,D觸發器Q端才被置1,使計數器1和計數器2的EN同時為1,計數器開始計數,系統進入計數允許周期。這時,計數器1和2分別對基準時鐘信號和被測信號同時計數。一段時間過后,t3時刻MCU發出停止信號,即D觸發器輸入D為低電平,但此時計數器仍然沒有停止計數,直到下一個被測信號的上升沿t4時刻到來時,D觸發器 Q輸出0將這2個計數器同時關閉。 ![]() 由圖2可見,Gate的寬度Tc和發生的時間都不會直接影響計數使能信號EN,EN 總是在被測信號fx上升沿改變,從而保證了被測信號被計數的周期總是整數個周期nTx,而與被測信號的頻率無關。正確理解這點,是理解等精度頻率測量的關鍵。由于測量過程中不能保證基準時鐘周期的完整性,還會引入測量誤差。這種隨機誤差dt最多只有基準時鐘fb信號的一個時鐘周期。由于fb的信號通常由高穩定度的高頻晶體振蕩器發出,任何時刻的絕對測量誤差只有1/N1。例如,對于門控信號接近1 s的測量過程,fb取100 MHz的晶振,最大誤差可以達到10-8。 2 方案設計 2.1系統方案 單片機定時器/計數器電路如圖3所示。當C/T=0,TR=1,GATE=1時,單片機內部計數器時鐘開關可受外部引腳INTn控制,這樣就可以實現單片機內部計數器與外部計數器同步開關。 ![]() 正是基于單片機這種電路結構,根據等精度原理,提出圖4所示的系統框圖。單片機加 CPLD結構,利用單片機內部定時器定時,外部CPLD實現等精度測量邏輯電路和計數功能。基準時鐘fb由單片機晶振提供,頻率為單片機時鐘晶振12分頻后所得機器時鐘。預置閘門由單片機引腳P1.0輸出控制,計數器清零和復位由單片機引腳P1.1輸出控制,單片機引腳P3.2是內部定時器使能開關控制引腳。 ![]() 2.2單片機與CPLD接口設計 圖5所示為一種基于總線的接口方案,采用三總線(數據、控制、地址)結構,用于實現單片機與CPLD之間的數據傳輸。 ![]() 單片機P0口為雙向數據總線,與CPLD的通用IO口連接,完成數據和低8位地址傳送。控制總線包括單片機讀寫控制總線RD和WR,以及地址鎖存信號ALE(Address Lock Enable)。地址總線A15(P2.7)通過CPLD的全局輸入信號引腳輸入。 2.3 CPLD電路 CPLD內部電路原理框圖如圖6所示。當預置閘門GATE輸入高電平時,由于DFF觸發器為邊沿觸發器,在上升沿時才將數據輸出,所以Q輸出端并不立即置1,只有當外部信號上升沿到來時,Q才為1,使能計數器和定時器。這樣保證了計數器和定時器在被測信號的上升沿到來時同時有效。當預置閘門GATE=0關閉時,兩計數器的允許信號同樣在被測信號的上升沿到來時同時關閉。由于基準信號的定時器與被測信號嚴格同步,所以理論上最大誤差只有基頻的一個周期。CPLD內計數器為 32位,在預置時間內,只要計數器不溢出,即可準確測量被測信號個數。 ![]() 3 方案實現 3.1電路原理 電路原理如圖7所示。圖中給出了單片機(STC89C52RC)與CPLD(ATF1504AS)的具體接口電路,LCD1602接口電路,帶ISP下載接口的CPLD電路,被測信號從J1直接輸入給CPLD I/O引腳。這里沒有給出信號前置調理與波形整形電路。 ![]() 3.2 CPLD電路設計 CPLD開發選擇Altera公司的 EDA軟件QuartusII和目標器件EPM7064SLC44=10,需要完成電路設計輸入、編譯、仿真、引腳綁定(引腳分配請參考電路圖),并編譯得到最終配置文件*.pof。然后再使用Atmel公司提供的轉換工具POF2JED軟件將前面得到的*.pof文件轉換成*.jed文件,再用 AtmelISP軟件將*.jed文件下載到CPLD器件ATF1504即可。 以下是采用VerilogHDL硬件描述語言設計的 CPLD內部電路源碼: ![]() 3.3程序設計 整個測量過程由MCU控制完成,然后計算并把結果送 LCD顯示。測量開始,MCU首先發出清零CLR信號,對外部CPLD電路復位和計數器清零,還要將定時器軟計數器清零,之后發出啟動信號GATE=1,測量開始。MCU通過查詢軟計數器(定時中斷加1),控制閘門時間大致在1 s左右,時間到,MCU立即發出停止信號GATE=0,隨后查詢引腳INT0,確認計數停止。之后,分別讀回外部計數和內部計數器計數結果,MCU根據等精度原理算出信號頻率,將結果送LCD顯示。程序主流程和定時中斷流程如圖8所示。 ![]() 4 測試結果 筆者在實驗室使用RIGOL-DG1015DDS信號發生器校準。通過修正單片機時鐘偏差,22.118 4 MHz的12分頻為1.843 2 MHz,對1 843 200 Hz修正86.95 Hz后帶入程序計算,整數頻點測量結果可以達到和信號發生器完全一致,接近零誤差。特針對一些非整數頻點進行測量,結果如表1所列,誤差達到10-7數量級,與理論值一致。 ![]() 由于系統采用的是單片機機器時鐘作為基準信號時鐘,基準信號頻率較低,使得測量精度不高;如果采用外部更高頻基準信號做時鐘信號,精度還可進一步提高。 結語 將等精度頻率測量原理巧妙地用MCU+CPLD 實現,設計了一種低成本、高性價比的頻率計方案。MCU選擇STC89C52RC,CPLD選擇Atmel公司的ATF1504AS,實現了寬范圍高精度的頻率測量。該方案具有結構簡單,成本低等優點,具有廣闊的市場前景。 作者:田開坤,劉穎 (湖北師范學院 電工電子實驗中心,黃石 435002) 來源:單片機與嵌入式系統應用 2010年01期 |