李建波 張永亮 潘必超 陳榕福



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