摘 要: 利用LabView图形化虚拟仪器开发平台,设计一个基于FPGA的DDS(直接数字频率合成)信号发生器。通过FPGA的下位机和LabView上位机的配合使之能够输出多种固定波形和任意波形,在不用改变硬件平台的情况下,能够随时对系统进行重构或拓展开发。
关键词: LabView;FPGA;DDS
0 引言
信号发生器是一种常用的信号源,广泛应用于电子电路、自动控制和科学实验等领域[1],并在电路实验和设备检测中具有十分广泛的用途。目前,实验室的信号发生器多采用购买的精密仪器,不但价格昂贵,而且不能发挥全部功能,造成资源浪费。本课题基于虚拟仪器开发平台LabView设计了任意波信号发生器,利用这种图形化的编程语言,用户只需通过上位机即可实现任意波形载入以及信号发生器的控制,摆脱了传统仪器独立使用、手动操作的模式[2]。
1 DDS的基本概念
DDS是根据正弦函数的产生,从相位出发,由不同的相位给出不同的电压幅度,即相位——正弦幅度变换,最后滤波、平滑输出所需要的频率[3]。典型的DDS原理方框图如图1所示。它包括如下基本的部件:相位累加器、波形存储器、D/A变换器、低通滤波器[4]。
相位累加器类似于一个简单的计数器,由加法器与累加寄存器级联构成,它将相位寄存器输出端反馈到加法器输入端,实现累加功能[4]。每来一个时钟脉冲,频率控制字与相位累加器累加,得到波形相位值,这些数据作为波形存储器的取样地址,在ROM中进行波形相位—幅度的转换,并输出数字化的波形。然后ROM输出给D/A变换器,将数字量化的波形幅度值转换成一定频率的模拟信号。最后,D/A输出的台阶信号再经过滤波器平滑以得到精确连续的信号波形。
下面建立DDS输出频率与其他一些参数之间的基本关系[5]:
fc——参考时钟频率,Tc=1/fc;
fo——输出频率,To=1/fo;
K——频率控制字。
设累加器的长度是N位,通常不可能使用全部的N位作为存储相位信息来控制ROM产生一整周正弦波的输出,比如说使用M位(N位中的最高的M位,M<N,即相位截断)。完成一整周的正弦波输出需要经过2π/(K×(2π/2N))个参考时钟周期,即2N/K个周期。因此可以得到输出频率的周期为:。
最高的基波合成频率受奈奎斯特采样定律的限制(至少每周两次抽样才能重构波形),所以有:,K=2N-1。
2 系统设计方案
本设计利用DDS原理,采用Verilog语言并在QuartusⅡ9.1环境下实现了对FPGA部分的设计和编程,并且在计算机上使用LabView设计一个用于控制下位机的面板。
2.1 总体设计框图
总体框图如图2所示,LabView的上位机界面主要用于实现波形的选择、调整以及任意波形的绘制,并且实现对于下位机硬件部分FPGA以及外扩电路的控制。基于FPGA下位机的硬件部分,主要包含了DDS模块以及外围电路部分。在整个系统工作的过程当中,外部晶振提供了USBFIFO2.0模块、NIOS II内核模块、相位累加器模块、存储器模块以及DA模块的时钟信号。
2.2 基于LabView上位机信号发生器设计
LabView是一种图形化的编程语言和开发环境,它结合了图形化编程方式的高性能与灵活性,开发周期短,运行速度快[6]。用户可以随心所欲地根据自己的需求,设计仪器系统,满足多种多样的应用需求。因此,用LabView对任意波信号发生器的设计是一种最理想的方法,可以在一定硬件基础上获得更多的功能,使得整个系统更加紧凑[7]。
图3为一个波形信号发生器的前面板设计,该前面板可以同时实现固定波形以及任意波形的调整功能。在主程序面板上,用户可以通过鼠标和键盘控制面板上的开关和按钮,从而实现对信号发生器的控制。
前面板左边部分为波形显示模块,通过右边部分对采样信息和频率进行调节,对波形类型的选择,并可对波形幅值、垂直偏置进行调整,最终将波形显示出来。当用户需要选择任意波形时,只需将布尔开关选择到任意波形,再通过鼠标点击在波形绘制面板上进行手工绘制即可。当按下鼠标左键时,布尔灯亮,拖动鼠标,显示界面会按照使用者绘制的鼠标图形进行采样取值,X轴和Y轴分别显示波形幅值和采样的时间。绘制完成后点击停止按钮,跳出循环,结束运行程序。其中CLEAR按钮的作用是清除信号,此控件只有想要改变信号发生器的初始相位时方能用到,在VI程序运行过程中,如果用户想要改变发生器的初始相位,点击该按钮,所画的波形图则被清除。
波形信号发生器程序框图如图4、图5所示,在while循环中嵌套一个case结构,当在前面板中布尔开关选择固定波形时,case结构为真,如图4;当开关选择任意波形时,case结构为假,如图5。
图4中,后面板的固定波形程序设计是一个布尔型输入条件结构,相当于IF ELSE结构,存在0、1、2、3四个分支,分别代表三角波、锯齿波、正弦波、方波四种波形。体现在前面板是利用一个下拉列表来选择多种不同的波形。
根据课题设计所要实现的功能,任意波信号发生器采用手绘的方法,波形绘制功能的程序框图如图5所示。
手绘任意波形功能的程序采用了事件结构(Event Structure)技术,所谓事件结构就是在某种情况、某个时间发生某事件的时候给出一个提示。事件的检测和处理一般是连续进行的,因此,事件结构也应该是连续被调用的,常见的事件结构是while循环+事件结构。该手绘任意波形的过程中定义了几个用户事件:鼠标移动、鼠标释放、鼠标按下、值改变。下面分别介绍各事件分支的设计功能:
[0]事件分支:鼠标移动,坐标至XY映射,采集鼠标拖动时产生的轨迹点,输入给条件结构中一个数组簇里,该条件结构嵌套在事件结构中,最后在波形图上输出采集到的波形。
[1]、[2]事件分支:鼠标释放,鼠标按下,在局部变量布尔上增添一个布尔开关,当鼠标按下时,布尔输入是T真常量,布尔灯亮,程序开始采集。当鼠标释放,布尔输入为F假常量,布尔灯灭,程序采集结束。
[3]事件分支:“clear”值改变,在事件结构中只加入一个cancel控件,在前面板中命名为clear,当按下clear按钮时,无输入,波形输出不显示,实现清除功能。
3 实验结果及结论
按照表1所设置的参数设置固定波形信号发生器,以正弦波举例,得到的波形如图6所示。
通过鼠标手工绘制的任意波形如图7所示。
本设计在LabView2012版本的平台下实现一个任意波信号发生器,具有设计简单、灵活性强的优点,彻底打破了传统仪器由厂家定义、用户无法改变的模式[8]。随着网络和虚拟技术的不断发展,虚拟仪器不仅是21世纪仪器发展的方向,而且必将逐步取代传统的硬件化电子仪器,使成千上万种传统仪器都融入计算机体系中[9]。
参考文献
[1] 张永瑞,刘振起,杨林耀,等.电子测量基础[M].西安:西安电子科技大学出版社,2004.
[2] 樊睿.基于LabView的虚拟波形发生器的设计[D].西安:西安理工大学,2010.
[3] 白居宪.直接数字频率合成[M].西安:西安交通大学出版社,2007.
[4] 张萍,高海霞,柴常春,等.用于DDS系统相位累加器的加法器设计[J].现代电子技术,2007,30(13):49-50.
[5] 胡力坚.基于DDS任意波发生器设计[D].西安:西安电子科技大学,2009.
[6] 刘畅,张立成,蒋宏.基于LabView和SOPC的任意波形发生器设计[J].电子测量技术,2011,34(1):66-68,81.
[7] 宫琴,陈曦,刘京雷,等.新型耳穴检测系统的研制[J].仪器仪表学报,2009,30(10):2213-2218.
[8] 秦丰,狄瑞坤,欧阳珍.基于图形化编程语言LabView的虚拟仪器开发[J].机床与液压,2004(8):107-109.
[9] 李震,柯旭贵,汪云祥.虚拟仪器的发展历史,研究现状与展望[J].安徽工程科技学院学报,2003,18(4):1-4.