任意波形信号发生器.docx
- 文档编号:29907758
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:32
- 大小:625.38KB
任意波形信号发生器.docx
《任意波形信号发生器.docx》由会员分享,可在线阅读,更多相关《任意波形信号发生器.docx(32页珍藏版)》请在冰豆网上搜索。
任意波形信号发生器
一、题目要求及分析
1.1题目要求
任意波形信号发生器
利用FPGA器件产生控制信号及数据信号,经DAC0832和TL082转换产生以下波形:
1)正斜率斜波;
2)正弦波;
3)锯齿波;
4)任意波形。
用示波器观察输出波形。
硬件电路内容和要求:
用DAC0832实现数模转换电路,用TLC082实现电流-电压转换电路,画出电路原理图。
软件设计内容和要求:
VHDL编程实现任意波形的信号控制器。
要求可以用开关切换不同的波形数据输出。
✓扩展:
增加衰减控制信号,通过开关控制衰减倍数,并在数码管显示。
1.2题目分析
VHDL语言是随着集成电路系统化和高度集成化的发展而逐步发展起来的,是一种用于数字系统的设计和测试的硬件描述语言。
相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下和基于库的设计的特点,因此设计者可以不必了解硬件结构。
从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的CPLD器件中去,从而实现可编程的专用集成电路(ASIC)的设计。
在本次课程设计中,函数发生器的设计采用自顶向下的系统设计的方法,通过MAX+plusⅡ开发环境进行编辑、综合、波形仿真,并下载到CPLD器件中,采用模块化的设计,对功能的修改和增加,只要修改VHDL源程序,而不必更改硬件电路。
实现数字系统硬件的软件化。
任意信号发生器体现在它能选择输出四个波形,即正斜率斜波、正弦波、锯齿波、任意波形;还可以改变波形的某些表征参量,从而控制输出的波形。
其主要问题是波形的选择和准备与输出的模拟信号波形相对应的数字信号,前者可以通过外接开关从而选择输出什么样的波形,后者可以通过建立相应波形的数字信号模块得到,然后建立一个信号,用来保存所采点的数据,最后把该信号送给ADC0832的输入数据端口就可以了。
这两个主要问题当然在做的过程中还需要考虑到数据的选择、位宽的大小、管脚的取舍等问题。
二、任意波形信号发生器方案设计
函数信号发生器的实现方法通常有以下几种:
(1)用分立元件组成的函数发生器:
通常是单函数发生器且频率不高,其工作不很稳定,不易调试。
(2)可以由晶体管、运放IC等通用器件制作,更多的则是用专门的函数信号发生器IC产生。
早期的函数信号发生器IC,如L8038、BA205、XR2207/2209等,它们的功能较少,精度不高,频率上限只有300kHz,无法产生更高频率的信号,调节方式也不够灵活,频率和占空比不能独立调节,二者互相影响。
(3)利用单片FPGA集成芯片的函数发生器:
它能产生多种波形,达到较高的频率,且易于调试。
鉴于此,很多公司开发了系列FPGA芯片,它们克服了
(2)中芯片的缺点,可以达到更高的技术指标,是上述芯片望尘莫及的。
又由于其较高的性价比,他们成为制作任意波形信号发生器的首选。
(4)利用专用直接数字合成DDS芯片的函数发生器:
能产生任意波形并达到很高的频率。
但成本较高。
2.1系统设计框图与思路
1.系统的设计框图
利用电子设计自动化(EDA)技术设计的波形信号发生器,与传统的信号发生器相比,具有高稳定度、高精度、高分辨率的优点。
该项目利用Alter公司的可编程逻辑器件EPF10K10,采用EDA技术,实现可通过改变时钟频率来调制频率、幅值的多种常用信号。
根据设计要求,多波形信号发生器主要由5部分组成,即波形数据产生器、波形信号控制器、输出信号寄存器、数/模转换电路、低通滤波电路。
在时钟信号的作用下,通过波形信号产生器产生各种波形数据,再由信号控制器通过选择信号要输出的波形及衰减档位,并用数码管显示衰减倍数,经数/模转换电路、低通滤波电路,最终输出所需波形信号。
另外,输出波形幅度的调节还可通过改变A/D转换芯片电阻网络的基准电压实现。
函数发生器有波形选择开关控制波形的输出,分别能输出正斜率斜波、锯齿波、正弦波、方波,及任意组合波形,考虑程序的容量,每种波形在一个周期内均的取样点不能太多。
系统的设计框图如下图2.1所示:
图2.1系统设计框图
2.函数发生器的设计思路
本次课程设计采用FPGA作为中心控制逻辑,由于其具有高速和逻辑单元数多的特点,因此可以由FPGA、DAC和I/V运放直接构成信号源发生器的最小系统。
在该方案中通过FPGA控制DAC并直接向DAC发送数据,这样就提高了所需波形的频率并绕过了通用存储器读取速度慢的特点,再加上外部的开关按钮就能够简单控制波形切换及改变波形的某些表征参量,能够通过编程实现波形的任意性、幅度变化的灵活性等功能。
本次课程设计采用自顶向下的设计方法进行设计,包含顶层文件的设计和底层文件的设计。
顶层的设计是把下层各模块连接起来,采用文本输入的方式,通过元件例化的方法,调用各元件,实现函数发生器的设计。
在顶层的设计中,clk,reset,ob,si,dl,sq,tc为系统的控制信号输入端,Q,a,b,c,d,e,f,g为数字信号的输出端口:
clk为系统时钟信号输入端,reset为系统复位信号,ob,si,dl,sq是系统波形选择数码开关,通过改变开关的通断可以选择输出的波形;tc为信号衰减档位选择,其有,2、4、8三个衰减档位;a,b,c,d,e,f,g为七段数码管显示控制输出,用于显示衰减倍数;FPGA产生数字信号,并且由Q端口送入ADC0832的输入数据端口,这样数字信号经D/A转换器转换成为模拟信号。
但是DAC0832C以电流形式输出转换结果,若要得到电压形式的输出结果需另加I/V转换电路,这时可采用运算放大器,这里我们采用TL082实现电流-电压转换,即可转换成模拟电压信号,输出的波形经过低通滤波电路可以滤除毛刺及干扰信号,这样就可以得到较清晰的波形,可以通过示波器观察所得波形。
底层设计建立基本的模块,实现相应的功能,便于元件例化,包含波形选择、正弦波、正斜率斜波、锯齿波、任意波形等模块:
波形选择模块外接开关,利用开关选择要输出的波形及产生相应的数字信号,以便于送入ADC0832的输入数据端口进行数据转换,从而输出所选择的波形;正弦波模块、正斜率斜波模块、锯齿波模块、任意波形模块分别产生与各自相对应的正弦波的数字信号、正斜率斜波的数字信号、锯齿波的数字信号、任意波形的数字信号等模块,各个波形模块所产生的数字信号送入波形选择器中,以便于波形选择器选择并输出数字信号。
此外,信号的频率和幅值及其他表征参数可通过时钟(CLK)信号的改变来调节。
值得注意的是,波形数据的建立是整个程序设计中最重要的问题。
FPGA输出的数字信号需要经D/A转换器转换成各种波形输出。
而由D/A转换器可知,DAC0832的分辨率是8位,这样,将模拟信号的各种波行在一个周期内平均分成255份,由于已经确定每周期的取样点数为64,即每隔2π/64的间隔取值一次,所取的值为该点对应的波形的值,通过计算可以获得64个取样点的值;也可以通过查表的方法取得64个取样点的值。
2.2系统设计原理图
如图2.2所示为系统设计原理图,其主要由数据寄存器74LS244,D/A转换器DAC0832及有运放TL082构成的低通滤波电路组成。
其中,可通过JJ1、JJ2、JJ3和JJ4改变滤波特性。
此外,由于DAC0832输出的为电流信号,需用运放将电流转换为电压信号,再通过滤波电路进行滤波产生最终输出波形信号。
图2.2系统设计原理图
2.3相关芯片介绍
数模转换芯片DAC0832:
D/A转换器的类型很多,从输入电路来说,一般的D/A转换器都带有输入寄存器,与微机能直接对接。
在此方案中采用分辨率为8位的DAC0832集成电路芯片。
它由NSC公司(NationalSemiconductorCorporation)所生产,采用低功耗的CMOS工艺制成。
它具有连接简单,转换控制方便、价格低廉等特点,在各微机系统中得到广泛的应用。
DAC0832的结构框图如图2.3所示:
图2.3DAC832结构框图
DAC0832是具有20个引脚的双列直插式芯片。
其内部实际上是一个T型电阻网络在外部运算放大器配合下完成D/A转换工作。
DAC0832的内部包括两个8位寄存器、1个8位转换器和相应辅助电路。
DAC0832内部有两个寄存器,能实现双缓冲、单缓冲和直通三种工作方式。
DAC0832的引脚图如图2.4所示,其功能如下:
图2.3DAC832结构框图
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:
数字地,两种地线在基准电源处共地比较好.
TL082双运算放大器:
TL082是一通用的J-FET双运用算放大器,其特点有:
较低输入偏置电压和偏移电流:
输出没有短路保护,输入级具有较高的输入阻抗,内建频率被子偿电路,较高的压摆率。
最大工作电压为18V。
1.TL082引脚功能(见表280)
2.TL082内部框图(见图2.4)
图2.4TL082内部框图
三、相关模块具体程序实现
Ø正斜率斜波设计模块:
process(clk,reset)is
begin
if(reset='1')thentmp<="00000000";--异步复位
elsif(clk'eventandclk='1')then
if(tmp<"11111111")then
tmp<=tmp+'1';--未达最大值以正斜率递增
else
tmp<="11111111";--达最大值后维持高电平
endif;
endif;
Q<=tmp;
endprocess;
Ø正弦波设计模块:
DAC0832的分辨率是8位,这样,将模拟信号的正弦波在一个周期内平均分成255份,由于已经确定每周期的取样点数为64,所取的值为该点对应的正弦值,可用加法计数器和译码电路完成。
首先对幅度为1的正弦波的一个周期分为64个采样点,根据正弦波的函数关系计算得到每一点对应的幅度值,然后量化为8位二进制数据,最大值为255,最小值为0,以此得到正弦波波表。
加法计数器生成译码电路的64个输入值,译码电路查波表输出。
具体进程如下:
process(clk,reset)is--clk、reset分别为时钟和复位信号
begin
if(reset='1')thentmp<=31;--异步复位
elsif(clk'eventandclk='1')then
if(tmp=63)then
tmp<=0;
else
tmp<=tmp+1;
endif;
casetmpis
when00=>d<=255;when01=>d<=254;when02=>d<=252;
when03=>d<=249;when04=>d<=245;when05=>d<=239;
when06=>d<=233;when07=>d<=225;when08=>d<=217;
when09=>d<=207;when10=>d<=197;when11=>d<=186;
when12=>d<=174;when13=>d<=162;when14=>d<=150;
when15=>d<=137;when16=>d<=124;when17=>d<=112;
when18=>d<=99;when19=>d<=87;when20=>d<=75;
when21=>d<=64;when22=>d<=53;when23=>d<=43;
when24=>d<=34;when25=>d<=26;when26=>d<=19;
when27=>d<=13;when28=>d<=8;when29=>d<=4;
when30=>d<=1;when31=>d<=0;when32=>d<=0;
when33=>d<=1;when34=>d<=4;when35=>d<=8;
when36=>d<=13;when37=>d<=19;when38=>d<=26;
when39=>d<=34;when40=>d<=43;when41=>d<=53;
when42=>d<=64;when43=>d<=75;when44=>d<=87;
when45=>d<=99;when46=>d<=112;when47=>d<=124;
when48=>d<=137;when49=>d<=150;when50=>d<=162;
when51=>d<=174;when52=>d<=186;when53=>d<=197;
when54=>d<=207;when55=>d<=217;when56=>d<=225;
when57=>d<=233;when58=>d<=239;when59=>d<=245;
when60=>d<=249;when61=>d<=252;when62=>d<=254;
when63=>d<=255;whenothers=>null;
endcase;
endif;
Q<=conv_std_logic_vector(d,8);--整形数据强制转换为8位位矢量
endprocess;
Ø锯齿波设计模块:
锯齿波在一个周期内的波形也是线性增长的,所以锯齿波的取值可以从0递加到最大值,再返回到0,循环实现。
process(clk,reset)is--clk、reset分别为时钟和复位信号
begin
if(reset='1')thentmp<="00000000";--异步复位
elsif(clk'eventandclk='1')then--检测时钟上升沿
if(tmp<"11111111")then
tmp<=tmp+'1';
else
tmp<="00000000";--输出最大是降为零
endif;
endif;
Q<=tmp;
Ø方波设计模块:
由于方波的占空比是50%,且只有两个状态,所以方波的取样比较简单。
即前半周期取样点取值为低电平“00000000”,后半周期取样点取值为高电平“11111111”就可以了。
通过与“11111111”异或,交替送出8位全0和全1,并给以10个时钟延时实现,20个时钟为一个周期。
process(clk,reset)is
begin
if(reset='1')thentmp<="00000000";--异步复位
elsif(clk'eventandclk='1')then--检测时钟上升沿
if(cc<9)then
cc<=cc+1;
else
cc<=0;
endif;
ifcc=9thentmp<=tmpxor"11111111";--异或取反
endif;
endif;
Q<=tmp;
endprocess;
Ø波形信号选择控制模块:
波形数据信号选择器通过设置四位选择开关,根据四位外部开关的状态,选择调用上述设计的四种波形模块的一种或其中二者的组合。
用CASE语句设计完成要求信号选择,在外接开关的控制下选择输出一种波形数据输出,或完成两种波形的线性组合。
波形组合是将波形每一时刻的数值相加,为了不超出DAC0832的输出范围,做相应的除2操作。
process(ob,si,dl,sq)is
begin
tmp<=ob&si&dl&sq;--将四位开关并置为四位信号数组
casetmpis
when"1000"=>Q<=obl;--斜波选择
when"0100"=>Q<=sin;--正弦波选择
when"0010"=>Q<=dlt;--锯齿波选择
when"0001"=>Q<=squ;--方波选择
when"1100"=>tt<="00"&obl+sin;Q<=tt(8downto1);--组合波形
when"1010"=>tt<="00"&obl+dlt;Q<=tt(8downto1);
when"1001"=>tt<="00"&obl+squ;Q<=tt(8downto1);
when"0110"=>tt<="00"&sin+dlt;Q<=tt(8downto1);
when"0101"=>tt<="00"&sin+squ;Q<=tt(8downto1);
when"0011"=>tt<="00"&dlt+squ;Q<=tt(8downto1);
whenothers=>null;
endcase;
endprocess;
Ø顶层模块主要部分设计:
1.元件定义及例化
元件定义语句在结构体说明部分进行描述如下(以选择模块元件定义为例):
componentchsis
port(ob,si,dl,sq:
instd_logic;
obl,sin,dlt,squ:
instd_logic_vector(7downto0);
Q:
outstd_logic_vector(7downto0));
endcomponentchs;
之定义元件对应的元件例化语句置于结构主体中:
u4:
chsportmap(ob,si,dl,sq,JJ,KK,LL,ZZ,Q);
2.进程启动DAC832:
process(clk)is
begin
if(clk'eventandclk='1')then
if(reset='1')then
wr<='1';
else
wr<='0';
endif;
endif;
endprocess;
3.信号衰减选择与衰减档位显示进程
process(tc,J,K,L,Z)is
begin
casetcis--检测选择信号
when"00"=>JJ<=J;KK<=K;LL<=L;ZZ<=Z;--不衰减
when"01"=>JJ<='0'&J(7downto1);KK<='0'&K(7downto1);--2倍衰减
LL<='0'&L(7downto1);ZZ<='0'&Z(7downto1);
when"10"=>JJ<="00"&J(7downto2);KK<="00"&K(7downto2);--4倍衰减LL<="00"&L(7downto2);ZZ<="00"&Z(7downto2);
when"11"=>JJ<="000"&J(7downto3);KK<="000"&K(7downto3);--8倍衰减
LL<="000"&L(7downto3);ZZ<="000"&Z(7downto3);
whenothers=>null;
endcase;
iftc="00"thens<="1111110";--送衰减显示值至数码管显示
elsiftc="01"thens<="1101101";
elsiftc="10"thens<="0110011";
elsiftc="11"thens<="1111111";
endif;
a<=s(6);b<=s(5);c<=s(4);d<=s(3);e<=s
(2);f<=s
(1);g<=s(0);
endprocess;
四、仿真及实际结果与分析
4.1波形选择及仿真结果
仿真环境是ALTERA公司的MAX+plusⅡ软件的一项特殊功能,设置不同的输入信号,可实现不同的波形数据的输出。
根据选择的不同开关信号组合,可得到如下图4.1所示各种仿真数据。
(a)正斜率斜波仿真波形
(b)正弦波仿真波形
(c)锯齿波仿真波形
(d)方波仿真波形
(e)锯齿波与方波组合仿真波形
图4.1不同选择、零衰减仿真波形
如图4.1均为零衰减仿真信号,当改变tc1和tc0信号时,可改变输出波形数据衰减信号,且可通过a,b,c,d,e,f,g向七段显示数码管送数据,显示选择的衰减倍数。
以方波衰减为例,其衰减波形输出仿真如下图4.2所示。
当tc1和tc0为“10”时,仿真波形数据由FF变为3F,呈现4倍衰减。
此时,(a,b,c,d,e,f,g)为“0110011”对于共阴极数码管显示数字4。
图4.2正弦波4倍衰减仿真波形
4.2波形选择及实际结果
将编译好的程序送入FPGA芯片EPF10K10,通过改变选择开关,用示波器检测经滤波的输出波形,探头连接如图4.3所示:
图4.2D/A转换硬件模块及探头连接
此外,在滤波特性选择上,为达到理想效果我们选择JJ2和JJ3闭合。
同时,还需对拨码开关进行选择,具体如下:
AS1(3)置ON使K1-K8有效;
JS1
(1)置ON使DAC832处于连接态;
JS1(5)置ON使ADC0809有效;
JS1(8)置ON使DAC0832的WR1端与I/O51相连;
各不同信号选择开关对应实际输出波形如图4.4所示:
(a)正斜率斜波零衰减高电平输出波形
(b)正弦波零衰减输出波形
(c)锯齿波零衰减输出波形
(d)方波零衰减输出波形
(e)锯齿波与正弦波组合零衰减输出波形
(f)正弦波与方波零衰减输出波形
(g)正弦波2倍衰减输出波形
图4.4实际选择信号输出波形
4.3结果分析与相关问题解决
对比仿真与实际所得结果,本次课程设计基本上达到了预期的要求,当然在对部分波形输出的处理与最终结果的得出上,我们也中遇到并解决了系列问题:
首先,我们对实验箱的电路组成及连接情况不清楚,不利于编写程序及为实体的各个端口分配引脚。
为此,我们找到实验箱的电路原理图,对照原理图结合硬件电路,最终我们搞清楚了电路的组成及连接情况,还有知道了一些必要的硬件设置,比如开关是否有效、低通滤波电路电容的选择等问题。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 任意 波形 信号发生器
![提示](https://static.bdocx.com/images/bang_tan.gif)