圖中所示的電路是一個三位轉(zhuǎn)速計,用來測量重復(fù)時間間隔為0.235至15秒內(nèi)的低頻信號。轉(zhuǎn)速計的轉(zhuǎn)速為每分鐘4至255轉(zhuǎn),它應(yīng)用在那些醫(yī)療設(shè)備,這些醫(yī)療設(shè)備中,用來測量心跳率、呼吸率、電解磨削、腦電圖、低轉(zhuǎn)速電機(jī)轉(zhuǎn)速或機(jī)械裝置轉(zhuǎn)速之類的低頻信號。
PIC16F872微處理控制處理轉(zhuǎn)速計的數(shù)據(jù)。PIC感應(yīng)輸入頻率(fin)的周期,計算出每秒產(chǎn)生的相應(yīng)的脈沖數(shù),并相應(yīng)的更新LED顯示器。輸入信號需被預(yù)處理成0到5V的直流電壓,脈沖高電平的寬度至少為4μs。
MCU所用等式為RPM = 60/T。T指感應(yīng)輸入的周期,常數(shù)60代表一分鐘(60秒內(nèi))脈沖的讀數(shù)或每分鐘的旋轉(zhuǎn)數(shù)。該電路的時間基準(zhǔn)是出一個32kHz的晶振(愛普生C-001R32.768K-A ±20 ppm)來提供的,這個時間基數(shù)反過來觸發(fā)T1(PIC的內(nèi)部定時器)。T1有一個可編程的已將其設(shè)為1/8的因子。這一因子產(chǎn)一個4 kHz的分頻。定時器T1為16位的定時器,產(chǎn)生一個0.00025秒(250 μs)的變化周期。
定時器T1通過軟件被輸入端RC2的輸入信號的上升沿使能。當(dāng)下一個上升沿到來時,T1被禁止。這樣,T1就有了一個與輸入信號周期對應(yīng)的二進(jìn)制計數(shù)。因其變化周期為0.00025秒(250 μs),我們必須將其右移三位以獲得0.25秒的時間。這樣,新的rpm等式將為RPM = 60000/T。
表中顯示如何獲得轉(zhuǎn)數(shù)/分(rpm)讀數(shù),從包含了周期讀數(shù)的計數(shù)器(T1)開始。例如,若PIC檢測到一個周期為1秒的信號,因為內(nèi)部頻率分配器被設(shè)為4,所以計數(shù)器的讀數(shù)將等于1000(十進(jìn)制)。這個信號的最終rpm讀數(shù)將等于60。
它是這樣工作的:PIC監(jiān)測輸入端RC2,等待一個下降沿。當(dāng)檢測下降沿時,定時器T1被TMR1ON位使能。然后,PIC等待下一個定時器T1。當(dāng)下一個定時器T1到來時,PIC禁止TMR1ON位以停止讀數(shù)。這時,各自周期的讀數(shù)被存于寄存器TMR1H和TMR1L中。
為避免范圍外的讀數(shù),需要檢測溢出位TMR1F。如果該位被設(shè)置了,則表明信號的周期太長以致不能被測量。在這種情況下,程序跳至UNDF標(biāo)位,顯示“OUF”或oveRFlow信息。這表明輸入信號的周期比16.384秒要高。
若沒有溢出,我們就要校驗檢測周期,使其等于或高于940(相當(dāng)于 255 rpm)。如果讀數(shù)低于940,程序就要跳到OVERF標(biāo)位,顯示信息將為"00F",這表明讀數(shù)高于255 rpm。
若這一值大于940,則利用常規(guī)DIVS被4除。DIVS帶有產(chǎn)生兩個16位數(shù)字的兩對寄存器(ACCb和 ACCa)。為了獲得這一周期,所用公式為ACCb/ACCa = ACCb,60,000 (EA60H)再一次利用常規(guī)DIVS被ACCb除。這樣我們就得到了二進(jìn)制的rpm值。我們必須將這個二進(jìn)制轉(zhuǎn)換為BCD碼。
為了實現(xiàn)這一操作,我們將讀數(shù)轉(zhuǎn)移至W,然后調(diào)用常規(guī)的BINBCE。BINBCE通過寄存器R0, R1, 和R2(R2是最具意義的信號數(shù))將二進(jìn)制轉(zhuǎn)換為BCD碼。最后,將每一個寄存器內(nèi)的數(shù)據(jù)轉(zhuǎn)換成七段碼,使之能在LED顯示屏上顯示。兩個計算表SEGM 和 SEGM2完成這個七段碼操作,其中SEGM2負(fù)責(zé)處理百位數(shù)位。