51单片机的频率计设计

 设计功能

(1)主要采用51单片机+最小系统+LCD1602液晶显示模块+分频电路+整形电路+按键而成。
(2)频率的测量范围为1Hz—20MHz能测量各种周期信号,能测出正弦波、三角波或方波等波形的频率。
(3)通过LCD1602液晶显示屏显示检测到的即时频率数值(最多8位数,单位为Hz)。 
(4)电路板上排针左边接信号输入,右边接地。

原理图:

原理图绘制软件采用AD2013。频率计能测出正弦波、三角波或方波等波形的频率,测量范围为1Hz—20MHz,且能检测幅度最小值为1Vpp的信号;③通过LCD1602液晶显示屏显示检测到的即时频率数值(最多8位数,单位为Hz)。另外,当输入频率大于20KHz的信号时,由于采用了100分频采样,显示结果稍有误差,如输入最大测量频率20MHz的信号时,LCD1602液晶显示屏上显示的测量结果为19998900HZ,误差不超过十万分之一,在可接受范围之内。

输入信号需要经过信号处理电路后,单片机才能准确计算出频率;

(1)信号放大电路

        为了有效防止因信号过小而造成的检测障碍,在信号输入处采用了三极管共射放大电路,如图所示。

        实际工作中,我们必须解决放大电路与信号源及放大电路与负载之间的耦合问题。一方面要求耦合电路能够传输交流的输入和输出信号,传输过程中的信号损耗尽可能小;另一方面又要求信号源,放大电路、负载之间的直流工作状态互补影响,即有“隔直”作用,电路的C1、C7就很好的解决了这个问题即固定偏置共射极放大器。集电极电压通过基极偏置电阻R2使晶体管Je正偏;同时拖过R3使Jc反偏,从而实现信号源放大。

(2)信号缓冲电路

        脉冲产生模块采用74HC14实现了三次施密特触发并反相,从图1.2可以看出,来自信号采集模块的经过放大的信号从74HC14的1脚进入,经过1A→1Y、2A→2Y和3A→3Y三次施密特触发并反相最终将缓慢变化的输入信号转换成清晰、无抖动的信号从6脚输出。

(3)分频电路

        由于单片机可操作频率有限,若输入信号频率过大则单片机无法成功实现脉冲计数,因此需要使用74HC390进行分频,以100分频为宜(具体为200KHz以上信号采取100分频后再检测,200KHz或以下信号则检测未经100分频的原始信号)。

采取的方法为:从图中可以看出,若从nCP1输入频率为f的时钟信号,则会在nQ2处输出频率为f/5的脉冲信号,因此可进行如图1.5所示的连线方法,1CP1--1Q2→2CP1--2Q2→1CP0--1Q0→2CP0--2Q0,其中“→”代表芯片外部电气连接,“--”代表芯片内部功能连接,从而得到5×5×2×2=100分频,即若从1CP1输入一个频率为f的信号,则会从2Q0输出一个频率为f/100的分频信号。 

其总体硬件原理图如图所示。

仿真设计

仿真软件采用Protues7.8。

程序设计

程序采用C作为编程语言,使用Keil5作为编程软件;

/----------------主函数--------------------
void main()
{ 
	unsigned char i;
	LCD_init();
	timer_init();             //定时/计数器初始化 
	for(i = 0;i<4;i++)
	{
	 	LCD_disp_char(i+0,1,character_1[i]);
	}
	while(1)
	{
		dis_num();         //显示
		delay_1s();
	}
}
//-------------------定时/计数器初始化--------------
void timer_init(void)         //定时/计数器初始化
{ 
	TMOD=0x66;                //计数器0和计数器1工作工作方式2,自动重装初值 
	TH0=0;                    //计数器初值为0
	TL0=0;
	TR0=1;                    //计数器开始计数	    
	ET0=1;                    //打开计数器0中断   
	TH1=0;                    //计数器初值为0
	TL1=0;
	TR1=1;                    //计数器开始计数	    
	ET1=1;                    //打开计数器1中断   
	RCAP2H=(65536-62500)/256; //在程序初始化的时候给RCAP2L和RCAP2H赋值, 
	RCAP2L=(65536-62500)%256; //TH2和TL2将会在中断产生时自动使TH2=RCAP2H,TL2=RCAP2L。 
	TH2=RCAP2H;               //12M晶振下每次中断62.5ms(1s=1000ms=62.5ms×16)
	TL2=RCAP2L;
	ET2=1;                    //打开定时器2中断	 
	TR2=1;                    //定时器2开始计时  
	EA=1;                     //开总中断   
} 
//------------------中断函数----------------------
void timer2(void) interrupt 5 //定时器2中断(62.5ms)
{
	time++;
	TF2=0;                    //定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其清零
	if (time==16)             //定时1s时间到  
	{
	   time=0;                //计时清0
	   EA=0;                  //关中断		 
	   fre=(long)count1*256+TL1;     //count*256强制转换成long型,否则将不产生进位~先判断分频后(计数器1)
	   FLAG = 0; 
	  
	   if(fre<2000)//如果不到200KHz则读取分频前(计数器0)频率(200K÷100=2000)
	   {
	   		fre = (long)count*256+TL0;
			FLAG = 1;          
	   } 
		if(!FLAG)
		{
			fre = fre *100;//100分频
		}
	   TL0=0;                 //清零计数器0计数	    
	   TH0=0;
	   TL1=0;
	   TH1=0; 
	   count=0;               //清零计数器0计数	  
	   count1=0;
	   EA=1;                  //开中断	    
	}
} 

链接:https://pan.baidu.com/s/1K_iaNaTtbG7G-vrYtpOvyw 
提取码:fqvi

  • 7
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值