DDS实验报告.docx
- 文档编号:11670854
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:31
- 大小:974.27KB
DDS实验报告.docx
《DDS实验报告.docx》由会员分享,可在线阅读,更多相关《DDS实验报告.docx(31页珍藏版)》请在冰点文库上搜索。
DDS实验报告
南京理工大学
电类综合实验
实验报告
作者:
徐伟伟
学号:
314101002254
学院(系):
机械工程
专业:
机械制造及其自动化
题目:
直接数字频率合成器(DDS)
指导老师:
花汉兵
2015年6月
摘要:
本文介绍了直接数字式频率合成器(DDS)的设计以及其附加功能的拓展,主要包括了频率控制、加法电路、相位控制、测频电路、译码显示、输出多种波形(包括正余弦、三角波、锯齿波、方波梯形波)、D/A转换等模块。
文中详细说明了实验原理,并用QuartusII软件对各模块进行电路设计,最后在SmartSOPC实验箱上演示得到了预期的实验结果。
关键词:
DDS实验原理电路设计QuartusIISmartSOPC
Abstract:
ThispaperintroducesthedesignofDirectDigitalFrequencySynthesizer(DDS)anditsadditionalfunction,mainlyincludingthefrequencycontrol,addcircuit,thephasecontrol,frequencymeasuringcircuit,decodingdisplayandtheoutputofavarietyofwaveform(includingcosine,triangularwave,sawtoothwaveandsquarewave),D/Aconversionetc.Inthispaper,theexperimentalprincipleisdescribedindetail,andthecircuitsofeachmodulearedesignedwiththeuseofQuartusIIsoftware.Finally,thedesiredresultsarepresentedontheSmartSOPCexperimentbox.
Keywords:
DDS,experimentprinciple,circuitdesign,QuartusII,SmartSOPC
1设计说明
1.1设计内容
利用QuartusII软件和SmartSOPC实验箱设计一个频率及相位均可控制的具有正弦和余弦输出的直接数字频率合成器(DirectDigitalFrequencySynthesizer简称DDFS或DDS)。
1.2设计目的
(1)学习EDA集成工具软件QuartusII的使用;
(2)学习基于可编程逻辑器件的EDA设计流程;
(3)学会基于可编程逻辑器件的电路设计。
1.3设计要求
1.3.1基本要求
(1)利用QuartusII软件和SmartSOPC实验箱实现DDS的设计;
(2)DDS中的波形存储器模块用Altera公司的Cyclone系列FPGA芯片中的RAM实现,RAM结构配置成212×10类型;
(3)具体参数要求:
频率控制字K取4位;基准频率fc=1MHz,由实验板上的系统时钟分频得到;
(4)系统具有使能功能;
(5)利用实验箱上的D/A转换器件将ROM输出的数字信号转换为模拟信号,能够通过示波器观察到正弦波形;
(6)通过开关(实验箱上的Ki)输入DDS的频率和相位控制字,并能用示波器观察加以验证。
1.3.2提高要求
(1)通过按键(实验箱上的Si)输入DDS的频率和相位控制字,以扩大频率控制和相位控制的范围;(注意:
按键后有消颤电路);
(2)在数码管上显示生成的波形频率;
(3)设计能输出多种波形(三角波、锯齿波、方波等)的多功能波形发生器;
(4)充分考虑ROM结构及正弦函数的特点,进行合理的配置,提高计算精度;
(5)基于DDS的AM调制器的设计;
(6)自己添加其他功能。
1.4设计原理
1.4.1DDS概念
DDS是将先进的数字处理理论与方法引入频率合成的一项新技术,DDS把一系列数字量形式的信号通过数/模转换器转换成模拟量形式的信号。
在本系统中,DDS的具体工作过程是由N位相位累加器、N位加法器和N位累加寄存器组成。
每来一个时钟脉冲,N位加法器将频率控制字K与N位累加寄存器输出的累加相位数据相加,并把相加后的结果送至累加寄存器的输入端。
累加寄存器一方面将上一时钟周期作用后所产生的新的相位数据反馈到加法器的输入端,使加法器在下一时钟的作用下继续与频率控制字K相加;另一方面将这个值作为取样地址送入幅度/相位转换电路,幅度/相位转换电路根据这个地址输出相应的波形数据。
1.4.2DDS组成及工作原理
主电路是由脉冲信号发生电路利用分频器产生1MHz的时钟信号,该时钟信号驱动地址累加电路循环产生12位地址信息。
产生的地址信息同时输出到各种预存好函数信息的ROM的地址端,根据这一地址,各ROM便会输出地址所对应的函数值,再通过数据选通模块,根据我们的需要选择输出某路函数信息,送至实验箱上的D/A芯片,便能将二进制信息变为模拟量,最后用低通滤波器滤除高频分量,送至示波器便能输出较为清晰的函数图像。
DDS的组成及其工作原理结构图如图1.1所示:
图1.1DDS的组成及工作原理结构框图
(1)频率预置与调节电路
频率预置电路输入有清零、使能和频率控制字,频率控制字改变函数频率的原理主要是通过改变累加的步长改变输出信号的频率,没有频率控制字的时候,步长默认为1,当改变频率控制字为n时,频率则变为f/n.
(2)累加器
地址累加模块原理并不复杂,其主要由加法器和寄存器构成,累加的地址结果存储在寄存器中,每当一个时钟来到,原地址便加上预置的频率控制字成为新的地址并保存在寄存器中,以供稳定输出供ROM选择数据使用。
相位累加器如图1.2所示,当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作,相位累加器的组成=N位加法器+N位寄存器。
图1.2N位相位累加器
(3)波形存储器
ROM模块是本系统的核心部分之一,该模块中储存了所需要的函数信息,用Matlab生成储存函数信息的.mif文件,再用QuartusII中编辑好的LPMROM模块便能轻松产生对应的ROM模块,该系统所用的ROM有12位的地址线和10位的数据线,ROM中共有4096个数值。
其原理图如图1.3所示:
图1.3波形存储器
(4)D/A转换器
D/A转换器的作用:
把已经合成的正弦波的数字量转换成模拟量。
其原理如图1.4所示:
图1.4D/A转换器工作原理图
(5)低通滤波器
低通滤波器的作用:
滤除生成的阶梯形正弦波中的高频成分,将其变成光滑的正弦波。
如图1.5所示:
图1.5低通滤波器工作原理
(6)核心单元电路及工作流程
DDS的基本结构主要由相位累加器、相位调制器、正弦波数据表(ROM)、D/A转换器构成。
相位累加器由N位加法器N位寄存器构成。
每来一个CLOCK,加法器就将频率控制字fwrod与累加寄存器输出的累加相位数据相加,相加的结果又反馈送至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。
这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。
由此,相位累加器在每一个时钟脉冲输入时,把频率控制字累加以此,相位累加器输出的数据作为波形存储器的相位取样地址,这样就可把存储在波形存储器内的波形抽样值进行找表查出,完成相位到幅值的转换。
频率和相位均可控制的具有正弦和余弦输出的DDS核心单元电路及其工作流程示意图如图1.6所示
图1.6核心单元电路及工作流程示意图
2实验电路设计
1
2
2.1电路总体设计图
图2.1总体电路设计图
由电路总图可以直观的看出,该电路由5个模块组成,它们分别是分频电路、累加器及频率相位控制电路、显示电路、消颤电路和测频电路。
在下文中将会对各个模块加以详细说明。
2.2各模块设计
2.2.1分频电路
该实验平台已经提供了48MHz的时钟频率,本系统使用的基准频率是1Mhz的时钟频率,因此我们需要对48Mhz进行48分频,但是动态显示电路也需要1Khz、1Hz和0.5Hz的时钟,因此我们需要设计多个分频器组合得到各种我们所需要的频率。
(1)二分频
二分频电路就是一个D触发器,其原理图如下所示:
图2.2二分频电路图
封装后:
图2.3二分频封装图
仿真波形图:
图2.4二分频波形图
(2)三分频
三分频电路由两个D触发器来实现,其原理图如下所示;
图2.5三分频电路图
封装后:
图2.6三分频封装图
波形仿真图:
图2.7三分频波形图
(3)八分频
八分频是由3个二分频串联而成。
如下图所示:
图2.8八分频电路图
波形仿真图:
图2.9八分频波形图
(4)十分频电路
十分频电路是由74163来实现,如下图所示:
图2.10十分频电路图
封装后:
图2.11十分频封装图
(5)1000分频
1000分频是由3个十分频电路串联而成,其电路图如下所示:
图2.111000分频电路图
(6)分频电路总设计图
图2.12总分频电路
封装后:
图2.13总分频封装图
2.2.2频率相位控制电路
累加电路主要由加法器和寄存器构成,累加的地址结果存储在寄存器中,每当一个时钟来到,原地址便加上预置的频率控制字成为新的地址并保存在寄存器中,以供稳定输出供ROM选择数据使用。
频率预置与调节电路由四部分组成,首先需将输入信号进行模100的计数,在将所记的8421BCD码转化为2进制数,以控制频率域相位的变化。
该设计实现一个频率和相位自动递增的过程。
频率变化范围由100HZ-8KHZ。
通过开关K1和K2分别控制频率的清零和保持端,以便计数到需要值时清零重新开始递增和保持同一频率显示。
K3、K4作为相位控制按钮,与频率控制相同分别为清零和保持端。
(1)模100位计数器电路
模100位计数器电路由两片74160芯片组成。
利用74160的异步清零并输出来实现100位计数器,其原理图如下所示:
图2.14模100计数器电路图
封装后:
图2.15模100计数器封装图
(2)8421BCD—bin2电路
模100的输出信号经两片74184BCD—二进制转换芯片实现二进制转换。
其原理如下所示:
图2.168421BCD—bin2电路图
封装后:
图2.178421BCD—bin2封装图
(3)频率控制电路
频率控制电路由2片带公共时钟和复位六D触发器74174组成。
输出结果由累加器累加,实现频率自动按照一定步长累加变化。
电路图如下所示:
图2.18频率控制电路图
封装后:
图2.19频率控制封装图
(4)相位控制电路
相位控制电路实现对产生波形相位进行控制。
电路由2片带公共时钟和复位六D触发器74174组成。
相位控制字从74174输入端输入,送入后面的加法器。
高四位,低8位置零,这样相位的变化能更明显。
电路图如下所示:
图2.20相位控制电路图
封装后:
图2.21相位控制封装
(5)加法器
加法器由3片4位加法器7483级联实现,使得4位频率控制字和4位相位控制字和寄存器里的内容不断相加。
这里要注意的是频率控制字和寄存器的低四位相加,而相位控制字是和寄存器的高四位相加,因为如果相位控制字和低四位相加的话,改变相位控制字的时候就不能再示波器上看出相位的明显变化。
由于要求N=12,故选用2片寄存器
74174组成12位寄存器。
电路图连接如下:
图2.22加法器电路图
封装后:
图2.23加法器封装图
(6)累加器
累加器由3片7483全加器和2片74174寄存器构成。
每来一个时钟脉冲,加法器就将步长与寄存器输出的累加相位数据相加,再把相加后的结果送至寄存器的数据输入端。
寄存器将加法器在上一个时钟作用后所产生的相位数据反馈到加法器的输入端;以使加法器在下一个时钟作用下继续与频率控制字进行相加。
这样,相位累加器在时钟的作用下,进行相位累加。
当相位累加器达到满量时就会产生一次溢出,完成一个周期性的动作。
因为ROM中设定的相位取样地址为12位,而本实验中我们取频率控制字K=4,所以将频率步长k[3..0]加在低4位,高8位置0。
第一片7483产生的进位进入到第二片7483进行累加,依次往后从而实现累加的过程。
其电路图如下图所示:
图2.24累加器电路图
封装后:
图2.25累加器封装图
(7)频率相位控制电路图
图2.26频率相位控制电路图
2.2.3波形存储器电路
本实验中波形存储器模块用Altera公司的Cyclone系列FPGA芯片中的RAM实现,RAM结构配置成212×10类型,其作用就是进行波形-幅值转换。
利用下面的波形函数,通过C++编程得到生产ROM的*.mif文件。
正弦sin.mif程序如下:
fori=1:
1:
4096
a(i,1)=i-1;
end
forj=1:
1:
4096
a(j,2)=round((2^9-0.5)*sin(2*pi*(j-1)/2^12)+2^9-0.5);
end
fid=fopen('sin.txt','wt');
fprintf(fid,'%g:
%g;\n',a');
fclose(fid);
WIDTH=10;
DEPTH=4096;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENTBEGIN
余弦cos.mif程序如下:
fori=1:
1:
4096
a(i,1)=i-1;
end
forj=1:
1:
4096
a(j,2)=round((2^8)*cos(2*pi*(j-1)/2^12)+2^9-0.5);
end
fid=fopen('cos.mif','wt');
fprintf(fid,'%g:
%g;\n',a');
fclose(fid);
三角波sanjiaobo.mif程序如下:
fori=1:
1:
4096
a(i,1)=i-1;
end
forj=1:
1:
1024
a(j,2)=round(0.5*j+512);
end
forj=1025:
1:
3072
a(j,2)=round(1024-0.5*(j-1024));
end
forj=3073:
1:
4096
a(j,2)=round(0.5*(j-3072));
end
fid=fopen('sanjiaobo.mif','wt');
fprintf(fid,'%g:
%g;\n',a');
fclose(fid);
方波fangbo.mif程序如下:
fori=1:
1:
4096
a(i,1)=i-1;
end
forj=1:
1:
2048
a(j,2)=1000;
end
forj=2049:
1:
4096
a(j,2)=100;
end
fid=fopen('fangbo.mif','wt');
fprintf(fid,'%g:
%g;\n',a');
fclose(fid);
锯齿波juchibo.mif程序如下:
fori=1:
1:
4096
a(i,1)=i-1;
end
forj=1:
1:
4096
a(j,2)=round(j*0.25);
end
fid=fopen('juchibo.mif','wt');
fprintf(fid,'%g:
%g;\n',a');
fclose(fid);
建立ROM封装电路步骤如下:
(1)新建BlockDiagram/SchematicFile文件,在名称栏输入lpm_rom,并点击OK;
(2)在输出文件类型中选择VHDL,填写对应ROM文件的文件名,点击Next;
(3)Wide和Memeory分别设置为10bit和4096words,点击Next;
(4)在Filename中选择对应*.mif文件路径,点击Next,再点击Finish,结束创建。
以上5种不同波形的ROM的创建方式均相同,可以得到封装好的ROM如下图所示:
图2.275种ROM封装图
2.2.4波形选择电路
波形选择电路实现在余弦、三角波、方波和锯齿波中选择一个波形输出,通过开关K5和K6控制数据选择器地址端,来选择波形。
电路封装后如下图所示:
图2.28波形选择封装图
2.2.5显示电路
测频显示、频率字和相位字的显示共8位,一共8路信号。
因此我使用八选一数据选择器依次选择八路信号单独通过译码器7447,并使用3-8译码器控制对应的数码管显示。
而对于显示信号的输出,只需要使用一个模8计数器不断的循环计数就可以简单的实现控制。
其中高四位显示测频电路测出的频率,低四位显示相位和频率的步长。
电路如下图所示:
图2.29显示电路图
封装后:
图2.30显示电路封装图
2.2.6消颤电路
为避免输出波形有毛刺,因为D触发器对毛刺不敏感,只是在时钟来时输出,所以设计了6个D触发寄存器来消除毛刺。
电路图如下所示:
图2.31消颤电路图
封装后:
图2.32消颤电路封装图
2.2.7测频电路
测频就是计算1秒钟内脉冲的个数。
我们利用计数器和锁存器实现这一功能。
由于累加器以频率控制字K为间隔,当累加器满量时就会产生一次溢出,完成一次周期性的动作,这个周期也就是DDS信号的一个频率周期,所以将累加器的最高位作为测频电路技术器的脉冲。
将1HZ的时钟信号二分频,得到0.5Hz。
将0.5Hz脉冲送入锁存器的时钟端,0.5Hz反相延时后的脉冲送入计数器的清零端。
这样就使计数器在2s的脉冲周期内,1s内清零,1s内计数。
由于锁存器的脉冲和计数器的脉冲是反相的,且有一定的延时,所以当锁存器有效脉冲来到时,计数器是清零状态,锁存器就锁存前1s内计数器的计数信号。
这样就完成了1s内的脉冲计数,再将锁存器的输出送入译码显示电路,就可以在数码管上显示波形频率。
其电路原理如下所示
图2.33测频电路图
封装后:
图2.34测频电路封装图
3调试仿真及下载
3.1调试
先保存,将上述电路以字母输入方式输入并保存在工程文件夹中。
再将文件置顶,最后进行编译,在主菜单中选择processing项,在弹出的对话框中选择Startcomplication键,则编译开始。
在编译过程中,若有任何信息、错误和警告消息,都将显示在自动打开的Message-Compiler窗口中;若由于文件出错而没有通过,则需要返回原文件进行修改,修改后存盘,再编译直至文件通过。
3.2仿真
新建一个“VectorWaveformfile”文件,并在下拉列表中选.vwf扩展名,生成波形文件。
右键单击,在弹出的菜单中选EnterNodesFromeSNF,在弹出的对话框中选择要观测的节点。
选Option\GridSize和File\EndTime,设置相应选项,并给输入引脚加上适当的信号。
然后,选File\Save保存。
接着选择主菜单中的Simulator项,打开模拟器,点击Start开始仿真。
3.3下载
(1)在主菜单Assignments中选择Device项,在弹出的对话框中选择相应的器件EP1C12Q240C8。
(2)在主菜单Assignments选“Pins”,打开平面布置图编辑器窗口,将设计的电路图中的各输入输出锁定在相应的管脚上。
具体管脚分配如下图所示:
图3.1管脚分配图
(3)在主菜单选File\Save保存文件,再次编译项目,生成.sof文件,以用于下载。
(4)在主菜单Tools选Programmer,在弹出的对话框中单击start,即可完成下载。
(5)要注意在实验的不同阶段,系统板上各短路帽、跳线帽的插拔与否。
4实验结果
4.1仿真结果
图4.1总电路仿真波形
4.2示波器结果
图4.2实验线路连接图
图4.3正弦和余弦波
图4.4正弦和三角波
图4.5正弦和锯齿波
图4.6正弦和方波
图4.7测频显示
4.3实验结果
不论是波形仿真结果还是实验箱实际调试结果都是符合设计要求的。
(1)拨动清零开关K1,用示波器检测,能观察到到频率不断增加的双路输出的正余弦函数波形;
(2)拨动使能开关K2,系统输出的双路输出的正余弦函数波形频率保持不变;拨动相位控制字调节开关K3、K3,当K7K6对应的二进制码为00时,为默认输出状态,两路正余弦波形相位差为π/2;为01时,两波形相位差为π;为10时,两波形相位差为3π/2;为11时,两波形相位差为0;
(3)拨动选择输出控制开关K5、K4,当K5K4对应的二进制码为00时,为默认输出状态,输出两路正余弦波形;为01时,只输出方波波形;为10时,只输出三角波波形;为11时,只输出矩形脉冲函数波形;
(4)测频电路能准确、稳定工作,当调整频率控制字稳定后,数码管的能显示当前波形的频率,与示波器上所测得的频率基本一致,只有很小的误差。
5设计感想
在实验调试过程中遇到了一些问题,例如刚开始使用4位开关控制相位,但由于低位控制相位变化为π/16,变化不明显,故采用了2个开关控制相位,调整后拨动开关能看出相位的明显变化。
另外还有在硬件方面,刚开始设计的程序下载后示波器没有显示结果,后来发现是K1-K8与SW1-SW8的排线没有接入,使自己浪费了不少时间,在实验时检查硬件也是我们实验前需做的工作。
通过完成该实验,我能够熟练运用QuartusII软件,掌握了并能熟悉运用硬件设计语言VHDL,原理图设计方法,自己也能快速、高效地设计出符合要求、功能完善同时简洁高效的电路系统。
在电路的设计上应用了“分模块设计、由下至上”的设计思想,在理解系统运行原理的基础上,分模块设计各个电路,将其封装后并进行模拟仿真,最后将个模块连接起来成总电路。
这样设计出来的系统在调试中出现问题的话可以快速地从上之下、一级一级查找问题,并且修改十分方便。
对于主干电路模块——相位累加器、寄存器、相位控制字模块、测频电路等均用原理图方法设计,原理图完成的各个模块功能比较稳定。
基础电路自己在两天时间内基本完成。
但挑战在于其他更高难度的拓展和修改系统中一些细小的不足,比如测频电路的设计,自己摸索了半天才完全搞定。
总的来说,自己的实验技能和FPGA应用开发经验还很欠缺,自己要学的还有很多,这次的实验只能算是自己后续学习的一个开始,这次实验过程中设计电路系统给我带来的快乐也将激励我在后面的时间里不断学习,用实践锻炼并提高自己的能力。
致谢
在此,非常感谢花汉兵老师和助教们的悉心讲解和指导,耐心讲解实验相关的问题,给我了很大的帮助。
另外也非常感谢我的同学对我的帮助,替我解决了实验中的很多问题,正是有了大家的帮助,此次实验才能顺利结束。
参考文献
[1]数字逻辑电路与系统设计(第二版),蒋立平,电子工业出版社,2012
[2]数字基础DigitalFundamentals(第十版),ThomasL.Floyd,科学出版社,2011
[3]MATLAB教程R2011a,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DDS 实验 报告