DDS,实验报告分析和总结
来源:自查报告 发布时间:2022-10-25 20:45:06
下面是小编为大家整理的DDS,实验报告分析和总结,供大家参考。
1 / 33
电子线路硬件课程设计实验报告
课题:DDS 信号发生器设计班级:电信 0802
作者:丁高强
学号:U200812809 指导老师:罗杰课设评价:
课设成绩:
2 / 33
一. 实验目的
1. 通过本课程的训练,较系统地完成电子系统设计过程的方案论证、电路设计、电路实现、装配调试、系统测试等各个环节, 加深对模拟电路、数字电路、微机原理等相关课程的理论知识的分析理解和综合应用,从而掌握工程设计的基本方法和一般规律。
2. 充分发挥学生的自我能动性和创造力,引导学生由原理分析向工程设计过渡; 3. 进一步熟悉用集成器件实现电路与系统的方法。
4. 培养撰写综合实验报告的能力。二 二. 实验原理
DDS 的基本原理是利用采样定理,通过查表法产生波形。DDS 的结构有很多种,其基本的电路原理可用下图来表示。
相位累加器由 N 位加法器与 N 位累加寄存器级联构成。每来一个时钟脉冲fc,加法器将频率控制字与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。累加寄存器将加法器在上一个时钟脉冲作用后所产生的新相位数据反馈到加法器的
3 / 33
输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行 线性相位累加。由此可以看出,相位累加器在每一个时钟脉冲输入时, 把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位, 相位累加器的溢出频率就是DDS 输出的信号频率。用相位累 加器输出的数据作为波形存储器( ROM)的相位取样地址,这样就可把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出, 完成相位到幅值转换。波形存储器的输出送到D/A转换器,D/A 转换器将数字量形式的波形幅值转换成所要求合成频率的模拟量形 式信号。低通滤波器用于滤除不需要的取样分量,以便输出频谱纯净的信号波形。
DDS 在相对带宽、频率转换时间、高分辨力、相位连续性、正交输出以及集成化等一系列性能指标方面远远超过了传 统频率合成技术所能达到的水平,为系统提供了优于模拟信号源的性能。
在实现此DDS 波形产生器时有很多方式,在此我们选择FPGA 方式。原理图如下:
DDS 原理框图
DATA
B B
fclc 20 12 储 据
数
DA转
换器
输出模拟波形 32 数据器寄
存存
32 器 存
F
32 20 低20位不用
4 / 33
假设时钟为fclc,数据保持寄存器选择 32 Bit,在时钟驱动下,累加器输出结果 F 被反馈到累加器输入端B,B 和 DATA的数据被累加到F,下一个时钟脉冲又将 F 反馈到 B,再次与 DATA累加到 S,下一个时钟脉冲又将F 反馈到B,如此循环累加,实现按步进值,按时钟节拍循环累加,使得N Bit 数据被徐循环累加,产生循环扫描的地址码 0~4096(高 12 Bit)。完成一次地址循环需要的时间由时钟和步进值决定,可以由公式计算:
T 2 M
DATA
* 1 fclc
一次地址循环可以输出一个完整的波形,既T 就是输出波形的周期, 转换成频率f,得到计算公式:
1 2 M
f fclc * DATA
f fclc * DATA 2 M
当晶振 fclc 和计数器位宽 M 确定之后,既与步进值 DATA成正比, 对 DATA的调整可以完成对的设定,当 M 足够大时,比例常数可以很小,
三 三. 实验内容基本要求:
(1)正弦波输出频率范围:1kHz~1MHz;
5 / 33
(2)
具有频率设置功能,频率步进:100Hz; (3)
输出信号频率稳定度:优于 10-4; (4)
输出电压幅度:在负载电阻上 Vopp≥1V; (5)
失真度:用示波器观察时无明显失真。
(6)
能产生三角波、方波信号,频率范围自定。扩展要求:
1)
产生模拟频率调制 (FM) 信号:在 100kHz~10MHz 频率范围内产生 10kHz 最大频偏,且最大频偏可分为 5kHz/10kHz 二级程控调节,正弦调制信号频率为 1kHz,调制信号自行产生; 2)产生二进制 PSK 和 FSK 信号:在 100kHz 固定频率载波进行二进制键控,二进制基带序列码速率固定为 10kbps ,二进制基带序列信号自行产生; 3) 利用 DDS 的原理来设计分频电路,由系统 50MHz 时钟,分出一个 20.48 kHz 的时钟信号。
四 四. 实验过程
此次试验中所用的软件为 Quartus II 9.1 1.
打开 Quartus II 9.1 选择 File New Project Wizard 并建 立一个工程命名为 dds_top。如下图所示
6 / 33
然后点击 next,给所建工程命名如下图
2.
然后点击 next ,会出现导入文件的界面,因为我不需要导入文件, 所以直接点击 next 进入下一步进行器件选择。本次试验中我们所用的器件为 cycloneII EP2C35F672C6R 如下图所示
7 / 33
8 / 33
3.
点击 Finish,至此一个完整工程就建立完毕。
此次试验我们采用画原理图的方式来实现
DDS 功能,DDS 的核心部分包括相位累加器和波形存储器,下面通过原理图来实现
4.
选择 File->New 选项出现如图所示界面,我们选择Block Diagram/Schematic File 文件,点击 OK
9 / 33
5.
首先用锁相环,对 50Mhz 的系统时钟进行分频和倍频
10 / 33
建立好的锁相环如下图
KEY[0]用来复位,锁相环的输入时钟信号有 DE2 板子提供的50MHz 时钟。此时得到 100Mhz 和 10MHz,其中 100Mhz 作为其他逻辑器件的时钟,10MHz 在进行一次分频得到 1Hz 的信号用于频率改变。
altpll0
CLOCK_50 KEY[0]
INPUT VCC
INPUT VCC
NOT
areset
inclk0
areset areset
inclk0 frequency: 50.000 MHz c1
c0
clock_100
clock_10
Operation Mode: Normal
inst2 Clk
Rati o Ph (d g D )
C
(%)
c0
2/1
0.00 50.00 c1
1/5
0.00 50.00 inst Cyclone II
11 / 33
6.
建立相位累加器 从 从
10MHz 中分得
1Hz 的原理图
a. 首先建立一个加减法器,用来实现信号频率的加或者减的,此模块通过调节 DATA 的值来改变频率,用 SW【0】来控制加或者减,KEY【0】控制时钟的使能。
b. 此模块使用了一个选择器通过 SW[3:1]来选择每次的递增或递减量,和上面的加减法器来实现DATA的加或者减。
sload
Freq_div up counter
data[23..0]
clock_10
clock
inst20 q[23..0]
cout
clock_1hz
Div_pre 6777216 24 inst21 Add_Sub
SW[0] INPUT VCC
add_sub
clock_1hz
areset
dataa[31..0] A clock datab[31..0] B clken aclr inst15 A+B/A-B result[31..0] T
91
O
t s
N n
i
2
D
6 2
7 N 1 D
1 A
t s
N N n
i
A
t s
N n
i
NOT
KEY[3]
INPUT VCC
inst18
12 / 33
c.将上
Freq_1M
42949673 32 inst8 Freq_100K 4294963 32
inst9 Freq_10K 429497
32
inst10
Freq_1K
FrqStepSel
data6x[31..0]
data5x[31..0]
data4x[31..0]
data3x[31..0]
42950
32
inst11
Freq_100 4295
32
inst12
Freq_10 429
32
inst13
Freq_1 43
32
inst14
data2x[31..0] data1x[31..0] data0x[31..0] clock
inst6
result[31..0]
sel[2..0]
clock_100
PIN_N26 PIN_P 25
PIN_AE 14
SW[3..1] INPUT VCC
面产生的DATA偏移量和原始 DATA(原始 DATA对应的频
率为 5000Hz )
相加, 就可以产生新的 DATA, 即新的频率。
Freq_init
dataa[31..0] A
lpm_constant7 214750
32 inst23
clock_100 clock datab[31..0] inst22 A+B B result[31..0] tem[31..0]
d.产生新的DATA值后在通过累加器,就可以产生数据存储器的地址值。如下图:
7. DDS 的另外一个部分就是数据存储器,下面就介绍一下数据存储器的生成。
a. 在系统的元件库中招lpm_rom 如下图,并设置存储器的位宽为 10。寻址范围为 0~4095. FreqencyAdd dataa[31..0] A
clock
datab[31..0] B
inst4 A+B result[31..0]
13 / 33
b. 将正弦信号的采样数据放到 ROM 中如图。然后点击 Finish 一个 ROM 就建立完毕。
14 / 33
c. 建立完毕后如图所示。
d. 同理在分别建立存储方波、三角波采样数据的存储器,如下图三角波数据存储器
方波数据存储器:
此模块的总体原理图如下图,用相位累加模块所产生的地址信号 的高 12 位(Ctrlword[31:20])做存储器的地址信号,此时三个存储器都会有数据输出,我们可以通过多路选择器来选择我们想要的波形。
SinRom
address[11..0]
q[9..0]
clock
inst31 TranwaveRom address[11..0] clock
q[9..0]
inst32 SquareRom address[11..0] clock
q[9..0]
inst33
15 / 33
SquareRom Ctrlword[31..20] address[11..0] q[9..0] clock
inst33 WaveSel TranwaveRom address[11..0] q[9..0] clock data3x[9..0] data2x[9..0] data1x[9..0] result[9..0] data0x[9..0] clock OUTPUT WaveOut[9..0] inst32 inst34 sel[1..0] SinRom clock_100 address[11..0] q[9..0] clock
inst31 choice[1..0] SW[5..4] INPUT
VCC
e. 上面所用到的.mif 文件是通过专门的软件产生大家也可以通过 C 语言或者 Matlab 产生这里就不再赘述,正弦波的存储数据如下图。同理也可以产生三角波,方波的存储数据。
16 / 33
17 / 33
通过以上的试验后可以产生基本的波形,下面在介绍一下扩展部分的原理图。
8.
首先介绍利用 DDS 的原理来设计分频电路,由系统 50MHz 时钟,分出一个 20.48 kHz 的时钟信号。其实时钟信号就是上面已经产生的方波,只要将其的频率调整为 20.48KHz,占空比调为 0.5 即可。当DATA=1759219 时f=20.48KHz,输出在通过多路选择器选中就可以输出 20.48KHz 的时钟,下图就是产生 20.48KHz 时钟的原理图
输出
产生20.48KHz时钟信号的原理图
9.
对于2FSK我们用频率为5KHz,占空比为0.5的方波信号当作调制信号。当信号为1时对应的频率为 150KHz 当信号 FreqencyAdd
addrs[31..0]
result[31..0] A
dataa[31..0]
A+B
clock
CLOCK_50 B
datab[31..0]
lpm_constant1
1759219 inst39 32 inst43 lpm_rom0
addrs[31..20] CLOCK_50 address[11..0]
clock q[9..0]
inst41
18 / 33
为0时对应的频率为 100KHz。原理图为
FreqencyAdd dataa[31..0] tema[31..0] result[31..0]
A+B A clock CLOCK_10 datab[31..0] B
inst40
lpm_constant2
2147484
32
inst7
产生5KHz方波信号的原理图
通过调制信号来选择不同频率载波的原理图
10.
对于2PSK,我们所用到的调制信号是频率为5Khz,占空比为0.5的方波信号(将 2FSK 的调制信号和 SW[16]相与得到)。当信号为1时相位偏移180度,当信号为0时相位偏移 0 度。如下图所示:
lpm_rom1
tema[31..20]
address[11..0] clock inst30
FSK[9..0]
q[9..0]
CLOCK_50 FSK[9]
SW[16]
INPUT VCC PIN_V1
Parameter Value
lpm_constant4
6442451 WIDTH
32
inst51 32 BUSMUX
dataa[]
lpm_constant3
2147484 0 result[]
datab[]
1 inst50 32 inst47
sel
FSK[9]
19 / 33
2PSk 原理图
11.对于FM来说载波的频率随着输入信号的幅值的变化而变化, 所以我们将产生的调制信号乘以常数K后,当做DATA来用。因为信号的值一直在变所以DATA一直在变,因此载波的频率也随着改变。但必须保证1023×K=858994(此时对应的最大频偏为10K)或者1023×K=429496(此时对应最大的频偏为5K Hz)。所用调制信号为1KHz。
PhaseAdd Ctrlword[31..20] clock_100 dataa[11..0] A
clock
datab[11..0] B
inst5 A+B
result[11..0] Phase_0 0 12 inst24 Parameter Value WIDTH 12
BUSMUX dataa[]
0
Phase_180 2048 12 inst26 result[] datab[] 1
inst44 sel
FSK[9] AND2 2PSK SW[16] INPUT VCC inst38 lpm_add_sub0 lpm_constant8 42950 32 inst35 clock_100 clock
dataa[31..0] A
result[31..0] kk[31..0] A+B datab[31..0] B
inst42 lpm_rom2 kk[31..20] clock_100 address[11..0] clock
f m[9..0] q[9..0]
inst46
20 / 33
lpm_constant11 4190
inst57
32
BUSMUX dataa[] 0 Param eter Value WI DTH 32 result[] datab[] 1 lpm_constant10 8380 inst53 inst56 sel 32 产生1KHz的信号的原理图
VCC INPUT
SW[14]
FM的调制过程原理图
12、最后介绍一下显示模块,显示模块就是将频率控制字转换成对应的频率,然后再显示出来。此模块的代码和绘制的原理图如下图所示。
module dec2seg(clk_100,datain,seg7,seg6,seg5,seg4,seg3,seg2,seg1,seg0); input clk_100; input [31:0] datain; output [6:0]seg7,seg6,seg5,seg4,seg3,seg2,seg1,seg0; reg [3:0] tmp7,tmp6,tmp5,tmp4,tmp3,tmp2,tmp1,tmp0; always @(posedge clk_100) begin tmp7 <= datain / 32"d429760409;// 得到十兆位数据
lpm_mult0 clock_100
clock f m[9..0]
dataa[9..0] rere[41..0]
datab[31..0] result[41..0] Unsigned multiplication
inst48
dec2seg clock_100 DATA clk_100 datain[31..0] seg7[6..0] seg6[6..0] seg5[6..0] seg4[6..0] seg3[6..0] seg2[6..0] se...
推荐访问:实验报告分析和总结 实验 报告 分析