楊衛東 班奎峰 楊紅天


【摘要】 近幾年發展成熟的Cotex-M3系列嵌入式單片機,由于其低功耗、低成本和高性能的特點,使其在高端工業儀表和儀器應用得以迅速普及。但30MHz以上級別的計數器,無法在STM32F103系列單片機上直接實現,原有儀器硬件方案是采用高速FPGA實現計數。針對原有儀器硬件方案進行改進,將MCS51單片機換成STM32F103VET6嵌入式單片機,去掉FPGA的計數器,用嵌入式單片機直接實現100MHz高速計數器功能。以達到簡化原設計的復雜程度。
【關鍵詞】 高速計數器 嵌入式系統
一、輸入信號的分頻處理
針對STM32F103VET6計數器上限只能到27MHz的情況,決定對被測高頻信號進行4分頻后,進入單片機。如此,信號在100MHz時輸入單片機的信號頻率為25MHz,就達到了頻率設計目標。選擇FAIRCHILD公司的74AC74(雙D觸發器)來實現4分頻,74AC74在SV電源工作條件下,-40。-85°范圍內fmax≥125MHz。4分頻原理圖見圖1。
二、計時器系統的主要誤差分析
l、基本誤差。計數器在每秒計數期間,由于信號和秒時鐘的偶然關系,計數器具有±1個字的基本誤差。
2、四分頻器誤差。由于單片機內的計數器工作在四分頻信號,則計數器的所有誤差均會被放大4倍。
3、單片機1秒中斷誤差。單片機內部1秒中斷時間到,到執行讀出計數器數據這個過程中,每次操作延遲的時間有一定的差別,導致誤差;并且在讀數期間也有可能產生新的計數,若是碰到計數進位情況,會產生很大的偶然性誤差。這兩種誤差也會因4分頻被放大4倍。
三、計時器系統誤差處理
1、消除計數器基本誤差。對于計數器的此項誤差,通過軟件將前后兩次計數值,做簡單的均值濾波就可以消除。
2、降低4分頻器誤差。由于4分頻器均會將所有誤差放大4倍,影響最大。發揮STM32F103VET6的多計數器長處,用兩個計數器對信號技術,一個對信號的上升沿計數,一個對信號下降沿計數。這樣處理后,實際的分頻系數就降低為2了。若想消除此項誤差,在雙計數器技術的條件下,選擇計數器速度超過50MHz的單片機才能實現。
3、消除單片機1秒中斷誤差。為了消除此項誤差,只能采用硬件操作來完場計數器的讀數,而不能用軟件中斷方式來實現。筆者是這樣解決的,針對計數器有外部捕獲功能,若每秒產生一個不收軟件控制的捕獲信號即可。從這個思路出發,充分發揮嵌入式單片機優勢,通過單片機內的PWM發生器,產生一個不用軟件參與的1Hz信號,將這個PWM引腳連接到計數器的捕獲引腳上,就達到目的了。也可以采用單獨的實時時鐘芯片產生這個信號。
4、降低1秒時間基準誤差。由于此項誤差不來源于單片機本身,而是來源于外部的石英晶體振蕩器,最簡單的辦法是采用高精度和穩定度的石英晶體振蕩器。
四、軟件流程圖
設計中充分運用STM32F103VET6的計數器外設,完全避開了軟件對計數器工作的干擾,計數器的運行消耗MCU資源極少,只在每秒計算信號頻率時才運行一次計算程序,軟件流程見圖7,計算公式如下:
本次1秒F=(N*65536+本次捕獲計數器值-前次捕獲計數器值)*分頻系數
N*65536計數器工作在16位模式,每次中斷代表有65536信號進入計數器
分頻系數=2
信號頻率=(本次1秒F+前次1秒F)/2