任意波形信号发生器.docx
《任意波形信号发生器.docx》由会员分享,可在线阅读,更多相关《任意波形信号发生器.docx(12页珍藏版)》请在冰豆网上搜索。
任意波形信号发生器
一、题目要求及分析
1.1题目要求
任意波形信号发生器
利用FPGA器件产生控制信号及数据信号,经DAC0832和TL082转换产生以下波形:
1)正斜率斜波;
2)正弦波;
3)锯齿波;
4)任意波形。
用示波器观察输出波形。
硬件电路内容和要求:
用DAC0832实现数模转换电路,用TLC082实现电流-电压转换电路,画出电路原理图。
软件设计内容和要求:
VHDL编程实现任意波形的信号控制器。
要求可以用开关切换不同的波形数据输出。
1.2题目分析
VHDL语言是随着集成电路系统化和高度集成化的发展而逐步发展起来的,是一种用于数字系统的设计和测试的硬件描述语言。
相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下和基于库的设计的特点,因此设计者可以不必了解硬件结构。
从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的CPLD器件中去,从而实现可编程的专用集成电路(ASIC)的设计。
在本次课程设计中,函数发生器的设计采用自顶向下的系统设计的方法,通过MAX+plusⅡ开发环境进行编辑、综合、波形仿真,并下载到CPLD器件中,采用模块化的设计,对功能的修改和增加,只要修改VHDL源程序,而不必更改硬件电路。
实现数字系统硬件的软件化。
任意信号发生器体现在它能选择输出四个波形,即正斜率斜波、正弦波、锯齿波、任意波形;
还可以改变波形的某些表征参量,从而控制输出的波形。
其主要问题是波形的选择和准备与输出的模拟信号波形相对应的数字信号,前者可以通过外接开关从而选择输出什么样的波形,后者可以通过建立相应波形的数字信号模块得到,然后建立一个信号,用来保存所采点的数据,最后把该信号送给ADC0832的输入数据端口就可以了。
这两个主要问题当然在做的过程中还需要考虑到数据的选择、位宽的大小、管脚的取舍等问题。
二、任意波形信号发生器方案设计
2.1系统设计框图与思路
1.系统的设计框图
利用电子设计自动化(EDA)技术设计的波形信号发生器,与传统的信号发生器相比,具有高稳定度、高精度、高分辨率的优点。
该项目利用Alter公司的可编程逻辑器件EPF10K10,采用EDA技术,实现可通过改变时钟频率来调制频率、幅值的多种常用信号。
根据设计要求,多波形信号发生器主要由5部分组成,即时钟信号、波形数据产生器、波形选择器、数/模转换电路、低通滤波电路。
在时钟信号的作用下,由波形选择器选择要输出的波形,波形数据产生器生成频率可变的波形数据数字信号,经数/模转换电路、低通滤波电路,最终输出所需波形信号。
另外,输出波形幅度的调节可通过改变A/D转换芯片电阻网络的基准电压实现。
系统的设计框图如下:
图2.1系统设计框图
函数发生器有波形选择开关控制波形的输出,分别能输出正斜率斜波、锯齿波、正弦波、任意波形,考虑程序的容量,每种波形在一个周期内均的取样点不能太多。
2.函数发生器的设计思路
本次课程设计采用FPGA作为中心控制逻辑,由于其具有高速和逻辑单元数多的特点,因此可以由FPGA、DAC和I/V运放直接构成信号源发生器的最小系统。
在该方案中通过FPGA控制DAC并直接向DAC发送数据,这样就提高了所需波形的频率并绕过了通用存储器读取速度慢的特点,再加上外部的开关按钮就能够简单控制波形切换及改变波形的某些表征参量,能够通过编程实现波形的任意性、幅度变化的灵活性等功能。
本次课程设计采用自顶向下的设计方法进行设计,包含顶层文件的设计和底层文件的设计。
顶层的设计是把下层各模块连接起来,采用文本输入的方式,通过元件例化的方法,调用各元件,实现函数发生器的设计。
在顶层的设计中,clk,reset,ob,si,dl为系统的控制信号输入端,Q为数字信号的输出端口:
clk为系统时钟信号输入端,reset为系统复位信号,ob,si,dl是系统波形选择数码开关,通过改变开关的通断可以选择输出的波形;FPGA产生数字信号,并且由Q端口送入ADC0832的输入数据端口,这样数字信号经D/A转换器转换成为模拟信号。
但是DAC0832C以电流形式输出转换结果,若要得到电压形式的输出结果需另加I/V转换电路,这时可采用运算放大器,这里我们采用TLC082实现电流-电压转换,即可转换成模拟电压信号,输出的波形经过低通滤波电路可以滤除毛刺及干扰信号,这样就可以得到较清晰的波形,可以通过示波器观察所得波形。
底层设计建立基本的模块,实现相应的功能,便于元件例化,包含波形选择、正弦波、正斜率斜波、锯齿波、任意波形等模块:
波形选择模块外接开关,利用开关选择要输出的波形及产生相应的数字信号,以便于送入ADC0832的输入数据端口进行数据转换,从而输出所选择的波形;正弦波模块、正斜率斜波模块、锯齿波模块、任意波形模块分别产生与各自相对应的正弦波的数字信号、正斜率斜波的数字信号、锯齿波的数字信号、任意波形的数字信号等模块,各个波形模块所产生的数字信号送入波形选择器中,以便于波形选择器选择并输出数字信号。
此外,信号的频率和幅值及其他表征参数可通过时钟(CLK)信号的改变来调节。
值得注意的是,波形数据的建立是整个程序设计中最重要的问题。
FPGA输出的数字信号需要经D/A转换器转换成各种波形输出。
而由D/A转换器可知,DAC0832的分辨率是8位,这样,将模拟信号的各种波行在一个周期内平均分成255份,由于已经确定每周期的取样点数为64,即每隔2π/64的间隔取值一次,所取的值为该点对应的波形的值,通过计算可以获得64个取样点的值;也可以通过查表的方法取得64个取样点的值。
3.顶层设计
其程序如下。
--------------开始------------------------------
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
------------------------------------------------
------------------------------------------------
entitys_genis
port(clk,reset:
instd_logic;
ob,si,dl:
instd_logic;
cs,wr:
outstd_logic;
Q:
outstd_logic_vector(7downto0));
endentitys_gen;
------------------------------------------------
------------------------------------------------
architecturebehavofs_genis
--------元件定义语句----------------------------
componentoblis
port(clk,reset:
instd_logic;
Q:
outstd_logic_vector(7downto0));
endcomponentobl;
componentsinis
port(clk,reset:
instd_logic;
Q:
outstd_logic_vector(7downto0));
endcomponentsin;
componentdltis
port(clk,reset:
instd_logic;
Q:
outstd_logic_vector(7downto0));
endcomponentdlt;
componentchsis
port(ob,si,dl:
instd_logic;
obl,sin,dlt:
instd_logic_vector(7downto0);
Q:
outstd_logic_vector(7downto0));
endcomponentchs;
----------信号定义-----------------------------
signalJ,K,L:
std_logic_vector(7downto0);
begin
----------启动DAC0832--------------------------
process(clk)is
begin
if(clk'eventandclk='1')then
if(reset='1')then
cs<='1';
wr<='1';
else
cs<='0';
wr<='0';
endif;
endif;
endprocess;
---------元件例化------------------------------
u0:
oblportmap(clk,reset,J);
u1:
sinportmap(clk,reset,K);
u2:
dltportmap(clk,reset,L);
u3:
chsportmap(ob,si,dl,J,K,L,Q);
-----------------------------------------------
endarchitecturebehav;
-----------结束--------------------------------
4.下层设计
4.1正弦波的设计
DAC0832的分辨率是8位,这样,将模拟信号的正弦波在一个周期内平均分成255份,由于已经确定每周期的取样点数为64,所取的值为该点对应的正弦值,可用加法计数器和译码电路完成。
首先对幅度为1的正弦波的一个周期分为64个采样点,根据正弦波的函数关系计算得到每一点对应的幅度值,然后量化为8位二进制数据,最大值为255,最小值为0,以此得到正弦波波表。
加法计数器生成译码电路的64个输入值,译码电路查波表输出。
4.2方波的设计
由于方波的占空比是50%,且只有两个状态,所以方波的取样比较简单。
即前32个取样点取值为高电平“”,后32个取样点取值为低电平“00000000”就可以了。
通过交替送出全0和全1,并给以32个时钟延时实现,64个时钟为一个周期。
4.3三角波的设计
三角波在一个周期内具有对称性,而且波形是线性的。
该模块可设计一个可逆计数器实现。
设计时设置一变量作为工作状态标志,在此变量为全0时,当检测到时钟的上升沿时进行加同一个数操作,为全1时,进行减同一个数操作。
由于A/D转换采用8位的DAC0832芯片,且设64个时钟为一个三角波周期。
4.4锯齿波的设计
锯齿波在一个周期内的波形也是线性增长的,所以锯齿波的取值可以根据公式计算得到,m的取值是0~31。
4.5波形选择器的设计
设计一个四选一的数据选择器即可,根据外部开关的状态,选择调用上述设计的四种波形模块。
用CASE语句设计完成。
在外接开关的控制下选择输出一种波形数据输出,同时完成两种波形的线性组合。
波形组合是将波形每一时刻的数值相加,为了不超出DAC0832的输出范围,做相应的除2操作。
5.波形仿真
仿真环境是ALTERA公司的MAX+plusⅡ软件,设置不同的S的值,实现不同的波形输出,当S=0时,输出正弦波,仿真波形如下图所示,可以看出,输出数据的变化规律是正弦规律。
当S=1时,输出为三角波,其仿真波形如图所示,从图中可以看出,波形线性增长到最大值后再线性减少,符合三角波的变化规律。
当S=2时,输出方波,从下图的仿真波形可以看出,其数据规律为半周高电平半周低电平的方波的规律。
当S=3时,输出锯齿波,从仿真图的数据可以看出,其数据规律是线性增长的斜波,符合锯齿波的变化规律。
2.2框图模块功能描述及技术指标分析
2.3电路原理图
2.4相关芯片介绍
数模转换芯片DAC0832
D/A转换器的类型很多,从输入电路来说,一般的D/A转换器都带有输入寄存器,与微机能直接对接。
在此方案中采用分辨率为8位的DAC0832集成电路芯片。
它由NSC公司(NationalSemiconductorCorporation)所生产,采用低功耗的CMOS工艺制成。
它具有连接简单,转换控制方便、价格低廉等特点,在各微机系统中得到广泛的应用。
DAC0832的结构框图
DAC0832是具有20个引脚的双列直插式芯片。
其内部实际上是一个T型电阻网络,在外部运算放大器配合下完成D/A转换工作。
DAC0832的内部包括两个8位寄存器、1个8位转换器和相应辅助电路。
DAC0832内部有两个寄存器,能实现双缓冲、单缓冲和直通三种工作方式。
DAC0832的引脚图(管脚图)及功能:
DAC0832引脚功能介绍:
DI0~DI7:
数据输入线,TLL电平。
ILE:
数据锁存允许控制信号输入线,高电平有效。
CS:
片选信号输入线,低电平有效。
WR1:
为输入寄存器的写选通信号。
XFER:
数据传送控制信号输入线,低电平有效。
WR2:
为DAC寄存器写选通输入线。
Iout1:
电流输出线。
当输入全为1时Iout1最大。
Iout2:
电流输出线。
和IOUT1为一组互补的模拟电流输出端,其值与Iout1之和为一常数。
Rfb:
反馈信号输入线,芯片内部有反馈电阻,与运放配合构成I/V转换电路。
Vcc:
电源输入线 (+5v~+15v)
Vref:
基准电压输入线 (-10v~+10v)
AGND:
模拟地,摸拟信号和基准电源的参考地.
DGND:
数字地,两种地线在基准电源处共地比较好.
2.5程序主流程图以及子流程图
三、ST7920指令说明
四、具体功能程序及硬件实现
4.1主要功能程序实现
4.2实验步骤
(4)锁定管脚:
点击工具栏上的AssignDevice进行芯片选择,再点击Assign锁定管脚:
在NodeName中输入所需锁定的管脚的名称(如clk),在Pin中选择管脚号,然后点击Add即可,同理锁定别的管脚。
(5)硬件下载:
用数据线将实验箱和计算机连接,打开
实验箱电源,在计算机上操作:
点击工具栏上MAX+plus2ProgrammerConfigure,即可下载。
(6)测试:
将示波器接实验箱“AOUT”口,在实验箱中按下使能键(en管脚所封处),用短路帽选择时钟频率,即可测出正弦波形。
2.三角波信号的产生
与正弦波信号产生的步骤一样,只需把正弦数据换成三角数据,其他操作步骤均与上面一致。
3.方波信号的产生
(二)设计结果
本项目实现了常用的三种波形信号:
正弦波、三角波和方波。
节。
(三)结论
文中利用电子设计自动化(EDA)技术,先应用VHDL语言设计,再通过MAX-plus2和EDA实验箱下载至Alter公司的可编程逻辑器件EP1K30TC144-3,结果成功设计出数字波形信号发生器。
本设计成果能产生波形的频率为1.3KHz~200KHz。
所产生的频率不是很高,但如能有更高的时钟,将能够实现更高频率的信号。
4.3硬件电路实现与显示结果
硬件电路连接及液晶显示结果如下图4.1及图4.2所示:
图4.1硬件电路实物连接
图4.2液晶结果显示
4.4试验的结论
(1)、应用EDA技术用FPGA完成波形发生器,通过选择波形的按钮,实现4种波形的互相转换。
利用示波器可以验证波形发生器与原定的设计的理论是相一致。
(2)、用FPGA完成波形发生器的方法与传统的方法相比较,硬件结构是相当简单的。
大大减小了它的体积和重量。
可以节去传统的烦琐的硬件设计和硬件组合。
易于使用,按下选择波形的选择按钮,即可选出你所需的波形。
(3)、应用EDA技术完成波形发生器的设计,设计简单。
可以看到利用EDA技术完成一个电子设计,可以节省我们开发时间,从而提高大大地了我们的效率。
采用新技术就是为了提高效率,快速完成设计任务。
我们做一个项目时,所在追求的也是快且高效率。
不断地去快速掌握并能快速地应用新技术是我们做技术的人的基本素质。
我们要注重自己在这方面的能力。
当然我们不能废弃我们基本的东西—学科基础,全面发展自己,这需要我不断去追求。
4.5试验中遇到的问题
本次试验中遇到了很多问题,首先是对芯片很陌生,不熟悉其工作原理、及指令,这个问题,通过查阅大量图书、上网搜索相关资料以及向老师请教,很容易就解决了。
其次在编译程序时出现了一些错误,经过仔细的思考,最终搞明白了错误的原因,改正了错误。
本次试验基本实现了课程设计的要求,但由于实训时间过于短暂,还存在着一些问题,这些问题只能以后有时间了再来解决。
五、总结与体会
炎炎夏日,在这维期一周的电子综合设计中,我们小组对任意信号发生器这一选题进行了讨论研究及相关方案设计。
通过这次电子综合实训,我们对A/D转换芯片ADC0832有了深入的了解,由刚开始的对其的相关功能及使用的茫然,到对其基本使用原理和指令操作熟悉使用,期间遇到了系列问题,但这也加深了我们对A/D转换芯片ADC0832的认知。
此外,我们也深深意识到理论与实践结合的重要性。
在这次四人一小组的实训,我们共同合作,查阅了大量的相关资料,力求做到规范清晰。
在把握了整体的思路的基础上,完成了系统方案的设计,然后我们从程序流程图着手,将整个程序分成若干模块,分开编写,一边发现问题一边解决问题,软硬件结合,在实验板上检验程序测试情况,根据现象不断修改。
在这个过程中我们体会到编程的技巧,设置子程序的合理性,使我们的思维的锻炼与能力培养有了很大的提高和长足的进步。
此次课程设计对我们在EDA技术的学习中有着很重要的影响,通过实验我们非常充分的运用了实验室的器材,发挥团队精神,不畏困难,根据自己所学的EDA知识,认真的分析了老师要求的设计任务,明确了设计思路,我们齐心努力下成功的完成了多功能信号发生器的设计,对EDA技术的运用有了深一层的认识,对VHDL程序语言设计有了更深的理解。
其间,我们很多困难,在老师和同学的帮助下得以顺利解决,因此在这里对帮助过我们的老师和同学表示真心的感谢。
参考文献
[1]钟承尧,严世胜.单片机汉字显示系统的设计[J].学术探讨应用技术与研究,2006:
70-71.
[2]深圳市耀宇科技有限公司.YM12864R图形点阵液晶显示模块使用手册[EB/OL].
http:
//www.yaoyu-lcm.com.
[3]赵建领,薛园园等.51单片机开发与应用技术详解[M].北京:
电子工业出版社,2009.
[4]洪家平.中文图形显示控制芯片ST7920的原理与应用.
[5]张洪润.单片机应用设计200例.下(第一版).北京航空航天大学出版社,2006.
附录