李建波 張永亮 潘必超 陳榕福
摘要:傳感器廣泛應(yīng)用在自動(dòng)化測(cè)量中,該文利用51單片機(jī)2個(gè)16位定時(shí)器和測(cè)量頻率中的測(cè)頻法設(shè)計(jì)了測(cè)量方波的頻率計(jì),并用LCD1602液晶顯示頻率、proteus仿真,測(cè)試結(jié)果表明設(shè)計(jì)思路正確、誤差小。
關(guān)鍵詞:?jiǎn)纹瑱C(jī);測(cè)頻法;頻率計(jì);proteus
中圖分類(lèi)號(hào):TP23;TP212.6? ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A? ? ? 文章編號(hào):1009-3044(2018)35-0226-02
1 概述
傳感器能感受到被測(cè)量信息,在自動(dòng)化控制技術(shù)中,需要用到多種傳感器來(lái)監(jiān)視各個(gè)參數(shù)。因測(cè)量電壓、電流、頻率等的方法與技術(shù)相對(duì)成熟、易實(shí)現(xiàn),故而許多傳感器把被測(cè)量對(duì)象轉(zhuǎn)換成電壓、電流或頻率來(lái)進(jìn)行測(cè)量和處理[1]。廣東工業(yè)大學(xué)鮑芳采用高頻段測(cè)頻法、中頻段多周期同步法、低頻段測(cè)周法設(shè)計(jì)頻率計(jì),測(cè)量結(jié)果優(yōu)于普通測(cè)量法[2];南昌大學(xué)彭嵐峰利用單片機(jī)產(chǎn)生閘門(mén)的時(shí)間設(shè)計(jì)頻率計(jì),并利用液晶LCD1602進(jìn)行顯示[3];青海大學(xué)任小青介紹了測(cè)周期法、外部計(jì)數(shù)器計(jì)數(shù)法、內(nèi)部計(jì)數(shù)器計(jì)數(shù)法等頻率測(cè)試方法并完成以單片機(jī)為核心的頻率計(jì)[4];西安職業(yè)技術(shù)學(xué)院趙銀玲設(shè)計(jì)的頻率計(jì),結(jié)合了定時(shí)器、計(jì)數(shù)器并用數(shù)碼管顯示,結(jié)果顯示滿(mǎn)足一般領(lǐng)域的測(cè)試要求[5];成都理工大學(xué)張糧雨設(shè)計(jì)的頻率計(jì)可以計(jì)算出正弦波的有效值和峰峰值[6];延安大學(xué)劉竹琴設(shè)計(jì)了數(shù)字頻率計(jì),進(jìn)行測(cè)量,并分析了測(cè)量誤差的來(lái)源,提出了減小誤差應(yīng)采取的措施[7];廣州番禺職業(yè)技術(shù)學(xué)院盧飛躍實(shí)現(xiàn)多周期同步法測(cè)量頻率,提高了測(cè)量的精度[8]。
單片機(jī)16位定時(shí)器計(jì)數(shù)最大值為65536,比較適用測(cè)量65KHz以下頻率,再大頻率則溢出不準(zhǔn)、或需要定時(shí)器中斷來(lái)計(jì)數(shù)。本人參考前人研究和設(shè)計(jì),利用單片機(jī)中2個(gè)16位定時(shí)器設(shè)計(jì)頻率計(jì),其中1個(gè)用于定時(shí)、另外1個(gè)采集外界脈沖,得到單位時(shí)間的脈沖個(gè)數(shù),進(jìn)而計(jì)算出頻率,可測(cè)量500KHz的頻率信號(hào)。
2 硬件部分
頻率計(jì)硬件電路主要包括單片機(jī)芯片、液晶顯示部分、脈沖信號(hào)輸入部分,如圖1所示。
2.1 單片機(jī)
單片機(jī)芯片采用AT89C52,不做說(shuō)明。
2.2 脈沖信號(hào)
從信號(hào)發(fā)生器中選擇方波發(fā)生器PULSE,設(shè)置方波脈沖脈寬為50%、頻率從10Hz~500KHz變化,如圖2所示。
2.3 液晶LCD1602
液晶接口電路如圖1所示,數(shù)據(jù)端口用P2口、P0.3接液晶數(shù)據(jù)/命令選擇引腳R/S、P0.4接液晶讀/寫(xiě)控制引腳R/W、P0.5接液晶使能引腳E,如圖3所示。
3 軟件部分
3.1 定時(shí)器0
單片機(jī)的晶振采用12MHz,定時(shí)器0用來(lái)計(jì)時(shí)采用16位、內(nèi)部計(jì)數(shù)方式。定義變量T0_H、T0_L用來(lái)定時(shí)器0重載初值,每次中斷時(shí)間為50ms,定時(shí)器0初始化代碼如下:
unsigned char code T0_H = (65536-50000)/256;
unsigned char code T0_L = (65536-50000)%256;
EA? ?= 1;
ET0? = 1;
TMOD = 0x01;
TH0? = T0_H;
TL0? = T0_L;
TR0? = 1;
定時(shí)器0每次中斷重載初值,并讀取定時(shí)器1的高字節(jié)和低字節(jié),并將其清空,中斷服務(wù)函數(shù)如下:
void t0_sever(void) interrupt 1{
TL0? = T0_L;//12MHz,50ms
TH0? = T0_H;
chH=TH1;
chL=TL1;
TL1=0;
TH1=0;}
3.2 定時(shí)器1
定時(shí)器1采用16位、外部計(jì)數(shù)方式,用來(lái)對(duì)外部脈沖進(jìn)行計(jì)數(shù),每個(gè)脈沖加1。定時(shí)器1初始化代碼如下:
ET1? = 1;
TMOD|= 0x50;
TH1? = 0;
TL1? = 0;
TR1? = 1;
3.3 數(shù)據(jù)處理與液晶顯示
每次中斷時(shí)間為50ms,采用遞推方式存儲(chǔ)20次數(shù)據(jù),其和在時(shí)間意義代表1s脈沖個(gè)數(shù)。
unsigned char str1[]={"? ? ? ? 000000Hz"};
unsigned int numf[20];//存儲(chǔ)數(shù)組
void display(){ //液晶顯示函數(shù)
unsigned char i;
unsigned long int sum=0;
for(i=0;i<19;i++){
numf[i]=numf[i+1];
sum+=numf[i];}
numf[19]=chH*256+chL;
sum+=numf[19];
i=8;? str1[i]='0'+sum%1000000/100000;
i++;? str1[i]='0'+sum%100000/10000;
i++;? str1[i]='0'+sum%10000/1000;
i++;? str1[i]='0'+sum%1000/100;
i++;? str1[i]='0'+sum%100/10;
i++;? str1[i]='0'+sum%10;
for(i=0;i<16;i++){
LCD_dis(0,i,str1[i]);}}
3.4 主函數(shù)
在主程序或其他合適的位置,調(diào)用液晶顯示函數(shù)display()。
4 結(jié)論
運(yùn)行程序,輸入方波信號(hào)頻率為500KHz時(shí)仿真結(jié)果如圖3所示,不同頻率下的測(cè)試結(jié)果如見(jiàn)表1。
通過(guò)表1我們看到,100Hz測(cè)量誤差為1%,500KHz為0.02%,頻率越高誤差越小。測(cè)試結(jié)果表明,利用單片機(jī)中2個(gè)16位定時(shí)器、采用測(cè)頻法設(shè)計(jì)的頻率計(jì),思路是可行的,設(shè)計(jì)是成功的,可測(cè)量500KHz的頻率信號(hào),誤差小、精度高、性?xún)r(jià)比高。
參考文獻(xiàn):
[1] 王淑青,吳作健.基于單片機(jī)高精度測(cè)頻方法的研究[J].湖北工業(yè)大學(xué)學(xué)報(bào),2005,(4):35-37,48.
[2] 鮑芳,王春茹.新型單片機(jī)頻率測(cè)量系統(tǒng)的研究[J].儀表技術(shù)與傳感器,2001,(2):33-35.
[3] 彭嵐峰,胡佳佳.基于AT89C51單片機(jī)的簡(jiǎn)易頻率計(jì)的設(shè)計(jì)[J].科技廣場(chǎng),2012,(9):121-123.
[4] 任小青,王曉娟.基于AT89C51單片機(jī)的頻率計(jì)設(shè)計(jì)方法的研究[J].青海大學(xué)學(xué)報(bào):自然科學(xué)版,2009,(2):10-12.
[5] 趙銀玲.基于單片機(jī)的數(shù)字頻率計(jì)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2017,(18):178-180,184.
[6] 張糧雨.基于51單片機(jī)的高頻頻率計(jì)的設(shè)計(jì)[J].電子科技,2014,(2):82-84.
[7] 劉竹琴,白澤生.一種基于單片機(jī)的數(shù)字頻率計(jì)的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2010,(1):90-92,96.
[8] 盧飛躍.基于單片機(jī)的高精度頻率計(jì)設(shè)計(jì)[J].電子測(cè)量技術(shù),2006,(5):96-97,150.
[通聯(lián)編輯:梁書(shū)]