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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于DSP2812設計的簡易數(shù)字頻率計

          基于DSP2812設計的簡易數(shù)字頻率計

          作者: 時間:2012-06-27 來源:網(wǎng)絡 收藏

            圖5為測頻率、周期軟件流程圖,圖6為定時器2的溢出中斷流程圖。

          基于DSP2812設計的簡易數(shù)字頻率計

          圖5 測頻率、周期流程圖

          基于DSP2812設計的簡易數(shù)字頻率計

          圖6 定時器T2溢出中斷流程圖

            在該部分初始化時,要進行以下配置:通用定時器T1時鐘輸入為外部定時器時鐘,通用定時器T2時鐘輸入為內部時鐘輸入,用來對標準脈沖進行計數(shù),該標準脈沖由外部30MHz的有源晶振提供;捕獲單元1設置為上升沿捕獲,用來捕獲T1PWM引腳輸出PWM波的上升沿,在每次比較匹配時讀取定時器T2的計數(shù)值T2CNT,該值保存在CAP1FIFO內。初始化時要將捕獲單元1的狀態(tài)寄存器中的FIFO堆棧狀態(tài)設置成空堆棧;將定時器T1的定時周期設置為4個被測信號的周期長度,通過測得的定時器T1的一個定時周期內的標準脈沖的個數(shù),計算出被測信號頻率,然后對被測信號進行分段,分別為低頻段(小于46.875Hz),中頻段(大于46.875Hz,小于2343.75KHz),以及高頻段(大于2343.75 KHz),其中分段的依據(jù)是定時器的計數(shù)飽和值為65536和計數(shù)個數(shù)應大于等于1。若信號頻率為中高頻段則重新配置定時器T1,定時器T2的寄存器,來改變定時周期以及每個門閘時間內的高頻填充脈沖的個數(shù)。在定時器T1的下一個定時周期內計算出頻率和周期。另外,定時器T2的溢出次數(shù)要在第一次發(fā)生比較匹配時清零,而是否是第一次發(fā)生比較匹配則通過設置一個標志來判斷。當溢出次數(shù)清零后才開始記溢出次數(shù),直到第二次發(fā)生比較匹配。

            下一步改進意見

            該方法的測量誤差主要來自硬件部分,整形電路的優(yōu)劣直接關系到測量精度的高低。所以我們下一步的工作就是改進整形電路的整形效果和抗干擾性能,盡最大可能減小信號整形帶來的誤差。

            由于定時器在計數(shù)時存在計數(shù)飽和的情況,因此在實現(xiàn)該時存在上限,即當被測信號頻率高于高頻填充脈沖的頻率時,該方法就不能實現(xiàn)等精度了。可以在該方案的基礎上進行以下處理:選擇定時器T1定時周期內被測信號的個數(shù)固定,可設置T1PR為65529,同時將定時器T2的時鐘修改為75MHz,這樣就能保證每個門閘時間內高頻填充脈沖的個數(shù),從而在對高頻信號實現(xiàn)頻率和周期測量時保證了精度。

            但選擇定時器T1時鐘輸入為外部時鐘時對被測信號的輸入范圍存在限制,如果要進一步提高測量的信號的范圍,使得范圍達到上百兆或上G赫茲,可以考慮相位測量的方法,將被測信號設為360度,根據(jù)被測信號與標準信號之間的X度相位差,計算被測信號頻率。


          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();