摘要:本文探讨了一种任意波形发生器的实现方法。利用DDS原理及FPGA编程技术,在一块FPGA芯片上实现整个系统时序和波形RAM的设计,采用单片机进行显示控制及频率和相位设置,上位机采用LabWindows/CVI进行软件设计,产生的任意波形数据通过串口下载到波形RAM中,实现了任意波形的输出。经测试,本系统可输出步进为10Hz、频率范围为0.01 Hz~30 MHz、频率稳定度优于10-7的正弦波。本文提出的任意波形发生器的实现方法简单,性价比高,产生的波形频率分辨率高,输出频率的转换速度快,而且频率转换时,DDS系统输出波形的相位是连续的。
关键词:直接数字频率合成;现场可编程门阵列;数/模转换器
波形发生器是一种广泛应用于电子电路、自动控制和科学试验等领域的信号源。比如电参量的测量、雷达、通信、电子对抗与电子系统、宇航和遥控遥测技术等,都需要波形发生器提供高品质的信号源,随着通信、雷达的不断发展应用,对信号源的频率稳定度、频谱纯度、频率范围和输出频率的个数以及信号波形的形状提出越来越多的要求。传统的波形发生器只能产生一些常规的信号如正弦波、方波、脉冲波、三角波等[1-2]。随着科学实验研究的需求的不断发展,传统的波形发生器在一些特定的场合已经不能满足要求,因为在许多应用研究领域中,可能还需要一些不规则的信号用于系统特性的研究,这就需要能产生现场所需要波形的任意波形发生器。任意波形发生器的实现方案主要有程序控制输出、DMA输出、可变时钟计数器寻址和直接数字频率合成(DDS)[1-4]等多种方式。现代雷达的频率源普遍采用直接数字频率合成方式,这种方法生成的波形具有严格的相干性、可重复性、高稳定性和可编程的优点,能够方便地实现波形参数捷变以及产生任意复杂波形,能满足现代电子战环境中对雷达抗干扰和强生存能力的需要。本文对DDS进行了性能分析,详细介绍了采用FPGA(现场可编程门阵列)[5]芯片EP1C3T144C8构成任意波形信号发生器的硬件电路结构及关键参数设计,并对系统测试结果做出分析。
1 任意波形发生器的设计
1.1 传统型任意波形发生器的原理
传统型任意波形发生器的原理框图如图1所示。图1中的计数器实际上是一个地址发生器,计数器的触发时钟脉冲由一个频率可以控制的频率发生器产生,通过改变频率发生器的频率设置值,实现调整计数器产生的地址变化速率,从而改变输出的任意波形的频率。计数器产生的地址码提供读出存储器中波形数据所需要的地址信号,波形数据被依次读出后送至高速D/A转换器,将之转变为模拟量,经低通滤波器后输出所需的波形。
传统的任意波形发生器采用可变时钟和计数器寻址波形存储器表,此方法的优点是产生的地址连续,输出波形质量高。但它取样时频率较高,对硬件的要求也较高,而且常需多级分频或采用高性能的锁相环,但分频式的任意波形发生器频率分辨率低,锁相式的任意波形发生器频率切换速度慢。

图1 传统型任意波形发生器的原理框图
1.2 基于DDS的任意波形发生器的原理
DDS即直接数字频率合成是直接从“相位”的概念出发进行频率合成的。DDS的原理电路框图如图2所示。相位累加器由N位加法器与N位累加寄存器级联构成。每来一个时钟脉冲fs,加法器将频率控制字K与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。累加寄存器将加法器在上一个时钟脉冲作用后所产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。由此可以看出,相位累加器在每一个时钟脉冲输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率[1-2]。
1.3 基于FPGA的DDS实现
用FPGA设计DDS电路比采用专用DDS芯片更为灵活。因为,只要改变FPGA中的ROM数据,DDS就可以产生任意波形,因而具有相当大的灵活性。相比之下,FPGA的功能完全取决于设计需求,可以复杂也可以简单,而且FPGA芯片还支持在系统现场升级,虽然在精度和速度上略有不足,但也能基本满足绝大多数系统的使用要求。另外,将DDS设计嵌入到FPGA芯片所构成的系统中,它的系统成本并不会增加多少,而购买专用芯片的价格则是前者的很多倍。因此,采用FPGA来设计DDS系统具有很高的性价比。
从DDS组成框图可以看出,实现DDS所需要的环节大部分都是数字电路环节,而用FPGA可以非常方便地进行数字电路的设计,且可现场编程进行电路的修改,这里可将DDS的核心单元相位累加器和波形存储器采用FPGA来实现。本设计选用了一款性价比很高的ALTERA公司的CYCLONE系列FPGA芯片EP1C3T144C8,它的组成框图如图3所示。

图2 DDS的原理框图
在DDS系统中, FPGA的主要作用是:保存频率字、保存相位字、构成相位累加器、产生波形RAM的地址、形成波形RAM等。用FPGA设计DDS的核心部分分为如下几个模块:相位累加器SUM、相位调制器PM、相位寄存器PREG、频率寄存器FREG、正弦查找表SINROM及COSROM、任意波形数据寄存器RWREG、输出选择器MUX[1-2]。
整个DDS模块共用一个时钟CLK,以用来同步各个模块的运算速度。该系统可实现双通道输出,一路输出零度正弦波,另一路输出任意波形或移相的正弦波。其中相位累加器SUM是一个带有累加功能的32位加法器,它以设定的32位频率控制字k作为步长来进行加法运算,当它的和满时,记数器清零,并进行重新运算。频率寄存器FREG是一个32位寄存器,相位寄存器PREG是一个10位寄存器,它接收单片机送来的频率和相位控制字数据并进行寄存,当下一个时钟到来时,输入寄存的数据,对输出波形的频率和相位进行控制。正弦查找表SINROM及COSROM是DDS的关键部分,设计时首先需对正弦函数进行采样,接着将采样的结果放到ROM模块的对应存储单元中,每一位地址对应一数值,输出为8位,任意波形寄存器RWREG接收上位机送来的任意波形数据数据并进行寄存,输出选择器MUX是实现任意波形与移相的正弦波的切换。整个系统各模块是在同步时钟信号CLK的控制下协调工作的。
图4是输出频率为10 k Hz的正弦波仿真波形时序图。从图4可以看出,仿真与实际输出情况吻合,输出波形的频率与频率控制字对应,输出波形的相位与相位控制字对应,输出波形的幅值与ROM中的波形数据相对应,即DDS的主体已基本达到设计要求。

图3 在FPGA芯片上设计的DDS
1.4 整体电路组成

图4 输出频率为10 k Hz的正弦波仿真

图5 系统整体结构框图
系统整体结构框图如图5所示[1-2,6]。系统是一个主从式的虚拟仪器系统,在硬件上由主机和从机共两部分组成。主机为一台PC机,安装有用Lab Windows/CVI开发的终端软件。完成任意波形数据计算、波形参数设置和波形数据的下载。从机以AT 89C52单片机和FPGA为核心,还包括轻触式键盘和LCD显示等智能化设备以及高速DAC转换器和相应的滤波功放等器件。主机与从机之间采用RS232串口通信方式。通过主机设定波形数据,控制从机波形输出。从机部分完成数据累加和数据输出、设置及显示输出波形参数、D/A变换以及滤波。该系统使用4×4矩阵键盘和8位LED数码管来设置及显示输出波形参数。首先对单片机进行初始化设置,然后通过按键选择进入不同模式,若选择正弦波,则进入频率和相位的数据输入状态,输入数据送到LED显示出来,并为当前的频率/相位输出值。按下数据发送键,频率值转换成频率控制字送进FPGA,再从其输出想要的任何频率值的正弦波。在按下发送键后,键盘被锁,此时只有按下修改键才能再次输入频率、相位值。若选择任意波,通过串口从上位机下载任意波形数据到RAM,再从RAM读取任意波形数据送给FPGA进行处理。
1.5 上位机软件设计
任意波形发生程序软件流程如图6所示。波形数据可以通过以下3种方式生成:输入波形的数学表达式及其约束;输入图形,如手动绘制;编辑组合标准函数波形及已有波形。
任意波形发生器模块的仪器驱动器软件开发平台采用美国NI公司的Labwindows/CVI,该集成化开发平台是面向计算机测控领域的仪器软件开发平台,它以ANSIC为核心,采用交互式编程,库函数丰富,功能强大。在此平台上开发的任意波形发生器仪器驱动器,界面美观、操作简单。该软件主要包括波形创建、波形显示及波形编辑3个模块,分别用以生成、显示和编辑波形数据。
任意波形发生程序完成的功能包括允许用户输入函数表达式产生波形;建立常用信号库,用户可对各种常用波形进行任意组合,形成混合波形;灵活配置波形的频率、幅度、初相;可对波形进行显示、储存。
2.1 系统测试
本设计提出了一种在一块FPGA芯片上完成整个DDS系统及串口数据收取模块,实现任意波形输出的方法,该系统结构简单,性价比高,还可以很方便地升级实现频率、相位调制功能,产生的波形可以达到很高的频率分辨率,输出频率的转换速度快,而且频率转换时,DDS系统输出波形的相位是连续的。经测试,本设计基本达到了预期效果,可输出步进为10 Hz的频率为0.01 Hz~30 MHz的正弦波,频率稳定度优于10-7。还可输出0.01 Hz~20 k Hz的任意波。用示波器观察时几乎无失真。但输出的正弦信号频谱纯度较差。系统测试所用主要仪器如表1所示,该波形发生器输出的几种基本的波形测试结果如图7所示。
2 系统测试及误差分析

图6 软件流程
表1 主要测试仪器

该信号发生器产生频率可调节的输出波形,用HM8021-4频率计对输出信号的实际输出频率进行了测量,而数码管显示的值为实际输入预置值,两者比较即可得出输出精度。
输出频率的测试数据及误差如表2所示。输出相位的测试数据及误差如表3所示。

图7 波形发送器输出的几种基本波形测试图
表2 输出频率的测试数据及误差

表3 输出相位的测试数据及误差

2.2 误差分析
由fDDS=K*fc/2N,其中K为DDS输入频率控制字,N为相位累加器字长。fc为DDS时钟频率,由晶体振荡器提供,稳定度很高,可忽略fc的误差,则输出频率主要取决于频率控制字K,而K是由单片机通过软件实现算法产生的,是以二进制方式传给DDS,因相位累加器字长的限制必定产生误差,所以可通过增加相位累加器字长减小误差,但不能完全克服。
在测试中,被测正弦信号会不可避免地混入噪声,噪声信号叠加于正弦信号之上,使正弦波的过零点发生偏移,使频率计测量结果出现偏差。
DDS的输出频谱杂散[7-10]主要原因有相位截断误差、电压幅度量化误差、参考时钟噪声、D/A转换器的非线性误差,以及D/A转换的瞬间毛刺、数字噪声馈通以及时钟的泄漏都是导致频谱劣化的因素,它们为系统的输出频谱增加了背景噪声和杂散。
为了改善DDS系统频谱质量,可以尽量增大波形存储器的容量以提高信噪比,即增加了有效字长,从量化观点看,设正弦波的采样点值用D位二进制表示,则它的信噪比S/N近似为6.02D+1.75 dB,即幅值量化的信噪比随着量化位数的增加而提高。增大波形存储器的容量可以有两种方法[8-10],一是直接增大波形存储器的绝对容量,但是这种方法受到硬件条件的限制,不可能无限制地增大;二是通过压缩存储数据来等效增大存储器的数据寻址位。
随着硬件水平的不断提高,通过加大存储器的容量以及数据位数,DDS系统由相位截断和数据量化所引起的杂散噪声可非常容易做到-70 d B以下的理论值。在高频、超高频DDS电路中,D/A的非线性才是影响DDS频谱质量的决定因素。要想减少DA非线性的影响,一般只能通过选择D/A质量来降低它的影响。