多功能波形发生器系统设计.docx
- 文档编号:5430011
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:20
- 大小:212.26KB
多功能波形发生器系统设计.docx
《多功能波形发生器系统设计.docx》由会员分享,可在线阅读,更多相关《多功能波形发生器系统设计.docx(20页珍藏版)》请在冰豆网上搜索。
多功能波形发生器系统设计
多功能波形发生器系统设计
设计人:
潘礼阮赐朋王怀涛
指导老师:
黄智伟王彦
南华大学电子实验室2003.8.23
摘要:
本设计为一数字式多功能波形发生系统。
系统应用VHDL语言,以FPGA为控制核心,实现了多种波形的可控输出,且支持任意波形的输入、存储和回放。
系统采用了DDFS技术来产生波形,同时输出采用双DAC0832芯片完成D/A转换,实现了输出波形幅度的数字式控制,幅度精度最高达7.6894e-5V。
关键字:
直接数字频率合成技术数字幅度控制数模转换
Abstract:
Thisdesignisadigitalmulti_aplicationfunctiongenerator.SystemapplyingVHDLlanguage,regardingFPGAasthecoreofcontrol,canproducemorethanonefunctionwaves,moreveritcanstore,representrandomfunctionwaves.ThesystemadoptingDDFStechniquetoproducewaves,atthefan-outdoubleDAC0832wasusedtoconvertthedigitalsignalstotheanalogsignals,atthesametimetheamplitudeofoutputcanbeadjustedinadigitalway,theprecisionofamplitudecanreach7.6894e-5V.
Keyword:
DDFSdigitaladjustofamplitudetheD/Aconvert
引言:
现代工程中波形发生器的应用是很广泛,而且相当重要。
由于传统的模拟波形发生器在低频段波形质量不高,且功耗比较大等原因,工程中很少用模拟波形发生器来产生低频波。
而现代作为主流的数字波形发生器由于采用不同的技术、不同的器件及工艺,其产生波的质量也有很大差别。
本系统以FPGA作为开发平台,采用DDFS技术产生波形,由于FPGA内部电气特性远远弱于逻辑特性,因而系统输出的波形具有毛刺少、频带宽、调节方便等优点。
一、方案比较
1、模拟锁相环实现
模拟锁相环技术是一项比较成熟的技术。
应用模拟锁相环,可将基准频率倍频,或分频得到所需的频率,且调节精度可以做到相当高、稳定性也比较好。
但模拟锁相环模拟电路复杂,不易调节,成本较高,且由于受模拟器件的影响,波形变换调节时间较长,输出波形的毛刺较多,因此模拟锁相环实现在低频(0~500KHz)信号发生系统中不是很好的方案。
2、直接数字频率合成实现
直接数字频率合成(DDFS)技术是经典的数字频率合成技术。
由于数字量的可操作性远远高于模拟量,采用DDFS的优点在于频率精度高、波形调节方便、且输出波形毛刺少等。
基于单片机的数字波形发生系统受单片机指令频率的限制,输出波形频率较低,而基于FPGA的波形发生系统就不存在这样的问题,其输出频带较单片机实现有很大的展宽。
本系统设计选定以FPGA作为系统控制核心的直接数字频率合成实现方案。
二、总体设计
该多功能数字波形发生器的主要功能有4种基本波形(正弦波、三角波、锯齿波及芳波)的可控输出,超低幅度(MV级)方波的产生,任意波的输入、存储、输出,以及各种波的线性叠加输出。
由于FPGA的高度集成化设计,系统设计中将大部分的控制集成在FPGA中央处理模块内部,如存储器(RAM)、波形产生模块、波形选择模块等。
外设主要有任意波形输入器件、A/D转换器件、输入频率跟踪采样器件以及键盘、数码管等。
1、整体设计总体设计框图如下
图2-1.系统整体框图
系统以FPGA为控制核心,基于FPGA的中央处理模块集成了RAM,用以存储各种波形特性数据。
32.0000MHz晶振输出的单个脉冲周期为系统最小时间单位,系统通过改变输出波形相邻采样点间的脉冲个数达到调节输出频率的效果。
系统输出采用双DAC0832串联的调幅方案,系统可以方便而精确的改变输出波的幅度,而且可根据需要生成幅度调制波。
2、各模块设计
<1>键盘输入模块
键盘主要用于输入各种控制信号以及设定频率的输入。
调频数据采用BCD码直接置数方式输入,输入量通过系统内部集成的除法器转化为相邻采样点间的脉冲个数,以达到调节输出波频率的目的。
任意波形的输入同样采用BCD码置数方式,任意波的表征参数有采样点数、各采样点的归一化幅度、各点的相对位置等。
系统键盘扫描键盘的时间为1/8S。
应用键盘输入的缺点是在输入波形的采样点值比较多,相应的输入操作比较烦琐,且容易出错。
而较之其他输入方式(如触摸屏等)就相当方便。
下面是BCD码输入电路图:
图2-2.BCD码输入电路
上图中CON9为排阻,所起作用为限流,这样可保证输入的电流不会损坏FPGA。
<2>其他模拟输入模块
此模块作为预留接口,可支持各种模拟器件的波形输入方式:
触摸屏、手写板等。
因输入波的不确定性,模块设计中采用自适应跟频技术(LMS),系统自动跟踪输入波的频率以选择合适的采样频率对输入波进行采样。
自适应跟频技术属DSP范畴,应用FPGA实现这一功能困难较大,系统采用凌阳产的“61板”——SPCE061AEMUBOARD(十六位单片机)——完成此项功能的设计。
A/D转换器件选用ADC0809,模拟波经ADC0809转化为数字量输入到61单片机,61单片机具有16*16位的乘法运算和内积运算的DSP功能,通过对输入波的频谱进行分析、运算,就可确定系统对外部模拟波的采样频率——ADC0809的工作频率。
这样就保证了输入波的特性数据不会遗漏。
待ADC0809的工作频率确定后,再将其转换的数据输入到FPGA进行存储。
由于此类方式输入的模拟波频带较宽,系统对此类波进行特征提取后,存储需要较大的空间,因此系统必须加载专用的外部高速RAM。
<3>FPGA中央处理模块
FPGA中央处理模块内部集成了较小的波形特性存储器——RAM(应用于键盘输入的固定64点采样的任意波形)、调频输入BCD码到脉冲个数转换用的除法器、幅度调节显示模块和波形发生模块。
A.RAM模块
FPGA集成RAM中的部分地址对应固定正弦波的64点采样数据,这部分的作用相当于静态ROM,其余大部分空间用于存放输入任意波的特征数据。
当输入波频率比较高时(对应非键盘方式输入波),系统需要相当大的空间来存储输入波的特征数据,这对系统资源的要求过高,因此,系统内部集成RAM只存储键盘输入的任意波的特征数据,而其他方式输入波的特征数据经系统的外部RAM接口,直接进入外部专用RAM器件存储。
B.除法器模块
应用除法器实现设定输出频率与对应输出相邻采样点间脉冲数的转换是相当方便的。
在输出频率在超低频段时,系统应用除法器拥有相当高的精度。
以晶振频率为32.0000MHz,正弦波采样点数为64为例,不同频段的可调阶数如下表:
TABLE2-1.可调阶数频段分布表
频段
可调阶数
0~1Hz
无限
10~11Hz
4545
100~101Hz
50
1000~1001Hz
0
上表为理论计算所得,在超低频段时,波形发生器输出的精确频率分布很密集。
应用除法器的好处就是在超低频段可以得到相当精确调节的输出波。
当然输出频率在较高频段(≥5KHz)时,通过键盘置入的输出设定频率与实际的输出频率存在相当大的误差,然而相比其他一些算法(等步进调节),应用除法器的效果在较高频段误差更小。
应用FPGA设计的除法器对运算中最后取值可能有两种不同的作法:
一种是采取四舍五入方式;另一种是向零归整法。
比较两种算法,在超低频段时精度都差不多;而在较高频段,四舍五入方式的误差是设定频率所对应量阶的1/2,向零归整法的误差却是对应的整个量阶,因而本设计中除法器采用了四舍五入的除法取值方案。
在逻辑器件中,加、减、乘、除各类运算都是相通的,而其中最基本的运算是加法,应用加法来解决涉及数据乘、除的问题,准确率较高,因此该除法器设计中采用的方法是:
先将除法运算转化为减法,再将减法转换到加法,最后由加法完成。
C.幅度调节显示模块
由于系统输出采用双DAC0832串联的方式,系统输出波的幅度可通过按键来调节。
系统对应不同的输出波有不同的幅度调节方式:
输出为方波时,通过按键使用者即可调节输出波的归一化幅度,又可调节输出离散波形的DAC0832的基准电压(Vref:
参看2.2.4节);而其他波形的输出只能调节输出波形的DAC0832的基准电压。
DAC0832的分辨率是8位,只调节DAC0832的基准电压误差是一个最小量阶——5/255≈0.020V,而输出为方时,调节误差仅为5/(255*255)=7.6894e-5V。
系统调幅数据的处理方式是按键累加,系统以8Hz频率扫描调幅按键端口,当得到升幅按键输入为高电平时,将幅度寄存信号加一;反之,当降幅按键为高电平时,幅度寄存信号自减一。
对应幅度的显示是本模块设计的重点:
输出方波时,波形幅度值为n*N/(255e2)≈n*N*1.53787e-5,应用FPGA直接进行如此高精度的运算所耗资源相当大,本设计采用近似算法实现了幅值的转换显示,此种算法带来的误差不超过1mV.具体算法如下:
通过简化,上式结果可表示为769*n*N*10e-7,以最高阶数255代入n,N可得Vmax=50004225*10e-7,ΔVmax=(50004225*10e-7)-5.000=0.4225*10e-3(V).由于要求幅度只显示4位,即精确到毫伏(MV)级,因此此种近似带来的误差可忽略。
系统输出其他波时,其幅度转化算法与方波一样,但对比于方波,这些波幅度只能通过调节DAC0832的基准电压实现,其可调阶数只有255档,D/A转换本身带来的误差就比较大,5/255≈0.01961(V),应用近似算法引入的误差比之要小得多:
上式中N为DAC0832基准电压调节阶数。
由上式可得近似算法引入的误差与DAC0832带来的误差之比为0.55*10e-3/0.01961≈2.8%。
D.波形发生模块
波形发生模块的设计采用DDFS技术。
所谓DDFS技术就是用数字量直接合成模拟量。
图2-3.DDFS单周期合成原理示意图
上图为用14个数字量合成的一个周期的正弦波波形。
图中数字量以阶梯波的形式表征了模拟正弦波的周期、幅度等特性参数,用低通滤波将高频成分去掉,就可看到比较平滑的正弦波。
应用DDFS实现波形合成没有复杂的乘除运算,且对波形特性的调节方便。
本模块设计思路是将RAM中的波形数据以一定的时间为间隔输出,通过改变间隔的时间来调节输出波的频率。
应用FPGA作控制核心是该设计优于用单片机作控制核心的波形发生器的关键所在。
DAC0832的数模转换周期为1μS,用单片机每向DAC0832传送一个数据最少要
用两条指令:
MOVDPTR,#ADDR_0832
MOVX@DPTR,A;A中存放要输出的数据
两条指令执行要5个机器周期——5μS,由此可见,用单片机不能完全发挥DAC0832的潜能。
用FPGA作的DAC芯片驱动电路其数据输出频率可以做到很高,输出一个数据的最短时间是1/32.0000M≈0.03125μS,可见用FPGA驱动DAC0832,使其最大限度工作绰绰有余。
该系统设计过程中考虑了方波的特性——占空比,因而系统综合了两种方波的输出:
占空比可调方波和占空比不可调方波。
前者产生方式类似于正弦波,通过选择64个采样点中不同的点作为0~1切换点,就可达到调节占空比的目的。
但其输出波的频率也因此受到限制;而后者的频率就比较高,但其占空比是固定的——1/2。
<4>D/A转换模块
该模块的主要工作是将FPGA输出的数字量转换为模拟量。
模拟量的频率由FPGA的数据输出频率确定,而模拟量的幅度调节的实现是基于双DAC0832的设计。
该模块主要由两片DAC0832组成,一片用于接收FPGA传来的波形数据,将其转化为模拟量输出;另一片接收来自FPGA的波形幅度数据,用以产生相应的幅度电压,将其作为基准电压输入到上一片DAC0832的基准电压(Vref)输入端口,实现输出波的幅度可调。
双DAC0832的串接电路图如下:
图2-4.双DAC0832串接电路图DAC0832将数字量(波形的电压幅度值)转化为模拟量(形式为电流),上图中DAC0832处于直通工作方式,外部运放电路的作用是将模拟电流量转化为电压量输出。
电压输出即可是单极性的,也可是双极性的。
在J12的输出口中,输出口1为单极性输出端,输出口2为双极性输出端。
三、软件实现
1、BCD码~二进制数转换模块该模块应用计数的方法完成BCD码到二进制数的转换,仿真图如下:
图3-1.BCD码~二进制数转换仿真图
图3-1中,A、B、C分别为三位十进制数的BCD码输入:
A为百位BCD码,B为十位BCD码,C为个位BCD码输入。
从仿真图中可以看出:
当变量COUNT累加脉冲数到123时,BCD码才完全转换为二进制数输出。
2、波形发生模块
图3-2.波形发生模块原理仿真图
图中DATA为设定输出相邻采样点间隔的脉冲数。
结合除法器,设定的输出频率转化为DATA来控制FPGA的输出频率。
四、系统测试
1、系统测试仪器
系统测试采用TeKtronix公司生产的TDS3032型数字式双通道荧光示波器,该示波器带宽300兆赫,最大次速率2.5GS/s,支持方波占空比的测量。
应用该系统可较精确的反映系统的频率、幅度等各项指标。
2.、测试指标
本系统测试主要针对正弦波、三角波、方波A(占空比可调方波)、锯齿波的频率的精确性,方波B(占空比不可调方波)的频率精度,方波(A或B)的幅度精度等。
以下为各项指标的测量图表:
A.正弦波、三角波、锯齿波和方波A的频率测量
表4-1.正弦波、三角波、锯齿波和方波A的频率测量数据表格
设定频率
测得频率
测量误差值
1HZ
1.000HZ
0.0%
20HZ
20.00HZ
0.0%
50HZ
50.00HZ
0.0%
100HZ
100.0HZ
0.0%
200HZ
199.9HZ
0.05%
500HZ
499.5HZ
0.1%
1KHZ
9.997KHZ
0.3%
2KHZ
1.993KHZ
0.35%
5KHZ
4.945KHZ
1.1%
10KHZ
9.765KHZ
2.35%
B.方波的幅度测量
方波属于幅度控制精度比较高的输出波形,主要应用于毫伏级信号的发生,因而选定的测量点大部分在毫伏级。
表4-2.方波幅度测量数据表格
设定幅度
测得幅度
测量误差值
5MV
5.06MV
1.2%
10MV
9.80MV
2.0%
20MV
19.6MV
2.0%
50MV
49.2MV
1.6%
100MV
98.0MV
2.0%
200MV
196MV
2.0%
500MV
498MV
0.4%
1.000V
0.990V
1.0%
2.000V
1.98V
1.0%
5.000V
4.95V
1.0%
C.方波B的频率测量
方波B是固定占空比(1/2)的方波,因而其输出频率较高,下表中频率测量点偏高。
表4-3.方波B频率幅度测量数据表格
设定频率
测得频率
误差值
10HZ
10.00HZ
0.0%
100HZ
100.0HZ
0.0%
200HZ
200.2HZ
0.1%
500HZ
500.5HZ
0.1%
1KHZ
1.000KHZ
0.0%
2KHZ
2.000KHZ
0.0%
5KHZ
5.001KHZ
0.02%
10KHZ
10.00KHZ
0.0%
50KHZ
49.95KHZ
0.1%
500KHZ
495.4KHZ
0.9%
以上是系统各主要指标的测量数据,对于其他一些系统指标,如方波占空比,任意波输入、存储等,由于此类指标测量数据比较笼统,因而未予列表。
经测试以上几个指标均达到设计要求。
五、结束语
本设计以FPGA为开发平台,充分体现了FPGA在直接数字频率合成方面的优越性。
系统基本功能全部实现,支持幅度精确的毫伏级信号发生,且精度较高。
系统支持除键盘外的其他波形输入方式,结合外部大容量的专用存储器可完成简单的数字存储示波功能。
六、参考文献
[1].高天光主编.《模数转换器应用技术》第一版.北京:
科学出版社.2001[2].刘明业等编.《VHDL语言100例详解》第一版。
北京:
清华大学出版社.1999
七、附录
程序清单:
程序名:
prod_wave.vhd
程序功能:
本程序应用DDFS技术,实现了4种常见波形(正弦、三角、锯齿、方波)的可控输出、任意波形特征数据的采集、存储与波形的重现等功能,程序留有外部RAM的扩充接口,使复杂输入波的特征提取成为可能。
编程日期:
2003.8.23
---------------------------------------------------------------------------
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitymine4is
port(clk:
instd_logic;--时钟信号输入
set,clr,up,down,zu,zd:
instd_logic;--各个波形特征的调节触发信号
posting:
instd_logic;--任意波键盘置入信号
u0,d0,sw:
instd_logic;
ss:
instd_logic_vector(3downto0);--档位选择信号
sss:
instd_logic_vector(4downto0);--波形选择信号
data3,data2,data1,data0:
instd_logic_vector(3downto0);--BCD码输--入
p180:
outstd_logic;--预留接口
lcd:
outstd_logic_vector(7downto0);--显示输出
shift:
outstd_logic_vector(3downto0);--位码输出
dd,a:
outstd_logic_vector(7downto0));--波形、幅度数据输出
endmine4;
architecturebehavofmine4is
subtypewordisstd_logic_vector(7downto0);
typeunitisarray(63downto0)ofword;
signalram:
unit;
signalqqq:
integerrange0to250000000;
signalqq:
integerrange0to78125000;
signaltmp:
integerrange0to9999;
signalcoun:
integerrange0to78125000;
signalcoun0:
integerrange0to250000000;
signalb:
integerrange0to78125000;
signalc:
integerrange0to250000000;
signalz,con:
integerrange0to63;
signalf:
std_logic_vector(7downto0);
signalamp,amp0,d:
std_logic_vector(7downto0);
signalbcd0,bcd1,bcd2,bcd3:
integerrange0to9;
signalbcd01,bcd11,bcd21,bcd31:
integerrange0to9;
signalbcd00,bcd10,bcd20,bcd30:
integerrange0to9;
signaly:
integerrange0to9;
signaladdr,adrr:
integerrange0to63;
signalover:
std_logic;
begin
qq<=781250whenss="1000"else
7812500whenss="0100"else
78125000whenss="0010"else
78125;
qqq<=5000000whenss="1000"else
50000000whenss="0100"else
500000000whenss="0010"else
500000;
process(clk)
variablecount4:
integerrange0to6250000;
variablecount:
integerrange0to78125000;
variablecount3:
integerrange0to250000000;
variablecount1:
integerrange0to12500000;
variablecount0:
integerrange0to3249999;
variableddd:
std_logic_vector(9downto0);
variabledd0,dd1,dd2,dd3,dd4:
integerrange0to255;
variableadr:
integerrange0to63;
begin
ifrising_edge(clk)then
ifposting='1'then
ifcount4=6249999thencount4:
=0;adr:
=conv_integer(data3)*10+conv_integer(data2);
ifadr<64then
ifset='1'thenram(adr)<=conv_std_logic_vector((conv_integer(data1)*10+conv_integer(data0))*2,8);
ifadr>adrrthenadrr<=adr;
endif;
elsifclr='1'thenadrr<=0;
foriin0to63loop
ram(i)<=(others=>'0');
endloop;
endif;
endif;
elsec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多功能 波形 发生器 系统 设计