任意信号发生器(精选7篇)
任意信号发生器 篇1
摘要:以单片机为核心设计了一个低频函数信号发生器。信号发生器采用数字波形合成技术, 通过硬件电路和软件程序相结合, 可输出自定义波形, 如正弦波、方波、三角波及其他任意波形。波形的频率和幅度在一定范围内可任意改变。介绍了波形的生成原理、硬件电路和软件部分的设计原理。介绍了单片机控制D/A转换器产生上述信号的硬件电路和软件编程、DAC0832 D/A转换器的原理和使用方法、AT89C52以及与设计电路有关的各种芯片、关于产生不同低频信号的信号源的设计方案。该信号发生器具有体积小、价格低、性能稳定、功能齐全的优点。
关键词:低频信号发生器,单片机,D/A转换,任意波形
0 引 言
波形发生器亦称函数信号发生器, 作为实验用信号源, 是现今各种电子电路实验设计应用中必不可少的仪器设备之一。目前, 市场上常见的波形发生器多为纯硬件搭接而成, 且波形种类有限, 多为锯齿、正弦、方波、三角等波形。如555振荡电路便是产生正弦波、三角波和方波可取的途径之一。但是这种电路存在波形质量差、控制难、可调范围小、电路复杂和体积大等缺点。
利用单片机通过程序设计方法来产生低频信号, 其频率底线很低, 具有线路相对简单、结构紧凑、体积小、价格低廉、频率稳定度高、抗干扰能力强、用途广泛等优点。
现介绍利用AT89C52单片机和2片DAC0832 D/A转换器组成的数字式低频信号发生器, 可输出任意波形。波形信号频率范围为1 Hz~10 kHz, 信号电压范围为-5 V~+5 V, 并且输出电压幅值可以在0 V~5 V范围内调节。输出信号非线性失真低于0.1%, 频率稳定度达0.1%/h。
1 工作原理
任意波形函数发生器采用直接数字合成技术, 可以提供各种常用波形, 其输出波形是通过单片机系统建立的。工作过程为:在一个单片机的存储器中存入波形数据, 当要产生波形输出时, 所存信息经D/A转换器形成模拟量, 波形再通过一个放大器来调整驱动和传输能力。由于该信号发生器以模拟量形式输出的波形是在单片机内部存储的数字信号的控制下形成的, 所以在构建波形时, 具有时域、频域和视觉上的灵活性[1]。
任意波形函数发生器是依据存储器中的数值来构建波形的, 在存储器的数据中定义的一个波形的起始点与结束点之间的采样点数决定了波形的频率。输出波形频率f0由下式决定:
undefined
式中n1、n2为所要构建波形的第一个和最后一个采样点, 在存储器中的对应位置序号fs为采样频率。通过改变或重新设置这个参数即可得到不同频率的输出波形。
现以正弦波为例, 设要产生的正弦波为U (t) =Umsin 2πft, 周期T=1/f, 我们把每个周期平均分成P个区间。每个区间间隔为ΔT=T/P, 在ΔT区间内, U (t) 的值为常数。即认为:
0≤t<ΔT 时, U (t) =U (0) ;
ΔT≤t<2ΔT时, U (t) =Umsin (2πf×ΔT) ;
2ΔT≤t<3ΔT时, U (t) =Umsin (2πf×2ΔT) ;
︙
即:
undefined
由于
undefined
所以
undefined
通常正弦信号峰值电压恒定, 如设Um=225 mV, 我们可以用32个字节的存储器来储存i等于不同数值时的电压U (t) 或U (i) , 最小分辨率为1 mV。由于正弦信号4个象限内数值的对称性, 若把一个周期分成P=128等份, 但只有32个独立的数值, 因此只需32个字节的存储器就够了。
由此看出, 输出信号的频率取决于ΔT, 改变ΔT即可得到不同的输出频率, 并且输出频率的正确度基于单片机晶振频率的正确度和稳定度。而各区间的振幅值以数字形式存于单片机的内存中, 加上D/A转换器的稳定性, 因此输出信号的幅频特性很好。其输出信号的非线性失真低于0.1%。
2 硬件电路的实现
电路主要由AT89C52单片机产生所需输出信号的数字量, 再由D/A转换器将数字量转化为模拟电流输出, 通过运放转化为模拟电压输出。
因为D/A转换器的最大输出电压是由其输入的基准电压来控制的, 只要能控制D/A的基准电压便可以控制输出幅度, 因此只需在D/A转换器基准电压上加上一个变位器, 便可以方便地改变其输出信号的幅度。设计用2片DAC0832来完成输出信号的工作, 第1片D/A用来输出信号, 第2片D/A用来控制第1片D/A的基准电压, 其中用P1口作为2片D/A的数据总线[2]。电路框图如图1所示。
2.1 AT89C52单片机简介
AT89C52是一种低功耗、高性能的片内含有8 kB可编程/可擦除只读存储器的8位CMOS微控制器, 使用高密度、非易丢失存储技术制造, 并且与80C51的引脚和指令系统完全兼容。芯片上的Flash存储器允许在线编程或采用通用的非易丢失存储编程器重复编程。
AT89C52将具有多种功能的8位CPU与Flash存储器结合在一个芯片上, 为很多嵌入式控制应用提供了非常灵活而又价格适宜的方案, 其性能价格比远高于8751。89C52的主要性能包括:片内有8 kB可在线重复编程的快闪擦写存储器;宽工作电压范围VCC可为2.7 V~6 V;全静态工作可从0 Hz至33 Hz;程序存储器具有3级加密保护; 32条可编程I/O线;3个16位定时器/计数器;中断结构具有8个中断源;21个特殊功能寄存器;1个可编程全双工串行通道;空闲状态维持低功耗和掉电状态保存存储内容[3]。
2.2 D/A转换器连接电路和运算放大电路的设计
设计中2片D/A的输出均采用双极性电压输出, 运算放大器选用的是LF358, 电路如图2所示。第1级DAC0832 D/A转换器将P1口输出的数字信号变成连续变化的电流信号, 这个电流信号经2个集成运算放大器组成的双极型电压输出电路变成电压信号输出。电压变化范围为-5 V~+ 5 V, 作为第2级DAC0832 D/A转换器的基准电压。P1 口的8位二进制输出信号再经第2级DAC0832 D/A转换器及集成运放输出, 使输出电压信号的精度更高[4]。
2.3 与AT89C52单片机的接口
从DAC0832内部结构中得知, 其前级输入锁存器和DAC寄存器可允许数据进入其中, 亦可锁定数据, 拒绝新数据进入。这取决于内部信号LE1和LE2各自受外部信号控制的情况。据此可归纳出3点:
1) 单缓冲方式:LE2和LE1受控于同一组外部信号, 2级寄存器同时锁存数据。
2) 双缓冲方式:LE2和LE1分别受不同信号控制, 2级寄存器先后接收数据。
3) 直通方式:LE1和LE2均恒为1, 外来数据直接通过前2级到达D/A转换器。
设计采用的是直通方式[5]。
2.4 键盘控制和显示电路
按键是系统的输入设备, 是控制单片机的唯一途径。设计中共使用了16个按键, 3×5键盘和一个复位键。3×5键盘中包含了0~9的数字键和多个波形选择键。由于功能键较多, 所以在输入控制命令时非常方便。
在设计要求中还选择将键盘的输入内容显示出来。而这些信息在信号输出时不需时刻改变, 可由单片机的串行通信口输出显示数据。在设计中, 显示采用的是5位7段显示器显示, 显示的数据由单片机的并行口P0输出, 采用动态显示的方法, 以P2口中的低5位 (P2.0~P2.4) 作为位选。显示器使用的是共阴极LED数码管, 并采用74LS07同相驱动器。按键消除抖动的处理采用软件方法。原理是:扫描键盘后, 延时10 ms, 再次扫描键盘, 确认有键按下, 跳到读键值的子程序, 等待按键的动作完成, 然后才继续执行其他操作。
3 软件设计
单片机内部数据只有0、1之分, 所产生的信号也都是离散信号。为了能够让单片机输出所需的数字信号, 我们采用对信号采样、量化的方法来实现由单片机产生所需信号。在设计中, 对正弦信号进行采样, 通过查表来实现输出不同的幅度值。采样点越密, 信号失真度也就越小。对于三角波, 就是实现2次循环, 通过由最小值到最大值和由最大值到最小值的循环来实现三角波的输出。方波的输出时间间隔由键盘输入, 然后由软件通过定时、计数器来控制。因此, 通过控制不同的计数初值就可以控制整个方波信号的频率, 其计数初值=65 536-输入值。对于其他波形, 程序根据输入频率值计算出波形的输出时间参数, 即波形中每2点的时间间隔C。程序设定寄存器T0作定时器, T1作计数器。当计算出C≤65 536时, CPU只使用T0。当C>65 536时, CPU将T0和T1串联起来使用。T0/T1被调用后开始计数, 总定时时间到, 输出一个点, 反复循环, 从而在一个周期内输出完整波形。
设计中软件分为初始化模块、显示模块、键盘扫描模块、键值处理模块和波形产生模块。
3.1 初始化模块设计
初始化模块的作用是将用户需要的内存单元清零, 清除系统原始数据对系统的影响。之后在显示电路中显示全0, 对观察以后的数据输入情况有很大帮助。
设计中主要用到了30H到40H的内存空间。因此, 这里主要对这部分单元清零, 并且将数据存储指针初始化。具体程序如下:
3.2 键盘扫描程序的设计
键盘扫描程序的作用是从键盘获取按键信息, 根据按键信息来执行命令操作。这部分是用户对系统进行操作的唯一途径。这部分程序的正确编写是确保人机正常对话的前提保证。
键盘工作原理为:行线通过电阻接+5 V, 当键盘上没有键闭合时所有的行线和列线都断开, 行线呈高电平。当键盘上某一个键闭合时, 则该键对应的行线和列线被短路, 此时, 行线的状态由列线决定。通过给列线置0 (低电平) , 判断行线的状态, 可以判断出是哪个键闭合[6]。
键盘扫描程序流程图如图3所示。
3.3 波形产生模块的设计
波形产生模块是设计的关键, 其精度如何, 关键在于波形产生模块设计的合理性。
系统设计中采用的是用单片机产生信号, 而单片机只能产生数字信号, 无论是信号频率还是信号幅度都是离散的点, 这些点的产生是根据不同波形情况采用不同的方法由计算机来完成的。其中方波的产生方法比较简单, 只要定时地向外输出0FFH和00H即可。正弦波的产生是通过对标准正弦波进行采样输出而得到的, 采样间隔越小, 正弦波的输出精度就越高, 失真度越小。对于三角波, 就是实现2次循环, 通过由最小值到最大值和由最大值到最小值的循环来实现三角波的输出。以下给出了三角波产生的程序:
4 结束语
本系统按实际应用需求而设计。实验调试表明该数字式低频任意信号发生器在技术指标上完全达到了设计要求。系统具有价格低、性能高, 在低频范围内稳定性好、操作方便, 产品体积小、耗电少等特点, 所以在实践中有较好的应用价值。若有实际需要, 系统只要在软件上做一定的改变, 就可以作为超低频任意信号发生器在相关领域内使用。
参考文献
[1]刘国林, 殷贯西.电子测量[M].北京:机械工业出版社, 2003:95-112.
[2]陈琼.一种单片机控制超低频任意信号发生器的设计与实现[J].南昌航空工业学院学报:自然科学版, 2004, 18 (3) :35-38.
[3]张友德, 赵志英, 涂时亮.单片微型机原理, 应用与实验[M].上海:复旦大学出版社, 2007.
[4]戴梅鄂, 史嘉权.微型计算机技术及应用[M].北京:清华大学出版社, 2002:1-220.
[5]蒋延彪.单片机原理及应用[M].重庆:重庆大学出版社, 2003:145-200.
[6]胡汉才.单片机原理及系统设计[M].北京:清华大学出版社, 2002:200-260.
任意信号发生器 篇2
可编程片上系统 (System on a Programmable Chip, SoPC) 结合了SoC, PLD和FPGA的诸多优点, 既拥有可编程逻辑技术将整个系统集成于一块硅片之上, 由单个芯片实现主要逻辑功能的特点, 又具备可裁减、可扩展、可升级、软硬件系统可编程的功能, 是一种特殊的嵌入式系统。直接数字频率合成 (DDS) 是20世纪70年代初提出的一种全数字的频率合成技术, 常用于产生相位可控的信号, 具有转换快、分辨率高等特点[1,2]。而SoPC具有速度快、集成度高、存储容量大的优点, 使之与DDS技术相结合, 可以极大地提高信号发生器的性能, 降低生产成本[1,2,3,4]。本文采用SoPC技术, 把DDS模块和微处理控制部分集成到FPGA芯片, 从而实现频率可调的正弦、锯齿、方波、三角等任意波形的信号发生器。
1 DDS原理
DDS的基本原理是以采样定理为基础, 利用查表法产生数字量形式的波形信号, 并通过DAC转换成模拟量形式的信号。其基本的原理电路如图1所示, 直接数字频率合成 (DDS) 是由频率合成器、相位累加器、波形ROM、D/A转换器和低通滤波器LPF构成[5,6,7,8]。
连续信号按照相位取样、量化、编码后, 形成一个波形函数表, 存于ROM中。合成时, 每输入一个时钟相位累加器把频率控制字累加一次, 输出合成信号的相位, 通过改变相位累加器的频率控制字可以改变相位增量。当相位增量改变时, 一个周期内的采样点数也随之改变。在时钟频率即采样频率不变的情况下, 通过相位增量的改变来实现频率的改变, 计算公式为Δp=ωΔt=2πfΔt, 其中Δp为相位变化, ω为角频率, Δt为时钟周期。经过转换的合成信号的频率为f=Δp/ (2πΔt) =Δpfclk/ (2π) , fclk为时钟频率。通过改变Δp改变合成信号的频率f。由N位相位累加器对2π进行量化, 对2π取2N个点, 则f= (K/2N) fclk, 其中K为频率控制字, 取值范围[5,6,7,8]为0~2N-1。
2 信号发生器的设计
设计方案采用Altera公司的Quartus Ⅱ和Nios Ⅱ IDE软件作为开发工具[9,10], 包括硬件和软件两部分。
2.1 硬件方案
该设计选用Altera公司CycloneⅡ系列EP2C35F484C8型FPGA芯片作为产生波形信号的核心组件, 以搭载Nios软核和DDS模块, 并由外部添加输入键盘, 修改DDS发生器的参数, 来选择不同的输出波形[3]。为了保证输出信号不失真, DAC芯片的转换速率必须高于100 MHz, 所以D/A转换器选用了190 MHz的THS5651高速DAC芯片[11]。硬件系统结构如图2所示, 系统顶层设计图如图3所示。
系统顶层设计的核心是可裁剪的Nios软核和可存储多种波形信号的DDS模块, 如图3所示[5]。Nios软核为DDS设置输出波形选择参数, DDS模块生成相应波形信号, 再由PIO口将输出信号传输给DAC芯片。DDS模块是由1个相位累加器和4个LPM_ROM构成, 主要完成保存设置参数, 产生波形ROM地址, 形成波形ROM等工作。LPM_ROM分别以matlab生成的MIF格式文件存储了正弦、锯齿、三角、方波四种常见的波形数据表, 若要生成其他任意波形, 只需将相应的连续信号转化为MIF文件, 替换LPM_ROM中的波形文件即可实现任意波形信号的输出[5]。为了取得精细的频率分辨率, 将相位累加器设为32位, 同时为使LPM_ROM中数据量不至于过大, 使用相位截断阀, 让相位累加器输出的高10位用来查表, 这样可以保证系统在高速稳定运行的前提下, 最大限度地减少输出波形信号的误差。
2.2 软件设计
软件设计流程如下:
unsigned long int key_flag=1;
int init_set=1;
void set () ;
volatile int edge_capture;
void button_ISR (void* context, alt_u32 id) //按键中断处理
{volatile int* edge_capture_ptr= (volatile int*) context; //捕获按键中断
*edge_capture_ptr=IORD_ALTERA_AVALON_PIO_EDGE_CAP (KEY_PIO_BASE) ;
switch (*edge_capture_ptr)
{case 0x01: key_flag=0;
break;
case 0x02: key_flag=1;
……
case 0x10: init_set=0;
break;
default: key_flag=key_flag;
break;}
IOWR_ALTERA_AVALON_PIO_EDGE_CAP (KEY_PIO_BASE, 0x0) ; //清除中断
}
void init_keyISR ()
{
void *edge_capture_ptr= (void*) &edge_capture;
IOWR_ALTERA_AVALON_PIO_EDGE_CAP (KEY_PIO_BASE, 0x0) ; //清除中断
IOWR_ALTERA_AVALON_PIO_IR Q_MASK (KEY_PIO_BASE, 0x0f) ; //中断使能
alt_irq_register (KEY_PIO_IRQ, edge_capture_ptr, button_ISR) ; //中断函数注册}
int main ()
{
init_keyISR () ;
DAOUT->DATA=0;
while (init_set) //设置输出波形参数
set () ;
while (1)
{switch (key_flag) //选择输出波形
{ case 0:DAOUT->DATA=SIN->DATA;
break;
……
case 3:DAOUT->DATA=SQUARE->DATA;
break;
default: DAOUT->DATA=0;
break; } }
return 0;
}
3 测试结果与分析
采用逻辑分析仪对DDS发生器的输出信号进行测试, 输出信号如图4所示, 设置初始频率字与实测值见表1, 误差小于0.05, 输出信号精度较高。
4 结 语
本文介绍了基于SoPC的DDS任意波形发生器的一种设计方案, 详述了硬件结构及软件设计过程, 并对整个系统进行了仿真与测试, 输出信号频率的误差较小, 可以满足不同系统对波形信号的要求, 适用于工业控制、检测、通信等不同领域。
摘要:为了解决信号发生器的一些具体问题, 如需要它能产生多种信号、工作稳定、成本低等, 因此采用GW48型SoPC开发系统, 以Nios软核为控制核心, 来实现参数可调的任意波形DDS信号源。重点阐述系统硬件方案、软件设计, 并对整个系统进行了仿真, 仿真结果符合设计要求, 具有方案设计便捷、集成度高、扩展灵活和功能全面等特点。
关键词:SoPC,DDS,Nios,任意波形信号发生器
参考文献
[1]侯建军, 郭勇.SoPC技术基础教程[M].北京:清华大学出版社, 2008.
[2]潘松, 黄继业.SoPC技术使用教程[M].北京:清华大学出版社, 2005.
[3]李洪伟, 袁斯华.基于QuartusⅡ的CPLD/FPGA设计[M].北京:电子工业出版社, 2008.
[4]王彦, 黄智伟.基于FPGA的工程设计与应用[M].西安:西安电子科技大学出版社, 2007.
[5]白居宪.直接数字频率合成[M].西安:西安交通大学出版社, 2007.
[6]师丽彩, 郭叔军, 王玉花.基于Nios的DDS信号源实现[J].现代电子技术, 2005, 28 (14) :123-128.
[7]高琴, 姜寿山, 魏忠义.基于FPGA的DDS信号源设计与实现[J].西安工程科技学院学报, 2006, 20 (2) :14-17.
[8]丁纪峰.任意波形信号发生器的研制[D].哈尔滨:哈尔滨工业大学, 2005.
[9]朱正伟.EDA技术及应用[M].北京:清华大学出版社, 2005.
[10]潘松.VHDL使用教程[M].西安:西安电子科技大学出版社, 2001.
一种任意波形发生器的设计 篇3
关键词:任意波形发生器,直接数字频率合成,现场可编程门阵列
0 引言
在测试系统应用领域中,除了需要一些规则的信号如正弦波、方波、脉冲波、三角波之外,有时还需要一些不规则的信号,如模拟系统中各种瞬变波形、电子设备中出现的各种干扰杂波等,普通的信号发生器无法完成,因此需要用到任意波形发生器AWG(Arbitrary Waveform Generator)。在此基础上,本文提出了基于现场可编程门阵列(FPGA),采用直接数字频率合成(DDS)技术的任意波形发生器的设计思想。
1 DDS的技术及其原理
DDS的核心是建立在采样定理的基础上,首先对需要产生的波形进行采样,将采样值数字化后存入存储器作为数据表,然后再通过查表将数据读出,经过D/A转换器转换成模拟量,把存入的数据重新合成出来[1]。它是一种全数字化的频率合成技术,由相位累加器、加法器、波形存储器ROM、D/A转换器以及低通滤波器(LPF)构成,其基本原理如图1所示。
上图中K代表频率控制字(F S W—F r e q u e n c y Setting Word)、P表示相位控制字、W表示波形控制字、fc为参考时钟频率、N表示相位累加器的字长、L表示ROM的地址位数、D表示ROM的数据位数以及D/A转换器的字长。
DDS的工作原理是:相位累加器的参考时钟fc以频率控制字K进行累加,将所得N位的二进制代码,加上相位控制字P和波形控制字W,取其高L位作为ROM的地址,将地址的相应数字信号通过D位的D/A转换器进行数模转换,再将模拟信号通过低通滤波器平滑之后即是所合成的波形信号。设输出信号的频率为fo,N位累加器的高L位(L≤N)作为存储器的地址位,则有以下相关参数关系式:
每周期的最高采样点数:M=fc/fo;
波形数据存储器的点数最长为:2L;
累加器最小相位增量:δ=2π/2N;
对应频率控制字K的相位增量:K×2π/2N;
输出信号频率fo:fo=Kfc/2N。
可见,时钟频率fc给定后,输出信号的频率取决于频率控制字K,频率分辨率取决于累加器位数N,相位分辨率取决于波形存储器的地址线位数L,幅度量化噪声取决于波形存储器的数据位字长D和D/A转换器的位数,这样合成信号的3个参量(频率、相位和幅度)便均可由数字信号精确控制,从而达到了全数字化合成的目的。
DDS具有众多突出优点:极高的频率稳定度,极高的频率分辨率,超高速的频率转换时间,变频相位连续,相位噪声低,全数字自动化控制,可以合成任何波形,集成度高,容易实现小型化。
2 任意波形发生器的方案论证
利用DDS技术的任意波形发生器的实现,提出2个设计方案:
(1)正弦波采用专用的DDS集成芯片AD9850产生[2],正弦波通过比较器得到方波,方波再通过积分器得到三角波,其它任意波以及系统的控制模块在FPGA内编程产生。这种方法能实现高频率的正弦波,设计方便,具有低相位噪声。但由于采用大量的倍频、分频、混频和滤波环节,硬件复杂,从而导致设计系统的结构比较复杂,成本较高。
(2)所有的信号波形与控制模块都在FPGA里实现,采用硬件描述语言与FPGA上编程设计相结合方式。利用硬件描述语言设计基于DDS的各种要求信号,能够保证控制系统的稳定性;同时在FPGA编程实现DDS控制模块,也增加了系统的灵活性。该方案软硬结合,系统稳定性高,可扩展性强,成本低。
综合比较上述2种方案的优缺点,本文采用方案二。
3 任意波形发生器的系统结构与实现方法
任意波形发生器在整个系统结构上由电源模块、FPGA控制模块、D/A转换模块、滤波器模块、可变增益放大器模块、信号输出调理模块以及USB通信模块构成,如图2所示。本设计通过编程在FPGA内构造时钟控制模块、累加器模块以及存储器单元,将产生的波形数字信号输出至电路板上的D/A模块转换成模拟波形。其中FPGA控制模块是整个设计系统的核心,用于指挥各模块协调运作[3],它由硬件描述语言Verilog HDL编程完成。
硬件系统中,DDS的参考时钟是一个高稳定性的晶体振荡器,用来作为系统时钟同步整个系统的各组成部分。但由于随着步长和输出频率的增加,输出信号的采样点数会减少,会降低产生波形的精度和平滑度,因此也限制了输出信号的最高频率。由采样定理可知,所产生的信号频率不能超过时钟频率的一半,而在实际应用中,为了保证信号的输出质量,输出的频率不要高于时钟频率的33%,以避免混叠或谐波落入有用输出频带内。
经过数模转换后的信号除了基波外还含有基波的各次谐波分量和高频杂散信号,所以在D/A转换之后必须加低通滤波器以获得平滑且较为纯净的基波信号。因要求输出波形的频率覆盖范围为1 Hz~1 MHz,且需产生多种波形,为使整个频率范围内均有较为理想的滤波效果,采用分段低通滤波器的方式。低通滤波器组有3种:全通、截止频率为500 kHz的低通滤波器以及截止频率为1 MHz的低通滤波器。FPGA输出的控制信号经继电器进行滤波器组的切换。脉冲信号采用全通方式,即直接输出;频率小于500 kHz的波形信号经截止频率500 kHz的低通滤波器输出;频率在500 kHz~1 MHz之间的波形信号经截止频率1 MHz的低通滤波器输出。
LTC1560-1是一款截止频率在500 kHz~1 MHz之间可选的5阶椭圆函数型低通滤波器。图3是LTC1560-1的典型电路图,当需500 kHz的截止频率时,将LTC1560-1的第5脚接+5 V电压,当需1 MHz的截止频率时,接-5 V电压即可。
任意波的幅度调节方式采用可变增益放大器(VGA)的幅值调控方式。将DDS输出的数字信号通过D/A转换芯片产生一个幅值固定的基准波形,通过对此基准电压的可变增益放大实现幅值的控制。
通信接口方案上采用USB总线接口,因为USB接口的传输速度快、操作简单、支持多个设备而且价格较低,同时以前常用的PCI接口已经逐渐被取消了,USB接口是一个普遍的趋势。
4 FPGA的内部逻辑设计
任意波形发生器的FPGA控制单元的程序编写是整个设计的核心环节,FPGA控制单元用于控制USB接口电路,获取PC机上应用软件下达的命令,再将命令转换成控制信号协调PCB板上的硬件进行相应操作,同时回馈信号给应用软件。FPGA控制单元程序编写采用层次化和模块化的编程方法,先使用Verilog HDL[4]语言编写各个底层模块,再在顶层文件以原理图的方式编写,协调各模块工作,如图4所示。
时钟控制单元用于产生逻辑电路中所需的时钟信号。累加器模块、存储器模块用于产生波形信号,幅值和直流偏置控制模块结合在USB控制模块内,实现对PCB上用于幅值、直流偏置调节的相关硬件的控制。USB控制模块是信息集散地,一方面监听USB接口芯片,判断PC机上应用软件是否有下达命令,另一方面根据命令调动各模块工作。
相位累加器是DDS模块的核心部件,完成接收上位机送来的频率、相位等控制数据,然后根据控制信息完成FPGA内部存储器的地址生成功能。累加器为逐点累加,每个时钟节拍累加步进K=1,累加器位数N=13,与存储器地址位数相等。
在设计平台QuartusⅡ上利用硬件描述语言Verilog HDL编程实现。其中创建文件Acc_Module.v文件编写累加器模块。模块的输入包括累加器使能信号、累加器工作模式信号、频率控制字、相位控制字和时钟,输出为累加器的13位输出地址。使能信号、累加器工作模式信号、频率控制字以及相位控制字均由USB控制模块提供。一旦累加器模块检测到累加器使能信号出现上跳沿,重置地址为0,在时钟信号上跳沿开始计数,根据累加器工作模式进行相应累加计数。
在软件设计的时候,要注意在FPGA内实现ROM表的资源是有限的,并且ROM表的大小随着地址位数和数据位数的增加成指数递增关系,因此在满足采样信号性能的前提条件下,要尽量减少资源的开销。在实际设计时,要注意利用正弦波信号周期内的对称性和算术关系来减少ROM表资源的开销。例如正弦波的波形是随着相位周期变化的,所以将一个正弦波的前1/4周期通过相位变换就可以得到其整个波形周期的采样值,这样就节省了将近3/4的资源。而又如三角波波形是对称的,每边呈线性变化,可以根据地址数据做简单运算等等。
5 结语
通过硬件调试与软件编程,最终把示波器接到任意波形发生器的输出上,我们可以很清楚的看到输出波形,如图5所示。
图5分别是正弦波与方波的输出波形,频率分别为38.296 7 k Hz与28.729 0 k Hz。
由此可见这种将DDS技术与FPGA相结合设计实现的任意波形发生器,实现了各种波形的生成,波形具有平滑、稳定度高、频率稳定度和分辨率高等众多优点,并且其生成的波形同一般的波形发生器相比,产生的波形可以达到很高的频率分辨率、输出频率的转换速度快,而且在频率转换时,DDS输出波形的相位是连续的。同时其硬件电路也比较简单,改变存储器波形数据即可改变输出波形,这在实际工作中将十分方便。
参考文献
[1]迟忠君,徐云,常飞.频率合成技术发展概述[J].现代科学仪器,2006,16(3):21-24.
[2]王慧.基于虚拟仪器技术的电气测试平台的研制[D].南京:东南大学,2006.
[3]周立功,夏宇闻.单片机与CPLD综合应用技术[M].北京:北京航空航天大学出版社,2003.
任意信号发生器 篇4
1 设计思想和技术指标
1.1 设计思想
以W78E58B单片机为核心,辅以必要的模拟电路及上位机波形设计软件,构成一个任意信号发生器。下位机模块能通过按键控制输出产生预设正弦波,方波,三角波,矩齿波四种波形,并能显示相应的参数。在Visual C++语言编写的上位机界面用户拖动鼠标左键在图片框绘制波形时,同时将各点值存储下来,按波形产生键生成波形。并通过自制的示波器显示出波形。
1.2 主要技术指标
1)具有多个频道的存储、掉电存储断电记忆功能;可产生预设正弦波,方波,三角波,矩齿波;还可产生用户自己通过电脑编辑的任意波形,能存储10余个手绘波形。
2)软件上采用查表式,全部键盘控制方式;操作环境为屏幕英文菜单,直接点选。
3)参数显示:数字化液晶屏显示波形名,频率,幅度,周期以及倍频值。
(1)设计产生频率范围:1-4000Hz。
(2)设计频率输出幅度:0.0-10.2V。
(3)带100欧电阻负载输出误差:﹤2%。
4)能通过NH12864J-1液晶显示器显示实时波形。
2 方案设计与论证
方案1:采用模拟分立元件或单片机控制函数发生器MAX8038,可产生正弦波、方波、三角波,通过外部元件可改变输出频率,但产生的信号频率稳定度较差、精度低、抗干扰能力低、成本高而且灵活性较差,不能实现任意波形及波形运算输出等智能化的功能。
方案2:采用传统的直接频率合成器。这种方法能快速实现频率变换,具有低相位噪声以及所有方法中最高的工作频率。但由于采用大量的倍频、分频、混频和滤波环节,导致直接频率合成器的结构复杂、体积庞大、成本高,难以达到较高的频谱纯度。更重要的是,这种方法只能实现正弦波,或者进行积分,微分等方法实现方波、三角波等标准波形,而对于我们所要求的任意波形却无法实现。
方案3:用W78E58B单片机控制系统的波形表、频率、幅度,通过更换波形数据可以轻松地实现任意波形功能,采用Flash ROM将用户输入波形进行硬盘式的存储防止掉电,后级采用二阶切比雪夫滤波电路对后阶输出波形进行高频滤除,输出稳定光滑的波形。
综合考虑各种因素,选择方案3来进行任意信号发生器的设计。
3 整机工作原理
电路总体方框图(如图1所示)。
下位机模块主要完成的功能:处理键盘数据,生成波形表存储与RAM中;控制LCD显示;控制DAC0832进行幅值转换。能产生预设正弦波、方波、三角波、矩齿波四种波形,并能显示相应的参数。在Visual C++编写的上位机界面用户拖动鼠标左键在图片框绘制波形时,同时将各点值存储下来,按波形产生键生成波形,然后按确定通过串口传送给单片机系统,通过单片机将生成的数据写入波形存储器(RAM)中,再由D/A模块将波形合成出来,这样就可以产生出所需的任意波形,接到示波器上可以得到平滑稳定的波形,同时在液晶屏OCM19264-2上显示相应的波形名、频率、幅度、周期以及倍频值。从信号发生器输出端送入到STC12C5412AD单片机,根据奈氏抽样原理,将连续模拟信号用冲击信号抽样,10位量化得到离散的数字量,存储在RAM中分析,通过NH12864J-1液晶显示器显示出来。
4 系统硬件电路设计
4.1 波形产生模块
要产生任意波形,就不可能像普通直接数字频率合成器那样将要产生的波形预先固化在ROM中,所以波形存储双口RAM实现的,需存储在RAM中的波形数据是由单片机采集外部数据,对E2PROM中存储的标准波形数据进行各种相应的运算而得到的。
1)根据设计的技术指标,我们设计如下方案:将归一化的正弦波、方波、三角波的5次谐波以下的波形存储在8kbyE2PROM中,每种波形存储128个字节的点。然后由单片机根据键盘输入的不同要求,对各点数据乘相应系数并叠加,再将所得到的新的128个字节的数据存储在E2PROM中,此时我们便得到了所需要的波形数据表。
2)我们使用键盘输入所需波形的一个周期内16个采样点的数值,单片机采集数据后,进行线性插值,得到128个点的数值,送双口RAM,产生所需波形数据表,其余同上述实现部分。
4.2 数模转换及幅度控制模块
1)数模转换:采用转换速度为1us,带宽为1MHz的八位高速乘法器DAC0832,DAC0832具有快速的稳定时间,可满足波形发生器的要求。输出级接一级运放作为电流电压转换器,可得到-5V到+4.9V双极性电压输出。
2)幅度控制:利用DAC0832内部的电阻分压网络,将经前一级DAC0832产生的波形作为后一级DAC0832的基准电压,由单片机控制输入数字量,从而实现步进0.1V到峰值的调整。
4.3 键盘控制模块
信号发生器模块键盘由六个微触开关构成,控制液晶屏的输出信息,六个微触开关分别控制对液晶屏进行初始化,选定确定,波形选择,幅度步进,频率步进和周期值。
示波器模块键盘由三个独立按键组成,独立按键便于控制。分别为向下键、向上键、回车键。
4.4 液晶显示模块
现在市面上流行的点阵式液晶显示器,它具有功耗低、接口方便、能显示图形和文字、读数清晰、价格便宜等特点。考虑到实用性和通用型的结合,本系统设计选用字符型液晶模块,信号发生器选用的是4行48个字的OCM19264-2液晶模块,该液晶屏自带双控制芯片,自动完成液晶控制,该液晶含192×64dot,8bit并口传输,蓝光背景显示白字,采用全英文显示。
4.5 示波器模块
根据奈奎斯特抽样定理,将连续模拟信号用脉冲信号抽样,10位量化得到离散的数字量,存储在RAM中以便分析。这种方法的基础是高速ADC,而STC12C5412AD系列单片机内部就集成有8通道10bit的高速ADC,本设计采用120KHz采样率,根据奈奎斯特抽样定理,大于两倍于信号频率的抽样速度就能从数字量中还原出模拟信号,但为保证还原后的高保真度,本设计采用8倍抽样速率,因此进行波形分析的输入信号的频率不能大于15KHz。
4.6 上位机和单片机通信的硬件电路
由于上位计算机串口通信所使用的电平与单片机信号电平并不兼容,解决两者通信的关键问题就在于将通信接口电平相互兼容,从而达到良好通信。本设计使用了目前广泛使用的MAX232实现该功能。
5 软件的设计与实现
该系统程序中,74LS595及液晶等采用汇编语言编写,整体构成以C语言编写,上位机软件采用Visual C++开发。
5.1 下位机的软件流程图
信号发生器的工作流程图如图2所示。
5.2 上位机程序功能和界面
上位机部分采用Visual C++编写程序完成界面设计,界面内有以下几个功能区域可供操作者点击:坐标区、坐标指针实时区、station区(LINE、SINE、FREE功能键)、频率振幅显示区、编辑提示区。上位机Visual C++编写界面中使用了文本控件、命令按纽控件、标题控件、SSTAB控件、MSCom控件等,对其属性进行了相关设置。使用了Visual C++中的对话*.Show、*.Hide和MSComm1_OnComm等系统函数,开发的上位机界面如图3所示。
6 系统测试与结果分析
6.1 波形存储测试
该部分测试包括波形在线存储和掉电测试。
在线存储测试:先输出波形A,再输出波形B,按键恢复波形A,经检测可实现此功能。
掉电存储测试:输出任一波形C,关闭电源后上电,按键恢复输出波形C,经检测该功能也能实现。
6.2 波形频率测试
该部分测试先设定任一波形的频率值,然后测试其频率值,以三种基本波形为例,测试数据如表1。
6.3 周期性波形测试
周期性波形包括频率和幅值可调的正弦波,方波和三角波及其线性组合波形,用数字示波器来测试波形频率和幅值,测试数据如表2、表3。
由以上数据分析可知,本文设计的任意信号发生器满足设计的技术指标要求,符合规范。
7 结束语
本设计最大的特点是可以实现任意波形,并能在液晶屏上显示出相应参数,而且本系统软件部分采用菜单式操作,按键简单快捷。单片机采用了较好的型号,给日后的系统扩展和升级留下了足够的空间。
参考文献
[1]李广弟.单片机基础修订版[M].北京:北京航空航天大学出版社,2000.
[2]全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品汇编[M].北京:北京理工大学出版社,2002.
[3]谭浩强.C程序设计第二版[M].北京:清华大学出版社,2003.
任意信号发生器 篇5
本文提出了一种基于FPGA的信号波形发生器,实现产生任意波形信号的设计。利用累加器对所需频率按照所需的步进对其增量进行设置,得到的值就为设计所需的地址码,同时获取提前设计好的ROM中设计好的波形数据,经过相应的D/A进行转换,再进行平滑滤波得到所需的波形。通过硬件平台实现了不同要求的波形。通过结果分析,设计波形效果较好,有一定的工程实际意义。
1 系统的设计基本原理
DDS进行频率合成是直接从“相位”的概念出发。所需要的是相位累加,可以通过寄存器和相应的加法器来实现。实现的原理为当有时钟脉冲fc时,加法器对寄存器的输出和频率控制字进行相加。得到数据通过反馈给倒寄存器的相应输入端。等到需要改变频率再进行相加。可以看出当有一个钟脉冲输是,相位累加起就累加一次,得到的信号的相位是由累加器输出结果产生的,DDS的信号输出相应的频率为累加其输出的频率。
也就是相位累加器的溢出频率。一种全数字的频率合成方基本结构由四个部分构成,主要有相位累加器、波形ROM、D/A转换器和低通滤波器,如图1所示。
2 系统模块设计
系统框图由FPGA存储数据及DDS实现、DAC数字波形转换得到模拟波形、程控增益,实现电压伏值控制、信号调理,滤波这四个模块组成,整体系统框图如图2所示。
3 单元模块系统设计
3.1 寄存器和相位累加器的设计原理
设计中对所需的累加器和寄存器作用是实现累加功能,从而来得到可调的波形频率。用VHDL进行设计。相位累加与相位寄存器的框图如图3所示。
3.2 波形ROM的设计
ROM设计不同波形所需的ROM是不一样的,设计方法是相同的,首先要确定所需波形ROM的数据子长,同时要知道所需地址的位数。通过实际设计可以得到一般情况下ROM的子长是小于地址位数的,设计中选择的DA转换的位数是10,可以得到ROM字长应该也为10。同理可以得到地址位数为8。波形的存储器是通过相位累加到的高8位数据作为地址线来寻址。设计中以正弦信号数据的产生来进行设计可以直接在Quartus II下设计也可以通过:MATLAB编辑程进行相应的编辑。得到所需二进制数据通过VHDL程序来实现对应波形ROM的设计。
3.3 频率控制模块设计
实际中要输出的信号频率大小可通过键盘进行设置。实际中所需信号的频率一般跨度很大,大小频率变化实现需要很长的时间通过控制步进得到,这样设计控制模块就要以最简方法设计,设计中使用四个按键实现直接输入所需频率。
4 系统的软件设计
实现这个设计的方法由公式f0=k∙fc/2N可以看出,当fc2N确定后f0和K的值有一定的比例关系,通过其线性比例关系可以得到频率f0=1HZ时对应的所需K的值,计算得到的K就是步进1HZ对应的K变化的大小,步进就是利用此原理进行设计,设计中如果步进要整数倍的进行增加,设计中只需要按照倍数增加ΔK的值就能实现任意整数倍的信号步进变化。系统的整体控制频率流程图如图4所示。
5 仿真结果与分析
5.1 锯齿波仿真结果
由于幅度和频率调节在设计结果中不好表示以,设计中可以设计给定频率和幅度恒定的波形,设计锯齿波数据如图5所示。
5.2 正弦波仿真结果
同样的条件下实现了频率和幅度恒定的正弦波如图7所示。
5.3 三角波仿真结果
下图设计出了相应的三角波如图7所示。
5.4 方波仿真结果与分析
相应的方波的设计结果如图8所示。
图7三角波信号仿真
6 结论
本文实现了一种任意波形发生器系统,各模块利用硬件描述语言进行设计,最终利用FPGA硬件平台对其进行硬件测试,通过硬件平台实现了不同要求的波形。通过结果分析,设计波形效果较好,这种波形发生器同时可以根据工程实际需要实现不同的调制功能。输出信号的频率稳定度较高,有一定的工程实际意义。
摘要:针对传统设计信号发生器需要庞大的电路的问题。该文提出了一种基于FPGA的信号波形发生器,实现产生任意波形信号的设计。设计中利用硬件语言VHDL设计了所需的各个硬件模块。通过硬件平台QuartusⅡ实现了方波,锯齿波,三角波,正弦波等波形。通过结果分析,设计波形效果较好,有一定的工程实际意义。
关键词:FPGA,QuartusⅡ,信号发生器
参考文献
[1]徐彬,谭征,袁蕾,等.基于DDS技术的任意波形发生器[J].电子世界,2002(1):58-61.
[2]Nashaatdm,Elsadekha,Ghalih.Single feed compact quad-band PIFA antenna for wireless communication applications[J].IEEETrans Antennas Propagat Lett,2005,53(8):2631-2635.
[3]范秋华,张冬梅.基于VHDL的可编程分频器在波形发生器中的应用[J].清华大学学报,2003(4):68-71.
[4]于鸿洲,宋立新,徐吉吉.基于DDS技术的函数波形发生器[J].哈尔滨理工大学学报,2006,11(5):7-13.
[5]范秋华,张冬梅.基于VHDL的可编程分频器在波形发生器中的应用[J].青岛大学学报,2003,16(4):68-71.
[6]赵曙光.可编程逻辑器件原理开发与应用[M].西安:西安电子科技大学出版社,2000..
任意信号发生器 篇6
在腐蚀领域和电镀行业,常常需要使用任意波形的电流电压信号进行生产和测试。任意波形是指频率可变、幅值可变、相位可变的正弦波形和其他波形,如三角波形、锯齿波、特殊波形等。目前任意波形发生器大多采用直接数字频率合成(DDS)技术,即将波形的数字量信号存储于存储器中,嵌入式主机以一定的速率依次将存储器单元中的波形数据逐个发送给D/A转换器,合成为需要的波形[2]。
随着微处理器日益广泛的应用和大规模集成电路技术的发展,出现了大量能够产生多种波形且性能稳定的任意波形发生器,但大多数方案都是基于串行或并行总线进行数据的传输,这种方案虽然成本较低,但系统的实时性较差,难以满足复杂波形的大数据量的传输要求[2]。我们设计了一种基于FPGA芯片的任意波形发生器,充分利用了FPGA强大的逻辑功能,实现了利用单片FPGA芯片控制整个系统的方案。同时选择USB2.0接口芯片CY7C68013,它能较好地与FPGA芯片合作,完成系统预先设计的功能,使总体电路简单,成本低廉,产生的波形信号精度较高。数字波形数据从上位机通过USB总线直接存储在SRAM数据存储器中,通过FPGA控制,将波形数据读出,送入后向通道进行D/A转换和放大处理后得到所需的模拟信号波形。与传统的发生器在ROM或FLASH存储波形数据的方法相比,具有更大的灵活性。
1 系统总体结构及工作过程
波形发生器以FPGA为核心,它控制着整个系统的读、写、输出等操作,系统框图如图1所示[3]。上位机将数字波形数据通过USB2.0总线送到数据存储器中,数据存储器循环地将波形数据发送到DAC电路,由DDS电路产生相应的DAC刷新时钟(0~1MHz,步进0.02Hz),DAC输出波形经缓冲放大、低通滤波、放大输出。输出的波形频率为0.1Hz(DC)~1MHz(-3d B),频率分辨率为0.01Hz。
图1系统基本框架(参见右栏)
本系统主要由五部分组成:
(1)上位机。主要功能是利用仿真软件(如CVI、MATLAB、VB等)产生所需波形数据,并通过USB接口下载到波形发生器中,其次就是存储USB2.0接口芯片的驱动程序。
(2)USB2.0接口控制器芯片。本设计使用的是Cypress Semiconductor公司的EZ-USB FX2系列芯片CY7C68013AE。
(3)数据存储芯片SRAM。考虑到成本的因素,本系统采用ISSI公司的IS61LV25616-10T。
(4)D/A转换芯片。本设计使用的是AD9726,该芯片控制信号简单,D/A转换速度快,因此将系统的硬件设计大为简化,也减轻了系统软件设计的工作量。
(5)FPGA控制芯片。本设计使用的是Altera公司的Cyclone II系列型号为EP2C20F484的FPGA。EP2C20F484以90nm工艺技术为基础,提供了18,752个逻辑单元(LE),并具有一整套最佳的功能,包括嵌入式18位×18位乘法器、专用外部存储器接口电路、4kbit嵌入式存储器块、锁相环(PLL)和高速差分I/O能力等。
2 系统功能及硬件实现
2.1 USB传输模块
CY7C68013有2种接口方式:Slave FIFOs和可编程接口GPIF。当FPGA与其相连时,只需要利用CY7C68013作为一个USB2.0数据通道来实现与主机的高速通信。Slave FIFOs方式是从机方式,外部控制器可像普通FIFO一样对CY7C68013的多层缓冲FIFO进行读写。CY7C68013的Slave FIFOs工作方式可设为同步或异步;工作时钟可选为内部产生或外部输入,其它控制信号也可灵活地设置为高有效或低有效[1]。电路连接图如图2所示。
IFCLK是同步时钟信号,FLAGA、FLAGB和FLAGC是CY7C68013内部FIFO的状态标志,EP2C20F484通过通用I/O口获得CY7C68013内部FIFO的空、半满(由用户设定半满阈值)和满这三个状态信号,ISLCS、SLOE、S L R D、S LW R对C Y 7 C 6 8 0 1 3进行读写操作控制,FD[15:0]是数据线,ADD[1:0]是选择4个FIFO的地址线。其工作过程为:PC机通过USB向FPGAP发送波形数据时,USB通过请求方式通知FPGA读取波形数据,FPGA首先查看空、半满和满这三个状态信号,选择一个FIFO,然后控制USB接收适当大小的数据,以保证数据不会溢出,并存入SRAM中。
2.2 DAC功能模块
从总体工作过程分析可知,从USB接口下载的波形数据存储在SRAM中,SRAM循环输出数据到DAC芯片,根据DDS原理产生模拟波形。具体电路如图3所示。
IS61LV25616是256k×l6高速CMOS工艺3.3V单电源供电的静态随机存储器(SRAM),在FPGA控制下存储从USB下载的数据,并将数据循环输出到DAC芯片。AD9726是一款16位高性能LVDS DAC,具有出色的噪声与杂散性能以及真16位直流线性度。它采用CMOS工艺制造,并利用专有开关技术来增强动态性能。该器件具有较宽的满量程电流调节范围(2m A至20m A),能够以较低功耗水平工作。其电流输出配置简便,可以用于各种单端或差分电路拓扑结构。
3 系统软件设计与实现
3.1 固件程序设计
CY7C68013内嵌有8051微处理器,用于控制芯片的工作状态设置,写入微处理器的程序文件称为固件程序(Firmware),为了便于维护和移植,一般采用单片机的C语言编写[1]。主要有以下几种功能:a.初始化工作,包括设置一些特殊功能寄存器的初值以实现所需的设备属性或者功能,例如开中断、使能端点、配置端口等。b.辅助硬件完成设备的重新列举过程,包括模拟设备的断开与重新连接,对接收到的设置包进行分析判断,从而对主机的设备请求作出适当的响应,完成主机对设备的配置任务。c.对中断的处理。d.数据的接收和发送。e.外围电路的控制。固件程序的流程如图4所示。
3.2 FPGA程序设计
在本系统中FPGA作为主控制器,提供USB控制、DA控制、SRAM控制、I2C控制及全局时钟控制等功能模块[5]。这里重点介绍USB接口控制模块。
固化程序将CY7C68013A设置为Slave FIFO工作模式,需要FPGA提供FIFO端口的读写操作控制时序。CY7C68013A为每个端口提供了"空"标志、"满"标志和"可编程级"标志。FPGA检测这些信号,用于控制读写的过程,FPGA再完成这些端口FIFO的操作时序控制。USB控制器的状态转移如图5所示,控制器工作在五个状态中,上电复位后工作在IDLE状态,当读/写事件发生时进入状态1;在状态1中根据读/写事件使能FIFOADR[1:0]指向相应FIFO并进入状态2;在状态2,如果FIFO空/满,在当前状态等待,否则进入状态3;在状态3中,驱动数据总线,完成读/写操作,进入状态4;在状态4中,如需传输更多数据,进入状态2,否则进入状态IDLE。本系统采用Verilog HDL硬件描述语言实现了FIFO的读写时序,并在ALTERA公司提供的Quartus II8.0开发工具中综合编译并映射到FPGA中运行[5]。
4 结果及分析
在设计结果中,最后的波形图是使用泰克公司的TDS1012型示波器得到的[4]。经过实际的测试,该信号发生器产生的波形精度高、失真小,完全满足设计的要求。图6是产生的正弦波、锯齿波的波形结果。
5 结束语
本系统的设计基于FPGA和USB技术,不仅满足任意波形系统高速、精确的要求,而且具有体积小、功耗低、成本低、使用灵活方便、硬件电路简单、可在线更新等特点,充分利用了微机的资源,因而易开发且扩展性好。经测试,系统能够生成正弦波、方波、三角波、锯齿波、TTL、白噪声、高斯噪声、梯形、指数、AM、FM、扫频等常规波形,可设置波形的幅度、频率、偏置量等参数,可广泛用于个人实验室和自动测试系统。
摘要:本文提出了一种基于可编程逻辑器件(FPGA)芯片EP2C20F484的任意波形发生器的设计方法。完成了在FPGA的控制下,USB接口控制模块、SRAM控制模块、DA转换模块等协同工作的硬件设计、固件设计以及软件设计,并给出了实验结果。实验结果表明,此任意波形发生器能够按照要求输出相应波形,达到了设计要求。
关键词:EP2C20F484,AD9726,任意波形发生器,USB2.0
参考文献
[1]付华杰,等.嵌入式高速USB设备接口结构设计[J].现代电子技术,2008,31(4):150-152.
[2]张树团,等.基于TMS320F2812的任意波形发生器设计[J].电子测量技术,2009,32(4):87-90.
[3]张庆玲.频率和幅度可控制的信号发生器[J].仪表技术,2008(6):35-37.
[4]鲁哨廷.多波形数字信号发生器的设计与实现[J].微处理机,2008,29(2):149-151.
任意信号发生器 篇7
1 DDS基本原理
DDS技术的核心是利用累加器将频率控制字、相位控制字和波形控制字转化成读取波形数据的地址值,再将读出的波形数据与幅度控制字相乘得到不同的波形,其结构框图如图1所示[3]。
输出波形的频率由频率控制字与输入时钟共同决定,其关系表示如下:
其中,fo为输出频率;K为频率控制字;N为一个正整数,其数值一般为频率控制字K的位宽;fc为输入时钟的频率。由累加器输出的结果与相位控制字相加,相当于将输出波形进行一次相移,从而确定波形的相位。因为DDS任意波形发生器能够产生多种类型的波形,所以需要将不同类型的波形数据分区块地写入波形存储器(ROM)中,将之前产生的地址值与波形控制字相加,即为用于将地址指向特定的波形类型的数据所在的区块。读出的离散波形数据经过D/A转换器就转换成了连续的模拟信号,再经过低通滤波器(LPF)就可以得到所需要的平滑波形输出。
2 DDS优化设计
2.1 整体设计方案
本设计的DDS任意波形发生器能够直接产生0~1 k Hz的正弦波、三角波、升/降锯齿波和占空比可变的方波等5种波形,经过后接的功率放大电路其幅值可达65 V。系统采用型号为AD9746的高精度差分D/A转换芯片,其数据位宽为14 bit,这就意味着每个波形数据都为14 bit位宽,则对模拟信号采样生成波形数据时,就需要采集214个数据点。如果按照传统的DDS设计方案,所占用的片上RAM资源为:波形类型数×数据位宽×数据量=5×14×214=1 146 880 bit。由此可以看出,资源的占用量已经远远超出了大多数常用FPGA芯片的片上资源总量。为了减小资源的占用,本设计首先对不同类型的波形数据的存储方式进行优化。
如图1所示,传统的DDS任意波形发生器是将所有类型的波形数据按区块存储在ROM中,按照需求读出某一区块的数据用于产生相应波形。这种设计方案的ROM利用率很低,以存储5种波形数据为例,在生成某种波形时,ROM空间的80%存储的都是无关数据。因此,为了节省空间,将不同类型的波形数据以数组的形式写在软件中,当需要产生某种波形时,通过波形控制字的控制,将指定的波形数据移入FPGA的片上存储器。由于软件运行的存储区域为片外的SDRAM,而SDRAM的存储空间较大,因此,用SDRAM的空间占用取代FPGA片上存储资源的占用可以在很大程度上降低成本。
另外,从式(1)中可以看出,当频率控制字K取1时,可以得到系统的频率分辨率[4]:
由此可见,N的取值越大,输出频率的步长就越小,频率分辨率也就越高。本设计采用了32 bit字长的频率控制字,参考时钟为100 MHz,所以频率分辨率可达0.023 2 Hz。但是,累加器输出的结果将要作为对ROM寻址的地址,而ROM的寻址空间显然无法达到232 bit。为了使地址值能够与ROM中的数据一一对应,又不影响频率分辨率,这里截取累加结果的高14位作为寻址的地址值,但并不表示ROM的寻址空间为214 bit,而是对不同的波形类型将对这14位的地址值做不同的处理,从而进一步对ROM进行优化。
2.2 正弦波、三角波的ROM优化设计
因为系统中采用的D/A的精度为14 bit,所以在对参考的模拟波形采样时,需要采集214个离散的数据点。但是不难发现,正弦波和三角波在4个象限的波形具有很好的对称性,因此,为了进一步对ROM进行优化,只存储波形在第一象限的数据点,利用基于VHDL硬件描述语言编写的硬件反相器对寻址地址值和波形数据进行处理,就可以在不改变数据精度的情况下得到完整的波形[5,6]。由于三角波和正弦波的原理完全相同,所以这里仅以正弦波的ROM优化设计为例进行说明,其硬件框图如图2所示。
从图2中可以看出,虽然累加器输出的结果为14 bit位宽,但是真正对ROM寻址的只有12 bit。实际上,只是累加器输出的最高2位用于对生成波形的4个象限进行选择,其对应关系如图3所示。
在正弦波的生成电路中,ROM只存储第一象限,即图3中是高2位为00时所对应的波形数据。由图3可分析得出,第二象限的波形数据相当于对第一象限数据进行反方向读取,即对地址值先取反再寻址;第三象限的波形数据为第一象限数据的相反数,即对波形数据先取反再读取;第四象限的波形数据为第三象限数据的反方向读取,即同时对地址值和波形数据取反再寻址读出数据。综上所述,反相器1在累加器输出结果的次高位为0时不采取任何操作,在次高位为1时将地址值取反;反相器2在最高位为0时不采取任何操作,在最高位为1时对ROM中的波形数据取反。这样利用2个反相器就可以仅存储212个数据点,还原出14 bit精度的完整正弦波形和三角波形。
2.3 升、降锯齿波ROM优化设计
与正弦波和三角波不同,升/降锯齿波为单调线性波形,所以在针对参考波形进行14 bit精度采样时,将生成的214个数据点每隔3个存储1个,把所存储的数据点个数减小到212个,这对于单调的线性波形几乎没有影响。因此,在寻址时只需要截取累加器输出的高12 bit作为地址值。另外,为了进一步简化设计,考虑到降锯齿波实际上是对升锯齿波的波形数据进行反向读取得到的,因此,可以仅存储升锯齿波的波形数据,利用波形控制字和反相器就可以得到降锯齿波形。其电路框图如图4所示。
2.4 方波生成电路设计
与之前介绍的所有波形的性质不同,方波只是高低电平之间的转换,转换的时间即为占空比。因此,在方波生成的电路中,只需把单一的高电平数据存入ROM中,利用定时器控制一个反相器,在特定时间将ROM中读出的数据取反,就可以生成占空比可变的方波。其电路框图如图5所示。
定时器中,以输入的占空比控制字为初值,每个时钟周期对频率控制字进行一次累加。当累加结果≤232-1时,控制位为0,反相器不工作,D/A直接收到ROM中读出的数据,即输出方波高电平;当累加结果>232-1时,控制位置1,反相器将ROM中读出的波形数据取反,即输出方波的低电平。累加结果为33 bit位宽,当发生溢出时,自动回到初值状态,从占空比控制字开始继续对频率控制字进行累加。因此,通过输入不同的占空比控制字就可以得到占空比可变的方波。
3 测试结果
按照上述优化方法设计出基于DDS的任意波形发生器,FPGA的片上存储器仅需要存储4 096个14 bit位宽的波形数据,就能够实现可输出5种波形的任意波形发生器。在Quartus II 8.0软件中的综合结果如图6所示。
从图6中可以读出,片上存储资源的占用量仅为108 928 bit,这是因为中间过程中用到的寄存器和嵌入的NIOS II软核占用了一部分的存储空间。利用RIGOL公司生产的型号为DS1102CA的示波器可观察到最终的不同频率、不同幅值的输出波形,如图7~图12所示。
若按照传统的设计方案,5种波形、14 bit精度的DDS任意波形发生器将占用FPGA片上大于1 Mb的存储空间,而符合这个要求的FPGA芯片市场价格一般都接近千元。本系统采用Altera公司生产的Cyclone II系列的FPGA芯片EP2C20F484C8为核心处理器件,能够大大减小FPGA的片上资源占用,其市场价格仅为100元左右,很大程度上减小了成本。
参考文献
[1]张严,洪远泉.基于FPGA的任意波形发生器设计与研究[J].现代电子技术,2011,34(10):157-159.
[2]杜伟韬,卢起斌,徐伟掌,等.面积优化的调相DDS软核编译器设计与实现[J].微电子学,2008,38(3):381-384.
[3]江志浩,孙明珠,蔡德荣.高精度DDS的FPGA资源优化设计[J].微计算机信息,2009,25(1-2):191-193.
[4]傅沈文,曾广玺.基于DDS技术的高性能脉冲信号源设计[J].微计算机信息,2011,40(4):108-109.
[5]蓝天,张金林.直接数字频率合成器DDS的优化设计[J].电子技术应用,2007,33(5):42-44.
【任意信号发生器】推荐阅读:
任意曲线10-01
任意波形11-16
任意性规范07-28
《任意角》教学设计09-28
任意角的教学设计07-22
强制删除任意文件以及文件夹06-03
复合材料大变形任意加筋壳单元09-26
MetInfov5.1.3 任意文件上传漏洞漏洞预警10-24
第十五篇任意斜交角度坐标反算通用程序07-07
任意截面弹体的翼身干扰系数估算方法研究10-17