您的当前位置:首页正文

电路综合设计实验_设计实验2_实验报告

来源:小奈知识网
设计实验2:多功能函数信号发生器

一、 摘要

任意波形发生器是不断发展的数字信号处理技术和大规模集成电路工艺孕育出来的一种新型测量仪器,能够满足人们对各种复杂信号或特殊信号的需求,代表了信号源的发展方向。可编程门阵列(FPGA)具有高集成度、高速度、可重构等特性。使用FPGA来开发数字电路,可以大大缩短设计时间,减小印制电路板的面积,提高系统的可靠性和灵活性。 此次实验我们采用DE0-CV开发板,实现函数信号发生器,根据按键选择生产正弦波信号、方波信号、三角信号。频率范围为10KHz~300KHz,频率稳定度≤10−4,频率最小不进10kHz。提供DAC0832,LM358。

二、 正文

1.方案论证

基于实验要求,我们选择了老师提供的数模转换芯片DAC0832,运算放大器LM358以及DE0-CV开发板来实现函数信号发生器。

DAC0832是基于先进CMOS/Si-Cr技术的八位乘法数模转换器,它被设计用来与8080,8048,8085,Z80和其他的主流的微处理器进行直接交互。一个沉积硅铬R-2R 电阻梯形网络将参考电流进行分流同时为这个电路提供一个非常完美的温度期望的跟踪特性(0.05%的全温度范围过温最大线性误差)。该电路使用互补金属氧化物半导体电流开关和控制逻辑来实现低功率消耗和较低的输出泄露电流误差。在一些特殊的电路系统中,一般会使用晶体管晶体管逻辑电路(TTL)提高逻辑输入电压电平的兼容性。

另外,双缓冲区的存在允许这些DAC数模转换器在保持一下个数字词的同时输出一个与当时的数字词对应的电压。DAC0830系列数模转换器是八位可兼容微处理器为核心的DAC数模转换器大家族的一员。 LM358是双运算放大器。内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。它的使用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。LM358的封装形式有塑封8引线双列直插式和贴片式。

本次实验选用的FPGA是Altera公司Cyclone系列FPGA芯片。Cyclone V系列器件延续了前几代Cyclone系列器件的成功,提供针对低成本应用的用户定制FPGA特性,支持常见的

各种外部存储器接口和I/O协议,并且含有丰富的存储器和嵌入式乘法器,这些内嵌的存储器使我们在设计硬件电路时省去了外部存储器,节省了资源,而其硬件乘法器资源则非常适合用来实现高速DDS调制器。另外,Cyclone V系列器件使用极低的1.2V内核电压,大大降低了芯片的功耗。在本文的设计中,FPGA对内主要实现DDS的功能,对外主要为外围器件提供控制信号和数据总线接口。

除了上述元器件以及相对应的软件的使用,我们要对经过DAC0832数模转换器输出的波形进行放大之后再进行低通滤波,以避免外界环境的干扰和系统内部元器件在工作时产生的噪声。

2.理论分析与计算 DDS原理:

① DDS原理的背景

1973年,J.Tiemey和C.M.Tader等人在《A Digital Frequency Synthesizer》一文中首次提出了DDS的概念,但限于当时的技术条件,DDS并没有引起人们的足够重视。上世纪90年代以来,随着数字集成电路和微电子技术的发展,DDS技术的优越性才日益体现出来。 ② DDS的基本结构

DDS与大多数的数字信号处理技术一样,它的基础仍然是奈圭斯特采样定理。奈圭斯特采样定理是任何模拟信号进行数字化处理的基础,它描述的是一个带限的模拟信号经抽样变成离散值后可不可以由这些离散值恢复原始模拟信号的问题。 奈圭斯特采样定理告诉我们,当抽样频率大于或者等于模拟信号最高频率的两倍时,可以由抽样得到的离散信号无失真地恢复出原始模拟信号。只不过在DDS技术中,这个过程被颠倒过来了。DDS不是对模拟信号进行抽样,而是一个假定抽样过程已经发生且抽样值已经量化完成,如何通过某种方法把已经量化的数值重建原始信号的问题。 DDS电路一般由参考时钟、相位累加器、波形存储器、D/A转换器(DAC)和低通滤波器(LPF)组成。其结构框图如下图所示:

NN相位累加器NN位加法器N位寄存器A波形存储器DLPFDAC频率控制字 Kfo参考时钟

其中,fc为参考时钟频率,K为频率控制字,N为相位累加器位数,A为波形存储器位数,D为波形存储器的数据位字长和D/A转换器位数。

DDS系统中的参考时钟通常由一个高稳定度的晶体振荡器来产生,用来作为整个系统各个组成部分的同步时钟。频率控制字(Frequency Control Word,FCW)实际上是二进制编码的相位增量值,它作为相位累加器的输入累加值。相位累加器由加法器和寄存器级联构成,它将寄存器的输出反馈到加法器的输入端实现累加的功能。在每一个时钟脉冲 ,相位累加器把频率字 累加一次,累加器的输出相应增加一个步长的相位增量,由此可以看出,相位累加器的输出数据实质上是以 为步长的线性递增序列(在相位累加器产生溢出以前),它反映了合成信号的相位信息。相位累加器的输出与波形存储器的地址线相连,相当于对波形存储器进行查表,这样就可以把存储在波形存储器中的信号抽样值(二进制编码值)查出。在系统时钟脉冲的作用下,相位累加器不停的累加,即不停的查表。波形存储器的输出数据送到D/A转换器,D/A转换器将数字量形式的波形幅度值转换成所要求合成频率的模拟量形式信

号,从而将波形重新合成出来。若波形存储器中存放的是正弦波幅度量化数据,那么D/A转换器的输出是近似正弦波的阶梯波,还需要后级的低通平滑滤波器进一步抑制不必要的杂波就可以得到频谱比较纯净的正弦波信号。如下图所示为DDS各个部分的输出信号:

相位累加器输出波形存储器输出DAC输出LPF输出 由于受到字长的限制,相位累加器累加到一定值后,就会产生一次累加溢出,这样波形存储器的地址就会循环一次,输出波形循环一周。相位累加器的溢出频率即为合成信号的频率。可见,频率控制字K越大,相位累加器产生溢出的速度越快,输出频率也就越高。故改变频率字(即相位增量),就可以改变相位累加器的溢出时间,在参考频率不变的条件下就可以改变输出信号的频率。 ③ DDS原理

根据傅立叶变换定理,任何满足Dirichlet条件的周期信号都可以分解为一系列正弦或者余弦信号之和。为了不失一般性,下面以正弦信号的产生为例来说明DDS的基本原理。 我们知道,正、余弦信号用可以用复数形式表示为:

cos(2ft)ReExp(j2ft) 式(2-1) sin(2ft)ImExp(j2ft) 式(2-2)

ySR(t)x

上图描述了矢量R绕原点沿正方向(逆时针)旋转时,其模值R与x轴夹角(t)(相位

角)及R在y轴上的投影S三者之间的关系。当R连续地绕原点旋转,S将取R~R之间的任意值,(t)将以2为模取0~2之间的任意值。如果将S看作我们欲重构正弦信号的幅度值,则相位角(t)和S的关系为:SRsin(t)。现将相位数字化(采样、量化),将2量化成M等份,则相位量化的最小间隔为2/M,这样造成的结果是重构信号的幅度值S也相应离散化:

SRsin(n)Rsin(2n)0000n1,2,...,M 式(2-3) M由式(2-3)可以看出,S只能取与相位n对应的幅度值。

yx

如上图所示,设此时R不是绕原点连续旋转,而是在系统时钟fc的控制下以相位增量,很容易可以看出来,在相位周期变化的同时,进行阶跃式旋转(上图中2)

输出信号的幅度S也在周期重复着,因此,重构信号的周期在幅度中也就体现出来了。

为了进一步探讨相位增量对输出信号频率的影响,我们分别以相位增量为/4和/8重构信号幅度,分别如下图1和2所示。在此,我们假设相位累加是在相同的系统时钟fc的进行的,即对于不同的相位增量,fc是固定不变的,这是理解相位增量和重构信号频率关系的基础。

90o135o45o180o0oTo225o270o315o

图1 相位增量为/4时相位幅度的映射关系

图2 相位增量为/8时相位幅度的映射关系

对比图1和图2,我们很容易发现,当相位增量减少为原来的二分之一时,输出信号的采样值密集度就成了原来的两倍,那么R旋转一周的时间自然也增大为原来的两倍,即

To'2To。周期T与频率f成倒数关系,由此可得两种情况下输出重构信号的频率关系:fo2fo',如图3所示。

相位增量为/4相位增量为/8

图3 相位增量不同对重构信号频率的影响(仿真)

分析到这里,我们可以得出结论,在DDS系统中,在参考时钟fc固定不变的前提下,通过改变相位增量的值,就可以得到不同频率的重构信号。 我们假设有一个频率为f的正弦信号S(t):

S(t)sin(2ft) 式(2-4)

现以采样频率fc对该信号进行抽样,得到离散序列为:

S(nTc)sin(2fnTc) 式(2-5)

其中Tc1/fc为采样周期。习惯上将式(2-5)写成式(2-6)的形式:

S(n)sin(2fnTc)00000n0,1,2,式(2-6)对应的相位序列为:

式(2-6)

(n)2fnTc00000n0,1,2, 式(2-7)

该序列的显著特性是线性,即相邻样值之间的相位增量是一常数,且仅与信号频率f有关,当式(2-7)中的n取1时得到量化相位增量为:

2fTc 式(2-8)

倘若我们将2相位均匀量化M等份,人为构造一个相位值:

'''2K 式(2-9) M并且使得,那么就可以得到如下关系:

KffTc 式(2-10) Mfc根据以上原理,如果我们用变量K构造一个量化序列:

(n)nK 式(2-11)

然后完成(n)到另一个序列S(n)的映射,即由(n)构造序列:

'22S'(n)sin(n)sin(nK) 式(2-12)

MM将式(2-10)代入式(2-12)可得:

S'(n)sin(2fTcn) 式(2-13)

对比式(2-6)跟式(2-13),我们不难发现,S(n)其实就是信号S(t)经过采样频率fc抽样后的离散时间序列。在满足奈圭斯特采样定律的的条件下,即:

'Kf1 式(2-14) Mfc2S'(n)可以经过D/A转换和低通平滑滤波唯一地恢复出S(t)。

可见,通过上述变换,变量K将唯一地确定一个单频模拟正弦信号S(t): S(t)sin(2该信号的频率为:

foKfct) 式(2-15) MKfc 式(2-16) M式(2-16)就是DDS的基本方程,是利用DDS进行频率合成的立足点。在实际的DDS应用中,一般取M2,N为正整数,于是DDS的基本方程可写成:

NfoKfc00000K1,2,...,2N1 式(2-17) N2由式(2-17)可以看出,当K1时,DDS系统输出信号频率fo最小,而这个最小频率同时也是DDS系统的频率分辨率:

fominfofc 式(2-18) N2对于DDS系统从波形存储器中读数据的过程,我们可以将其看作是对波形存储器中的波形数据再次采样的过程,也就是说,DDS系统查表的过程就是从波形存储器中二次采样过程,一个周期内查表的点数即为采样的点数。DDS系统要恢复出原始波形,其在一个周期内至少要取样两点,这是受我们一直都在强调的奈圭斯特采样定理的限制。那么DDS系统在理论上能输出的最大频率是:

fomaxfc 式(2-19) 2经过以上的分析,我们得出以下几点结论:

(1)DDS系统的输出频率fo只与频率控制字K、系统时钟频率fc、相位累加器位数N有关。在系统时钟频率fc和相位累加器位数固定时,通过改变频率控制字K的值,就可以方便地改变输出信号的频率。

(2)DDS系统的频率分辨率只与系统的系统时钟频率fc和相位累加器位数N有关。想要提高系统的分辨率,可以增加相位累加器位数或者是降低系统时钟频率。

(3)DDS理论上最大输出频率不会超过系统时钟频率fc的二分之一,但在实际应用中,由于DDS系统中的低通滤波器非理想特性,由通带到阻带之间存在着一个过渡带,工程中DDS最高输出频率只取到40%fc左右。 ④DDS技术特点

(1)DDS技术可以用于产生任意波形

基于前面对DDS系统的基本结构分析,很容易理解,只要改变存储在波形存储器中的波形数据,就可以改变输出波形。所以对于任何周期性波形,只要满足采样定理,都可以利用DDS技术来实现。

(2)DDS系统具有很高的频率分辨率

DDS系统输出频率的分辨率和频点数随相位累加器的位数成指数增长,由式(2-21)可知,在系统时钟频率不变的情况下,只要增大相位累加器的位数N,就可以得到几乎是任意小的频率分辨率,可以满足精细频率控制的要求。DDS如此精细的频率分辨率,使其输出频率已十分逼近连续变化。

(3)输出频率切换速度快且相位保持连续

与锁相频率合成相比,由于DDS系统是一个开环系统,所以当一个新的频率控制字送到时,它会迅速合成这个新的频率,实际的频率切换时间可以达ns级。同时,频率切换时,DDS系统的输出波形的相位是连续的。DDS系统的频率字改变时,输出波形的变化过程可以用图4描述。

图4频率控制字改变时累加器的输出值和输出波形的变化(仿真) 在波形输出到P点时,频率字发生了改变(变小),相位累加器的累加值即相位步进变小,其输出值斜率也变小,系统的输出波形的频率也在同时刻变小。DDS系统在频率字发生改变后的一个时钟周期,其输出频率就可以就转换到了新的频率上,也即在频率字的值改变以后,累加器在经过一个时钟周期后就按照新的频率字进行累加,开始合成新的频率。所以我们可

以认为DDS的频率切换是在一个系统时钟周期内完成的,系统时钟频率越高,切换速度越快。

另外,从前面对DDS技术原理的分析可知,要改变输出频率,实际上改变的是频率字,也就是相位增量。当频率字的值从K1改变为K2之后,相位累加器是在已有的累积相位上,再对K2进行累加,相位函数曲线是连续的。从图2.12也可以看出,只是在频率字改变的瞬间相位函数曲线的斜率发生了突变,相位值并没有发生跳跃,因此DDS能够在频率切换的过程中保持相位连续,输出波形能够平滑地从一个频率过渡到另外一个频率。

由于DDS采用数字化技术,最终合成信号是经过D/A转换得到的,所以不可避免的存在着以下缺点:

(1)DDS在工程中的最高输出频率一般只能达到系统时钟频率的40%,要想获得较高的频率,就必须提高系统时钟频率,也就是说DDS的相位累加器、波形存储器和D/A转换器都将工作在较高的时钟频率下,它的实现依赖于高速数字电路和高速D/A转换器。这也是DDS系统在早期没有受到重视,而直到最近几年才迅速发展的原因。

(2)DDS系统采用数字合成技术,先离散信号再变换成模拟信号输出,这其中导致了各种误差,尤其是相位截断误差,因此各种杂波是不可避免的。

为了具有较高的输出频率,DDS系统的参考时钟频率一般都比较高,根据 式(2-18),在较高的时钟频率下,要想获得较高的频率分辨率,只有通过增加相位累加器的位数N,故一般N的取值都较大。如果相位累加器的所有输出都用来作为波形存储器的寻址地址,那么存储器的容量会大得惊人。例如,如果32位累加器的所有位都用来作为存储器的地址,那么需要4G个存储单元,而如果换成48位的累加器,那么就需要256T(1T=1024G)个存储单元,这样的设计显然是没有办法接受的。因此存储器的地址线位数A一般都小于N。这样存储器的地址线就只能接到相位累加器的输出的高A位上,而低NA位则要舍弃,也就产生了相位截断误差,表现在输出频谱上就是杂散分量。 3.电路与程序设计:

针脚连接方式

程序设计的顶层设计代码如下:详细代码请查看附件的工程文件 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

---------------------------------------------------------------------

ENTITY mydds IS -- 顶层设计 PORT (

CLK : IN STD_LOGIC;

FWORD : IN STD_LOGIC_VECTOR(4 DOWNTO 0); MODE : IN STD_LOGIC_VECTOR(1 DOWNTO 0); FOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END mydds;

--------------------------------------------------------------------- ARCHITECTURE behav OF mydds IS

---------------------------------------------------------------------

COMPONENT REG8B --load 'event and load = 1 --dout <= din; PORT (

LOAD : IN STD_LOGIC;

DIN : IN STD_LOGIC_VECTOR(12 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(12 DOWNTO 0)); END COMPONENT;

--------------------------------------------------------------------- COMPONENT ADDER8B PORT (

A : IN STD_LOGIC_VECTOR(5 DOWNTO 0); B : IN STD_LOGIC_VECTOR(12 DOWNTO 0); S : OUT STD_LOGIC_VECTOR(12 DOWNTO 0)); END COMPONENT;

--------------------------------------------------------------------- COMPONENT lpm_rom8

PORT (

address : IN STD_LOGIC_VECTOR(12 DOWNTO 0); inclock : IN STD_LOGIC ;

q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT;

----------------------------------------------------------------------- COMPONENT lpm_romsq PORT (

address : IN STD_LOGIC_VECTOR(12 DOWNTO 0); inclock : IN STD_LOGIC ;

q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT;

----------------------------------------------------------------------- COMPONENT lpm_romsj PORT (

address : IN STD_LOGIC_VECTOR(12 DOWNTO 0); inclock : IN STD_LOGIC ;

q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT;

----------------------------------------------------------------------- COMPONENT proceofk PORT (

k_in : IN STD_LOGIC_VECTOR(4 DOWNTO 0); k_out : OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); END COMPONENT;

----------------------------------------------------------------------- COMPONENT modechoose PORT (

mode_in : IN STD_LOGIC_VECTOR(1 DOWNTO 0); data_sin: in std_logic_vector(7 downto 0); data_sq: in std_logic_vector(7 downto 0); data_sj: in std_logic_vector(7 downto 0);

data_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT;

-----------------------------------------------------------------------

SIGNAL F8B : STD_LOGIC_VECTOR( 4 DOWNTO 0); SIGNAL F8B_out : STD_LOGIC_VECTOR( 5 DOWNTO 0); SIGNAL A8B : STD_LOGIC_VECTOR( 12 DOWNTO 0); SIGNAL B8B : STD_LOGIC_VECTOR( 12 DOWNTO 0); SIGNAL C8B : STD_LOGIC_VECTOR( 12 DOWNTO 0); SIGNAL wire_sin : STD_LOGIC_VECTOR( 7 DOWNTO 0);

SIGNAL wire_sq : STD_LOGIC_VECTOR( 7 DOWNTO 0); SIGNAL wire_sj : STD_LOGIC_VECTOR( 7 DOWNTO 0); --signal modeall : std_logic_vector( 1 downto 0 );

--------------------------------------------------------------------- BEGIN F8B<=FWORD; U0 : proceofk port map(k_in=>F8B,k_out=>F8B_out);

U1 : ADDER8B PORT MAP( A=>F8B_out,B=>B8B, S=>A8B ); U2 : REG8B PORT MAP( DOUT=>B8B,DIN=>A8B, LOAD=>CLK ); U3 : REG8B PORT MAP( DOUT=>C8B,DIN=>B8B, LOAD=>CLK );

U4 : lpm_ROM8 PORT MAP( address=>C8B(12 downto 0), q=>wire_sin, inclock=>CLK ); U5 : lpm_ROMsq PORT MAP( address=>C8B(12 downto 0), q=>wire_sq, inclock=>CLK ); U6 : lpm_ROMsj PORT MAP( address=>C8B(12 downto 0), q=>wire_sj, inclock=>CLK ); U7 : modechoose PORT MAP (mode_in=>mode,data_sin=>wire_sin,data_sq=>wire_sq,data_sj=>wire_sj,data_out=>FOUT); END behav;

4.测试方案与测试结果 要求:

(1)实现方波,正弦波,三角波输出。 (2)通过按键进行频率控制

(3)频率范围为10KHz~300KHz。(因实验仪器达不到精度因此下调了范围指标)

(4)频率可以设置,最小设置单位为10kHz。(因实验仪器达不到精度因此下调了指标) (5)可以进行点频测量,幅频测量误差的绝对值≤0.5dB,相频测量误差的绝对值≤5%。 首先是用Quartus II 13.0软件编译源程序,分配管脚,定义时钟、复位、选择波形、八位数据、DA时钟管脚。编译生成.sof文件通过JTAG接口下载到FPGA板子上,连接DA模块和示波器。分别按键选择不同的波形,调试程序。

其次,通过锁相环改动波形频率,编译下载程序。对不同频率的波形,进行调试。 最后,编译生成.sof文件,转换成.jic文件通过JTAG接口固化到FPGA芯片里。 测试:

给DE0板供给5V的直流电压,使其能够正常工作。然后分别按下相应的按钮使其分别输出三角波,sin波和方波。若三个波形能够正常输出且不产生严重的失真,则我们认为该函数信号发生器满足第一条指标,是合格的。

其次,按动DE0板上对应控制频率的按钮,观察示波器上的波形参数,如果每按动一次按钮,输出波形的频率都会发生改变,且每次改变都为10KHZ,而且输出波形的频率范围为10KHZ-300KHZ,则我们认为该函数信号发生器满足这三条指标,是合格的。 最后,我们要该函数信号发生器进行点频测量。对于10KHZ-300KHZ范围内的每个频率点,我们都要对其进行测量。首先确定该函数信号发生器在某一频率点上的标准频率𝑓0,然后用示波器测得该点的实际频率𝑓1,那么该点幅频测量误差=

‖𝑓0−𝑓1‖𝑓0

100%,经过换算得到以dB为

单位的数值。同理可得相频测量的误差。

如果测得幅频测量误差的绝对值≤0.5dB,相频测量误差的绝对值≤5%,则我们认为该函数信号发生器满足这一指标,合格。

综上所述,如果我们设计的函数信号发生器能满足以上所有的指标,那么该函数信号发生器为合格器件。

因篇幅问题不能全部显示,请点此查看更多更全内容