任務(wù)56頻率計(jì)的設(shè)計(jì)_第1頁(yè)
任務(wù)56頻率計(jì)的設(shè)計(jì)_第2頁(yè)
任務(wù)56頻率計(jì)的設(shè)計(jì)_第3頁(yè)
任務(wù)56頻率計(jì)的設(shè)計(jì)_第4頁(yè)
任務(wù)56頻率計(jì)的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、5.6 頻率計(jì)的設(shè)計(jì) 5.6 頻率計(jì)的設(shè)計(jì)5.6.1任務(wù)介紹頻率計(jì)在教學(xué)、科研、測(cè)量?jī)x器、工業(yè)控制等方面都有廣泛的應(yīng)用。在單片機(jī)應(yīng)用系統(tǒng)中,經(jīng)常需要對(duì)一個(gè)連續(xù)脈沖的頻率(周期)進(jìn)行測(cè)量。在實(shí)際應(yīng)用中,對(duì)于轉(zhuǎn)速、位移、速度、流量等物理量的測(cè)量,一般也是先由傳感器轉(zhuǎn)換成脈沖信號(hào),然后再測(cè)量頻率的方式來(lái)實(shí)現(xiàn)。本節(jié)的任務(wù)要求是:開(kāi)發(fā)板上有一個(gè)頻率發(fā)生器,能夠產(chǎn)生250Hz256KHz的方波。利用單片機(jī)的定時(shí)器測(cè)量方波的頻率或者周期。5.6.2知識(shí)準(zhǔn)備1、測(cè)頻法頻率的定義為:?jiǎn)挝粫r(shí)間內(nèi)完成周期性變化的次數(shù),是描述周期運(yùn)動(dòng)頻繁程度的量。單片機(jī)要完成周期信號(hào)的頻率測(cè)量,根據(jù)頻率的定義,初學(xué)者首先能想到的方法

2、是利用51單片機(jī)的1個(gè)定時(shí)/計(jì)數(shù)器產(chǎn)生單位時(shí)間,然后在單位時(shí)間內(nèi)利用利用另外1個(gè)定時(shí)/計(jì)數(shù)器對(duì)外界脈沖進(jìn)行計(jì)數(shù)。這種方法稱(chēng)為“測(cè)頻法”。但測(cè)頻法不是萬(wàn)能的,適合測(cè)量高頻信號(hào)。圖5.6.1說(shuō)明了測(cè)頻的原理及誤差產(chǎn)生的原因。時(shí)基信號(hào)待測(cè)信號(hào) 計(jì)到7個(gè)脈沖比實(shí)際多出了0.X個(gè)脈沖.丟失(少計(jì)一個(gè)脈沖) 圖5.6.1 測(cè)頻法誤差來(lái)源在圖5.6.1中,假設(shè)時(shí)基信號(hào)為1Hz,則用此法測(cè)得的待測(cè)信號(hào)為7Hz。但從圖中可以看出,待測(cè)信號(hào)的頻率應(yīng)為為7.7Hz,誤差約有7/7.7=9.1%。這個(gè)誤差是比較大的。實(shí)際上,測(cè)量的脈沖個(gè)數(shù)的誤差會(huì)在±1之間。假設(shè)測(cè)得的脈沖個(gè)數(shù)為N,則測(cè)量頻率的誤差最大為=1

3、/(N-1)×100%。顯然,減少誤差的方法,就是增大N。舉個(gè)例子,假設(shè)測(cè)頻精度為0.1%,所測(cè)信號(hào)的頻率為10Hz,為了達(dá)到測(cè)量的準(zhǔn)確度,時(shí)基信號(hào)的長(zhǎng)度超過(guò)100S,顯然這是不可行的。因此得出一個(gè)初步的結(jié)論:測(cè)頻法只適合于測(cè)量高頻信號(hào)。2、測(cè)周法測(cè)頻法不適用于低頻信號(hào)的測(cè)量,低頻信號(hào)的測(cè)量通常采用測(cè)周法。測(cè)周法顧名思義就是測(cè)量脈沖信號(hào)的周期,周期與頻率呈倒數(shù)的關(guān)系,求得脈沖信號(hào)的周期,頻率也就求出來(lái)了。51單片機(jī)測(cè)量脈沖信號(hào)的周期,也需要用到2個(gè)定時(shí)/計(jì)數(shù)器,其中1個(gè)定時(shí)/計(jì)數(shù)器用來(lái)對(duì)脈沖信號(hào)進(jìn)行計(jì)數(shù),另外一個(gè)定時(shí)/計(jì)數(shù)器用來(lái)測(cè)量計(jì)數(shù)時(shí)間內(nèi)的時(shí)間長(zhǎng)度。舉個(gè)例子:定時(shí)/計(jì)數(shù)器0對(duì)外接

4、脈沖計(jì)數(shù),方式2,自動(dòng)重裝模式,TL0=246,每來(lái)10個(gè)脈沖,定時(shí)/計(jì)數(shù)器0溢出一次。另外一個(gè)定時(shí)/計(jì)數(shù)器從溢出后開(kāi)始計(jì)量時(shí)間,到下一次溢出后停止計(jì)量時(shí)間,這是時(shí)間差值就是10個(gè)脈沖的周期,然后再除以10,就是一個(gè)脈沖的周期。有了對(duì)測(cè)頻法誤差來(lái)源的分析,就不難得到測(cè)周法誤差的來(lái)源。脈沖頻率越低,周期越長(zhǎng),則測(cè)周法的精度越高。3、頻率發(fā)生器開(kāi)發(fā)板上的固定脈沖信號(hào)是由數(shù)字芯片CD4060產(chǎn)生的。CD4060是14位二進(jìn)制串行計(jì)數(shù)器/分頻器。開(kāi)發(fā)板中CD4060的晶振是4.096MHz,經(jīng)過(guò)14級(jí)分頻后,輸出10路分頻信號(hào)(Q4Q14)。開(kāi)發(fā)板只引出了6路分頻信號(hào)(125Hz、500Hz、2KHz

5、、8KHz、64KHz、128KHz),電路如圖5.6.2所示。 圖5.6.2 CD4060構(gòu)成的頻率發(fā)生器5.6.3 任務(wù)實(shí)施任務(wù)實(shí)施中分別給出測(cè)頻法的實(shí)現(xiàn)程序和測(cè)周法的實(shí)現(xiàn)程序。1、 測(cè)頻法程序?qū)崿F(xiàn)測(cè)頻法程序的工程結(jié)構(gòu)圖如圖5.6.3所示。Seg7Display.c負(fù)責(zé)將測(cè)量的頻率在數(shù)碼管上顯示,共6位數(shù)碼管。FreqMeasure.c是頻率測(cè)量模塊。5.6.3 測(cè)頻程序工程結(jié)構(gòu)圖(1) 主函數(shù)Main.c:#include<reg52.h>#include "MicroDefine.h"#include "Seg7Display.h"#

6、include "FreqMeasure.h"/*函數(shù)名稱(chēng):main()*功能 :主函數(shù)*入口參數(shù):*出口參數(shù):*說(shuō)明 :*/void main() uint Cnt1Ms; /1ms計(jì)數(shù)器 DelayMs(200); TimerInit(); /定時(shí)器初始化 while(1) if(FlagSystem1Ms=1) FlagSystem1Ms=0; Seg7Display(); /掃描數(shù)碼管 if(+Cnt1Ms>=1000) /刷新顯示緩沖區(qū) Cnt1Ms=0; FreqToBuffer(Freq); (2) 測(cè)頻模塊FreqMeasure.h:#ifndef _

7、FREQMEASURE_H_#define _FREQMEASRUE_H_#include <reg52.h>#include "MicroDefine.h"#include "Seg7Display.h"/變量聲明extern bit FlagSystem1Ms; /1ms時(shí)標(biāo)信號(hào)extern long int Freq; /測(cè)量頻率值extern bit FlagMeasureOk; /頻率測(cè)量成功標(biāo)志位/函數(shù)聲明extern void FreqToBuffer(long int Num); /頻率值更新到緩沖區(qū) extern void

8、TimerInit(void); /定時(shí)器初始化#endif FreqMeasure.c#include"FreqMeasure.h"bit FlagSystem1Ms=0; /系統(tǒng)1ms時(shí)標(biāo)信號(hào)uchar T0OverflowCnt=0; /定時(shí)器0溢出次數(shù)計(jì)數(shù)器long int Freq=0; /被測(cè)信號(hào)頻率值bit FlagMeasureOk=0; /頻率測(cè)量成功標(biāo)志位/*函數(shù)名稱(chēng):TimerInit()*功能 :定時(shí)器初始化*入口參數(shù):無(wú)*出口參數(shù):無(wú)*說(shuō)明 :定時(shí)器0用作計(jì)數(shù),定時(shí)器1用作定時(shí)*/void TimerInit(void) TMOD=0x25; /定

9、時(shí)器1:0010,定時(shí),方式2;定時(shí)器0:0101,計(jì)數(shù),方式1 TH0=TL0=0x00; /定時(shí)器0初值 TH1=TL1=56; /定時(shí)器1初值 ET0=ET1=EA=1; /開(kāi)定時(shí)器中斷 TR0=TR1=1; /開(kāi)定時(shí)器/*函數(shù)名稱(chēng):Num_To_DispBuff()*功能 :待顯示值傳遞給顯示緩沖區(qū)*入口參數(shù):待顯示值*出口參數(shù):無(wú)*說(shuō)明 :*/void FreqToBuffer(long int Num)uchar i,j=5; for(i=0;i<6;i+) DispBufferj-i=Num%10; Num=Num/10; /*函數(shù)名稱(chēng):Timer0_Isr()*功能 :定

10、時(shí)器0中斷函數(shù)*入口參數(shù):無(wú)*出口參數(shù):無(wú)*說(shuō)明 :計(jì)算定時(shí)器0溢出次數(shù)*/void Timer0Isr() interrupt 1 static uchar Cnt200us=0; /200us計(jì)數(shù)器 static uint Cnt1Ms=0; /1ms計(jì)數(shù)器 uint Timer0Value; /定時(shí)器0暫存值 if(+Cnt200us>=4) /1ms到 Cnt200us=0; FlagSystem1Ms=1; if(+Cnt1Ms>=1000) /1s到 Cnt1Ms=0; Timer0Value=TH0<<8+TL0; /取定時(shí)器0的計(jì)數(shù)值 TH0=TL0=0

11、x00; /定時(shí)器0清空 Freq=T0OverflowCnt<<16+Timer0Value; /計(jì)算頻率值 T0OverflowCnt=0; /定時(shí)器0溢出次數(shù)清零 FlagMeasureOk=1; /頻率測(cè)量成功 程序解釋?zhuān)?測(cè)頻程序用到了2個(gè)定時(shí)/計(jì)數(shù)器,定時(shí)/計(jì)數(shù)器0用來(lái)對(duì)脈沖計(jì)數(shù),16位計(jì)數(shù)器,方式1模式;定時(shí)/計(jì)數(shù)器1用來(lái)產(chǎn)生時(shí)基信號(hào)(1秒),8位定時(shí)器,方式2。 在定時(shí)/計(jì)數(shù)器0的中斷函數(shù)中,記錄溢出次數(shù),如果1S內(nèi)外接脈沖個(gè)數(shù)超過(guò)65536,則定時(shí)/計(jì)數(shù)器0會(huì)溢出。定時(shí)/計(jì)數(shù)器1主要用于產(chǎn)生1秒的時(shí)基信號(hào),1秒到,則一次測(cè)頻完成。定時(shí)/計(jì)數(shù)器0的初值為0,如果定時(shí)

12、/計(jì)數(shù)器0在1S內(nèi)沒(méi)有溢出,則外接脈沖的個(gè)數(shù)=TH0*256+TL0。如果溢出了,則外接脈沖的個(gè)數(shù)=溢出次數(shù)*65536+TH0*256+TL0。計(jì)算出頻率值后,定時(shí)/計(jì)數(shù)器0的初值和溢出次數(shù)要重新置0,為下一次測(cè)頻做準(zhǔn)備,同時(shí)頻率測(cè)量成功標(biāo)志位置1。 刷新緩沖區(qū)函數(shù)中,頻率值的分解和以前的寫(xiě)法不一樣,初學(xué)者自己分析。2、 測(cè)周法程序?qū)崿F(xiàn)測(cè)周法的程序和測(cè)頻法的程序結(jié)構(gòu)一樣,功能模塊包括數(shù)碼管掃描和周期測(cè)量。數(shù)碼管掃描省略。(1)主函數(shù)Main.c:#include<reg52.h>#include"MicroDefine.h"#include"Meas

13、urePeriod.h"#include"Seg7Display.h" /*函數(shù)名稱(chēng):main()*功能 :主函數(shù)*入口參數(shù):無(wú)*出口參數(shù):無(wú)*說(shuō)明 :*/void main() unsigned long int Freq; DelayMs(200); TimerInit(); /定時(shí)器初始化 while(1) if(FlagMeasureOk=1) /測(cè)量成功 FlagMeasureOk=0; Freq=(unsigned long int)T1Cnt*100+(T1Num-156); /100個(gè)脈沖的周期 Freq=1000000000/Freq; /換算成

14、頻率 FreqToBuffer(Freq); /刷新緩沖區(qū) 程序解釋?zhuān)涸谥骱瘮?shù)中,完成100個(gè)脈沖的周期計(jì)算,換算成頻率,并更新緩沖區(qū)。周期的計(jì)算在周期測(cè)量模塊詳細(xì)解釋。(2) 周期測(cè)量模塊MeasurePeriod.h#ifndef _MEASUREPERIOD_H_#define _MEASUREPERIOD_H_#include <reg52.h>#include "MicroDefine.h"#include "Seg7Display.h"/變量聲明extern uchar T1Num; /定時(shí)器1低八位暫存值extern uint

15、T1Cnt; /定時(shí)器1溢出次數(shù)暫存值extern bit FlagMeasureOk; /周期測(cè)量完成標(biāo)志位extern bit FlagSystem1Ms; /1ms時(shí)標(biāo)信號(hào)/函數(shù)聲明extern void FreqToBuffer(unsigned long int Num); /緩沖區(qū)刷新extern void TimerInit(); /定時(shí)器初始化#endifMeasruePeriod.c:#include "MeasurePeriod.h" uint T1OverflowCnt=0; /定時(shí)器1溢出次數(shù)uchar T1Num=0; /定時(shí)器1低八位暫存值uin

16、t T1Cnt=0; /定時(shí)器1溢出次數(shù)暫存值bit FlagMeasureOk=0; /周期測(cè)量完成標(biāo)志位bit FlagSystem1Ms=0; /系統(tǒng)時(shí)標(biāo)信號(hào)/*函數(shù)名稱(chēng):TimerInit()*功能 :定時(shí)器初始化*入口參數(shù):無(wú)*出口參數(shù):無(wú)*說(shuō)明 :定時(shí)器0用作計(jì)數(shù),定時(shí)器1用作定時(shí)*/void TimerInit() TMOD=0x26; /高四位:0010,定時(shí)器1,定時(shí)模式,自動(dòng)重裝 /低四位:0110,定時(shí)器0,計(jì)數(shù)模式,自動(dòng)重裝 TH0=TL0=156; /定時(shí)器0計(jì)數(shù)100次溢出 TH1=TL1=156; /定時(shí)器1 100us溢出一次 ET0=ET1=1; EA=1;

17、TR0=TR1=1;/*函數(shù)名稱(chēng):FreqToBuffer()*功能 :待顯示值傳遞給顯示緩沖區(qū)*入口參數(shù):待顯示值*出口參數(shù):無(wú)*說(shuō)明 :*/void FreqToBuffer(unsigned long int Num)uchar i,j=5; for(i=0;i<6;i+) DispBufferj-i=Num%10; Num=Num/10; /*函數(shù)名稱(chēng):Timer0Isr()*功能 :定時(shí)器0中斷服務(wù)函數(shù)*入口參數(shù):無(wú)*出口參數(shù):無(wú)*說(shuō)明 :每100個(gè)脈沖,定時(shí)器0中斷,記錄定時(shí)器1的溢出次數(shù)和計(jì)數(shù)值*/void Timer0Isr() interrupt 1 T1Num=TL1

18、; /記錄定時(shí)器1的計(jì)數(shù)值 TL1=156; /定時(shí)器1賦初值 T1Cnt=T1OverflowCnt; /記錄定時(shí)器1的溢出次數(shù) T1OverflowCnt=0; /溢出次數(shù)清零 FlagMeasureOk=1; /周期測(cè)量完成標(biāo)志位/*函數(shù)名稱(chēng):Timer1Isr()*功能 :定時(shí)器1中斷服務(wù)函數(shù)*入口參數(shù):無(wú)*出口參數(shù):無(wú)*說(shuō)明 :100us溢出1次*/void Timer1_Isr() interrupt 3 static uchar Cnt100us=0; /100us計(jì)數(shù)器 T1OverflowCnt+; /記錄定時(shí)器1的溢出次數(shù) if(+Cnt100us>=10) /1ms到 Cnt100us=0; Seg7Display(); /數(shù)碼管掃描 程序解釋?zhuān)?測(cè)周法與測(cè)頻法一樣,都用到了2個(gè)定時(shí)/計(jì)數(shù)器。這兩個(gè)定時(shí)/計(jì)數(shù)器都配置為自動(dòng)重裝模式,初值都為156,不同的是定

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論