宁波工程学院电子信息工程学院课程设计报告课程设计题目:简易数字频率计起讫时间:2011年05月23日至2011年06月03日目录第一章技术指标1.1整体功能要求1.2电气指标1.3扩展指标1.4设计条件第二章整体方案设计2.1算法设计2.2整体方框图2.3计数原理第三章单元电路设计3.1波形变换电路3.2闸门电路设计3.3小数点显示电路设计第四章测试与调整4.1硬件测试与调整4.2软件测试与调整4.3整体指标测试第五章设计小结5.1设计任务完成情况5.2问题及改进5.3心得体会附录第一章技术指标1.1整体功能要求设计并制作一台数字显示的简易频率计,主要用于测量正弦波、方波等周期信号的频率值。1.2电气指标1.2.1信号波形:方波;1.2.2信号幅度;TTL电平;1.2.3信号频率:100Hz~9999Hz;1.2.4测量误差:1%;1.2.5测量时间:1s/次,连续测量;1.2.6显示:4位有效数字,可用数码管,LED或LCD显示。1.3扩展指标1.3.1可以测量正弦波信号的频率,电压峰-峰值VPP=0.1~5V;1.3.2方波测量时频率测量上限为3MHz,测量误差1%;1.3.3正弦(Vopp=0.1V~5V)测量时频率测量上限为3MHz,测量误差1%;1.3.4量程自动切换,且自动切换为四位有效数字输出;1.4设计条件1.4.1电源条件:+5V。1.4.2开发平台:本系统以高速SOC单片机C8051F360和FPGAEP2C8T144为核心,主要包括9个模块,其主要配置见表1-1。表1-1数字电子系统设计实验平台模块一览型号名称主要配置MCU模块SOC单片机8051F360,CPLD芯片EMP3064TC4474151FPGA模块EMP3064TC44,串行配置芯片,JTAG和AS配置接口74153LCD和键盘模块12864中文液晶,16个按键74048位高速A/D模块30MHz8位A/D转换器ADS930,信号调理电路451810位高速D/A模块双路100MHz10位D/A转换器THS5651,差分放大电路,反相器74132数码显示和温度检测模块4位数码管,LED显示器,DS1624S温度传感器74160大容量SRAM模块512kBRAM芯片IS62WV5128C392音频放大滤波模块拾音器,放大电路,4阶有源带通滤波器4017音频滤波功放模块音频功放LM386第二章整体设计方案2.1算法设计频率是周期信号每秒钟内所含的周期数值。可根据这一定义采用如图2-1所示的算法。2.2整体方框图2.3计数原理(1)由信号发生器产生方波信号,用单片机的两个定时器中的一个定时器精确定时T=1s,另一个定时器进行对外部脉冲的从0开始计数。(2)当要对正弦信号进行频率计数时,将正弦信号经过LM324运放进行过滤为TTL。输出的信号先由示波器显示,观测幅度范围。将信号接入单片机。(3)用C语言将定时器和计数器功能写入单片机程序,并写好LCD显示程序。信号发生器运放LM324MCU模块LCD显示第三章单元电路设计3.1波形变换电路图3-1波形变换模块图中的V+为+5V,V-接地,这是因为单片机输入引脚只能输入TTL电平,正弦波信号进入波形变换模块转换为同频率TTL电平的方波信号。3.2闸门电路设计和定时计数以下为我们的程序设计TMOD=0x51;//T0、T1方式1,T1计数方式CKCON=0;//系统时钟12分频TL0=0x66;TH0=0x3e;TL1=0X0;TH1=0X0;//计数器清0fp=T_C;宏定义值为40;TMR2CN=0X04;//16位自动重装TMR2RLL=0XF0;//10MSTMR2RLH=0XD8;TMR3CN=0X0C;//双8位自动重装入,系统时钟1/12TMR3RLL=0XE0;//定时100usTMR3RLH=0XFF;TR0=1;TR1=1;我们把T0作为闸门定时器,T1作为对外部信号的计数器,在定时的50ms内,对外部的信号进行计数。在制作过程中,需要定时一秒,所以要对T0进行多次计数,于是用下面的T0中断服务实现//*****T0中断服务***************************************intj=0;TL0=0x66;//0Xb0;TH0=0x3d;//0X3c;每单位0.5微秒*50000*40fp--;if(fp)return;TR1=0;fp=T_C;//1sf=65536*f1+256*TH1+TL1;//溢出次数乘以FF加上目前计数值,即1S的计数次if(n==0){jishu[n%11]=f;}else{if(abs(jishu[n%11-1]-f)=10){for(j=0;j=10;j++){jishu[j]=f;}}else{jishu[n%11]=f;}}//把计数所得数分给数组各个部分易变显示3.3小数点显示电路设计小数点显示的设计,涉及到两种情况,第一,当计数值在1S内小于1000,那么计数没有四位有效数字,我们需要将数值通过添加小数点后面0的个数补为四位;第二,当计数值在1S内大于10000,那么需要提取出显示需要的四位最高位数值,并进行量程切换,因为量程有HZ,KHZ和MHZ档,故要在各个档位以四位有效数字切误差最小的数值,在MAIN里实现各个显示切换。实现切换的子程序如下//*******************************************voidget_f(floats1){intterm;term=(int)(s1*10000);F_DISP[0]=term/1000%10+0x30;F_DISP[1]=term/100%10+0x30;F_DISP[2]=0x2E;F_DISP[3]=term/10%10+0x30;F_DISP[4]=term%10+0x30;}//*******************************************voidget_flow(floats1){intterm;term=(int)(s1*100);F_DISPLOW[0]=term/1000%10+0x30;F_DISPLOW[1]=term/100%10+0x30;F_DISPLOW[2]=0x2E;F_DISPLOW[3]=term/10%10+0x30;F_DISPLOW[4]=term%10+0x30;}//********************************************voidtofHZ(void){F_DISPLOWHIGH[0]=f/100%10+0x30;F_DISPLOWHIGH[1]=f/10%10+0x30;F_DISPLOWHIGH[2]=f%10+0x30;F_DISPLOWHIGH[3]=0x2E;F_DISPLOWHIGH[4]=0x30;}//********************************************voidtoHZ(void){F_DISPHIGH[0]=f/1000%10+0x30;F_DISPHIGH[1]=f/100%10+0x30;F_DISPHIGH[2]=f/10%10+0x30;F_DISPHIGH[3]=f%10+0x30;}//*******************************************voidtoKHZ(void){if(f=10000&&f=99999){F_DISPHIGHONE[0]=f/10000%10+0x30;F_DISPHIGHONE[1]=f/1000%10+0x30;F_DISPHIGHONE[2]=0x2E;F_DISPHIGHONE[3]=f/100%10+0x30;F_DISPHIGHONE[4]=f/10%10+0x30;}else{F_DISPHIGHONE[0]=f/100000%10+0x30;F_DISPHIGHONE[1]=f/10000%10+0x30;F_DISPHIGHONE[2]=f/1000%10+0x30;F_DISPHIGHONE[3]=0x2E;F_DISPHIGHONE[4]=f/100%10+0x30;}}//******************************************voidtoMHZ(void){F_DISPHIGHTHREE[0]=f/1000000%10+0x30;F_DISPHIGHTHREE[1]=0x2E;F_DISPHIGHTHREE[2]=f/100000%10+0x30;F_DISPHIGHTHREE[3]=f/10000%10+0x30;F_DISPHIGHTHREE[4]=f/1000%10+0x30;}//********************************************第四章测试与调整4.1硬件测试与调整(1)波形变换模块的调试由于LM324的频率限制,当输入的信号频率大于2MHz时,频率计的示数无法正确显示原始波形的频率值。(2)频率计的调试经过测试频率测试上限可达到3MHz,且量程会随着频率值自动切换显示HZ,KHZ和MHZ,都显示四位有效数字。4.2软件测试与调整将所编写的程序(见附录)通过软件编译,出现错误时先在运行停顿临近处寻找错误,若查找不出,再一步步运行查找,改正错误并重新编译,编译成功后下载到实验箱进行进一步测试。在整个设计模块中,调试是重要的步骤,也是考验人耐心的一步,只有耐心的将调试所得结果进行思考分析,然后修改程序中某些小细节,重复这些细小但又重要的步骤才能将频率计做的更精确。4.3整体指标测试表4-1被测信号频率测量结果函数发生器10HZ30HZ100HZ500HZ1KHZ实际测量10.00HZ30.00HZ99.00HZ499.0HZ998.2HZ函数发生器10KHZ500KHZ1MHZ2MHZ实际测量9.983KHZ499.6KHZ998.8K1996K从上表中计算得到所测频率误差0.2%,在设计指标范围内。第五章设计小结5.1设计任务完成情况通过老师一周的理论指导,对各个模板有了一定的了解认知。经过小组间一星期的设计与实验,较为精确的完成了简易频率计,误差控制在0.2%。5.2问题及改进初步调试结果误差较大,通过修改定时器的定时参数,使得误差最后调整为0.2%,更为精确的达到了设计指标。5.3心得体会本次课程设计让我们受益良多。作为电信专业学生,自主设计是必修之课,也是将课本所学知识得到良好应用的主要途径。丛图书馆查找资料到理论分析再到最后的电路设计与编程调试,都对我们所学的知识进行了检验。在编写程序初始,由于平时上课的知识积累不够,掌握得不熟练,对于这种较为复杂的内容表达非常吃力。甚至编写到一半时都不知自己到底在表达什么内容。通过开始时的失败,我们决定将各个主干部分分开编写与调试,这样思路就比较清晰,以免到后来程序又混沌不清。通过查阅资料,充分了解了元器件引脚功能,然后尝试着编写,耐心的调试修改,总程序达到了简易频率计的效果。通过本次课程设计也认识到了自身知识的不足,平时训练太少,课外衍生也做得不够,尤其是对于编程类的习题练习不多直接导致这次设计举步维艰。所以在将来的学习中我们要加强所学知识的应用练习。附录1.C语言程序参考//简易数字频率计程序#includec8051f360.h#includestdio.h#includemath.h#includeabsacc.h#defineWDATADDRXBYTE[0XC009]//LCD写数据地址#defineRDATADDRXBYTE[0XC00B]//LCD读数据地址#defineWCOMADDRXBYTE[0XC008]//LCD写命令地址#defineRCOMADDRXBYTE[0XC00A]//LCD读命令地址#defineKEYCSXBYTE[0XC00C]//键盘片选地址#defineT_C40sbitLCD_RS