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