



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2015-2016 学年度第二学期电子技术基础课程设计-数字频率计设计院系:自动化学院专业:自动化班级:姓名:学号:指导教师:一、设计目的与要求3二、需求分析及创意3三、系统方案及技术路线4四、设计原理51、基本原理52、模块原理5五、设计内容61、分频模块62、方波发生器模块63、五位十进制计数器模块74、锁存模块96、编译仿真15六、输入输出设计15八、实验总结171、心得体会172、待改进的问题183、功能扩展19九、参考书目19十、附录19一、设计目的与要求设计一个数字频率计,其技术要求如下:(1)测量频率范围: 1Hz100kHz。(2)准确度fx/fx2%。(3)测量信号:方波,峰
2、峰值为3V5V。(4)使用数码管显示测量的信号频率(测量低频信号时可以只显示测量信号的周期)。二、需求分析及创意频率计的主要功能是准确测量出待测频率的频率、 周期、脉宽及占空比。 在电子技术中,频率是最基本的参数之一, 并且与许多电参量的测量方案、 测量结果都有十分密切的关系,因此频率的测量就显得更为重要。测量频率的方法有多种 , 其中电子计数器测量频率具有精度高、 使用方便、 测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。电子计数器测频有两种方式:一是直接测频法 (高频 ),即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法(低频) 。直接测频法适
3、用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。本设计中分别以图形设计方法为主和VHDL语言为主的两种形式进行设计。在这次设计过程中, 我们设计了两套测量频率计的方案。 下面分别阐述。 第一种方案,主要是通过一个计数器,在 1 秒时间内,当有待测信号上升沿产生时,开始计数。最后送到显示模块显示。 而占空比,则是通过分别计算高电平时间和低电平时间,从而得到占空比数值。应该说这种方法,更接近于测频法的思想。通过实验的检测,发现与实验仪器(信号发生器)的最大误差只有± 10,所以,在测量频率不是特别大的范围内, 这种设计方案, 笔者认为应该可以接受。 而第二种方案,则是对于不同
4、大小的频率, 通过测频法和测周法, 进行选择输出频率值大小。三、系统方案及技术路线低频信号的测量(测周期法1HZ10KHZ):所谓频率就是在单位时间(1s)内周期信号的变化次数。 若在一定时间间隔T 内测得周期信号的重复变化次数为N,则其频率为 f=N/T,据此,同样对于低于10KHZ的信号,我们采用测周期法,时标为 50MHZ,其误差远远小于 0.001,故可达到指标要求测周法原理 : 假设基准时钟信号的周期为Ts(频率为fs),被测信号的周期我Tw,用被测信号控制测量计数器进行计数,当被测信号一个周期结束后,让计数器停止计数,若计数器数值为Nx, 被测信号的周期为Tw=Nx*Ts其频率为f
5、x=fs*Nx这种测频方法实际上是通过测量被测信号周期后, 再经过换算得到被测信号频率的,它适合于被测信号原低于基准时钟信号频率的场合。 用这种方法测量时,测试精度与计数器中记录的 Nx 有关,由于被测信号一个周期的时间长度不一定正好为基准时钟信号周期的整数倍,因此计数器的计数值会产生±1 个值的误差。高频信号的测量 (测频法 10KHZ10MHZ):由于我们很难得到准确的1hz 频率,故在这里我们采用等精度测量法,这样就可以不必考虑1s 信号的精确度的影响。闸门时间不是固定值 ,而是被测信号周期的整数倍 ,即与被测信号同步 .因此排除了对被测信号计数所产生的 1 个周期误差 ,并且
6、达到了在整个测试频段的等精度测量 .在测量过程中 ,有两个计数器分别对标准信号和被测信号同时计数 .首先给出闸门开启信号 (预置闸门上升沿 ),此时计数器并不开始计数 .而是等到被测信号的上升沿到来时 ,计数器才真正开始计数 .然后预置闸门关闭信号 (下降沿到时 ),计数器并不立即停止计数 ,而是等到被测信号的上升沿到来时才开始结束计数 ,完成一次测量过程 .设在一次实际闸门时间 t 中计数器对被测信号的计数值为 Nx,对标准信号的计数值为 Ns, 标准信号的频率为 fs,则被测信号的频率为 fx=Nx/Nsfs。由推断 (此处省略 )得测量频率的相对误差 =1/tfs由上式可看出测量频率的相
7、对误差与被测信号频率的大小无关,仅与闸门时间和标准信号频率有关 .闸门时间越长 ,标准频率越高测频的相对误差就越小 .标准频率可由稳定性好 ,精度高的高频率晶振产生 ,在保证测量精度不变的前提下 ,提高标准信号频率 ,可使闸门时间缩短 ,即提高测试速度 .可实现四、设计原理1、基本原理频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。这就要求 sysclk能产生一个 1s 脉宽的周期信号,并对频率计的每一个计数器cntp 的使能端进行同步控制。当 clK_cnt 高电平时允许计数,并保持其所计的数。在停止计数期间,首先需要一个锁存信号将计数器在前1s 的计数值锁存进锁存器reg中,并由外部的
8、 7 段译码器译出并稳定显示。原理图如图1-1基准信号被测分 频 模信脉冲形计 数 模量 程 切换模块成模块块清零译码模控 制 模块使能锁存图 1-12、模块原理根据数字频率计的基本原理,本文设计方案的基本思想是分为五个模块来实现其功能,即整个数字频率计系统分为分频模块、控制模块、计数模块、译码模块和量程自动切换模块等几个单元, 并且分别用 VerilogHDL对其进行编程, 实现了闸门控制信号、计数电路、锁存电路、显示电路等。五、设计内容1、分频模块由于晶体振荡器提供的为50MHz 的时钟,而在整个频率计里将用到周期为2s ,半个周期为 1s 的闸门信号,所以我们在此模块先分频产生0.5Hz
9、 的分频信号。always(posedge sysclk)beginif(cnt=50_000_000)beginclk_cnt<=clk_cnt;cnt<=0;endelsebegincnt<=cnt+1'b1;endend由程序中的clk_cnt<=clk_cnt;cnt<=0;得知会产生我们想要的周期为2s 的clk_int 信号。仿真结果如图1-2.图 1-22、方波发生器模块always(posedge sysclk)beginif(cnt1=500)beginclk_out<=clk_out;cnt1<=0;endelsebegin
10、cnt1<=cnt1+1'b1;endend由于在寝室做测试时缺少了信号发生器,所以添加了一个方波发生的模块。如上面程序中所示,当出 cnt1=500 时,可以产生 50000HZ的方波,通过改变出 cnt1的数值调出不同频率的方波从clk_out 输出到 clkin,进行方波频率计数。3、五位十进制计数器模块5 位十进制计数器模块包含 5 位十进制的计数器, 用来对施加到时钟脉冲输入端的待测信号产生的脉冲进行计数, 十进制计数器具有清零控制和进位扩展输出的功能。always(posedge clkin)beginif(clk_cnt)beginif(cntp1='b10
11、01)begincntp1<='b0000;cntp2<=cntp2+1;if(cntp2='b1001)begincntp2<='b0000;cntp3<=cntp3+1;if(cntp3='b1001)begincntp3<='b0000;cntp4<=cntp4+1;if(cntp4='b1001)begincntp4<='b0000;cntp5<=cntp5+1;if(cntp5='b1001)begincntp5<='b0000;endendendendend
12、elsebegincntp1<=cntp1+1;endend本程序采用的是以累加的方法结合巧妙地if 语句进行四重循环,实现四位十进制不同的高低级别,实现计数。一位十进制原理图仿真如图1-3 。图 1-3五位十进制原理图仿真如图1-4 。图 1-44、锁存模块如果计数器输出直接与译码器相连接,那么在计数过程中输出端则随输入脉冲数的增加而不断跳变, 那么显示数码管则也会不断闪烁跳变,让人不能看到稳定的输出,设锁存器后,则不再跳变,便可清晰读出计数结果。其生成的功能模块如图所示:if(cntp1!='b0000|cntp2!='b0000|cntp3!='b0000|
13、cntp4!='b0000|cntp5!='b0000 )begincntq1<=cntp1;cntq2<=cntp2;cntq3<=cntp3;cntq4<=cntp4;cntq5<=cntp5;cntp1<='b0000;cntp2<='b0000;cntp3<='b0000;cntp4<='b0000;cntp5<='b0000;end/5、清零复位模块采用一个开关作为rst 复位信号, 当 rst 置 0 时,5 个 cntq 寄存器赋 0,从而5 个数码管显示0,同时
14、5 个计数单元 cntp 也清零,为下次阀门信号时计数做准备。if(cntp1!='b0000|cntp2!='b0000|cntp3!='b0000|cntp4!='b0000|cntp5!='b0000 )begincntq1<=cntp1;cntq2<=cntp2;cntq3<=cntp3;cntq4<=cntp4;cntq5<=cntp5;cntp1<='b0000;cntp2<='b0000;cntp3<='b0000;cntp4<='b0000;cntp5&
15、lt;='b0000;end/6、译码显示模块选择另一个开关作为量程选择信号rst1 ,当rst1=0时,将cntq1 ,cntq2,cntq3,cntq4的值分别赋给seg1,seg2,seg3,seg3,seg4这4个7位共阳极数码管显示的信号(即显示5 位数频率的后4 位),当 rst1=1时,将cntq5的值赋给 seg1 ,再把 seg2,seg3,seg4分别置为 所0对应的显示码。还有一种显示方式是吧cntq5 的值直接赋给 led 3:0, 直接用 4 个二极管显示(用二进制表示)。beginif(rst1)begincase(cntq13:0)4'b0000:
16、begin seg16:0=7'b0000001;end4'b0001:seg16:0=7'b1001111;4'b0010:seg16:0=7'b0010010;4'b0011:seg16:0=7'b0000110;4'b0100:seg16:0=7'b1001100;4'b0101:seg16:0=7'b0100100;4'b0110:seg16:0=7'b1100000;4'b0111:seg16:0=7'b0001111;4'b1000:seg16:0=7
17、39;b0000000;4'b1001:seg16:0=7'b0000100;default:seg16:0='bX;endcasecase(cntq23:0)4'b0000:begin seg26:0=7'b0000001;end4'b0001:seg26:0=7'b1001111;4'b0010:seg26:0=7'b0010010;4'b0011:seg26:0=7'b0000110;4'b0100:seg26:0=7'b1001100;4'b0101:seg26:0=7
18、9;b0100100;4'b0110:seg26:0=7'b1100000;4'b0111:seg26:0=7'b0001111;4'b1000:seg26:0=7'b0000000;4'b1001:seg26:0=7'b0000100;default:seg26:0='bX;endcasecase(cntq33:0)4'b0000:begin seg36:0=7'b0000001;end4'b0001:seg36:0=7'b1001111;4'b0010:seg36:0=7'
19、;b0010010;4'b0011:seg36:0=7'b0000110;4'b0100:seg36:0=7'b1001100;4'b0101:seg36:0=7'b0100100;4'b0110:seg36:0=7'b1100000;4'b0111:seg36:0=7'b0001111;4'b1000:seg36:0=7'b0000000;4'b1001:seg36:0=7'b0000100;default:seg36:0='bX;endcasecase(cntq43:0)
20、4'b0000:begin seg46:0=7'b0000001;end4'b0001:seg46:0=7'b1001111;4'b0010:seg46:0=7'b0010010;4'b0011:seg46:0=7'b0000110;4'b0100:seg46:0=7'b1001100;4'b0101:seg46:0=7'b0100100;4'b0110:seg46:0=7'b1100000;4'b0111:seg46:0=7'b0001111;4'b1000
21、:seg46:0=7'b0000000;4'b1001:seg46:0=7'b0000100;default:seg46:0='bX;endcase/*case(cntq53:0)4'b0000:begin led3:0=4'b0000;end4'b0001:led3:0=4'b0001;4'b0010:led3:0=4'b0010;4'b0011:led3:0=4'b0011;4'b0100:led3:0=4'b0100;4'b0101:led3:0=4'b0101
22、;4'b0110:led3:0=4'b0110;4'b0111:led3:0=4'b0111;4'b1000:led3:0=4'b1000;4'b1001:led3:0=4'b1001;default:led3:0='bX;endcase*/endelsebeginseg46:0=7'b0000001;seg26:0=7'b0000001;seg36:0=7'b0000001;case(cntq53:0)4'b0000:begin seg16:0=7'b0000001;end4
23、9;b0001:seg16:0=7'b1001111;4'b0010:seg16:0=7'b0010010;4'b0011:seg16:0=7'b0000110;4'b0100:seg16:0=7'b1001100;4'b0101:seg16:0=7'b0100100;4'b0110:seg16:0=7'b1100000;4'b0111:seg16:0=7'b0001111;4'b1000:seg16:0=7'b0000000;4'b1001:seg16:0=7
24、9;b0000100;default:seg16:0='bX;endcaseend6、编译仿真最后的程序的编译仿真结果如图1-5 。图 1-5六、输入输出设计如图所示各引脚分配七、系统实测从I/O接口分别有两个输入波形和输出波形接口。拨动开关switch0为复位开关,下拨后,再下一个输入波形上升沿到来时,将会刷新数码管至0。拨动开关 switch1 为量程显示开关,上拨时数码管显示低4 位数值,下拨时显示第五位最高位数值。八、实验总结1、心得体会拿到课设题目后我首先去网上查找了一些关于频率计的原理, 然后又去找来了我们学校的参考书 verilog hdl 与数字 asic 这部书,了解
25、了测频法和测周法两种基本的实验原理,然后选择了逻辑较为简单的测频法。即在阀门信号1s 高电平内计数被测信号的脉冲个数并且锁存下来送到数码显示管显示。接着开始复习了一些基础的verilog 语法,由于大二数电中只是简单介绍了相关语句,所以这一过程也进行地比较艰辛。主要采用了always 相关语句进行逻辑描述。然后利用大二的一些实验课件,熟悉了quartus2 的使用方法,如何仿真,调试等等,也熟悉了de0 板子的各个模块功能和引脚分配。在显示模块,也花了一些心思, 开始想用动态译码的方法让数码管轮流显示,发现 de0 板子并不支持动态译码,于是又改为静态译码,一次性把数值送到4位数码管。碰到比较
26、麻烦的问题是,题目要求 100kHZ的显示,这就要求 5 位数码管了,但是 de0 只有 4 位数码管。于是想了 3 种解决方法:(1)采用一个量程转换开关,开始显示低四位,拨动后显示最高一位; (2)用 4 位 led 灯来二进制地显示最高位,数码管显示低 4 位;(3)用 10 个 led 灯分别代表 09 数字来显示最高位,数码管显示低 4 位。最后采取的第一种最直观的方法来进行显示。在程序基本调试完成仿真后,去了实验室进行实测后,还有一些小问题,可是实验室又不再开门, 寝室里又缺少信号发生器, 很头疼,幸运的是在老师建议下,我又做了一个利用内部时钟进行方波输出的模块,就可以自由进行测试
27、了。最后几天又继续完善了相关模块,添加了复位清零的功能。在最后验收的过程中我又发现,在信号发生器采用函数输出时,方波测试会不稳定,甚至出现2倍频率的情况。而采用同步输出后测试良好,频率稳定,当频率为4772 误差在± 10hz 内浮动,即误差为± 0.2%通过本次课程设计,我重新巩固了自己学的数电和 verilog 等电子相关知识,并且在实践中更好的进行了掌握。 加强了自己动手, 查找资料, 思考和解决问题的能力。我也懂得了理论与实际相结合, 在设计的过程中遇到问题可以说的上是困难重重,这毕竟是第一次在 de0 板子上做的,难免会遇到各种问题, 同时在设计的过程中也发现了自
28、己的不足之处, 对以前的知识理解的不够深刻, 掌握的不够牢固。此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题的能力,出现差错随机应变的能力,和同学互相讨论合作,都受益匪浅,相信今后碰到的实践项目,自己会更加轻松地完成,更加得心应手。同时也得到了教训,做事应该趁早完成,不要拖拉,不然地话自己也可以设计出更多功能完善的模块。在此也给细心指导的老师和其它无私给予帮助的同学致以谢意。2、待改进的问题(1)对于量程溢出的问题,即如果频率超过 99999hz 或者频率不足 1hz 的方波,只能错误显示而没有给出超量程预警。(2)测频法对于频率较大的方波,测得结果误差稍大可以考虑换用测周法。
29、3、功能扩展(1)显示模块可以改用另外两种led 显示的方法(2)可以设置一个量程预警显示led,在被测信号频率超过99999hz 和不足1hz 时给出警示。九、参考书目1. 谢自美主编 . 电子线路设计综合设计 . 华中科技大学出版社, 20062. 罗杰,谢自美主编 . 电子线路设计 .实验 .测试(第 4 版).电子工业出版社,2008.43. 罗杰主编 . Verilog HDL 与数字 ASIC 设计基础 . 华中科技大学出版社,2008.34. FPGA与 SOPC设计教程 -DE2 实践,张志刚编著,西安电子科技大学出版社, 2007.45. 夏宇闻 . Verilog 数字系统
30、设计教程 . 北京航空航天大学出版社十、附录源代码及注释module cymometer(seg1,seg2,seg3,seg4,sysclk,clkin,rst,clk_out,rst1);/ 顶层模块output6:0seg1,seg2,seg3,seg4;/4 个 7 位数码管输出变量output clk_out;/ 方波输出信号变量reg clk_out;/ 输出为寄存器型input sysclk;/ 输入变量 50M 的时钟信号input clkin;/ 输入的测试信号input rst;/ 输入复位清零信号input rst1;/ 输入量程转换显示信号reg3:0 led;reg6
31、:0seg1,seg2,seg3,seg4;reg25:0cnt;/ 分频计数变量 1 reg25:0cnt1;/ 分频计数变量 2 reg clk_cnt;/ 周期 2s 的阀门信号reg3:0cntp1,cntp2,cntp3,cntp4,cntp5;/5 位十进制计数变量reg3:0cntq1,cntq2,cntq3,cntq4,cntq5;/5 位锁存计数的变量reg3:0dat;always(posedge sysclk)/50M 时钟信号上升沿到来时执行一次模块beginif(cnt1=500)beginclk_out<=clk_out;/cnt1 计数到 500 时,clk
32、_out 信号翻转一次 ,然后清零cnt1<=0;endelsebegincnt1<=cnt1+1'b1;endend/ 方波产生模块 ,输出 50000HZ的方波到 clk_out always(posedge sysclk)beginif(cnt=50_000_000)beginclk_cnt<=clk_cnt;cnt<=0;endelsebegincnt<=cnt+1'b1;end/cnt 每计数到 50M 时,clk_cnt 信号翻转一次 ,然后清零endalways(posedge clkin)beginif(clk_cnt)/ 在阀门信
33、号为高电平时 beginif(cntp1='b1001)/ 个位满 10进 1begincntp1<='b0000;cntp2<=cntp2+1;/ 个位清零 ,十位加一 if(cntp2='b1001)begincntp2<='b0000;cntp3<=cntp3+1;/ 十位清零 ,百位加一if(cntp3='b1001)begincntp3<='b0000;cntp4<=cntp4+1;/ 百位清零 ,千位加一if(cntp4='b1001)begincntp4<='b0000;cn
34、tp5<=cntp5+1;/ 千位清零 ,万位加一if(cntp5='b1001)begincntp5<='b0000;/ 万位清零endendendendendelsebegincntp1<=cntp1+1;/ 个位加一endendelsebeginif(rst=0)/ 复位信号置 0 begincntq1<=0;cntq2<=0;cntq3<=0;cntq4<=0;cntq5<=0;/cntq5 位寄存器清零cntp1<='b0000;cntp2<='b0000;cntp3<='b00
35、00;cntp4<='b0000;cntp5<='b0000;/cntp 5 位计数变量清零endelseif(cntp1!='b0000|cntp2!='b0000|cntp3!='b0000|cntp4!='b0000|cntp5!='b0000 )begincntq1<=cntp1;cntq2<=cntp2;cntq3<=cntp3;cntq4<=cntp4;cntq5<=cntp5;/5 位 cntp 非零时 ,在非阀门时间结果送到 cntq 中 ,同时 cntp 清零 ,为下次计数做准备
36、cntp1<='b0000;cntp2<='b0000;cntp3<='b0000;cntp4<='b0000;cntp5<='b0000;end/endendalwaysbeginif(rst1)/ 量程开关置一 begincase(cntq13:0)4'b0000:begin seg16:0=7'b0000001;end4'b0001:seg16:0=7'b1001111;4'b0010:seg16:0=7'b0010010;4'b0011:seg16:0=7
37、9;b0000110;4'b0100:seg16:0=7'b1001100;4'b0101:seg16:0=7'b0100100;4'b0110:seg16:0=7'b1100000;4'b0111:seg16:0=7'b0001111;4'b1000:seg16:0=7'b0000000;4'b1001:seg16:0=7'b0000100;default:seg16:0='bX;endcasecase(cntq23:0)4'b0000:begin seg26:0=7'b0
38、000001;end4'b0001:seg26:0=7'b1001111;4'b0010:seg26:0=7'b0010010;4'b0011:seg26:0=7'b0000110;4'b0100:seg26:0=7'b1001100;4'b0101:seg26:0=7'b0100100;4'b0110:seg26:0=7'b1100000;4'b0111:seg26:0=7'b0001111;4'b1000:seg26:0=7'b0000000;4'b100
39、1:seg26:0=7'b0000100;default:seg26:0='bX;endcasecase(cntq33:0)4'b0000:begin seg36:0=7'b0000001;end4'b0001:seg36:0=7'b1001111;4'b0010:seg36:0=7'b0010010;4'b0011:seg36:0=7'b0000110;4'b0100:seg36:0=7'b1001100;4'b0101:seg36:0=7'b0100100;4'b0110:seg36:0=7'b1100000;4'b0111:seg36:0=7'b0001111;4'b1000:seg36:0=7'b0000000;4'b1001:seg36:0=7'b0000100;default:seg36:0='bX;endcasecase(cntq43:0)4'b0000:begin seg46:0=7'b0000001;end
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 东阳光笔试题目及答案
- 小学六年级语文调研题目及答案
- 统计学中的评分标准与评估试题及答案
- 汽车维修工考试知识点解析试题及答案
- 企业中高层管理培训
- 2024年食品质检员考试策略与准备
- 2024年美容体验顾客分析试题及答案
- 统计学考试理解常用模型试题及答案
- 2024年二手车评估师考试学习资源与答案
- 找刺猬阅读测试题及答案
- 企业管理基础知到智慧树章节测试课后答案2024年秋山东经贸职业学院
- 清明节传统文化知识主题班会184
- UL987标准中文版-2019固定和固定电动工具第八版
- 自考《英语二》高等教育自学考试试卷与参考答案(2025年)
- 新材料领域新型建筑材料研发及市场推广计划实施
- 国家安全教育大学生读本-第八章坚持以促进国际安全为依托
- 《住院患者身体约束的护理》团体标准解读课件
- SB004-呼吸机标准操作规程药物临床试验机构GCP SOP
- 施工单位穿透式管理制度
- 社会组织项目管理制度
- 5年中考3年模拟试卷初中道德与法治七年级下册第一单元素养综合检测
评论
0/150
提交评论