用PIC16F87X單片機實現(xiàn)高分辨率頻率計的一種方法
1 引言 隨著電子技術的迅速發(fā)展,以單片機為控制核心的控制器件,已經全面滲透到測試儀器和計量檢定的各個方面。同時,頻率計作為一種常用工具,在工程技術和無線電測量、計量等領域的應用十分廣泛。本文介紹了一種以pic16f87x系列單片機為控制器的高分辨率頻率計的實現(xiàn)方法?! ≡摲椒ㄔO計的頻率計主要用來測量脈沖頻率。它采用lcd圖形液晶顯示,清晰度高,可視范圍廣,可外接晶體頻率源,具有測量速度快、分辨率高的優(yōu)點?! ? 設計原理 pic16f877a單片機內部集成有捕捉/比較/脈寬調制pwm (ccp)模塊。當ccp工作在捕捉(capture)方式時,可捕捉外部輸入脈沖的上升沿或下降沿,并產生相應的中斷。 pic16f877a單片機內部還集成了定時器/計數(shù)器模塊,在本方案中采用其中的tmr1作為定時器,該定時器的工作原理是通過tmr1“寄存器對”tmr1h:tmr1l從0000h遞增到ffffh,之后再返回0000h時,會產生高位溢出,并且將會設置溢出中斷標志位tmr1if為i,同時引起cpu中斷響應?! ≡诰鶆虻拿}沖序列中,脈沖頻率值等于單位時間內發(fā)生的脈沖次數(shù)。根據(jù)這個原理,可以采用pic16f87x系列單片機(本文以pic16f877a型單片機為例)內置定時器模塊tmr1計時,同時使用ccp模塊的捕捉功能,每間隔n(n=1,4,16)個脈沖捕捉一次并產生中斷,記錄第1個和第(m-1)*n+1個脈沖到來時的定時器計時t1和tm,如圖1所示。圖1脈沖捕捉示意圖 用被捕捉的脈沖次數(shù)除以第1次和第(m-1)*n+1次脈沖之間間隔的時間即可得到脈沖頻率值。因此,脈沖頻率值計算公式為: 3 被測頻率值范圍 在測試過程中,需要特別注意的是,兩次ccp中斷的時間間隔必須大于1次中斷服務的執(zhí)行時間。否則,如果在中斷服務程序執(zhí)行時又發(fā)生ccp中斷,就不能正常工作?! 「鶕?jù)上述條件,則有: 由上式得到: 式中: sccp — 表示捕捉分頻倍數(shù)。 fx — 表示被測頻率t tcyc —表示系統(tǒng)時鐘周期。 n —表示中斷所需最小指令周期數(shù)?! ≡O定:sccp=16,n=40,tcyc= 4/20mhz = 0.2 us,則: fx<2,000,000hz 由此可知,實際頻率測量范圍在0-2 mhz之間?! ∪粜铚y量更大頻率,可以根據(jù)需要在待測頻率和cpu的ccp口之間接入相應倍數(shù)的分頻器,每接入一個1/n倍分頻器,可測頻率范圍可擴大n倍(如圖2所示)。如在待測頻率和ccp口之間接入三個1/10倍分頻器,則可測頻率范圍為0~2 ghz。圖2 cpu外接示意圖 4 程序設計 4.1中斷程序 中斷程序流程圖如圖3所示。圖3中斷子程序流程圖 中斷服務子程序如下: void interrupt tmr i_ccp2_ini(void)
{
if(tmr1if==i) //判斷是否定時器中斷
{
tmriif=0; //tmr1中斷標志位