基于430单片机的频率计设计.docx
- 文档编号:28727567
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:15
- 大小:207.50KB
基于430单片机的频率计设计.docx
《基于430单片机的频率计设计.docx》由会员分享,可在线阅读,更多相关《基于430单片机的频率计设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于430单片机的频率计设计
基于430单片机的频率计设计
测控技术与仪器专业课程设计报告
班级:
040852姓名:
姬树明学号:
04085144
起始时间:
2012-02-27---2012-03-11
课程设计题目:
基于51单片机频率计的设计(0—10MHz)
一、对题目的认识和理解
1引 言
本设计综合考虑了频率测量精度和测量反应时间的要求。
例如当要求频率测量结果为3位有效数字,这时如果待测信号的频率为1Hz,则计数闸门宽度必须大于1000s。
为了兼顾频率测量精度和测量反应时间的要求,把测量工作分为两种方法:
(1)当待测信号的频率>100Hz时,定时/计数器构成为计数器,以机器周期为基准,由软件产生计数闸门,计数闸门宽度>1s时,即可满足频率测量结果为3位有效数字;
(2)当待测信号的频率<100Hz时,定时/计数器构成为定时器,由频率计的予处理电路把待测信号变成方波,方波宽度等于待测信号的周期。
这时用方波作计数闸门,当待测信号的频率=100Hz,使用12MHz时钟时的最小计数值为10000,完全满足测量精度的要求。
二、本频率计的设计以AT89C51单片机为核心,利用他内部的定时/计数器完成待测信号周期/频率的测量。
单片机AT89C51内部具有2个16位定时/计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。
在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加1(使用12MHz时钟时,每1μs加1),这样以机器周期为基准可以用来测量时间间隔。
在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。
外部输入在每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的1/24(使用12MHz时钟时,最大计数速率为500kHz)。
定时/计数器的工作由运行控制位TR控制,当TR置1,定时/计数器开始计数;当TR清0,停止计数。
三、2 频率计的量程自动切换
使用定时方法实现频率测量时,外部的待测信号通过频率计的预处理电路变成宽度等于待测信号周期的方波,该方波同样加至定时/计数器的输入脚。
工作高电平是否加至定时/计数器的输入脚;当判定高电平加至定时/计数器的输入脚,运行控制位TR置1,启动定时/计数器对单片机的机器周期的计数,同时检测方波高电平是否结束;当判定高电平结束时TR清0,停止计数,然后从计数寄存器读出测量数据。
这时读出的数据反映的是待测信号的周期,通过数据处理把周期值变换成频率值,由显示电路显示测量结果。
四、 使用计数方法实现频率测量时,外部的待测信号为单片机定时/计数器的计数源,利用软件延时程序实现计数闸门。
频率计的工作过程为:
定时/计数器的计数寄存器清0,运行控制位TR置1,启动定时/计数器工作;运行软件延时程序,同时定时/计数器对外部的待测信号进行计数,延时结束时TR清0,停止计数。
从计数寄存器读出测量数据,测量数据在完成数据处理后,由显示电路显示测量结果。
测量结果的显示格式采用科学计数法,即有效数字乘以10为底的幂。
这里设计的频率计用5位数码管显示测量结果:
前3位为测量结果的有效数字;第4位为指数的符号;第5位为指数的值。
采用这种显示格式既保证了测量结果的显示精度,又保证了测量结果的显示范围(0.100Hz~9.99MHz)。
频率计测量量程自动转换的过程由频率计测量量程的高端开始。
由于只显示3位有效数字,测量量程的高端计数闸门不需要太宽,例如在进入计数器的信号频率范围在10.0~99.9kHz,计数闸门宽度为10ms即可。
频率计开始工作时使用计数方法实现频率测量,并使计数闸门宽度为最窄,完成测量后判断测量结果是否具有3位有效数字,如果成立,将结果送去显示,完成测量工作;否则将计数闸门宽度扩大10倍,继续进行测量判断,直到计数闸门宽度达到1s,这时对应的进入单片机的待测信号频率范围为100~999Hz。
如果测量结果仍不具有3位有效数字,频率计则使用定时方法实现频率测量。
定时方法测量的是待测信号的周期,这种方法只设一种量程,测量结果通过浮点数运算模块将信号周期转换成对应的频率值,再将结果送去显示。
无论采用何种方式,只要完成一次测量,频率计自动开始下一个测量循环,因此该频率计具有连续测量的功能,同时实现量程的自动转换。
二、方案论证与比较
2.1、脉冲数定时测频法(M法):
此法是记录在确定时间Tc内待测信号的脉冲个数Mx,则待测频率为:
Fx=Mx/Tc
显然,时间Tc为准确值,测量的精度主要取决于计数Mx的误差。
其特点在
于:
测量方法简单;测量精度与待测信号频率和门控时间有关,当待测信号频率较低时,误差较大。
2.2、脉冲周期测频法(T法):
此法是在待测信号的一个周期Tx内,记录标准频率信号变化次数Mo。
这种方法测出的频率是:
Fx=Mo/Tx
此法的特点是低频检测时精度高,但当高频检测时误差较大。
2.3、脉冲数倍频测频法(AM法):
此法是为克服M法在低频测量时精度不高的缺陷发展起来的。
通过A倍频,把待测信号频率放大A倍,以提高测量精度。
其待测频率为:
Fx=Mx/ATo
其特点是待测信号脉冲间隔减小,间隔误差降低;精度比M法高A倍,但控制电路较复杂。
2.4、脉冲数分频测频法(AT法):
此法是为了提高T法高频测量时的精度形成的。
由于T法测量时要求待测信号的周期不能太短,所以可通过A分频使待测信号的周期扩大A倍,所测频率为:
Fx=AMo/Tx
其特点是高频测量精度比T法高A倍;但控制电路也较复杂。
2.5、脉冲平均周期测频法(M/T法):
此法是在闸门时间Tc内,同时用两个计数器分别记录待测信号的脉冲数Mx和标准信号的脉冲数Mo。
若标准信号的频率为Fo,则待测信号频率为:
Fx=FoMx/Mo
M/T法在测高频时精度较高;但在测低频时精度较低。
2.6、多周期同步测频法:
是由闸门时间Tc与同步门控时间Td共同控制计数器计数的一种测量方法,待测信号频率与M/T法相同。
此法的优点是,闸门时间与被测信号同步,消除了对被测信号计数产生的±1个字误差,测量精度大大提高,且测量精度与待测信号的频率无关,达到了在整个测量频段等精度测量。
设计方案确定:
电路整体框图如图所示,被测信号经过放大电路,整形电路从而将其转换成同频率的脉动信号,送入计数器计数,闸门的一个输入信号是秒脉冲发出的标准脉冲信号,秒脉冲信号源含有个高稳定的石英振荡器和一个多级分频器共同决定,其时间是相当精确的,计数器显示电路采用液晶显示。
三,信号预处理电路
信号预处理电路如图所示,他由4级电路构成。
第1级为零偏置放大器,当输入信号为零或者为负电压时,三极管截止,输出高电平;当输入信号为正电压时,三极管导通,输出电压随着输入电压的上升而下降。
零偏置放大器可把正负交替波形变换成单向脉冲,这使得频率计既可以测量脉冲信号的频率,也可以测量正弦波信号的频率。
放大器的放大能力实现了对小信号的测量,本电路可以测量幅度≥0.5V的正弦波或脉冲波待测信号。
三极管应采用开关三极管以保证放大器具有良好的高频响应。
第2级采用带施密特触发器的反相器7414,他用于把放大器生成的单向脉冲变换成与TTL/CMOS电平相兼容的方波。
第3级采用十进制同步计数器74160,第2级输出的方波加到74160的CLK,当从74160的TC输出可实现10分频(多个74160的级连可以进一步扩展测频范围)。
第4级同样采用十进制同步计数器74160,第3级输出的方波加到他的CLK,当从他的Q0输出既可实现2分频,且其输出为对称方波,方波宽度等于待测信号的周期,从而为测量信号周期提供基础。
3.3、钳为电路
因为输入到单片机的电压必须为0—5V之间,所以使用限幅。
之后再输入到51单片机中。
四、监控软件设计与说明
如图所示,通过一个按键启动测量,先用直接测频率法测量待测信号的频率,如果大于等于1Mhz,则为实测频率并显示,如果小于1Mhz,那么改用测周期法测量周期,并转换为频率,最后显示,一次测量完毕后自动返回开始下一次测量。
系统软件设计:
频率计开始工作或者完成一次频率测量,系统软件都进行测量初始化。
测量初始化模块设置堆栈指针(SP)、工作寄存器、中断控制和定时/计数器的工作方式。
定时/计数器的工作首先被设置为计数器方式,即用来测量信号频率。
首先定时/计数器的计数寄存器清0,运行控制位TR置1,启动对待测信号的计数。
计数闸门由软件延时程序实现,从计数闸门的最小值(即测量频率的高量程)开始测量,计数闸门结束时TR清0,停止计数。
计数寄存器中的数值经过数制转换程序从十六进制数转换为十进制数。
判断该数的最高位,若该位不为0,满足测量数据有效位数的要求,测量值和量程信息一起送到显示模块;若该位为0,将计数闸门的宽度扩大10倍,重新对待测信号的计数,直到满足测量数据有效位数的要求。
当上述测量判断过程直到计数闸门宽度达到1s(对应的频率测量范围为100~999Hz)时测量结果仍不具有3位有效数字,频率计则使用定时方法测量待测信号的周期。
定时/计数器的工作被设置为定时器方式,定时/计数器的计数寄存器清0,在判断待测信号的上跳沿到来后,运行控制位TR置为1,以单片机工作周期为单位进行计数,直至信号的下跳沿到来,运行控制位TR清0,停止计数。
16位定时/计数器的最高计数值为65535,当待测信号的频率较低时,定时/计数器将发生溢出。
产生溢出时,程序进入定时器中断服务程序,对溢出次数进行计数。
待测信号的周期由3个字节组成:
定时/计数器溢出次数、定时/计数器的高8位和低8位。
信号的频率f与信号的周期T之间的关系为:
f=1/T
完成信号的周期测量后,需要做一次倒数运算才能获得信号的频率。
为提高运算精度,采用浮点数算术运算。
浮点数由3个字节组成:
第1字节最高位为数符,其余7位为阶码;第2字节为尾数的高字节;第3字节为尾数的低字节。
待测信号周期的3个字节定点数通过截取高16位、设置数符和计算阶码转换为上述格式的浮点数。
然后浮点数算术运算对其进行处理,获得用浮点数格式表达的信号频率值。
再通过浮点数到BCD码转换模块把用浮点数格式表达的信号频率值变换成本频率计的显示格式,送到显示模块显示待测信号的频率值。
完成显示后,频率计都开始下一次信号的频率测量。
系统软件设计采用模块化设计方法。
整个系统由初始化模块、显示模块和信号频率频率测量模块等各种功能模块组成。
上电后,进入系统初始化模块,系统软件开始运行。
在执行过程中,根据运行流程分别调用各个功能模块完成频率测量、量程自动切换、周期测量和测量结果显示。
五、附录
程序:
动态数码管显示程序
说明:
驱动四位一体数码管动态显示数字,可方便的移植到其它程序中。
例如:
1、硬件改为三位一体或二位一体数码管,只需修改Display_Scan()函数COM个数。
2、本例中,采用了共阴数码管,如果用在共阳数码管,只需修改相应段码表。
本程序使用P0口作为段码数据发送端,P2.0-P2.3作为数码管扫描选通,
使用P0口时,因单片机内部没有上拉电阻,所以要外接上拉电阻(参考阻值470欧姆).
(C)西安电子科技大学测控技术与仪器编写:
郭世忠2008/03/16
*/
//STC89C52RC
//+---------------+
//||
//||DigitalNumber
//||_______________________
//|||________|
//|P0.0--P0.7|===>||||||||||
//|(a,b...g,h)|||--||--||--||--||4位共阴数码管
//||||__|.|__|.|__|.|__|.|
//||-----------------------
//||||||
//||||||
//|P2.6(COM3)|--------+|||
//|||||
//|P2.5(COM2)|-------------+||
//||||
//|P2.4(COM1)|------------------+|
//|||
//|P2.7(COM0)|-----------------------+
//+---------------+
#include
// 函数声明
//=======================================================================
voidDisplayNumber(unsignedintNum);
//=======================================================================
/*宏定义,数码管a-g各段对应的比特,更换硬件只用改动以下8行*/
#definea0x04//AAAA
#defineb0x01//FB
#definec0x10//FB
#defined0x40//GGGG
#definee0x80//EC
#definef0x02//EC
#defineg0x08//DDDDH
#defineh0x20
/*用宏定义自动生成段码表,很好的写法,值得学习*/
/*更换硬件无需重写段码表*/
unsignedcharcodeLED_table[]={
a+b+c+d+e+f,//"0"
b+c,//"1"
a+b+d+e+g,//"2"
a+b+c+d+g,//"3"
b+c+f+g,//"4"
a+c+d+f+g,//"5"
a+c+d+e+f+g,//"6"
a+b+c,//"7"
a+b+c+d+e+f+g,//"8"
a+b+c+d+f+g,//"9"
b+c+e+f+g,//"H"
a+f+e+g,//"C"
d+e+f,//"L"
g,//"-"
0x00//black
};
#undefa
#undefb
#undefc
#undefd
#undefe
#undeff
#undefg
#defineblack14/*空白*/
unsignedcharDisBuff[4];//定义显示缓冲数组
unsignedcharCOM;
//定义通信端口
//===========================================================================
sbitCOM0=P2^7;
sbitCOM1=P2^4;//对应口线由硬件确定
sbitCOM2=P2^5;
sbitCOM3=P2^6;
/****************************************************************************
*名称:
DisplayNumber()
*功能:
在数码管上显示数据。
*入口参数:
Num:
显示数值(0~9999)
*出口参数:
无
*范例:
DisplayNumber(1234);显示结果:
1234
****************************************************************************/
voidDisplayNumber(unsignedintNum)//显示程序
{
unsignedchari;
EA=0;//禁止总中断
for(i=0;i<4;i++)
{
DisBuff[i]=Num%10;//拆分数字
Num/=10;
}
for(i=3;i>=0;i--)//循环4次
{
if(DisBuff[i]==0)DisBuff[i]=black;//消隐无效"0"
elsebreak;//例如将0123改成123,仅显示有效数字
}
EA=1;//总中断允许
}
/****************************************************************************
*名称:
Display_Scan()
*功能:
数码管选通扫描。
*入口参数:
无
*出口参数:
无
****************************************************************************/
voidDisplay_Scan()
{
if(COM>3)COM=0;
COM0=1;COM1=1;COM2=1;COM3=1;//将COM0-COM3置1,全暗
switch(COM)
{
case0:
P0=LED_table[DisBuff[0]];COM0=0;break;//分别选通COM0-COM3低电平有效
case1:
P0=LED_table[DisBuff[1]];COM1=0;break;
case2:
P0=LED_table[DisBuff[2]];COM2=0;break;
case3:
P0=LED_table[DisBuff[3]];COM3=0;break;
}//与0x20位或,恰好点亮小数点位段
COM++;
}
#include
#include"Display.h"
unsignedintT0count;
unsignedintFreq;
voidTimer_Init()
{
TMOD=0x01;//T0:
16位定时器模式
//T2CON=0x02;//T2:
16位计数器
TH0=(65536-1500)/256;//1.5ms
TL0=(65536-1500)%256;
TR0=1;//启动T0定时
TR2=1;//启动T2计数
ET0=1;//开启中断
EA=1;
}
voidMeasureFreq(void)interrupt1
{
TH0=0xd9;//(65536-10000)/256;//10ms
TL0=0x09;//(65536-10000)%256;
Display_Scan();
T0count++;
if(T0count>99)//计满1s10ms*100=1s
{
TR0=0;//关闭T0定时
TR2=0;//关闭T2计数
T0count=0;
Freq=((unsignedint)TH2<<8)+TL2;//读取1秒钟T2所计P1^0脉冲个数(即频率),典型值6600Hz
TH2=0;//T2计数器清零
TL2=0;
TR0=1;//启动T0定时
TR2=1;//启动T2计数
}
}
#include
#include"Display.h"
#include"Freq.h"
unsignedintTime;
voidSleepDelay()
{
PCON|=0x01;//Sleep
}
/******************************************************************
主函数
*******************************************************************/
voidmain()
{
Timer_Init();//定时器T0、T2初始化
while
(1)
{
SleepDelay();//休眠10msT0中断每10ms唤醒一次
Time++;
if(Time>10)
{
Time=0;
DisplayNumber(Freq);
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 430 单片机 频率计 设计