等精度测频.doc_第1页
等精度测频.doc_第2页
等精度测频.doc_第3页
等精度测频.doc_第4页
等精度测频.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖北师范学院电工电子实验教学省级示范中心电子版实验报告现代电子技术实验(EDA)等精度频率计综合报告吕佳电子信息科学与技术物电学院2010年6月20日电工电子中心2009年5月绘制第18页,共18页等精度频率计实验总结报告一实验内容前面简易数字频率计测量精度随着被测信号频率的不同而不同,误差1/fx,当测量1Hz信号时,误差可能是100%。设计一个等精度频率计,使测量结果与被测信号频率不同,而与基准频率有关。首先设定一个基准频率,根据相同的时间,基准频率Fb和被测信号频率Fx计数的个数分别为N b ,Nx ,利用公式,可以求出Fx。二方案设计设计方案原理框图如下:最后一个模块为数据处理部分,有两种处理方式:1、 用maxplus2自带的乘除法模块来处理数据,如下图:虽然此种方法便于理解,但是此模块的使用有限,不能够进行较高位数的运算,否则编译会出错。2、 用FPGA与单片机通信的方法,将测出来的数据送入单片机处理,然后将得出的结果送入FPGA中显示。(后面主要介绍这种方法)。其原理图如下:三实验步骤第一阶段:按照等精度原理框图将各个模块生成1、D触发器:用来控制计数的开始和计数的停止,因为计数的开始和停止都是在被测频率的上升沿到来时起作用的,所以测量时间一定是被测频率的整数倍个,这就保证了被测频率所记的个数一定是整数个。其代码如下:module mydff(D,clk,prn,clrn,Q);input D,clk,prn,clrn;output Q;reg Q;always (posedge clk or negedge prn or negedge clrn)if(!prn) Q=1; /低电平置1else if(!clrn) Q=0;/低电平置0elseQ=D;endmodule3、 计数器(此处最好使用maxplus2自带的计数器)、将计数的次数送给单片机:因为上面定义32位的计数器,所以数据传送是通过总线进行读写的,所以每次只能传送位,所以传送一个数需要读数据,这个阶段主要有两个模块:一、将数据拆开;二、单片机从FPGA中读数据。一、拆数的代码如下:module chai(in,a,b,c,d);input 31:0in;output 7:0a,b,c,d;assign a=in7:0;assign b=in15:8;assign c=in23:16;assign d=in31:24;endmodule二、单片机从FPGA读数据,代码如下:module fpgatomcu(gatein,a,b,c,d,e,f,g,h,data,addr,rd);inout 7:0data;/双向端口,接单片机P0口input 7:0addr;input gatein;input rd;/分别接单片机的相关引脚input 7:0a,b,c,d,e,f,g,h;reg 7:0buff0,buff1,buff2,buff3,buff4,buff5,buff6,buff7,buff8;/定义数据缓冲器reg 7:0read_buff;/内部节点always (1)beginbuff0=a;buff1=b;buff2=c;buff3=d;buff4=e;buff5=f;buff6=g;buff7=h;buff80=gatein;buff87:1=0;endalways (negedge rd)/地址控制,数据写入对应缓冲器begincase(addr)8H80:read_buff=buff0;8H81:read_buff=buff1;8H82:read_buff=buff2;8H83:read_buff=buff3;8H84:read_buff=buff4;8H85:read_buff=buff5;8H86:read_buff=buff6;8H87:read_buff=buff7;8Hf0:read_buff=buff8;endcaseendassign data = (!rd)? read_buff :8HZ;endmodule、单片机处理数据的程序代码:#include#include unsigned char xdata shu0 _at_ 0x80ff;unsigned char xdata shu1 _at_ 0x81ff;unsigned char xdata shu2 _at_ 0x82ff;unsigned char xdata shu3 _at_ 0x83ff;unsigned char xdata shu4 _at_ 0x84ff;unsigned char xdata shu5 _at_ 0x85ff;unsigned char xdata shu6 _at_ 0x86ff;unsigned char xdata shu7 _at_ 0x87ff;unsigned char xdata kong _at_ 0xf0ff;/此处为控制信号,EN,CLR,GATEIN#define uchar unsigned char#define uint unsigned intvoid delay(uchar z);unsigned char table=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00;/unsigned char tabledian=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;/sbit CLR=P32; /此处最好用口/sbit GATEout=P33;/sbit gatein= P34;uchar disbuf8;float temp8,n;uchar counter;float h1,h2,fx0;unsigned long fx;void display(float fx0);void main()TMOD|=0x09;TR0=1;ET0=1;EA=1;while(1)kong=0x01; TH0=0; TL0=0;counter=0;kong=0x02;while(counter30);kong=0x00;while(kong);temp0=shu0;temp1=shu1;temp2=shu2;temp3=shu3;temp4=shu4;temp5=shu5;temp6=shu6;temp7=shu7;h1=temp0+temp1*256+temp2*256*256+temp3*256*256*256;h2=temp4+temp5*256+temp6*256*256+temp7*256*256*256;fx0=h2*24000000/h1;if(fx010) n=fx0; fx0=fx0*10000000; display(fx0);else if(fx0100) n=fx0; fx0=fx0*1000000; display(fx0); else if(fx01000) n=fx0; fx0=fx0*100000; display(fx0); else if(fx010000) n=fx0; fx0=fx0*10000; display(fx0); else if(fx0100000) n=fx0; fx0=fx0*1000; display(fx0); else if(fx01000000) n=fx0; fx0=fx0*100; display(fx0); else if(fx010000000) n=fx0; fx0=fx0*10; display(fx0); shu0=disbuf0;shu1=disbuf1;shu2=disbuf2;shu3=disbuf3;shu4=disbuf4;shu5=disbuf5;shu6=disbuf6;shu7=disbuf7;void display(float fx0)unsigned long int m;m=(unsigned long int)fx0;disbuf0=tablem%10;disbuf1=tablem%100/10;disbuf2=tablem%1000/100;disbuf3=tablem%10000/1000;disbuf4=tablem%100000/10000;disbuf5=tablem%1000000/100000;disbuf6=tablem%10000000/1000000;disbuf7=tablem%100000000/10000000;if(n10) disbuf7=disbuf7+0x80;else if(n100) disbuf6=disbuf6+0x80;else if(n1000) disbuf5=disbuf5+0x80;else if(n10000) disbuf4=disbuf4+0x80;else if(n100000) disbuf3=disbuf3+0x80;else if(n1000000) disbuf2=disbuf2+0x80;else if(n10000000) disbuf1=disbuf1+0x80; void timer0_int(void) interrupt 1counter+;5、单片机将数据传送给FPGAmodule mcutofpga(a,b,c,d,e,f,g,h,data,addr,wr,clr,en);input 7:0data;/双向端口,接单片机P0口input 7:0addr;input wr;/分别接单片机的相关引脚output 7:0a,b,c,d,e,f,g,h;output clr,en;reg 7:0buff0,buff1,buff2,buff3,buff4,buff5,buff6,buff7,buff8;/定义数据缓冲器reg 7:0a,b,c,d,e,f,g,h;reg clr,en;always (negedge wr)/地址控制,数据写入对应缓冲器begincase(addr)8H80: buff0=data;8H81: buff1=data;8H82: buff2=data;8H83: buff3=data;8H84: buff4=data;8H85: buff5=data;8H86: buff6=data;8H87: buff7=data;8Hf0: buff8=data;endcaseendalways (1)begina=buff0;b=buff1;c=buff2;d=buff3;e=buff4;f=buff5;g=buff6;h=buff7;clr=buff80;en=buff81;endendmodule6、数码管显示模块一、分频扫描模块module clk300hz(clk,clk_o);/分频模块input clk;output clk_o;reg 12:0cnt;always (posedge clk)cnt=cnt+1;assign clk_o=cnt12;endmodulemodule Scan(CLK,SEL);/扫描模块input CLK;output 2:0SEL;reg 2:0SEL;always (posedge CLK)beginSEL=SEL+1;if(SEL=8)SEL=0;endendmodulemodule mux8s1(a,b,c,d,e,f,g,h,sel,Q);/input 2:0sel;input 7:0a,b,c,d,e,f,g,h;output 7:0Q;assign Q= (sel=0)?a: (sel=1)?b: (sel=2)?c: (sel=3)?d: (sel=4)?e: (sel=5)?f: (sel=6)?g: h;endmodule第二阶段:将电路连接起来连接好的电路图如下:第三阶段:对实验箱分配引脚如下: 第四阶段:连接好实物图,如下:第五阶段:对实验箱进行调试,记录实验结果。四结果分析实验测量结果实物图:理论上:频率计可测得的最低频率与单片机的门控时间有关,如果门控时间是1s的话,可测最低率为1HZ,如果为2s, 可测最低率为0.5HZ,如果为10s,可测最低率为0.1HZ。频率计可测得的最高频率与计数器的位数有关32位的计数器最大能测4.29GHZ左右。误差分析:因为等精度频率计的开始停止计数都是通过D触发器的上升沿触发的,所以fx计数的周期的个数一定为整数个,误差来源于基准频率的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论