基于单片机和测频法的频率计设计及proteus仿真
2018-02-27李建波张永亮潘必超陈榕福
李建波 张永亮 潘必超 陈榕福
摘要:传感器广泛应用在自动化测量中,该文利用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.
[通联编辑:梁书]