|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、DDS技术简介
. A1 o' Q W/ l2 D7 x8 p●随着电子技术的不断发展,传统的频率合成技术逐渐不能满足人们对于频率转换速度、频率分辨率等方面的追求,直接数字频率合成技术应运而生。
+ Q4 W7 W; L, \* k* E3 ]●直接数字频率合成技术(DDS) 是把一系列数据量形式的信号通过D/A转换器转换成模拟量形式的信号合成技术。DDS具有很多优点,比如:频率转换快、频率分辨率高、相位连续、低功耗、低成本与控制方便。
2 M B4 d+ e7 w, a●DDS技术满足了人们对于速度稳定性的需求,但是在一些控制较为复杂的系统中,DDS专用芯片不能很好的贴合要求。利用现场可编程门阵列(FPGA)实现DDS具有很大的灵活性,基本能满足现在通信系统的使用要求。6 t! a1 x9 D8 L; Y
5 G) C9 m4 m7 A/ d2、DDS结构原理
9 T ]2 H; \- d5 J( }3 _2.1 基本结构
) U: r/ I9 m6 f# o' c5 W; qDDS基本结构框图主要由参考频率源、相位累加器、ROM查找表、DAC转换器、低通滤波器等构成。
- e8 ?2 i# \% m 7 k' ?0 y7 n* V. K; e7 \1 K# |
相位累加器以一定的步长做累加, 而波形函数存储在ROM查找表中, 将相位累加器输出的相位值作为地址,寻找存储在ROM查找表中的波形函数的幅度值,从而完成相位到幅值的转换。其中,参考频率源一般是一个晶体振荡器,要求具有高稳定性,用于DDS中各部件之间的同步。! W5 ^6 ~7 J; B
5 o. w& p, t0 Q: i7 ]& T& I2.2 基本原理
2 Z/ J# j M+ t% O& I
% F, X- R% ^5 f3 N2 y. k0 d上图为DDS Core结构图,∆θ是相位增量(对应图1中的频率控制字K),B∆θ 为相位累加器的位数,clk是参考时钟(对应图1中的参考频率源),A1、D1构成积分器(相位累加器),θ(n)是相位累加器输出的相位,Q1为量化器,用于将相位累加器位数与查找表地址之间的匹配,ϑ(n)为查找表输入地址,Bϑ(n) 为查找表输入地址位数,T1为查找表。
4 l& _$ u9 @0 w; q下面介绍DDS设计过程中常用到的公式,主要是输出频率公式及其变形。+ a4 X6 ?! w) D+ v
# T- {; a. H" I+ M3 A2 R9 E
7 t/ f6 J; S! |; R+ C8 P3、基于FPGA的 DDS实现* H$ m& z+ R. h/ p- W
For example:
$ f6 G# ?6 e5 J8 d$ I8 [9 [8 s5 ?5 q设计一个参考时钟为100MHz,频率分辨率要求能够达到0.03Hz,输出sin信号频率为5.00000005MHz、查找表地址12位;1 O) W* u% H0 b& X
理论分析: t' P2 g& @- f7 K+ Q
已知频率分辨率∆f与参考时钟f_clk,带入相位累加器位数公式计算, ~2 K* G% m9 r/ G+ \% l2 p$ x2 n
B∆θ = 31.634318
3 l8 Z5 `; F3 _由于位数为整数,取整数32,所以实际的频率分辨率为
* N; b( _% W4 h- {* b7 y/ u6 f ∆f = 0.023283064365386962890625Hz% H- `+ R/ S* C0 s; Y! H
将其带入相位增量公式计算,取整数* S+ c& g2 l |6 q
∆θ = 21474836694.7483648≈21474836
: d1 _' h8 a7 x6 y相位累加器输出32位,而查找表输入地址为12位,取相位累加器高12位作为查找表输入地址
( o6 C! p0 a0 O4 z* W6 w2 u
* P p+ B5 o! U) h3.1 利用RTL实现DDS
4 J: z, c) v0 \! D8 R& t使用matlab产生sin(θ)数据,θϵ[0,π],点数为2^12=4096,并保存在FPGA的memory中。
+ o* A) y9 ]1 j3 H6 Q/ a5 Iwid = 12;3 l" [! O0 U* l1 ~5 P4 |
len = 2^wid;
% _; V' E. I M6 g. r( r- ~2 \, pamp = 10000;. l. x0 X; c' T$ o
t=0:2*pi/len:2*pi - 2*pi/len;2 K/ T5 @3 e& H v' K+ W7 E
y = round(sin(t)*amp);' |6 H0 C' @4 l. |8 S
plot(y);+ o8 ~0 M6 W/ d+ ?
相位累加器就是一个积分器,很容易用FPGA实现。最终FPGA仿真结果如下,clk为参考时钟,phase为相位累加器输出,addr为查找表地址,cos_i、sin_q为信号输出。
4 Y" j4 S% r9 E/ [3 l
! v1 ?' O) o4 g$ J. q |
|