- LocCloud
-
什么叫DDSx0dx0ax0dx0a直接数字式频率合成器DDS(Direct Digital Synthesizer),实际上是一种分频器:通过编程频率控制字来分频系统时钟(SYSTEM CLOCK)以产生所需要的频率。DDS 有两个突出的特点,一方面,DDS工作在数字域,一旦更新频率控制字,输出的频率就相应改变,其跳频速率高;另一方面,由于频率控制字的宽度宽(48bit 或者更高),频率分辨率高。x0dx0ax0dx0aDDS工作原理x0dx0ax0dx0aError! Reference source not found. 是DDS 的内部结构图,它主要分成3 部分:相位累加器,相位幅度转换,数模转换器(DAC)。x0dx0ax0dx0a图 1,DDS的结构x0dx0ax0dx0a相位累加器x0dx0a一个正弦波,虽然它的幅度不是线性的,但是它的相位却是线性增加的。x0dx0aDDS 正是利用了这一特点来产生正弦信号。如图 2,根据DDS 的频率控制字的位数N,把360° 平均分成了2的N次等份。x0dx0ax0dx0a图2,相位累加器原理x0dx0a假设系统时钟为Fc,输出频率为Fout。每次转动一个角度360°/2N, 则可以产生一个频率为Fc/2N 的正弦波的相位递增量。那么只要选择恰当的频率控制字M,使得 Fout / Fc= M / 2N,就可以得到所需要的输出频率Fout,x0dx0aFout = Fc*M / 2N,相位幅度转换通过相位累加器,我们已经得到了合成Fout 频率所对应的相位信息,然后相位幅度转换器把0°~360°的相位转换成相应相位的幅度值。比如当DDS 选择为2V p-p 的输出时,45°对应的幅度值为0.707V,这个数值以二进制的形式被送入DAC。这个相位到幅度的转换是通过查表完成的。x0dx0aDAC 输出代表幅度的二进制数字信号被送入DAC 中,并转换成为模拟信号输出。注意DAC 的位数并不影响输出频率的分辨率。输出频率的分辨率是由频率控制字的位数决定的。x0dx0ax0dx0a直接数字式频率合成技术(DDS)是一种先进的全数字频率合成技术,它具有多种数字式调制能力(如相位调制、频率调制、幅度调制以及I/Q正交调制等),在通信、导航、雷达、电子战等领域获得了广泛的应用。在项目中光栅传感系统高频并行解调算法的FPGA实现我们的光纤通信模块用到DDS。我们通过FPGA 实现了DDS的功能。x0dx0a 1971年,美国学者J.Tierney等人撰写的《A Digital Frequency x0dx0ax0dx0aSynthesizer》一文首次提出了以全数字技术,从相位概念出发直接合成所需波形的一种新的频率合成原理。限于当时的技术和器件水平,它的性能指标尚不能与已有的技术相比,故未受到重视。近10年间,随着微电子技术的迅速发展,直接数字频率合成器(Direct Digital Frequency Synthesis简称DDS或DDFS)得到了飞速的发展,它以有别于其它频率合成方法的优越性能和特点成为现代频率合成技术中的佼佼者。具体体现在相对带宽宽、频率转换时间短、频率分辨率高、输出相位连续、可产生宽带正交信号及其他多种调制信号、可编程和全数字化、控制灵活方便等方面,并具有极高的性价比。 x0dx0ax0dx0a DDS基本原理及性能特点x0dx0a DDS的基本原理是利用采样定理,通过查表法产生波形。DDS的结构有很多种,其基本的电路原理如图所示。x0dx0ax0dx0a相位累加器由N位加法器与N位累加寄存器级联构成。每来一个时钟脉冲fs,加法器将频率控制字k与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。累加寄存器将加法器在上一个时钟脉冲作用后所产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字k相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。由此可以看出,相位累加器在每一个时钟脉冲输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率。x0dx0ax0dx0a 用相位累加器输出的数据作为波形存储器(ROM)的相位取样地址,这样就可把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出,完成相位到幅值转换。波形存储器的输出送到D/A转换器,D/A转换器将数字量形式的波形幅值转换成所要求合成频率的模拟量形式信号。低通滤波器用于滤除不需要的取样分量,以便输出频谱纯净的正弦波信号。x0dx0a x0dx0a DDS在相对带宽、频率转换时间、高分辨力、相位连续性、正交输出以及集成化等一系列性能指标方面远远超过了传统频率合成技术所能达到的水平,为系统提供了优于模拟信号源的性能。x0dx0ax0dx0a如何用FPGA实现x0dx0a 相位累加寄存器是DDS的核心,在我的设计中相位寄存器的字长为23位,之所以选择23位是因为项目要求频率步进可以达到1Hz,我们BASYS板上有25MHz的晶振,我们将其三分频为8.333MHz,我们相位寄存器字长23位则频率步进最小值为F/2N =8.333*106 /223≈1Hz( 当然根据项目实际需要我们今后会通过外接晶振及DCM配合使其=1 Hz。相位步进量字长为18位,最高输出频率为fmax =8.333*106 /223 *218 =260416 Hz。x0dx0a 波形存储器用SPATAN3E内部RAM实现,通过core generator 生成ROM,我们的设计中用ROM存取256个点,这样到频率达到200kHz时每个周期输出可达到21个采样点,若是存512个点那么就能达到42个点,具体存多少个点根据后续要求,及芯片本身的内部资源决定。用PC机的VC编写“正弦信号查找表”,将其写入ROM的初始化文件。当然可以把其他任意周期性波形数据写入ROM,道理想同。x0dx0a 生成“正弦信号查找表”有以下步骤:首先,确定每周期采样点数,这里256个点,计算各采样点的数值。归一化,由于我们后续须将数字量通过DAC输出,所以计算所得数值的值域转化为[0,1],以方便转化为DAC对应的数值,由于8位的DAC的输出值最高为255,所以须将得到的数值乘以255。x0dx0a 这里设计的相位累加寄存器,可根据实际需要产生无限周期个波形或1024以内个周期波形(periodn为10位)增加了设计的功能。x0dx0a 程序说明x0dx0a dds_rom是储存波形的储存器;x0dx0a phaseregister是相位累加寄存器;x0dx0a fredevider3是三分频电路;x0dx0a sch_top是dds芯片顶层文件;x0dx0a 工程dds_version1是该设计的工程文件;x0dx0a 文件夹sin_test是生成正弦信号查找表的源文件。x0dx0a 测试x0dx0a 在这个DDS 的设计过程中我们在BASYS板上跑了程序,程序与这个在I/O 端口方面有少许差别,需将源程序I/O口作了一下修改Clk为BASYS板上的50MHz,x0dx0aDout为LD0到LD7,在实际应用中将其引致I/O口外接D/A即可产生变化的电压值(波形),这里通过LED是为了看结果直观。Reset为sw7,reset为"1"时DDS停止工作,并把相应寄存器置零,具体见代码。Sw6,sw5用于输出波形周期选择,为"00"时一直输出波形,为"01","10","11"时分别输出1,2,3个周期波形。Sw4到sw0为相位步进量(频率控制字),对应于1hz到31hz。