DDS 直接数字频率合成器实验报告.docx
- 文档编号:2388720
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:32
- 大小:1.16MB
DDS 直接数字频率合成器实验报告.docx
《DDS 直接数字频率合成器实验报告.docx》由会员分享,可在线阅读,更多相关《DDS 直接数字频率合成器实验报告.docx(32页珍藏版)》请在冰点文库上搜索。
DDS直接数字频率合成器实验报告
直接数字频率合成器(DDS)
实验报告
课程名称电类综合实验
实验名称直接数字频率合成器设计
实验日期2015.6.1—2013.6.4
学生专业测试计量技术及仪器
学生学号114101002268
学生姓名陈静
实验室名称基础实验楼237
教师姓名花汉兵
成绩
摘要
直接数字频率合成器(DirectDigitalFrequencySynthesizer简称DDFS或DDS)是一种基于全数字技术,从相位概念出发直接合成所需波形的一种频率合成技术。
本篇报告主要介绍设计完成直接数字频率合成器DDS的过程。
其输出频率及相位均可控制,且能输出正弦波、余弦波、方波、锯齿波等五种波形,经过转换后在示波器上显示。
经控制能够实现保持、清零功能。
除此之外,还能同时显示出频率控制字、相位控制字和输出频率的值。
实验要求分析整个电路的工作原理,并分别说明了各子模块的设计原理,依据各模块之间的逻辑关系,将各电路整合到一块,形成一个总体电路。
本实验在QuartusⅡ环境下进行设计,并下载到SmartSOPC实验系统中进行硬件测试。
最终对实验结果进行分析并总结出在实验过程中出现的问题以及提出解决方案。
关键词:
QuartusⅡ直接数字频率合成器波形频率相位调节
Abstract
TheDirectDigitalFrequencySynthesizerisatechnologybasedonfullydigitaltechnique,afrequencycombinationtechniquesynthesesarequiredwaveformfromconceptofphase.ThisreportintroducesthedesigntothecompletionoftheprocessofdirectdigitalfrequencysynthesizerDDS.Theoutputfrequencyandphasecanbecontrolled,andcanoutputsine,cosine,trianglewave,squarewave,sawtoothwave,whicharedisplayedontheoscilloscopeafterconversation.Canbeachievedbythecontroltomaintainclearfunction.Furthercansimultaneouslydisplaythevalueofthefrequency,thephasecontrolwordandtheoutputfrequency.TheexperimentaldesignintheQuartusⅡenvironment,thelasthardwaretestdownloadtoSmartSOPCexperimentalsystem.Thefinalresultswillbeanalyzed,thematterwillbeputforwardandthesettlingplancanbegivenatlast.
Keywords:
QuartusⅡDirectDigitalFrequencySynthesizerwaveformFrequencyandphaseadjustment
一、设计内容
设计一个频率及相位均可控制的具有正弦和余弦输出的直接数字频率合成器(DirectDigitalFrequencySynthesizer简称DDFS或DDS)。
二、设计原理
2.1DDS概念
直接数字频率合成器(DirectDigitalFrequencySynthesizer简称DDFS或DDS)是一种基于全数字技术,从相位概念出发直接合成所需波形的一种频率合成技术。
2.2DDS的组成及工作原理
DDS的基本组成结构如下图2-1所示,其主要由频率预置与调节电路、累加器、波性存储器(如正弦波数据表等)、D/A转换器及低通滤波器等几部分组成。
图2-1DDS整体电路工作原理图
其中相位累加器由N位加法器和N位寄存器构成。
每来一个时钟clock,加法器就将频率控制字
与累加寄存器输出的累加相位数据相加,相加的结果又反馈送至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。
这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。
由此可以看出,相位累加器在每一个时钟脉冲输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率。
用相位累加器输出的数据作为波形存储器的相位取样地址,这样就可把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出,完成相位到幅值转换。
波形存储器的输出送到D/A转换器,由D/A转换器将数字信号转换成模拟信号输出,DDS信号波流程示意图如图2-2所示。
图2-2DDS工作流程示意图
由于相位累加器为N位,相当于把正弦信号在相位上的精度定为N位,所以分辨率为
。
若系统时钟频率为
,频率控制字
为1,则输出频率为
这个频率相当于“基频”。
若
为K,则输出频率为:
当系统输入时钟频率
不变时,输出信号的频率由频率控制字K所决定。
由上式可得:
其中,K为频率字,注意K要取整,有时会有误差。
选取ROM的地址时,可以间隔选项,相位寄存器输出的位数D一般取10-16位,这种截取方法称为截断式用法,以减少ROM的容量。
D太大会导致ROM容量的成倍上升,而输出精度受D/A位数的限制未有很大改善。
图2-3组装模块后的整体工作原理图
三、设计要求
3.1基本要求
(1)用QuartusII软件和SmartSOPC实验箱实现DDS的设计;
(2)DDS中的波形存储器模块用Altera公司的Cyclone系列FPGA芯片中的ROM实现,ROM结构配置成4096×10类型;
(3)具体参数要求:
频率控制字K取4位;基准频率fc=1MHz,由实验板上的系统时钟分频得到;
(4)系统具有清零和使能的功能;
(5)利用实验箱上的D/A转换器件将ROM输出的数字信号转换为模拟信号,能够通过示波器观察到正弦波形;
(6)通过开关(实验箱上的Ki)输入DDS的频率和相位控制字,并能用示波器观察加以验证。
3.2提高要求
(1)通过按键(实验箱上的Si)输入DDS的频率和相位控制字,以扩大频率控制和相位控制的范围;(注意:
按键后有消颤电路)
(2)能够同时输出正余弦两路正交信号;
(3)在数码管上显示生成的波形频率;
(4)充分考虑ROM结构及正弦函数的特点,进行合理的配置,提高计算精度;
(5)设计能输出多种波形(三角波、锯齿波、方波等)的多功能波形发生器;
(6)基于DDS的AM调制器的设计;
(7)自己添加其他功能。
四、设计内容
4.1分频电路
硬件电路的内部时钟为48MHz,使用前必须将它分配至我们需要的0.5Hz、1Hz、2Hz、1KHz和1MHz。
分频电路由多个计数器组合而成,主要是由2分频/3分频/10分频这三种基本分频电路以不同形式组合构成。
各子分频的输出最好取计数器输出的最高位,这样分出的频率脉冲占空比较大。
下图为总分频电路流程图:
图4-1总分频电路流程图
4.1.1二分频电路
二分频电路由一个D触发器及一个非门实现,通过将D触发器的
和
相连,在
端即得到一连串的二分频信号,实验电路图及封装图如下:
图4-2二分频电路图图4-3二分频电路封装图
其仿真波形为:
图4-4二分频电路的仿真波形
4.1.2三分频电路
三分频电路通过74160用置数法实现,其输出端
按照
的方式循环计数就可以对其输入的脉冲进行三分频,输出信号由
引出。
其电路图及封装图如下图所示:
图4-5三分频电路图图4-6三分频电路封装图
其仿真波形为:
图4-7三分频电路的仿真波形
4.1.3八分频电路
八分频电路实际上就是三个二分频电路相串联而成,其电路图及封装图如下图所示:
图4-8八分频电路图
图4-9八分频电路封装图
其仿真波形为:
图4-10八分频电路的仿真波形
4.1.4十分频电路
十分频点路由一片74163和一个与非门得到,在1100时置数0011,计数器循环方式如下所示:
图4-11十分频电路计数循环图
取最高位
为计数器的输出端,内部结构及其封装图如下图所示:
图4-12十分频电路图图4-13十分频电路封装图
其仿真波形为:
图4-14十分频电路的仿真波形
从波形仿真图可以看出,10个脉冲信号为一个周期,且高低电平之比为1:
1,符合要求。
4.1.5千分频电路
1000分配电路实际上是三个10分频电路相串联得到的。
其波形图及封装图如下图:
图4-151000分频电路图
图4-161000分频电路封装图
其仿真波形为:
图4-171000分频电路的仿真波形
4.1.6总分频电路
总分频电路图及封装图如图所示:
图4-18总分频电路图
图4-19总分频电路封装图
4.2频率预置与调节电路
频率预置与调节电路的主要作用是实现频率控制量的输入,不变量K为相位增量,也叫频率控制字。
DDS的输出频率表达式为
,当K=1时,DDS输出最低频率(也即频率分辨率)为
,而DDS的最高输出频率由Nyquist采样定理决定,即
,也就是说K的最大值为
。
设计频率调节模块时,采用74160设计模32计数器来产生频率控制字,1Hz信号输入让其变化,目的是为了使输出频率的调节范围更大一些。
该模块为了节省开关以后续可控制波形选择输出,设有清零保持端,由开关控制,以便计数到需要值时保持或清零。
输出为8位BCD码,高四位是十位,低四位是个位。
此时要在计数器后接一个码转换电路,将BCD码转换为二进制码,再输入累加器进行累加。
同样的可以设计出相位调节模块。
需要注意的是,这里的加法器是12位的,因此要将频率控制字作为12位地址的低7位输出,高5位赋值为0,这样可以使频率调节的精度更高。
而相位控制字要作为12位地址的高7位输出,低5位赋值为0,这样可以使相位调节幅度变大。
最好让相位增量和相位控制字通过寄存器,时钟为1MHz的系统时钟,使得电路同步工作。
模32电路图、BCD码至二进制码的转换电路图以及频率相位同步图如下所示:
图4-20模32计数器电路图
图4-21BCD码至二进制码的转换电路图
图4-22频率相位同步图
其封装图如图所示:
图4-23频率相位封装图
4.3累加器
相位累加器由12位加法器与12位寄存器级联构成,如下图所示。
图4-24累加器流程图
每来一个时钟脉冲,加法器就将频率控制字K与累加寄存器输出的累加相位数据相加,相加的结果又反馈送至累加寄存器的数据输入端,寄存器将加法器的上一个时钟作用后所产生的相位数据反馈至加法器的输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。
这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。
当相位累加器累加满量时就会产生一次溢出,完成一个周期性的动作。
累加器电路图及封装图如下图所示:
图4-25累加器电路图
图4-26累加器电路封装图
4.4波形存储器(ROM)
波形存储器的原理图如图所示:
图4-27波形存储器的原理图
波形存储器的相位取样地址来自于相位累加器输出的数据这样就可把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出,完成相位到幅值转换。
同时,波形存储器中还可存放不同类种波形的地址,例如正弦波、余弦波、方波、矩形波、锯齿波、三角波等。
为了能让电路输出五种波形,使用五块不同的波形存储器分别存放这五种波形一个周期内的数据。
考虑到硬件包括两块相同的DAC板,正弦波的输出值直接在DAC0板上,其余四种波的输出值经过一个四选一数据选择器,由两个开关控制选择波形输出到DAC1板。
LPM_ROM的设定则由mif文件产生五个ROM的数据值。
在元器库种选取LPM_ROM,设置ROM信息,数据宽度为10bits,数据个数为4096,设置ROM为寄存器输出,指定ROM的初始化数据来源,选择由MATLAB软件生成的mif文件,然后点击“finish”即可生成ROM单元。
图4-28设置LPM_ROM方法
4.4.1各波形对应mif文件的生成
(1)正弦波
depth=4096;%存储单元数;
widths=10;%数据宽度为10位;
N=0:
1:
4096;
s=sin(pi*N/2048);%计算0~pi/2的Sin值;
fidc=fopen('sin.mif','wt');%以"wt"的形式打开,\n为换行
%写入dds.mif%
fprintf(fidc,'depth=%d;\n',depth);
fprintf(fidc,'width=%d;\n',widths);
fprintf(fidc,'address_radix=dec;\n');
fprintf(fidc,'data_radix=dec;\n');
fprintf(fidc,'ContentBegin\n');
for(x=1:
depth)
fprintf(fidc,'%d:
%d;\n',x-1,round(2047*sin(pi*(x-1)/2048)+2048));
end
fprintf(fidc,'end;');
fclose(fidc);
k=1:
1:
depth;
plot(k,(2047*sin(pi*(k-1)/2048)+2048));%画图
图4-29matlab生成正弦波图形
(2)余弦波
depth=4096;%存储单元数;
widths=10;%数据宽度为10位;
N=0:
1:
4096;
s=cos(pi*N/2048);%计算0~pi/2的cos值;
fidc=fopen('cos.mif','wt');%以"wt"的形式打开,\n为换行
%写入dds.mif%
fprintf(fidc,'depth=%d;\n',depth);
fprintf(fidc,'width=%d;\n',widths);
fprintf(fidc,'address_radix=dec;\n');
fprintf(fidc,'data_radix=dec;\n');
fprintf(fidc,'ContentBegin\n');
for(x=1:
depth)
fprintf(fidc,'%d:
%d;\n',x-1,round(2047*cos(pi*(x-1)/2048)+2048));
end
fprintf(fidc,'end;');
fclose(fidc);
k=1:
1:
depth;
plot(k,round(2047*cos(pi*(k-1)/2048)+2048))%画图
图4-30matlab生成余弦波图形
(3)方波
depth=4096;%存储单元数;
widths=10;%数据宽度为10位;
forn=1:
2048
s(n)=4095;
s(n+2048)=1;
end
fidc=fopen('fb.mif','wt');%以"wt"的形式打开,\n为换行
%写入dds.mif%
fprintf(fidc,'depth=%d;\n',depth);
fprintf(fidc,'width=%d;\n',widths);
fprintf(fidc,'address_radix=dec;\n');
fprintf(fidc,'data_radix=dec;\n');
fprintf(fidc,'ContentBegin\n');
forx=1:
1:
depth
fprintf(fidc,'%d:
%d;\n',x-1,s(x));
end
fprintf(fidc,'end;');
fclose(fidc);
k=1:
1:
depth;
plot(k,round(s))%画图
图4-31matlab生成方波图形
(4)锯齿波
depth=4096;%存储单元数;
widths=10;%数据宽度为10位;
forn=1:
2048
s(n)=n;
s(n+2048)=n;
end
fid=fopen('jcb.mif','wt');%以"wt"的形式打开,\n为换行
%写入dds.mif%
fprintf(fid,'depth=%d;\n',depth);
fprintf(fid,'width=%d;\n',widths);
fprintf(fid,'address_radix=dec;\n');
fprintf(fid,'data_radix=dec;\n');
fprintf(fid,'ContentBegin\n');
for(x=1:
depth)
fprintf(fid,'%d:
%d;\n',x-1,s(x));
end
fprintf(fidc,'end;');
fclose(fidc);
k=1:
1:
depth;
plot(k,round(s))
图4-32matlab生成锯齿波图形
(5)三角波
depth=4096;%存储单元数;
widths=10;%数据宽度为10位;
forn=1:
2048
s(n)=2*(n-1);
s(n+2048)=2*(2048-n);
end
fidc=fopen('sjb.mif','wt');%以"wt"的形式打开,\n为换行
%写入dds.mif%
fprintf(fidc,'depth=%d;\n',depth);
fprintf(fidc,'width=%d;\n',widths);
fprintf(fidc,'address_radix=dec;\n');
fprintf(fidc,'data_radix=dec;\n');
fprintf(fidc,'ContentBegin\n');
for(x=1:
depth)
fprintf(fidc,'%d:
%d;\n',x-1,s(x));
end
fprintf(fidc,'end;');
fclose(fidc);
k=1:
1:
depth;
plot(k,round(s))
图4-33matlab生成三角波图形
4.4.2五种波形存储器的封装图及选择电路图
图4-34五种波形存储器的封装图及选择电路图
4.5测频电路
4.5.1测频电路原理
数码管的右边四位用来输出频率控制字与相位控制字,左边四位用来显示相应的波形频率,需设计测频电路来测量频率。
测频就是计算1秒钟内脉冲的个数。
可以利用计数器和锁存器实现这一功能。
通过观察可知,每当输出一个周期的波形时,波形数据输出的最高位也变化一周期,因此可以用它q[9]来表征输出波形的频率。
测频电路原理图如下图所示:
图4-35测频电路原理图
使用模10000的计数器来统计输出波形的频率,时钟即为测频脉冲。
将0.5Hz脉冲送入锁存器的时钟端,0.5Hz反相延时后的脉冲送入计数器的清零端。
这样就使计数器在2s的脉冲周期内,1s内清零,1s内计数。
由于锁存器的脉冲和计数器的脉冲是反相的,且有一定的延时,所以当锁存器有效脉冲来到时,计数器是计数的末状态,锁存器就锁存前1s内计数器的计数信号。
这样就完成了1s内的脉冲计数,再将锁存器的输出送入译码显示电路,就可以在数码管上显示波形频率了。
4.5.2测频电路及封装图
图4-36测频电路图
图4-37测频电路封装图
4.6译码显示电路
4.6.1译码显示电路原理
图4-38译码显示电路原理图
显示电路主要由数据选择器74151、译码器74138、计数器、显示译码器7447和数码显示管组成,计数器74161设计为模8的循环计数器,其输出既作为四片74151的控制端,又作为3-8译码器74138的控制端。
当计数器计数到某一个数值时,四片74151同时选取对应位的输入组成计时器某一位的BCD编码,接入显示译码器7447,与此同时根据计数器的数值,74138译码器也通过数码管的使能端选择对应位有效,从而在实验箱上显示数据。
扫描的频率为1KHz,因为人眼的视觉停留,会感觉七个数码管同时显示。
4.6.2译码显示电路图
图4-39译码显示电路图
图4-40译码显示电路封装图
4.7消颤电路
消颤开关由D触发器构成,利用D触发器锁存开关的动作信号,并且屏蔽抖动。
消颤电路如下所示:
图4-41消颤电路图
图4-42消颤电路封装图
4.8总电路
总电路如下图4-41所示:
图4-43总电路图
五、电路调试仿真与程序下载
每部分模块设计好后均需对其仿真。
波形仿真正确无误后,就可以下载到芯片上,进行硬件实施。
在下载之前,必须先对每个管脚进行分配。
选择“Assignments-Pins”中的“PinPlanner”对话框,每个管脚都配置完成后,点击“Save”保存配置并关闭窗口。
把未使用的管脚设置为高阻抗状态,之后下载,在硬件上观察波形和数据,验证程序是否正确。
管脚分配如下:
图5-1管脚分配图
六、示波器波形图
示波器波形图如下图所示:
图6-1示波器波形图(部分)
七、实验中遇到的问题及解决方法
本科三年级的时候我们专业学过可编程逻辑器件这门课,当时对这门课很感兴趣,初次接触QuartusⅡ软件,发现这个软件和MAXPlusⅡ软件有很多相似之处。
在做实验之前,我用周末的时间自学了QuartusⅡ软件。
实验过程中,在将程序下载到实验箱之前我对每个部分都做了波形仿真,仿真的结果也是正确的,但出乎意料的是程序下载到实验箱以后结果却是错的,不过倒是可以通过实验结果找出可能出现错误的地方,这是让我觉得收获很大的经验。
数码管是可以显示数字的,说明错误不在显示模块,最终发现主要问题是测频电路的问题。
影响测频电路输出的主要有三方面因素:
一方面是输入0.5Hz的频率,一方面是测频电路内部电路设计合理性问题,最后是输入时钟信号。
0.5Hz与分频电路设计合理性有关,最好采用同步分频电路。
输入时钟信号可有多种选择途径,一种是选择累加器的溢出信号,一种是选择q[9]作为输入信号。
处于稳定性考虑,选择q[9]作为输入信号最佳。
八、电路改进
考虑到正弦波、余弦波、方波、锯齿波和三角波在一个周期内的波形都具有很强的对称性,可以在ROM中只存储1/4周期的波形,剩下3/4周期的波形可以利用对称性,通过前1/4周期的波形计算得到。
各取正弦波、余弦波、方波、锯齿波、三角波的前1/4周期数据,整合到一个深度为4096、位数为10的ROM中。
这样输出不同波形时所查找的ROM相同,大大节省了ROM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DDS 直接数字频率合成器 实验报告 直接 数字 频率 合成器 实验 报告