自适应数字频率计.docx
《自适应数字频率计.docx》由会员分享,可在线阅读,更多相关《自适应数字频率计.docx(13页珍藏版)》请在冰豆网上搜索。
自适应数字频率计
成都信息工程学院电子工程学院
[电子综合设计]
总结报告
题目:
基于单片机的自适应数字频率计
专业:
电子信息工程
班级:
姓名:
指导教师:
评分:
2012年11月27日
目录
一、项目计划2
(一)项目分析2
(二)方案设计4
(三)可行性分析5
(四)项目执行计划6
1.项目的整体规划6
2.项目具体流程安排7
二、设计说明7
(一)各模块硬件电路设计7
1.分频和选频电路7
2.单片机控制系统8
3.数码管显示电路9
4.系统总原理图9
5.系统PCB图10
(二)各模块软件设计11
一、项目计划
(一)项目分析
1.数字频率计的定义
数字频率计是采用数字电路制成的实现对周期性变化信号的频率的测量。
2.优点及用途
数字频率计是计算机、通信设备、音频视频等科研生产领域不可缺少的测量仪器。
它是一种十进制数字,显示被测量信号频率的数字测量仪器。
它的基本功能是测量正弦信号,方波信号以及其他各种单位时间内变化的物理量。
在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精度高,显示直观,所以经常要用到数字频率计。
(二)方案设计
3.设计要求
设计一个计频器,该计频器基本能:
完成测试输入信号的频率,量程范围1~10MHZ;
自动选择最佳分频频段,提高测量精度和范围。
4.设计思路
频率测量就是在1S时间内对信号进行计数,计数值就是信号频率的信号频率;用单片机设计数字频率计可以使用单片机的计数器对信号脉冲进行计数,再由单片机取出读数并显示。
因为单片机能够直接采集的信号频率有限,所以要先对信号进行分频,分频后的信号进入单片机采集,再由单片机计算得出信号频率后在自行选出合适的分配数以得到更精确的频率值。
(三)可行性分析
5.项目预算
品名
数量
PC机
1台
电烙铁
1个
焊锡丝
若干
万用表
一只
电阻
若干
电容
若干
74LS393
1个
STC12C5A60S2
1个
CD4051
1个
4位共阴数码管
1个
12M晶振
1个
排针
若干
1)材料需求:
6.
技术支持:
Protel99se
Keil4
(四)项目执行计划
7.项目的整体规划
●首先,进行产品整体及实现过程的构思;
●然后,分享产品特性,进行资料查阅,设计出产品的基本架构;
●绘制出原理图,并根据原理图编写出程序和制作出硬件;
●对产品进行调试,校正,确定产品精度,完成产品操作说明书及注意事项。
8.项目具体流程安排
第1-3天:
软件负责人负责针对自适应数字频率计的性能需求进行软件思路设计并与小组所有成员讨论交流获得完整思路;
第4-6天:
硬件负责人通过软件负责人的思路完成自适应数字频率计电路板设计,其中包括硬件原理图和PCB。
第7-9天:
小组成员在硬件负责人的带领下做出硬件初步雏形,并完成整个安装过程;此过程中软件负责人负责编写出软件代码;
第10天:
软件与硬件联合调试,小组成员联合讨论提出修改意见并记录;
第11-13天:
根据联合调试结果,试验出最适合的产品尺寸,硬件环境以及工作环境,并记录下最优条件,对硬件做出一定的改善;
第14-15天:
联合调试优化,完成产品并编写说明书。
(注:
整个过程全组参与,并由文档撰写负责人记录所有调试过程及结果)
二、设计说明
(五)各模块硬件电路设计
9.分频和选频电路
采用74HC393芯片进行分频,信号送入芯片中,使用74HC393分出8路信号、分别是2、4、8、16、32、64、128、256分频,因为信号最高频率为10M,256分频可以不使用。
采用CD4051进行选频,分别接受不分频、2、4、8、16、32、64、128分频,由单片机控制,选择输出的分频数。
10.单片机控制系统
一个单片机的最小系统,由STC12C5A60S2为核心组成。
外围电路有复位和晶振电路,以及一些必要管脚。
11.数码管显示电路
单片机将处理好的信号频率数发生到数码管上,数码管上显示出频率。
单位为KHZ。
12.系统总原理图
13.系统PCB图
(六)各模块软件设计
2)
开始
计算频率选择分频
选择分频
初始化
初始化
总流程图
数码管显示
3)初始化
voidInit(void)
{
P1=0x01;//打开CD4051X1口
num_div=1;//CD4051X1口分频为2的1次方
TMOD=0x51;//T0计时16位,T1计数16位
TL0=-50000;//定时50ms赋初值
TH0=(-50000)>>8;
TH1=0;//计数
TL1=0;
ET0=1;//溢出中断允许
ET1=1;
TR0=1;//T0定时运行
TR1=1;//T1计数运行
EA=1;//总中断使能
}
4)计算频率、选择分频
voidHextoBCD(unsignedcharx,unsignedchary)
{
longintz;
z=(x<<8)+y;//提取出计数器的值
if(dispflag==3)
{
z=(overflow_num*65536+z)*128;
}
else
{
z=(overflow_num*65536+z)*2;
}
overflow_num=0;
if(z>1000000)//选择分频
{
z=z/1000;
dispflag=3;
P1=0x07;//打开CD4051X7口
num_div=7;//CD4051X7口分频为2的7次方
}
elseif(z>100000)
{
z=z/100;
dispflag=2;
P1=0x01;//打开CD4051X1口
num_div=1;//CD4051X1口77[[
}
elseif(z>10000)
{
z=z/10;
dispflag=1;
P1=0x01;//打开CD4051X1口
num_div=1;//CD4051X1口
}
else
{
z=z+z;
z=z/2;
dispflag=0;
P1=0x01;//打开CD4051X1口
num_div=1;//CD4051X1口分频为2的1次方
}
z=(int)z;
DispBuf[3]=z/1000;
z%=1000;
DispBuf[2]=z/100;
z%=100;
DispBuf[1]=z/10;
z%=10;
DispBuf[0]=z;
}
voidtimer0(void)interrupt1
{
unsignedcharx,y;
TF0=0;//清除TF0溢出标志位
TL0=-50000;//定时50ms赋初值
TH0=(-50000)>>8;
count++;
if(count==20)//20次为1s
{
count=0;
TF0=0;//清除TF0溢出标志位
TR0=0;//T0定时停止
TR1=0;//T1计数停止
x=TH1;//高位
y=TL1;//低位
HextoBCD(x,y);
Init_Reset();
}
}
voidtimer1(void)interrupt3
{
TF1=0;//清除T1计数溢出标志
TR1=0;//T1计数停止
overflow_num++;//溢出,计数超过T1计数范围256//1s没到溢出了就分频
TR1=1;//T1计数开始
}
5)数码管显示程序
voiddisplay()//显示
{
for(i=0;i<4;i++)
{
P2=LedPosit[i];
m=DispBuf[i];
P0=acLedSegCode[m];
P0=0X00;//影消
}
switch(dispflag)
{
case0:
for(i=0;i<4;i++)
{
P2=LedPosit[i];
m=DispBuf[i];
P0=acLedSegCode[m];
if(i==3)
{
P0|=0X80;//显示小数点
}
P0=0X00;
};break;
case1:
for(i=0;i<4;i++)
{
P2=LedPosit[i];
m=DispBuf[i];
P0=acLedSegCode[m];
if(i==2)
{
P0|=0X80;
}
P0=0X00;
};break;
case2:
for(i=0;i<4;i++)
{
P2=LedPosit[i];
m=DispBuf[i];
P0=acLedSegCode[m];
if(i==1)
{
P0|=0X80;
}
P0=0X00;
};break;
case3:
for(i=0;i<4;i++)
{
P2=LedPosit[i];
m=DispBuf[i];
P0=acLedSegCode[m];
if(i==0)
{
P0|=0X80;
}
P0=0X00;
};break;
}
}