数字频率计课程设计

2024-06-15

数字频率计课程设计(精选7篇)

数字频率计课程设计 篇1

1)设计题目

简易数字频率计

2)设计任务和要求

要求设计一个简易的数字频率计,测量给定信号的频率,并用十进制数字显示,具体指标为:

1)测量范围:1HZ—9.999KHZ,闸门时间1s;

HZ—99.99KHZ,闸门时间0.1s;

HZ—999.9KHZ,闸门时间10ms;

KHZ—9999KHZ,闸门时间1ms;

2)显示方式:四位十进制数

3)当被测信号的频率超出测量范围时,报警.3)原理电路和程序设计:

(1)整体电路

数显式频率计电路

(2)单元电路设计;

(a)时基电路

(b)放大逻辑电路

(c)计数、译码、驱动电路

(3)说明电路工作原理;

四位数字式频率计是由一个CD4017(包含一个计数器和一个译码器)组成逻辑电路,一个555组成时基电路,一个9014形成放大电路,四个CD40110(在图中是由四个74LS48、四个74LS194、四个74LS90组成)及数码管组成。

两个CD40110串联成一个四位数的十进制计数器,与非门U1A、U1B构成计数脉冲输入电路。当被测信号从U1A输入,经过U1A、U1B两级反相和整形后加至计数器U13的CP+,通过计数器的运算转换,将输入脉冲数转换为相应的数码显示笔段,通过数码管显示出来,范围是1—9。当输入第十个脉冲,就通过CO输入下一个CD40110的CP+,所以此四位计数器范围为1—9999。

其中U1A与非门是一个能够控制信号是否输入的计数电路闸门,当一个输入端输入的时基信号为高电平的时候,闸门打开,信号能够通过;否则不能通过。

时基电路555与R2、R3,R4、C3组成低频多谐振荡器,产生1HZ的秒时基脉冲,作为闸门控制信号。计数公式:来确定。

与非门U2A与CD4017组成门控电路,在测量时,当时基电路输出第一个时基脉冲并通过U2A反相后加至CD4017的CP,CD4017的2脚输出高电平从而使得闸门打开。1s后,时基电路送来第二个脉冲信号,CD4017的2脚变为低电平,闸门关闭,测量结束。数码管显示即为所测频率。当555第三个脉冲送过来的时候,电路保持间歇1S,第四个脉冲后高电平加至R,使计数器复位。为下一次计算准备。

(4)元件选择。

标号

封装

数量

芯片

CD40110

GK7491AG

陶瓷熔扁平

CD4017

62F2X6KE4

陶瓷熔扁平

74LS00

陶瓷熔扁平

74LS10

陶瓷熔扁平

NE555

K104G4

双列直插型号

显示器

七段共阴数码管

电阻

300Ω

1KΩ

5.1KΩ

10KΩ

100KΩ

1MΩ

10KΩ(滑动)

电容

1000PF

0.1μF

100μF

二极管

1N4148

发光LED

开关

单刀双掷

导线

导线

若干

三极管

9014

电源

12V直流电源

4)电路和程序调试过程与结果:

a)、设计逻辑流程:

b)、理论波形图:

c)、仿真波形图:

1)、时基电路

2)、未、已经过施密特的波形:

d)、误差分析:

本实验的误差来自多方面的原因:一、时基电路NE555的滑动变阻器调节导致误差;二、闸门开放时间与信号输入时间的冲突导致测量不准确;三、整体电路的阻抗、容抗对电路信号的影响。

对于第一点,先计算相关的滑动变阻器的相应阻值大小,然后可以在关闭电源的情况下用万用表测量后才进行测量;第二点有点系统的偶然性;第三点可以尽量减少电路布局,从而减少相应的影响。

5)总结

这个电路多处使用了集成IC芯片,让电路更加简洁明了,并且提高了电路的安全性、可行性,减少了整个电路的功耗和整个电路的布线。但是此电路没有完全地符合实验要求:首先,整个电路没有施密特触发器,输入信号放大电路,数码管的小数点驱动,满位报警电路。因此我首先加入以三极管9014为核心的放大电路;然后用74LS00两个双输入与非门构成施密特触发器,对输入信号进行整形;对于报警电路,由于集成IC没有译码电路引脚,所以选择了一个8输入与非门和一个74LS00结成,这样可以充分考虑到唯一性;还有就是它的计数不是直接显示频率,而是显示一个数字,再与闸门的时候计算才可以得出真正的频率。

总体来说,电路还是存在一点小问题没有得到很好的解决,因为74LS00组成的施密特触发器没有很好地整形波,在示波器上出现脉冲波,还得于计算,可以改为以NE555组成的施密特电路。改用其他的数码管驱动,从而驱动小数点。

通过这次实验,让我认识到数字电路的万千变化,集成IC的推出,大大提高安全性和可行性。理解了科学就是力量。最主要是学习到设计电路的思想以为加强自己的焊接能力。让自己的电子技术更上一层楼。

附录:完整的电路PCB图,完整的源程序名列表(不需要把源程序打印出来,作为电子文档提交)。

附录一:

数字频率计课程设计 篇2

采用STC12C5206AD单片机, 它是宏晶科技生产的单时钟/机器周期 (1T) 的单片机, 是高速/低功耗/超强抗干扰的新一代8051单片机, 指令代码完全兼容传统8051, 但速度快8-12倍且用户应用程序空间较大。ISP (在系统可编程) /IAP (在应用可编程) , 无需专用编程器, 无需专用仿真器, 使用方便, 其DIP封装请见图1。放大部分采用TI公司的OPA690, OPA690是一款具有禁用功能的宽带电压反馈运算放大器, 具有灵活的输送范围:单电源:+5V到+12V供电, 双电源:±2.5V到±5V供电。其输出电压摆幅:±4.0V, 转换速率可达1800v/μs, 对单位增益稳定有很大作用, 其结构请见图2。线性电压比较器采用美信公司的MAX913, 其具有10ns的超快速电平翻转特性, 可采用单5V或±5V双电源供电, 具有稳定的线性区且无最小输入线号摆率的要求, 其DIP封装请见图3。液晶部分采用1602LCD显示屏作为测量数据的显示部分。

2系统理论分析与计算

设计思路为信号经放大器其放大后, 进入MAX913进行整形, 然后送入单片机做脉冲计数, 从而计算出原始信号频率。OPA690典型电路请见图4。根据题目要求, 系统的触发要求采用上升沿触发, 且触发的电平可调。根据此要求, 我们采用比较电平可调的MAX913整形电路。通过在-5V-+5V范围内设定基准比较电平, 当输入信号超过该电平时, 输出全为高;当输入信号低于该电平时, 输出全为低。该法可以较好的满足题目设计的要求。信号经过整形之后, 送入单片机的外部记数引脚, 通过引脚使能来计得外部信号数量, 通过开始闸门时间来进行计算所捕获的信号的频率, 即为原始信号的频率, 计数流程请见图4。

3算法的分析

本系统采用外部技术的算法来测得输入信号的频率。闸门开始后, 开始对输入信号计数, 闸门关闭后通过计得的高电平的次数与闸门时间和系统晶振来算得信号频率。

其关系为:

M= (t0*65536) + (TH0*256) +TL0;单片机内计数值

N= (t1*65536) + (TH1*256) +TL1;单片机外计数值

测得频率为:

4信号频率测试数据与分析

4.1信号频率测试数据分析

4.2信号占空比测试数据与分析

4.3信号幅度测试数据与分析

摘要:本数字频率计系统为由STC12C5206单片机最小系统、线性电压比较器、放大部分、液晶显示部分组成的测频系统。正弦信号经放大器放大后通过电压比较器整形为矩形波, 单片机在闸门时间内通过外部计数后与内部时钟作对比从而求得外部信号频率。

关键词:数字频率计,STC12,测频,外部计数

参考文献

[1]王守中.51单片机开发入门与典型事例[M].北京:人民邮电出版社, 2007

[2]李硕, 赵彤帆, 李根全, 宋海珍.Matlab软件在单摆自由振动中的应用[J].实验室研究与探索, 2013, 11:65-68.

数字频率计课程设计 篇3

关键词 EDA技术;可编程逻辑器件;数字频率计

中图分类号:G642.0 文献标识码:B

文章编号:1671-489X(2016)16-0031-02

数字频率计是计算机、通信设备、音频视频等科研生产领域不可缺少的测量仪器,以EDA工具作为开发手段。基于FPGA所设计的数字频率计,具有高速、精确、可靠、抗干扰性强和现场可编程等优点。在设计中,所有频段均采用直接测频法对信号频率进行测量,克服了逼近式换档速度慢的缺点;在换档设计方面,突破了以往改变闸门时间的方法,采用门控信号和被测信号对计数器的使能端进行双重控制,使自动换档的实现更加简单可靠,提高了测量的精确度;在运算单元采用高速串行BCD码除法,不仅提高了运算速度,而且减小了资源消耗。

1 设计要求

设计一种基于FPGA的数字频率计,要求:数字频率计分为0~9.999 Hz、10.00~99.99 Hz、100.0~999.9 kHz

和1000~9999 kHz四档,且能够实现自动换档的功能。

2 总体设计方案

数字频率计总体框图如图1所示。数字频率计由分频器、计数器、锁存器和译码器等模块构成,系统有3个输入信号,即两个时钟信号CLK、SIG和一个清除信号CLR。系统有5个输出信号,即报警信号ALM、显示信号Q、数码管片选信号L、位控位A和位控位B。

分频器模块通过对时钟信号CLK进行分频,为计数器模块提供1 s的闸门时间test-en。当test-en为高电平时,闸门被打开,被测信号的脉冲通过闸门进入计数器进行计数;当test-en下降沿到来时,产生一个锁存信号,将计数值保存起来,由八段译码器译码并在数码管显示计数结果。锁存数据后,在下次test-en上升沿到来之前产生清零信号,将计数器清零,为下次计数做准备。

3 设计实现

采用模块化的设计思想,依据系统设计要求自上至下地细化设计。顶层设计完成后,采用硬件描述语言对各模块进行编程,在MAX+PLUSⅡ环境下进行编译、功能仿真,创建各模块的器件符号,待建立整体系统顶层文件时调用。

分频器模块 分频器模块(FEN)通过对4 MHz时钟信号进行分频得到0.5 Hz时钟,为计数器模块(CORNA)提供1 s的闸门时间。根据给定的分频值,分频器模块对4 MHz频率进行1/2n的分频,每来一个时钟,中间值cnt状态改变一次;经过n个cnt触发处理后,就可以得到1/2n的分频信号。

数码管片选信号产生模块 数码管片选信号产生模块(SEL)把时钟信号转换成片选信号提供给输出模块。片选信号低电平时,表示其对应的数码管可以进行显示操作,数据信号输出数码管显示所需的数据,即“000”“001”“010”“011”“100”“101”“110”和“111”。

计数器模块 计数器模块(CORNA)通过对待测信号在基准时间内进行计数测量待测信号的频率,完成对输入时钟信号的计数。由分频器提供的使能信号DOOR为高电平时,允许计数;DOOR为低电平时,停止计数,并保持所计的数。当中间值c6不为零时,选择4档;当中间值c5不为零时,选择3档;当中间值c4不为零时,选择2档;否则选择1档,计数选档结束后,将5个输出信号传给锁存器。

锁存器模块 锁存器模块(LOCK)在分频器模块输出信号DOOR的下降沿到来时,将计数器的数值Q3、Q2、Q1、Q0、DANG锁存。

数据输出模块 数据输出模块(CH)对应于数码管片选信号,将相应的数据送出,其中档位也通过数码管显示。数据输出模块根据锁存器和数码管片选信号的输出信号,实现数码管的实时显示。

八段译码驱动模块 八段译码驱动模块(DISP)将输入的BCD码转换为LED数码管需要的数据,八段译码驱动模块的仿真波形如图2所示。

D是八段译码驱动模块的输入信号,由数据输出模块输出信号d赋予;Q是八段译码驱动模块的输出信号,对应于数码管的8个显示段。当d为“0000”时,q为3F;当d为

“0001”时,q为06;当d为“0010”时,q为5B;当d为

“0011”时,q为4F;当d为“0100”时,q为66;当d为

“0101”时,q为6D;当d为“0110”时,q为7D;当d为

“0111”时,q为27;当d为“1000”时,q为7F;当d为

“1001”时,q为6F。

各模块连接 各模块总体连接图如图3所示。CLK输入至分频器,SIG、CLR输入至计数器,输出报警信号ALM来自计数器,Q是八段译码器连接显示器的输出,L是数码管片选信号产生模块的输出,输出A和B是位控位[1]。

系统仿真波形如图4所示。当输入信号SIG、CLR、CLK的值为“000”“010”“100”和“110”时,仿真波形相同。输出信号Q在0.0~875.0 ns时为3F(即“0111111”),之后为0(即“0000000”)。输出信号L在0.0~125.0 ns时为“000”,之后每隔250.0 ns依次为“001”“010”“011”“100”……输出信号A和B为高电平。

4 结语

EDA技术给电子系统设计带来巨大的变革,特别是硬件描述语言的出现和发展,并与大规模可编程器件相结合,极大地提高了电子系统设计的效率和可用性,成为电子系统设计人员的得力助手。

参考文献

数字频率计设计 篇4

设计一简易数字频率计,其基本要求是:

1)测量频率范围1Hz~10Hz,量程分为4档,即×1,×10,×100,×1000。2)频率测量准确度fx2103.fx3)被测信号可以是下弦波、三角波和方波。4)显示方式为4位十进制数显示。5)使用EWB进行仿真。2.设计原理及方案

频率的定义是单位时间(1s)内周期信号的变化次数。若在一定时间间隔T内测得周期信号的重复变化次数为N,则其频率为

f=N/T 据此,设计方案框图如图1所示。

图1 数字频率计组成框图

其基本原理是,被测信号ux首先经整形电路变成计数器所要求的脉冲信号,频率与被测信号的频率fx相同。时钟电路产生时间基准信号,分频后控制计数与保持状态。当其高电平时,计数器计数;低电平时,计数器处于保持状态,数据送入锁存器进行锁存显示。然后对计数器清零,准备下一次计数。其波形逻辑关系图如图2所示。3.基本电路设计 1)整形电路

整形电路是将待测信号整形变成计数器所要求的脉冲信号。电路形式采用由555定时器所构成的施密特触发器,电路如图XXX所示。若待测信号为三角波,输入整形电路,设置分析为瞬态分析,启动电路,其输入、输出波形如图XXX所示。可见输出为方波,二者频率相同。

2)时钟产生电路

时钟信号是控制计数器计数的标准时间信号,其精度很大程度上决定了频率计的频率测量精度。当要求频率测量精度较高时,应使用晶体振荡器通过分频获得。在此频率计中,时钟信号采用555定时器构成的多谐振荡器电路,产生频率为1Kz的信号,然后再进行分频。多谐振荡器电路如图XXX所示。由555定时器构成多谐振荡器的周期计算公式为

XXXXXXXXXX 取XXXXXXXXXXXXXX,则得到振荡频率为1Kz的负脉冲,其振荡波形如图XXX所示。3)分频器电路

采用计数器构成分频电路,对1Kz的时钟脉冲进行分频,取得不同量程所需要的时间基准信号,实现量程控制。1Kz的时钟脉冲,对其进行3次10分频,每个10分频器的输出信号频率分别为100Hz,10Hz,1Hz三种时间基准信号。对应于以1Kz,100Hz,10Hz,1Hz的信号作为时间基准信号时,相应的量程为×1000,×100,×10,×1。

构成10分频带电路是采用十进制计数器74LS160实现的。具体电路及其输入、输出波形如图XXX所示。

(1)T触发器

T触发器电路是用来将分频带器输出阻抗的窄脉冲整形为方波,因为计数器需要用方波来控制其计数/保持状态的切换。整形后方波的频率为频器输出信号频率的一半,则对应于1Kz,100Kz,10Kz,1Hz的信号,T触发器输出信号的高电平持续时间分别为0.001s,0.01s,0.1s,1s。T触发器采用JK触发器7473为实现,其电路连接图及其输入、输出波形如图XXX所示。

(2)单稳触发器

单稳触发器用于产生一窄脉冲,以触发锁存器,使计数器在计数完毕后更新锁存器数值。单稳触发器电路采用555定时器实现,为了保证系统正常工作,单稳电路产生的脉冲宽度不能大于该量程分频带器输出信号的周期。例如,计数器的最大量程是×1000,对应分频带器输出的时间基准信号频率为1000Hz,周期是1ms。取单稳电路输出脉冲宽度TW=0.1ms。根据TW=1.1RC,取C=0.01Uf,则R=9.8KΩ,取标称什为10KΩ。单稳触发器输入信号是T触发器输出信号经Rd、Cd组成的微分器将方波变成尖脉冲后加到555定时器的触发器。电路图及输入、输出波形如图XXX所示。

(3)延迟反相器

延时反相器的功能是为了得到一个对计数器清零的信号。由于计数器清零是低电平有效,而且计数器清零必须在单稳触发信号之后,故延迟反相器是在上述单稳电路之后,再加一级单稳触发电路,且在其输出端加反相器输出。其输入、输出波形如图XXX所示。(4)计数器

计数器在T触发器输出信号的控制下,对经过整形的待测信号进行脉冲计数,所得结果乘以量程即为待测信号频率。

根据精度要求,采用4个十进制计数器级联,构成N=1000计数器。十进制计数器仍采用74LS160实现。其电路图如图XXX所示。其中计数器的清零信号由延迟反相器提供,控制信号由T触发器提供,计数器输出结果送入锁存器。

(5)锁存器和显示

计数器的结果进入锁存器锁存,4个七段数码管显示测试信号的频率。锁存器使用了两片8D集成触发器实现,其控制信号来自于延迟反相器,具体电路如图XXX所示。

(6)数字频率计的总体电路

图XXX是数字频率计的总体电路图。

4.测试

简易数字频率计c程序清单 篇5

附件

源程序如下: #include unsigned char data key,flag_ft,point,buffer,j,INT1_ready,couter0,couter1,bus0,bus1,cycle;//键盘,频率判决结果,小数点位置标志,判决频率寄存,显示缓冲变量,边沿触发界定,定时器0定时寄存,定时器1定时寄存,显示刷新循环寄存CT0计数值寄存,CT1计数值寄存,显示循环变量 unsigned int data Z,delay,k,turn;//占空比,程序延迟循环变量,判断频率段跳转值,等于各测量值 float data T,F,T_T,F_F,W;//周期,频率,脉宽

unsigned char code BitTab[4]={0x7f,0xbf,0xdf,0xef};//位驱动码

unsigned char code DispTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x80};//字形码 /*

0

.*/ unsigned char data DispBuf[4];//待显示数据寄存 sbit P2_0=P2^0;//位变量定义 sbit P2_1=P2^1;sbit P2_2=P2^2;sbit P2_3=P2^3;sbit P1_0=P1^0;sbit P1_1=P1^1;sbit P1_2=P1^2;sbit P1_3=P1^3;sbit P1_4=P1^4;sbit P1_5=P1^5;sbit P1_6=P1^6;sbit P1_7=P1^7;sbit P0_7=P0^7;sbit P3_3=P3^3;/////////////////////////////////////////////////////////////////// void Ft();//1KHZ/16KHZ门限频率判决函数 void Ft_10();//10KHZ门限频率判决函数 void test_af();//小于1KHZ的频率测量函数 void test_w();//小于10KHZ脉冲宽度测量函数 void test_bf();//1KHZ~16KHZ频率测量函数 void test_z();//占空比测量函数

void test_at();//小于1KHZ的周期测量函数 void test_bt();//1KHZ~16KHZ周期测量函数 void test_cf();//16KHZ以上频率测量函数 void test_ct();//16KHZ以上周期测量函数 void Display();//显示驱动函数

void Delay_5m();//软件延迟约5ms函数 void Measure();

//按键处理与对应测量函数 ///////////////////////////////////////////////////////////////////// void Ft()

//判决1KHZ/16KHZ 河池学院2004届本科生毕业论文(设计)简易数字频率计 {

//unsigned char p;

TMOD=0x15;

TL1=0xb0;

TH1=0x3c;

TH0=0;TL0=0;

TR1=1;

TR0=1;for(;TF1==0;);

TF1=0;for(;TF1==0;);

TF1=0;for(;TF1==0;);

TF1=0;

TR0=0;

TR1=0;

k=TL0|(TH0<<8);

if(k>131)flag_ft=3;

else if(k>10)flag_ft=2;

else flag_ft=1;} //////////////////////////////////////////////////////////////////////////////// void Ft_10()//判决10KHZ函数 {

TMOD=0X15;

TL1=0XC0;

TH1=0XE0;TH0=0;TL0=0;

TR1=1;

TR0=1;

for(;TF1==0;);TF1=0;

TR0=0;

TR1=0;

k=TL0|(TH0<<8);

if(k<=5)flag_ft=4;

else flag_ft=5;} //////////////////////////////////////////////////////////////////////////////// void test_af(void)//测量小于1KHZ的频率,用INT1和CT0。{

F=0;河池学院2004届本科生毕业论文(设计)简易数字频率计

test_at();P1=P1|0xff;

//清除上次单位指示

F=1000000/T_T;

if(F<10)

{

F*=1000;point=1;}

else if(F<100)

{

F*=100;point=2;

}

else if(F<1000)

{

F*=10;point=3;}

else

{

point=4;} P1_2=0;//HZ指示灯亮 } ///////////////////////////////////////////////////////////////////////////////////// void test_w()//测量脉冲宽度 {

W=0;

TMOD=0x90;//初始化

TH1=0x00;

TL1=0x00;ET1=1;//开中断

EA=1;bus1=0;

for(;P3_3==1;);//等待无效高电平过去

TR1=1;

for(;P3_3==0;);//等待高电平

for(;P3_3==1;);//等待低电平关闭计数器

TR1=0;W=bus1*65536;

W+=TL1|(TH1<<8);if(W<100){

W*=100;point=2;P1_1=0;//us指示灯亮

} else if(W<1000){ 河池学院2004届本科生毕业论文(设计)简易数字频率计

W*=10;point=3;P1_1=0;//us指示灯亮

} else if(W<10000){

point=4;P1_1=0;//us指示灯亮

}

else if(W<100000)

{

W/=10;point=2;P1_0=0;//ms指示灯亮

}

else if(W<1000000)

{

W/=100;point=3;P1_0=0;//ms指示灯亮

} else if(W<10000000){

W/=1000;point=4;P1_0=0;//ms指示灯亮

}

else

{

point=0;} } ////////////////////////////////////////////////////////////////// void test_bf(void)//测量1KHZ~16KHZ频率T1记数,T0定时 {

F=0;

TMOD=0x51;TL1=0x00;TH1=0x00;TL0=0xbc;TH0=0xbd;ET0=1;ET1=1;EA=1;

TR0=1;TR1=1;couter0=0;bus1=0;

for(;couter0<16;);

TR1=0;TR0=0;

F=bus1*65536;//取CT1记数值

F+=TL1|(TH1<<8);河池学院2004届本科生毕业论文(设计)简易数字频率计

F_F=F;if(F<10000){

point=1;}

else if(F<100000)

{

F/=10;point=2;}

else

{

point=0;} P1_3=0;//KHZ指示灯亮 } /////////////////////////////////////////// void test_z(){

Z=0;Ft();if(flag_ft==1)test_at();

else test_bt();

test_w();P1=P1|0xff;//清上次单位指示

Z=(unsigned int)((W/T)*100);

if(Z<10)

{

Z*=1000;point=1;}

else if(Z<=100)

{

Z*=100;point=2;}

/*else if(Z<1000)

{

Z*=10;point=3;}*/ else {

point=2;

} } /////////////////////////////////////////////////////////////////////////////////// void test_at(void)//测量小于1KHZ的周期 河池学院2004届本科生毕业论文(设计)简易数字频率计 {

T=0;

TMOD=0x01;

IT1=1;

EX1=1;ET0=1;EA=1;TL0=0x00;

TH0=0x00;

bus0=0;

TR0=0;

INT1_ready=0;

for(;INT1_ready<2;);EX1=0;//关INT1中断

T=bus0*65536;

T+=TL0|(TH0<<8);T_T=T;//传递给频率测量函数

if(T<1000){

T=T*10;point=3;P1_1=0;//us指示灯亮

} else if(T<10000){

point=4;P1_1=0;//us指示灯亮

}

else if(T<100000)

{

T/=10;point=2;P1_0=0;//ms指示灯亮

}

else if(T<1000000)

{

T/=100;point=3;P1_0=0;//ms指示灯亮

} else if(T<10000000){

T/=1000;point=4;P1_0=0;//ms指示灯亮

}

else

{

point=0;} } ////////////////////////////////////////////////////////////////////////////////// void test_bt(void)//测量测量1KHZ~16KHZ周期 河池学院2004届本科生毕业论文(设计)简易数字频率计 {

T=0;

test_bf();P1=P1|0xff;//清上次单位指示

T=1000000/F_F;

if(T<1000)

{

T=T*10;point=3;} else if(T<10000){

point=4;

} else {

point=0;} P1_1=0;//us指示灯亮 } ////////////////////////////////////////////////////////////////////////////////////// void test_cf(void)

/*大于16KHZ频率,分频,T0记数,T1定时*/ {

F=0;TMOD=0x15;TL0=0x00;TH0=0x00;TL1=0xbc;TH1=0xbd;ET0=1;ET1=1;EA=1;TR1=1;TR0=1;couter1=0;bus0=0;

for(;couter1<16;);TR0=0;TR1=0;F=bus0*65536;

F+=TL0|(TH0<<8);F=F*16;F_F=F;if(F<100000){ 河池学院2004届本科生毕业论文(设计)简易数字频率计

F/=10;point=2;}

else if(F<1000000)

{

F/=100;point=3;} else if(F<10000000){

F/=1000;point=4;}

else

{

point=0;} P1_3=0;

//KHZ指示灯亮 } void test_ct(void)

//大于16KHZ频率 {

T=0;

test_cf();P1=P1|0xff;

//清上次单位指示

T=1000000/F_F;

if(T<10)

{

T*=1000;point=1;

}

else if(T<100){

T*=100;point=2;

}

else if(T<1000){

T*=10;point=3;}

else

{

point=0;}

P1_1=0;//us指示灯亮 } ///////////////////////////////////////////////////////////////////////////////////////////// void Display()//显示驱动程序 {

buffer=BitTab[j];河池学院2004届本科生毕业论文(设计)简易数字频率计

P2=P2|0xf0;

P2=P2&buffer;

buffer=DispBuf[j];

buffer=DispTab[buffer];

P0=buffer;

switch(point)

{

case 1:if(j==0)P0_7=1;//第一位小数点亮

break;

case 2:if(j==1)P0_7=1;//第二位小数点亮

break;

case 3:if(j==2)P0_7=1;//第三位小数点亮

break;

default:break;

}

j++;

if(j==4)j=0;} //////////////////////////////////////////////////////////////// void Delay_5m(){

for(delay=0;delay<100;delay++);} ///////////////////////////////////////////////////////////////// void Measure(){

TH0=0;TL0=0;TH1=0;TL1=0;F=0;T=0;W=0;Z=0;

switch(key)

{

case 0xef:P2=P2|0x0f;

P2_1=0;//F指示灯亮

Ft();//flag_ft=Ft();///////////////////////////////////?

switch(flag_ft)

{

case 1:test_af();//测量小于1KHZ频率

break;

case 2:test_bf();//测量1KHZ~16KHZ频率 河池学院2004届本科生毕业论文(设计)简易数字频率计

break;

case 3:test_cf();//测量大于16KHZ频率

break;

default:break;

}

break;

case 0xdf:P2=P2|0x0f;

P2_2=0;//T指示灯亮

Ft();//flag_ft=Ft();

switch(flag_ft)

{

case 1:test_at();//测量小于1KHZ周期

break;

case 2:test_bt();//测量1KHZ~16KHZ周期

break;

case 3:test_ct();//测量大于16KHZ周期

break;

default:break;

}

break;

case 0xbf:P2=P2|0x0f;

P2_3=0;//W指示灯亮

Ft_10();

switch(flag_ft)

{

case 4:test_w();//测量脉冲宽度

break;

default:break;

}

break;

case 0x7f:P2=P2|0x0f;

P2_0=0;//Z指示灯亮

Ft_10();

switch(flag_ft)

{

case 5:test_z();//测量占空比

break;

default:break;

}

break;

default:break;

}

break;} 河池学院2004届本科生毕业论文(设计)简易数字频率计 //////////////////////////////////////////////////////////////////////////////// void INT_0(void)interrupt 0 {

P1=0xff;

key=P1;

Measure();} ///////////////////////////////////////////////////////////////////////////////// void CT1(void)interrupt 3 {

bus1+=1;couter1++;} ///////////////////////////////////////////////////////////////////////////////// void INT_1(void)interrupt 2 {

TR0=~TR0;

INT1_ready=INT1_ready+1;} ///////////////////////////////////////////////////////////////////////////////// void CT0(void)interrupt 1 {

bus0+=1;

//用于记数

couter0++;

//用于1S定时 } ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// void main(void){

P1=0xff;

P2=0xff;//开关状态标志灯灭

IT0=0;

EX0=1;

EA=1;

IP=0x0e;

//设定中断优先级INT0最低,两层嵌套时允许打断按键中断

//显示主循环

for(;;)

{

P2=P2|0xf0;

TH0=0;

TL0=0;

TH1=0;

TL1=0;河池学院2004届本科生毕业论文(设计)简易数字频率计

switch(key)

{

case 0xef:{turn=(unsigned int)F;

DispBuf[3]=turn%10;

turn=turn/10;

DispBuf[2]=turn%10;

turn=turn/10;

DispBuf[1]=turn%10;

DispBuf[0]=turn/10;

Display();

Delay_5m();}

break;

case 0xdf:

{turn=(unsigned int)T;

DispBuf[3]=turn%10;

turn=turn/10;

DispBuf[2]=turn%10;

turn=turn/10;

DispBuf[1]=turn%10;

DispBuf[0]=turn/10;

Display();

Delay_5m();

};

break;

case 0xbf: {

turn=(unsigned int)W;

DispBuf[3]=turn%10;

turn=turn/10;

DispBuf[2]=turn%10;

turn=turn/10;

DispBuf[1]=turn%10;

DispBuf[0]=turn/10;

Display();

Delay_5m();

};

break;

case 0x7f:{

turn=Z;

DispBuf[3]=turn%10;

turn=turn/10;

DispBuf[2]=turn%10;

turn=turn/10;

DispBuf[1]=turn%10;

DispBuf[0]=turn/10;

Display();河池学院2004届本科生毕业论文(设计)简易数字频率计

Delay_5m();

};

break;

default: {

DispBuf[3]=10;

DispBuf[2]=10;

DispBuf[1]=10;

DispBuf[0]=10;

Display();

Delay_5m();

};

break;

}

cycle++;

if(cycle==500)

{

Measure();

基于FPGA的数字频率计设计 篇6

关键词:FPGA,频率计,VHDL,模块设计,元件例化

0 引言

频率计是根据其应用来设计的。频率计数器最常见的应用是确定发射机和接收机的特性。发射机的频率必须进行检验和校准, 才能符合有关规章制度的要求。频率计数器能对输出频率和一些关键的内部频率点 (如本振) 进行测量, 查明无线电发射时候是否满足技术指标。

频率计数器的另一些应用包括计算机领域, 在此领域中的数据通信、微处理器和显示器中都使用了高性能时钟。对性能要求不高的应用领域包括对机电产品进行测量。本设计采用FPGA作为控制核心, 利用直接测量法对被测信号的频率进行测量显示。

1 设计要求

1) 设计4位十进制数字显示的频率计, 其频率测量范围为10k—9999k Hz;

2) 要求量程能够自动转换;

3) 当输入的信号小于10k Hz时, 输出显示全0;当输入的信号大于9999k Hz时, 输出显示全F。

2 设计原理

本设计利用直接测量法进行测量计算, 用一个频率稳定度高的频率源作为基准时钟, 对比测量其他信号的频率, 也就是周期性的被测信号在单位时间内变化的次数。

计数器是严格按照f=N/T的定义进行测频, 其对应的测频原理方框图如图1所示。工作时间波形如图2所示。

频率计的系统主要由被测信号、计数器电路、锁存器电路、时分复用、译码显示、时钟输入和分频电路组成

2.1 整体设计思路

本设计以频率为20MHz的晶振作为主时钟, 在设计中, 需要用到的信号有频率为5Hz的闸门信号, 25Hz的按键消抖延时信号以及200Hz的数码管动态显示扫描信号;这三种信号由分频器产生。分频器产生的5Hz频率的信号传输到计数器, 计数器对闸门信号进行分析, 在高电平期间计数器对被测信号的周期进行计数, 当闸门信号为低电平时停止计数, 将记录的数据传输到锁存器。锁存器对数据锁存后, 计数器即可清零, 为下一次计数做好准备。锁存器再将本次记录的数据传输到显示模块, 显示模块对待显示数据进行译码后输出到数码管进行显示。计数器在正常工作状态下, 不断记录新数据, 最终传输到显示模块, 使频率计实时更新数据。现将每个模块的设计原理介绍如下。

2.2 计数器的设计

计数器的功能主要是在基准时间内对被测信号的周期进行计数如图3所示。

其中enable是使能信号, 高电平有效。cp3是闸门信号;input是被测信号;reset是复位信号, 低电平有效;play0~play3是4位BCD显示输出, 用于显示0~9的数值;decimal是小数点输出位。

使能信号enable由外部按键控制, 当为高电平时计数器开始对被测信号进行测量;复位信号reset同样由外部按键控制, 当输入低电平时系统复位;闸门信号cp3由经硬件描述语言编写的分频器对外部20M晶振进行分频产生, cp3是周期为0.2s的方波信号;计数器正常工作时, 当检测到外部有被测信号input输入时启动计数功能;在闸门信号cp3的高电平时段内即0.1s对被测信号计数。计数器内部含有数据存储单元play0~play3, 将单位时间内检测到的被测信号频率进行记录保存, 待传入显示模块。除了以上信号外, 计数模块还包含两个溢出标志信号overflow和low, 当被测信号的频率小于10k Hz或大于9999k Hz时, 频率计显示全“0”或全“F”。

2.3 锁存器的设计

该部分电路用于对计数器的数据进行锁存, 保证计数模块的数值能正确的输出进行显示。本模块内部包含一个进程语句, 敏感信号为闸门信号cp3和复位信号reset。当语句检测到闸门信号cp3出现下降沿时, 锁存器将由计数器传输过来的信号进行锁存, 从而释放计数器, 使计数器能够进行下一轮的计数, 实现数据的实时更新。锁存器的方块图如图4所示。

2.4 分频器的设计

该模块中输入端口cp_20m为20MHz外部晶振输入端, 分频器利用硬件描述语言对晶振信号进行分频, 最终输出3个不同频率的信号, 即cp1、cp2和cp3。在进行硬件描述时, 先对晶振的20MHz信号进行50000分频产生内部信号cp (频率为400Hz的信号) 。信号cp1为cp的2分频输出频率为200Hz用于动态扫描显示的时基信号;信号cp2为cp1的8分频输出频率为25Hz, 用于按键的消抖;信号cp3为cp1的40分频输出频率为5Hz, 即形成一个0.1S的闸门时间, 做为计数器的闸门信号等。分频器方块图如图5所示。

2.5 显示电路的设计

该模块是描述动态扫描数码管显示代码。其中cp1是一个200Hz的扫描频率。p0, p1, p2, p3是从锁存器传输过来的4个待显示十进制数, 信号show为送入到数码管的输出字形码信号, sel为数码管的位选信号。low和overflow为两个溢出状态标志信号。在代码中利用cp1的上升沿触发进程语句, 进程语句中先判断位选信号该显示哪一位;例如显示第一位时, 对位选信号赋值sel<=“0001”, 然后对第一位数据p0进行译码, 输出到数码管的字形端进行显示, 以此类推, 每5ms (cp1为200Hz) 显示一位数据, 四位数据循环显示使数码管稳定显示数据。

2.6 顶层文件的设计

顶层文件的设计可以先用原理图输入法, 对各个模块进行正确连线, 待调试无误后, 再根据原理图输入法, 采用元件例化的方法对顶层文件进行描述。顶层原理图如图6所示。

3 调试技巧

在调试过程中以各个模块为单位, 编好代码后先进性波形图仿真, 对各个模块的波形图进行分析, 如存在问题及时对代码进行分析修改;若波形图不存在问题再进行整体电路的描述设计。若直接进行整体设计再分析的话, 很难判断错误出现的位置, 导致设计效率的降低。另外在对计数模块进行波形仿真时, 建议先将起初的50000分频适当修改为500分频, 并在设置被测信号的频率时也相应的降低频率。若不进行修改, 在进行波形仿真时, 软件要仿真运算很长时间, 同样会降低效率。当对计数模块的波形分析无误后再改回原代码的50000分频既可。

4 硬件配置

本设计的硬件测试是基于GW48系列SOPC/EDA实验开发系统现代DSP实验开发系统, 该设备的显示模块采用动态扫描时, 其数码管的硬件引脚配置如图7所示。

数码管的字形码分别对应管脚:a:173;b:169;c:168;d:167;e:166;f:165;g:164;h:163四位数码管的位选端分别对应管脚:个位:162;十位:161;百位:160;千位:159。

参考文献

[1]谭会生.EDA技术及应用实践[M].2版.湖南大学出版社, 2010.

[2]潘松, 黄继业.EDA技术实用教程[M]..3版.科学出版社, 2006.

数字频率计课程设计 篇7

关键词:数字系统设计 教学内容 可编程逻辑器件 硬件描述语言

中图分类号:G642文献标识码:A文章编号:1674-098X(2012)01(a)-0173-01

集成电路工艺的创新进步和数字系统设计方法的演变改进给高等院校包括数字系统设计在内的电子技术类课程增添了新的内容,也给该课程的教学内容、教学方法等提出了新的挑战。针对电类专业开设的《数字系统设计》是一门以应用为导向的课程,其教学目标是让学生掌握前沿的技术、先进的设计方法,并具有一定的设计能力。该课程涉及到数字电路、数字系统设计方法、可编程逻辑器件、硬件描述语言等,内容新颖且较为综合,因而学生刚入门时难以掌握课程的重点内容。根据相关系列课程的设置、学生的认知规律以及近几年的教学实践,探索出了课程的教学重点及其内容切入点,这些教学重点强调以逻辑电路与数字系统设计为核心,围绕电路设计来串联可编程器件、硬件描述语言、数字系统设计方法等教学内容。

1 教学重点内容

《数字系统设计》是数字电子技术基础的后续课程,让学生在掌握数字电路基本概念和一般电路的基础上,进一步掌握数字系统设计的方法、途径和手段。其主要内容包括:数字系统与EDA的相关概念、可编程逻辑器件、硬件描述语言、电路元件的描述、数字系统的设计方法、开发环境与实验开发平台以及应用实例的介绍等。这些课程内容涉及面广,为了提高教与学的效果,探索总结了以下的教学重点内容,并作为教学实践中的教学切入点。

1.1 掌握基本电路

常用基本电路包括组合电路中的简单门电路、译码电路、加法器、乘法器、数字分配器、数字选择器等;时序电路中的触发器、状态机、计数器、移位寄存器、控制器等。这些基本电路构成了数字系统的基础组成部分,在进行复杂数字系统设计之前应该熟练掌握这些电路,包括电路的功能、电路的描述以及电路的应用场合等。熟练掌握这些基本电路有助于建立电路设计思想,避免高级程序设计语言(如C语言)的设计思路对采用HDL语言描述逻辑电路时的影响。此外,掌握这些基本电路后易于将这些电路灵活组合,以实现数字系统的逻辑功能。

1.2 树立电路设计思想

数字系统设计本质上是电路设计,从而要求树立电路设计的思想。

如前所述,树立电路设计思想首先需要熟练掌握一些基本的逻辑功能电路。其次,树立电路设计思想需要摒弃高级程序设计语言中通常采用的算法思维,逐步熟悉硬件描述语言的描述方式。数字系统设计强调采用硬件描述语言来对电路与系统进行描述、建模、仿真等。事实上,大多数学生在课程学习之前并不了解硬件描述语言,却较好的掌握了高级程序设计语言。因此开始学习硬件描述语言时常常将之与已经学过的高级程序设计语言做类比。这种类比严重妨碍了电路设计思想的建立,因为高级设计语言是面向问题的算法语言,而硬件描述语言则是面向电路的硬件语言。

最后,树立电路设计思想还需要转换电路设计的思路。数字系统的行为对应着算法中操作和操作的关系,操作由功能模块电路完成,而操作的关系对应着时序,它由控制电路来完成。换言之,抽象的算法最终要被转换成具体的电路。转换的方法是将电路的功能尽可能细化,直至能用基本电路来描述算法中每一个操作。同时,抽象算法转换成具体电路还充分体现了自顶向下(TOP DOWN)层次化设计的方法。

1.3 分层次描述电路

数字系统设计的过程就是从抽象到具体的过程,因此,设计和描述电路时是分层次的。然而让很多学生困惑和难以掌握的是,分层次的电路描述存在着多个角度。实际上,这些不同的描述角度对应着不同的问题求解域。理解不同角度的描述有助于全面了解并掌握问题,进一步拓展设计思路。

与分层次的电路描述相对应的是,在硬件描述语言中存在着三种描述方式:行为描述方式、结构化描述方式和寄存器传输描述方式。在教学中,孤立地讲授硬件描述语言中的描述方式是非常枯燥的,也很难被学生理解。但是如果从电路描述的层次化来阐述,不仅容易理解,而且强调了电路的特性,也符合树立电路设计的思想。

此外,分层次的电路描述遵循着从抽象到具体、从总体到细节的设计思路,这一设计思路正是自顶向下设计方法的体现。分层次描述电路事实上为自顶向下设计方法提供了实现的途径。

1.4 引入先进设计方法

现代数字系统设计在方法、对象、规模等方面已经完全不同于传统的基于固定功能的集成电路设计。现代数字系统设计采用硬件描述语言描述电路,用可编程逻辑器件来实现高达千万门的目标系统。这一过程需要也应该有先进的设计方法。

根据硬件描述语言的特性和可编程逻辑器件的结构特点以及应用的需要,在授课过程中阐述了如下的先进设计方法。为了设计复杂的控制器(时序电路),可采用基于状態机的设计方法;为了满足高速数据传输或运算的需求,可应用或设计锁相环或延时锁相环来处理时钟信号,应用可编程器件的内嵌功能单元或自行设计软核来提高数据吞吐量。

2 实验设计

为了提高教学效果,根据教学内容尤其是重点内容对实验部分设计了如下几个环节:(1)方案设计。根据给定的目标需求,将系统划分为能够用基本电路实现的模块;系统实现的方案并不唯一,需要根据性能指标进一步讨论优化的方式。(2)验证积累。通过对一些基本电路的描述与验证,积累基本电路,熟悉硬件描述语言和开发环境,领悟潜在其中的描述方式和设计方法。(3)自主设计,即独立分析和设计。自主确定方案进行设计、验证、评价。(4)应用介绍,即根据专业背景介绍在科研中的应用。

3 结语

针对《数字系统设计》课程内容新颖且庞杂的特点,探索总结了该课程的教学重点,以帮助学生克服课程入门的困难,并较快地激发起学习兴趣。同时将实践环节设计为设计、积累、设计和拓展,提高了实践效果。由于课程内容还在进一步发展,我们需要进一步探索和更新教学重点内容,进一步改进教学方法,科学设计实践教学,更好地促进学生自主设计和应用能力的培养。

参考文献

[1] 阚玲玲,张秀艳,梁洪卫.“EDA技术与应用”课程教学内容的定位与改革[J].南京:电气电子教学学报,2010.

[2] 刘娅琴,林霖.EDA课程教学探索和实践[J].南京:电气电子教学学报,2010.

上一篇:专升本试题及答案下一篇:初中语文古诗文题目