一。 引言
數(shù)字頻率計是電子測試、自動化控制等設(shè)備中不可或缺的重要模塊,對其精度和成本都提出了較高的要求。最常用和直接的頻率測量方法是直接測頻法。直接測頻法工作原理簡單,設(shè)計復(fù)雜度低。其通過在給定的閘門信號中對待測信號脈沖進(jìn)行計數(shù),從而算出待測信號的頻率。但由于閘門是與基準(zhǔn)信號(fr)完全同步,而不是待測信號(ft),所以測量結(jié)果有±1個待測信號脈沖的誤差,這對低頻信號是難以容忍的。多周期同步測頻法中閘門的時間不是固定的,而是被測信號的整周期倍。閘門的開閉受門控信號和待測信號的雙重控制,以期達(dá)到閘門與待測信號完全同步,從而消除±1個待測信號脈沖的誤差。多周期同步測頻法將誤差轉(zhuǎn)移為±1個基準(zhǔn)脈沖的誤差,而基準(zhǔn)信號的頻率一般較高,其±1個脈沖誤差可忽略不計。多周期同步測頻法雖然解決了誤差的問題,但其增加了閘門信號的設(shè)計難度,而且加重了頻率計算部分的負(fù)擔(dān)。
基于此,本文提出了一種采用較小規(guī)模CPLD(Xilinx XC95144)和單片機(jī)(AT89C51)相結(jié)合的數(shù)字頻率計設(shè)計方案。該方案不僅體積小、保密性強(qiáng),而且設(shè)計簡單、成本低、精度高、可測頻帶寬。
二。 數(shù)字頻率計工作原理
本文提出的基于CPLD和單片機(jī)相結(jié)合的設(shè)計方案不僅能較好地解決誤差問題,誤差僅小于等于 0.1HZ,同時還通過對軟硬件界面的科學(xué)劃分,在保證性能的基礎(chǔ)上,盡最大可能地簡化了硬件設(shè)計的難度。該方法原理圖如圖1所示。其中測頻模塊采用CPLD(Xilinx XC95144)設(shè)計完成,其余功能主要由單片機(jī)來實(shí)現(xiàn)。完成的功能如下:
測頻模塊:主要是對基準(zhǔn)信號fr和待測信號ft的脈沖進(jìn)行計數(shù),計數(shù)周期為1s;
數(shù)字處理模塊:接收測頻模塊送出的待測信號脈沖計數(shù)值nt,計算出其實(shí)際的頻率值。然后采用10次求平均的方法逐步求精待測信號頻率值;
格式轉(zhuǎn)換模:塊負(fù)責(zé)將計算模塊所得的結(jié)果轉(zhuǎn)換為顯示模塊可以識別的幀格式;
整形模塊:負(fù)責(zé)對輸入的待測信號進(jìn)行整形處理(放大、濾波);
顯示模塊:負(fù)責(zé)待測信號頻率值的顯示。
下面將對對其核心模塊的設(shè)計做一介紹。
三。 數(shù)字頻率計的設(shè)計
3.1 測頻模塊
如圖2所示,測頻模塊主要由兩個計數(shù)器C1和C2組成。其工作過程如下:
C1對基準(zhǔn)信號的脈沖進(jìn)行計數(shù),計數(shù)周期為1s;C1計數(shù)的同時,C2對待測信號的脈沖進(jìn)行計數(shù)。當(dāng)C1計數(shù)滿1s時,門控信號rst有效,其終止C1和 C2的計數(shù),并將C2的計數(shù)值鎖存至32位寄存器nt中,然后將C1和C2計數(shù)值清零;接著rst無效,并開始下一次計數(shù),C1計數(shù)不滿1s期間rst始終保持無效。
3.2 數(shù)據(jù)處理模塊
數(shù)字頻率計的核心單元AT89C51,通過控制P3.0和P3.1兩個端口將32位寄存器nt的4個字節(jié)輸出到AT89C51的直接地址30H, 31H, 32H, 33H處。當(dāng)計數(shù)器的值被讀到單片機(jī)中后,通過調(diào)用數(shù)據(jù)處理模塊,對計數(shù)值進(jìn)行相應(yīng)的處理,求出所測參數(shù)的值和單位,最后應(yīng)將參數(shù)值轉(zhuǎn)換為十進(jìn)制數(shù),再轉(zhuǎn)換為驅(qū)動LED數(shù)碼顯示器的段碼,包括1個小數(shù)點(diǎn)。對計數(shù)值的處理運(yùn)算要用到除法和乘法。為了用8位單片機(jī)來處理32位數(shù)的二進(jìn)制到十進(jìn)制的轉(zhuǎn)換,首先利用字節(jié)除法求出每個字節(jié)對應(yīng)的十進(jìn)制數(shù)位值。
如:a100=[30H]/100, a10=([30H] mod 100)/10,a1=[30H] mod 10
其中,a1是頻率值的第一個字節(jié)的個位, a10是頻率值的第一個字節(jié)的十位, a100是頻率值的第一個字節(jié)的百位。
我們將每位十進(jìn)制數(shù)用非壓縮BCD碼表示,分別存儲在AT89C51的直接地址40H~49H。然后通過如下計算:
40H=a1+6*a2+6*a3+6*a4
41H=a10+6*a20+5*a2+6*a30+3*a3+6*a40+a4
42H=a100+6*a200+5*a20+2*a2+6*a300+3*a30+5*a3+6*a400+a40+2*a4
43H=5*a200+2*a20+3*a300+5*a30+5*a3+a400+2*a40+7*a4
44H=2*a200+5*a300+5*a30+6*a3+2*a400+7*a40+7*a4
45H=5*a300+6*a30+7*a400+7*a40+7*a4
46H=6*a300+7*a400+7*a40+6*a4
47H=7*a400+6*a40+a4
48H=6*a400+a40
49H=a400
由于本設(shè)計用非壓縮BCD碼表示十進(jìn)制數(shù),40H到49H所表示的數(shù)值還要進(jìn)行相應(yīng)的調(diào)整,調(diào)整步驟如下: 42H←42H+40H/100
40H←40H mod 100
41H←41H+40H/10
40H←40H mod 10
43H←43H+41H/100
41H←41H mod 100
42H←42H+41H/10
41H←41H mod 10
……
調(diào)整后的每位十進(jìn)制數(shù)都符合非壓縮BCD碼的表示規(guī)范。為了減小直接測頻法的誤差,本設(shè)計采用了十次平均逐步求精的方法。因?yàn)閷ν淮郎y信號,連續(xù)兩次計數(shù)值之差不會超過1,所以可開辟一10字節(jié)的隊(duì)列,初始時全為0,每次先將個位(40H)入隊(duì),然后求該隊(duì)列的平均值,將商返送40H,余數(shù)送十分位。為使顯示結(jié)果盡量精確,可用同樣方法填充百分位、千分位、萬分位和十萬分位。
3.3 格式轉(zhuǎn)換模塊
本設(shè)計中,將顯示模塊能識別的計算結(jié)果定義為如下幀格式,即每幀由8字節(jié)(50H~57H)組成。其中50H表示測量值的第一個有效數(shù)字;51H表示52H~56H中還有幾個整數(shù)位,剩下的為小數(shù)部分;57H
表示顯示單位。如12159676表示115.967 MHZ,10985435表示1.98543KHZ。
四。 實(shí)驗(yàn)結(jié)果
為了驗(yàn)證本設(shè)計方案的正確性以及先進(jìn)性,我們做了大量實(shí)驗(yàn),該實(shí)驗(yàn)預(yù)置計數(shù)周期為10s。實(shí)驗(yàn)結(jié)果如下:
從前三組試驗(yàn)可知,本設(shè)計對于整數(shù)頻率的測量誤差為0;第四組試驗(yàn)的誤差主要是由顯示位數(shù)的精度不夠引起的,即本設(shè)計最多只能顯示6位,其余的將舍去,其最大誤差是-0.9HZ;后兩組試驗(yàn)的誤差主要是由非整數(shù)頻率引起的,這是直接測頻法先天決定的,經(jīng)過十次求平均可將其控制在-0.1HZ以內(nèi)。
從實(shí)驗(yàn)結(jié)果可以看出,本方案將部分影響設(shè)計復(fù)雜度和實(shí)現(xiàn)成本的功能移至軟件部分來實(shí)現(xiàn),在不考慮顯示精度引起的誤差的情況下,該方案設(shè)計的數(shù)字頻率計精確度可達(dá)99.9%以上,基本上能滿足大部分使用領(lǐng)域的要求,且該方案具有設(shè)計成本低廉、設(shè)計簡單、精度高、可測頻帶寬等優(yōu)點(diǎn),值得從事同類開發(fā)人員的借鑒。
本文作者創(chuàng)新點(diǎn)在于提出了一種基于CPLD和單片機(jī)相結(jié)合的設(shè)計方案。該方案以直接測頻法為基礎(chǔ)、軟件補(bǔ)償技術(shù)為輔助,大大降低了設(shè)計成本和實(shí)現(xiàn)復(fù)雜度,且較好地解決了誤差問題??傊?,論文所描述的設(shè)計思想先進(jìn),對同類使用具有較高參考價值。
責(zé)任編輯:gt
評論
查看更多