简易数字频率计设计

更新时间:2023-05-16 08:27:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

现代电子系统课程设计__

现代电子系统——简易数字频率计设计

河南科技大学

课程设计说明书

课程名称__现代电子系统课程设计__

题目__简易数字频率计设计___

学院__电子信息工程学院___

班级__电信科082班___

学生姓名__张凡凡_______

指导教师__齐晶晶,张雷鸣_____

日期__2011,12,16_______

1

现代电子系统课程设计__

现代电子系统——简易数字频率计设计

课程设计任务书

(指导教师填写)

课程设计名称现代电子系统课程设计学生姓名张凡凡专业班级电信科082 设计题目简易数字频率计设计_一、课程设计目的

掌握高速AD的使用方法;

掌握频率计的工作原理;

掌握GW48_SOPC实验箱的使用方法;

了解基于FPGA的电子系统的设计方法。

二、设计内容、技术条件和要求

设计一个具有如下功能的简易频率计。

(1)基本要求:

a.被测信号的频率范围为1~20kHz,用4位数码管显示数据。

b.测量结果直接用十进制数值显示。

c.被测信号可以是正弦波、三角波、方波,幅值1~3V不等。

d.具有超量程警告(可以用LED灯显示,也可以用蜂鸣器报警)。

e.当测量脉冲信号时,能显示其占空比(精度误差不大于1%)。

(2)发挥部分

a.修改设计,实现自动切换量程。

b.构思方案,使整形时,以实现扩宽被测信号的幅值范围。

三、时间进度安排

布置课题和讲解:1天查阅资料、设计:4天

实验:3天撰写报告:2天

四、主要参考文献

何小艇《电子系统设计》浙江大学出版社2008.1

潘松黄继业《EDA技术实用教程》科学出版社2006.10

指导教师签字:2011年11月28日

2

现代电子系统课程设计__

简易数字频率计

目录

摘要 (2)

一. 任务解析 (3)

二. 系统方案论证 (3)

2.1 总体方案论证................................................................. . (4)

2.2 频率计数模块论证........................................................... .. (5)

三、分模块电路设计 (6)

3.1A/D模块设计 (6)

3.2比较模块 (8)

3.3分频模块 (9)

3.4频率测量模块 (11)

3.5占空比模块 (12)

3.6显示模块 (14)

3.7 整体原理图 (16)

四、实验结果分析 (17)

五、心得体会 (18)

附录 (19)

- 1 -

现代电子系统课程设计__

简易数字频率计

摘要

本课题要设计的是一个简易的数字频率计,要求可以测量正弦波、矩形波、三角波和尖脉冲等周期信号的频率值及占空比,其扩展功能可以实现自动切换量程,使整形时,以实现扩宽被测信号的幅值范围。该设计运用ADC0809进行数模转换,,并通过比较器与闸门脉冲相比较,得到一个特定周期的脉冲,为提高人机交互的方便性设计分频器,来获得频率计和占空比所用的基准电压,设计频率计数器和占空比测量计分别测量被测信号的频率和占空比,并通过数码管用十进制数显示数据。设计主要分为如下几个部分:

◆数模转换模块:A/D数模转换,为把数字信号转换为信息基本相同

的模拟信号而设计的处理过程。将信号发生器传过来的模拟信号转化成数字信号。

◆比较器模块:输出量数值与规定的参比值相比较,以产生一个差值信

号(误差信号)的器件。

◆分频模块:利用一个分频器实现分频,提高了人机交互的方便性。

◆频率模块:在一个测量周期过程中,被测周期信号在输入电路中经过

放大、整形、微分操作之后形成特定周期的窄脉冲,送到主门的一个输入端。主门的另外一个输入端为时基电路产生电路产生的闸门脉冲。

◆占空比模块:在一串理想的脉冲序列中(如方波),正脉冲的持续时间

与脉冲总周期的比值。

◆显示模块:用数码管显示频率及占空比,并用LED灯显示自动量程切

换。

关键词:AD转换、占空比、分频、基准电压、

- 2 -

现代电子系统课程设计__

简易数字频率计一.任务解析

本课题要求设计一个简易的数字频率计,要求如下:

◆被测信号为正弦波、三角波、方波,幅值1~3V。

◆被测信号的频率范围为1~20kHz,用4位数码管显示数据,;当频率高于低于10khz时以hz单位计量,高于10khz时以khz单位计量,用LED灯显示自动量程切换。频率超过20kHz时用LED灯或蜂鸣器警告。测量结果用十进制数值显示。

◆当测量脉冲信号时,能显示其占空比,用两位数码管显示,要求占空比精度误差不大于1%。

◆设置按键手动切换频率与占空比显示。

由以上要求可绘制简易的系统原理框图:

二.系统方案论证

2.1 总体方案论证

2.1.1 方案分析

方案一:基于FPGA的设计

我们用VHDL语言设计分别设计各个分模块,然后建立原理图作为顶层文件,将各个模块实现信号连接,再进行硬件下载从而实现。在确定的闸门时间Tw内,记录被测信号的脉冲数N,即得到被测频率为f=N/Tw。再用一个计数器

- 3 -

现代电子系统课程设计__

简易数字频率计

记录被测信号脉冲个数,然后把记录结果锁存,经数码管显示,记得到所测频率。此方案原理简单,模块化利于分析,得到的精度也比较高,也可以实现高频测量。其系统原理框图如下:

方案二:采用单片机控制合成各种波形

波形的选择,生成及频率控制均由单片机编程实现。此方案产生的频率范围,步进值取决于所采用的每个周期的输出点数及单片机执行指令的时间。此方案的优点是硬件电路简单,所用器件少,且实现各种波形相对容易,在低频区基本能实现要求的功能;缺点是精度不易满足,产生波形频率范围小,特别难以生成高频波形。

- 4 -

现代电子系统课程设计__

简易数字频率计

- 5 - 2.1.2 方案选择

对于FPGA 的设计,可以直接采用我们比较熟悉的VHDL 硬件语言直接进行的设计,在不同的场合,我们只要对语言进行适当的改动,就可实现具体情况具体应用,相较于单片机FPGA 可移植性更强。并且FPGA 本身是将大量的逻辑功能继承与一个器件内,集成度要远远高于单片机,能够利用的资源也相对充裕,因此可以较好地完成要求。经以上对两种方案的分析我们选择方案一。

2.2 计频模块论证

数字频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下有以下两种思路:

方案一、

利用一个较大的周期信号作为参考信号,计量在一个周期内出现的被测信号的数目,最终我们可以通过计数器求出信号的频率,即直接测频法。被测信号的频率为:fx=Nx/Tw 。

TW

NX

闸门信号

被测信号

方案二、

利用一个频率较高来测量,具体来说就是计量被测信号在一个周期内的能够经历多少个参考频率。因此,同样也可以测量出具体信号的值,即测周期法。被测信号的频率为:fx=fs/Ns 。

现代电子系统课程设计__

简易数字频率计 - 6 - 被测信号

标准信号

TX

NS

但是,我们可以看到以上的两种方法本身有一些缺陷。对于第一种方法,如果被测信号的频率和参考信号的频率接近的话,那么测量出的结果就一定会有比较大的误差。对于第二种方法,如果被测信号的频率和比较的的话,会造成计数值的比较大的误差,因此第二种方法不适合测量低频率的信号。因此,为了保证测量的精度,就必须采用分段进行测量,也就是在低频的时候采用第二种方法,在高频时采用第一种方法。

三. 分模块电路设计

3、1 A/D 转换模块设计

该模块的作用是把数字信号转换为信息基本相同的模拟信号而设计的处理过程。将信号发生器传过来的模拟信号转化成数字信号。

首先我们了解到AD0809的工作过程是:输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START 上升沿将逐次逼近寄存器复位。下降沿启动 A/D 转换之后EOC 输出信号变低,指示转换正在进行。直到A/D 转换完成,EOC 变为高电平,指示A/D 转换结束,结果数据已存入锁存器 这个信号可用作中断申请。当OE 输入高电平时,输出三态门打开ALE,START,OE,ADDA 都是ADC0809的控制信号,ADDA 为模拟通道选择,低电平选择通道0,ALE 为通道地址锁存信号,START 为启动AD 转换的信号,OE 为ADC0809转换结果输出的使能信号。

部分转换程序如下:

BEGIN

ADDA <= '0'; --当ADDA<='0',模拟信号进入通道IN0;

现代电子系统课程设计__

简易数字频率计

- 7 - 当ADDA<='1',则进入通道IN1

Q <= REGL;

LOCK0 <= LOCK ;

COM: PROCESS(current_state,EOC)

BEGIN --规定各状态转换方式 CASE current_state IS

WHEN st0=>ALE<='0';START<='0';LOCK<='0';OE<='0'; next_state <= st1; --0809初始化

WHEN st1=>ALE<='1';START<='1';LOCK<='0';OE<='0'; next_state <= st2; --启动采样

WHEN st2=> ALE<='0';START<='0';LOCK<='0';OE<='0';

IF (EOC='1') THEN next_state <= st3; --EOC=1表明转换结束

ELSE next_state <= st2;

END IF ; --转换未结束,继续等待

WHEN st3=> ALE<='0';START<='0';LOCK<='0';OE<='1'; next_state <= st4; --开启OE,输出转换好的数据

WHEN st4=> ALE<='0';START<='0';LOCK<='1';OE<='1'; next_state <= st0;

WHEN OTHERS => next_state <= st0;

END CASE ;

经过编程后实现的ADC0809的元件例化图如下:

D[7..0]

CLK

EOC ALE START OE

ADDA

LOCK0

Q[7..0]

AD0809

inst8

现代电子系统课程设计__

简易数字频率计

图中CLK时钟选定为1MHz,这是因为ADC0809的工作时内部时钟为100ns,所以选在1MHz为最佳。为ADDA为1时,为通道1,ADDA为0时,为通道0,当ST0=0 START<='0';LOCK<='0';OE<='0'时从状态0转换到状态1,实现了从状态1到状态2,从状态3到状态4,再从状态4到状态0,把输入信号转化为二进制。然后作为比较器的输入信号。在比较器中和阀值进行比较。此功能模块的仿真图如下

3.2比较模块

该模块是数字信号比较器,本次设计中我们所用的数据为八位数据,将ADC0809转化的结果和给定的阈值进行比较,输出产生脉冲信号,结果把正玄波和三角波转化为方波信号。

部分程序如下:

begin

if q>="00011000" then

y<='1';

else y<='0';

- 8 -

现代电子系统课程设计__

简易数字频率计

- 9 - end if;

end process;

上述程序中选取阀值为00011000,当大于阀值时,输出为高电平,低于阀值时输出为低电平。从而实现了把正弦波,三角波转换为方波。然后输入到频率和占空比的控制模块中。

比较模块的元件例化图为:

d[7..0]y

bijiao

inst4

从ADC0809输出的数据D[7..0]送到d[7..0]做输入,用输入和阈值相比较,大于阈值则为高电平,小于阈值时为低电平。

此模块得到的仿真图如下:

从图中看出当输入数据大于00011000时,输出y 为1,小于0001100时,输出y 为0,当由于仿真的也延时作用,使得仿真有误差。

3.3 分频模块

现代电子系统课程设计__

简易数字频率计

此模块主要是为了实现人机的交互,和使用的外部资源尽量少。被本次设计中我将6Mhz的时钟信号分频出1Hz,2MHz,作为计频模块,占空比模块的时钟信号。

此功能部分程序如下:

process(clk)

begin

if clk'event and clk='1' then

if a=5999999 then

clk_p<=not clk_p;a<=0;

else a<=a+1;

if b=5 then

clk_z<=not clk_z;b<=0;

else b<=b+1;

end if;

end if;

end if;

end process;此功能模块的元件例化图如下:

f e n p i

c l k c l k_

c l k_

i n s t

此功能模块的功能仿真图如下:

- 10 -

现代电子系统课程设计__

简易数字频率计

3.4频率测量模块

fin是经过过比较器后的输入信号,在1S的信号下对fin信号进行计数计数器,要求低位的计数值溢出信号做为高位的输入信号,从而显示频率的计量。计数器采用十进制计数。由于需要记录的频率范围为1-20KHz,所以需要20为输出data_p[19..0],每四位接入一个数码管,显示一位即:Data_p[3..0]为计频器的个位,data_p[7..4] 为计频器的十位,data_p[11..8] 为计频器的Hz百位,data_p[15..12] 为计频器的Hz千位,data_p[19..16]为KHz位。每1s对fin记一次数据,得到的数据结果即位被测信号的频率。

在本次设计中当量程超过20Khz时,即发出过量程警告,也就是程序中

if dout(19 downto 16)="0001" then

oe<='1';语句实现,oe即为标志信号,将其接入一个led 灯。

此功能模块的生成的元件例化图为:

- 11 -

现代电子系统课程设计__

简易数字频率计

- 12 - clk_p

f in c20data_p[19..0]

pinlv ji

inst2

其中clk_p 为分频模块输出地1Hz 时钟信号,fin 为比较器输出脉冲。

C20为过量程信号。Data_p[19..0]为输出频率值。

此功能模块的仿真图如下:

图中设置的参数为fin 为基准频率的7倍,因此得到data[19..0]=7。

3.5 占空比模块

根据设计要求中,要求精度误差不大于1%,所以要求此模块的系统时钟为2MHz ,f 为比较器输出地脉冲信号,用一个计数器记录f 高电平期间系统时钟的个数N1,用一个计数器记录f 一周期内系统时钟的个数N2,用N1除以N2得到的数据分离出个位和十位,经过进制转换后,送到数码管上显示。

%10021??÷?=N N 占空比

现代电子系统课程设计__

简易数字频率计

部分程序如下:

p3:process(a)

begin

if a'event and a='1' then

zy<=y1;

end if;

end process p3;

p4:process(f3,c,clk_z)

begin

if f3='1' then k1<=0;m1<=0;

else

if clk_z'event and clk_z='1' then

if c='1' then

k1<=k1+1;

end if;

end if;

if clk_z'event and clk_z='1' then

if f2='1' then

m1<=m1+1;

end if;

end if;

end if;

end process p4;

p5:process(m1,k1)

begin

m<=m1*100/k1;

y1(3 downto 0)<=conv_std_logic_vector(m rem 10,4);

y1(7 downto 4)<=conv_std_logic_vector(m/10 rem 10,4);

end process p5;

程序中,m1为高电平所得2MHz的时钟个数,k1为一个周期所得2MHz的时钟个数,根据占空比公式得到占空比m,在将m对10求余,转换成四位二

- 13 -

现代电子系统课程设计__

简易数字频率计

- 14 - 进制,用两个数码管显示出来,y1(3 downto 0)为个位,y1(7 downto 4)为十位。

此功能模块的元件例化图如下所示: f

clk_z zy [7..0]

zhankongbi

inst

f 为比较器输出脉冲信号,clk_z 为3MHz 的时钟信号,由分频器得到,zy 为所测得占空比*100

的显示值。

此功能模块的仿真图如下所示:

图中所输入的信号f 的占空比为39%,只是稍微存在一些误差,实际情况应该是正确的。这也是造成了后来下载到实验箱上占空比显示不稳定的原因之一。

3.6 显示模块

此模块用于显示频率值和占空比的值,以及量程自动切换和超量程显示,由于可用数码管有限,因此我用一个按键控制两个值的的相互切换显示。此功

现代电子系统课程设计__

简易数字频率计能模块的元件例化图形如下图所示:

图中y1[7..0]为占空比值,data_p[19..0]为频率值,kz为功能切换键,当kz=‘1’时,数码管显示占空比;当kz=‘0’时,数码管显示频率值。

若c20=‘1’,表示量程超过20khz,频率显示0000,;dhz,kdhz分别接两个led灯,dhz=‘1’,表示以Hz为单位计频,kdhz=‘1’时,表示以KHz 为单位计频。

此功能模块的仿真图如下所示:

- 15 -

现代电子系统课程设计__

简易数字频率计

- 16 -

由图可以看出,当kz=‘1’时,数码管显示的是占空比;当kz=‘0’时,数码管显示的是频率值。当被测信号的频率大于10KHz 时,dkhz=‘1’,当频率在10KHz 以下时dhz=‘1’。

3.7 系统的整体原理图

f clk_z

zy [7..0]

zhankongbi

inst

clk_p

f in

c20

data_p[19..0]

pinlv ji

inst2

d[7..0]

y

bijiao

inst4

VCC

D[7..0]

INPUT

VCC

EOC

INPUT A L E

O U T P U T

S T A R T

O U T P U T

O E

O U T P U T

A D D A

O U T P U T

L O C K 0

O U T P U T

Q [15..0]

O U T P U T

D[7..0]CLK EOC

ALE START

OE ADDA LOCK0Q[7..0]

AD0809

inst8

clk

clk_p clk_z

f enpin

inst3y 1[7..0]

data_p[19..0]

kz

c20dhz

dkhz y out[15..0]xianshi

inst1

c 20

O U T P U T

k h z

O U T P U T

h z

O U T P U T

VCC

kz

INPUT VCC

clk1

INPUT VCC

clk2

INPUT

现代电子系统课程设计__

简易数字频率计

- 17 -

四、实验结果分析

经过一系列的模块设计与顶层文件编译仿真,将顶层原理框图下载到FPGA 试验箱并验证结果,发现此程序并没有达到规定他所需让它测得的量程范围1Hz-20KHz ,只达到最高频率2.5KHz ,而且占空比的显示只在200hz 以下时

比较稳定,较高频率时实现很不稳定的。

表4-1为不同频率所测得的频率和占空比

由上表我们可以看出,频率在200hz 以下时占空比显示稳定且误差较小,频率高于200hz 时占空比显示便开始闪烁跳跃;被测频率高于3khz 时显示频率也开始出现错误。

表4-1

输入幅度(V) 输入频率(HZ ) 输入占空比 输出频率(HZ ) 输出占空比 3 10 50 10 50 3 200 30 200 30

3 500 30 500 数码管跳跃 3 1000 40 1000 数码管不稳定 3 3000 30 3000 数码管不稳定 3 5000

50

1500

数码管不稳定

现代电子系统课程设计__

简易数字频率计

对于以上问题的出现,一方面可能是自己知识掌握不够牢固,对方案的设计及选择有一定的纰漏;另一方面也可能是实验器材的性能达不到要求及器材的不稳定造成实验效果的偏差。

四、心得体会

此次课程我们选择的是设计一个简易的数字频率计,该频率计可以测量正弦波、矩形波、三角波和尖脉冲等周期信号的频率值及占空比,本次设计我们选择FPGA来实现。两周的时间,从查阅资料到最终完成设计,由于不重视和对知识学习的不扎实,我们浪费了很多时间,首先上网查阅了很多资料,实验中不懂的地方又去翻阅了以前没有熟悉的课本和其他书籍,向能力较强的同学请教咨询,参考学长们的经验,才把各个模块原理搞明白并编辑仿真出来,最终实现。但由于实验器材的局限性及个人知识的的不全面性,虽然设计可以测量要求各种波形的频率和占空比,但与预先要求的测量范围还是有一定的出入,能够测量的最高频率只有3khz,达不到预先要求的最高测量20khz。也正由此我明白了自己知识上的不足以及考虑问题的狭隘,也学到了很多自己不熟悉的东西,经验是最宝贵的财富,此次也不例外。

- 18 -

现代电子系统课程设计__

简易数字频率计

五、附录

1.AD转换模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY AD0809 IS

PORT(D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --来自0809转换好的8位数据

CLK : IN STD_LOGIC; --状态机工作时钟

EOC : IN STD_LOGIC; --转换状态指示,低电平表示正在转换

ALE : OUT STD_LOGIC; --8个模拟信号通道地址锁存信号

START : OUT STD_LOGIC; --转换开始信号

OE : OUT STD_LOGIC; --数据输出3态控制信号

ADDA : OUT STD_LOGIC; --信号通道最低位控制信号

LOCK0 : OUT STD_LOGIC; --观察数据锁存时钟

Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8位数据输出END AD0809;

ARCHITECTURE behav OF AD0809 IS

TYPE states IS (st0, st1, st2, st3,st4) ; --定义各状态子类型

SIGNAL current_state, next_state: states :=st0 ;

SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL LOCK : STD_LOGIC; -- 转换后数据输出锁存时钟信号

BEGIN

ADDA <= '0';--当ADDA<='0',模拟信号进入通道IN0;当ADDA<='1',则进入通道IN1

- 19 -

本文来源:https://www.bwwdw.com/article/rfc4.html

Top