<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于8051單片機的頻率測量技術(shù)

          基于8051單片機的頻率測量技術(shù)

          作者: 時間:2007-10-08 來源:網(wǎng)絡(luò) 收藏
          0引言

          隨著無線電的發(fā)展與普及,""已經(jīng)成為廣大群眾所熟悉的物理量。而的出現(xiàn),更是對包括測頻在內(nèi)的各種帶來了許多重大的飛躍,然而,小體積、價廉、功能強等優(yōu)勢也在電子領(lǐng)域占有非常重要的地位。為此.本文給出了一種以為核心的系統(tǒng)的設(shè)計方法。

          1 測頻系統(tǒng)的硬件結(jié)構(gòu)

          的方法一般分為無源測頻法、有源測頻法及電子計數(shù)法三種。無源測頻法(又可分為諧振法和電橋法),常用于頻率粗測,精度在1%左右。有源比較法可分為拍頻法和差頻法,前者是利用兩個信號線性疊加以產(chǎn)生拍頻現(xiàn)象,再通過檢測零拍現(xiàn)象進(jìn)行測頻,常用于低頻測量,誤差在零點幾Hz;后者則利用兩個非線性信號疊加來產(chǎn)生差頻現(xiàn)象,然后通過檢測零差現(xiàn)象進(jìn)行測頻,常用于高頻測量,誤差在20 Hz左右。以上方法在測量范圍和精度上都有一定的不足,而電子計數(shù)法主要通過進(jìn)行控制。由于單片機的較強控制與運算功能,電子計數(shù)法的測量頻率范圍寬,精度高,易于實現(xiàn)。本設(shè)計就是采用單片機電子計數(shù)法來測量頻率,其系統(tǒng)硬件原理框圖如圖1所示。

          為了提高測量的精度,拓展單片機的測頻范圍,本設(shè)計采取了對信號進(jìn)行分頻的方法。設(shè)計中采用兩片同步十進(jìn)制加法計數(shù)器74LS160來組成一個100分頻器。該100分頻器由兩個同步十進(jìn)制加法計數(shù)器74LS160和一個與非門74LS00共同設(shè)計而成。由于一個74LS160可以分頻十的一次方,而當(dāng)?shù)谝黄?4LS160工作時,如果有進(jìn)位,輸出端TC便有進(jìn)位信號送進(jìn)第二片的CEP端,同時CET也為高電平,這樣兩個工作狀態(tài)控制端CET、CEP將同時為高電平,此時第二片74LS160將開始工作。

          2 頻率測量模塊的電路設(shè)計

          用單片機電子計數(shù)法測量頻率有測頻率法和測周期法兩種方法。測量頻率主要是在單位定時時間里對被測信號脈沖進(jìn)行計數(shù);測量周期則是在被測信號一個周期時間里對某一基準(zhǔn)時鐘脈沖進(jìn)行計數(shù)。

          2.1 8051測頻法的誤差分析

          電子計數(shù)器測頻法主要是將被測頻率信號加到計數(shù)器的計數(shù)輸入端,然后讓計數(shù)器在標(biāo)準(zhǔn)時間Ts1內(nèi)進(jìn)行計數(shù),所得的計數(shù)值N1。與被測信號的頻率fx1的關(guān)系如下:



          而電子計數(shù)器測周法則是將標(biāo)準(zhǔn)頻率信號fs2送到計數(shù)器的計數(shù)輸入端,而讓被測頻率信號fx2控制計數(shù)器的計數(shù)時間,所得的計數(shù)值N2與fx2的關(guān)系如下:



          事實上,無論用哪種方法進(jìn)行頻率測量,其主要誤差源都是由于計數(shù)器只能進(jìn)行整數(shù)計數(shù)而引起的1誤差:



          可見,在同樣的Ts下,測頻法fx1的低頻端,誤差遠(yuǎn)大于高頻端,而測周法在fx2的高頻端,其誤差遠(yuǎn)大于低頻端。理論研究表明,如進(jìn)行n次重復(fù)測量然后取平均,則1誤差會減小n倍。如給定1誤差ε0,則要求ε≤ε0ο對測頻法要fx1≥ 對測周法則要求fx2≤ε0fs2ο因此,對一給定頻率信號fs進(jìn)行測量時,用測頻法fs1越低越好,用測周法則fs2越高越好。

          2.2 8051單片機的測頻范圍和測頻時間

          8051單片機的定時器/計數(shù)器接口,在特定晶振頻率fc=12 MHz時,可輸人信號的頻率上限是fx≤fc/24=500 kHz。如用測頻法,則頻率的上限取決于8051,故測頻法的測量范圍是:

          即:fx1≤500 kHz。
          用測頻法測頻時,定時器/計數(shù)器的計數(shù)時間間隔可由8051的另外一個定時器/計數(shù)器完成,外接100分頻器的情況下,fx1的頻率范圍可擴展到50MHz
          用測周法設(shè)計時,其頻率的下限取決8051計數(shù)器的極限??紤]到8051內(nèi)部為16位,加上TF標(biāo)志位,計數(shù)范圍為217,因此其最大計數(shù)時間為秒。而如果采用半周期測量,則測頻范圍是:



          在測周法中,標(biāo)準(zhǔn)頻率信號fs2由8051的內(nèi)部定時結(jié)構(gòu)產(chǎn)生,f s2恒為fc/12,因此,在給定ε0為0.0 1時,fx2既有一定的上限頻率,也有一定的下限頻率。即:



          并由此可見得出:4Hz≤fx1≤10 kHz理論上可以達(dá)到無窮大,即fs1可以達(dá)到無窮低,因此,fx1可達(dá)到無窮小,因此,可以認(rèn)為測頻法的測頻范圍只有上限頻率,沒有下限頻率。而再 這樣,兩個頻率范圍相疊加即可得到該頻率計的測頻范圍:4 Hz≤fx1≤50 MHz。精度可以達(dá)到1Hz。從以上分析可以看出,測頻法測量的頻率覆蓋范圍較寬,且在高頻端的測量精度較高,而在低頻段的測量精度較低,同時測量時間較長。測周法測量的頻率覆蓋范圍較窄,在高頻段的測量精度較低,在低頻段的測量精度較高,測量時間短。因此,測頻法適于高頻信號的測量,測周法適于較低頻信號測量。

          8051可用軟件來控制定時器/計數(shù)器的工作方式,以實現(xiàn)測頻法與測周法的動態(tài)切換。對寬頻帶、高速度的頻率測量,可采用軟件切換測量方法來提高測量精度與測量速度。其測頻電路如圖2所示。

          3 軟件設(shè)計

          由圖2所示的測頻電路可知,波形經(jīng)過施密特觸發(fā)器74LS132后,再經(jīng)整形放大后即可變成方波,然后利用8051的定時器/計數(shù)器T0給定定時時間為10 ms,再利用8051的定時器/計數(shù)器T1作計數(shù)器,累計10 ms時間里所經(jīng)過施密特觸發(fā)器74LS132的方波信號。當(dāng)T0定時滿10 ms時,T0向CPU發(fā)出中斷信號以申請中斷,并進(jìn)行頻率測量。假設(shè)所設(shè)定的中介頻率為l00/10 ms=l00100=10000 Hz=10 kHz,岡為fx=N/T,所以,可以將假定給定數(shù)值100與Tl進(jìn)行比較,再將Tl計數(shù)器里所計的數(shù)值與給定的數(shù)值進(jìn)行比較。由于在用測頻法測量頻率時,較小頻率的誤差較大(l誤差)。所以,這里用l0 kHz作為中間頻率,其1誤差為9.9 kHz和1 0.1 kHz,誤差率為1%,可見該誤差不是很大,還可以接受。

          事實上,當(dāng)頻率比較小于1 0kHz時,若程序選擇用測量周期法。則測周法流程圖及其程序如如圖3所示。

          4 結(jié)束語

          通過本文所介紹的設(shè)計過程即可實現(xiàn)頻率測量要求,并能夠很好的完成測量結(jié)果的存儲,完全能夠達(dá)到預(yù)期的效果。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();