VGA显示的多通道数字示波器课设.docx
《VGA显示的多通道数字示波器课设.docx》由会员分享,可在线阅读,更多相关《VGA显示的多通道数字示波器课设.docx(22页珍藏版)》请在冰豆网上搜索。
VGA显示的多通道数字示波器课设
2013~2014学年第一学期
《专业综合设计》
课程设计报告
题目:
VGA显示的多通道数字示波器
班级:
10电子信息
(2)班
姓名:
许怀生张小东
刘玉陈奇江陆子
指导教师:
崔雪英
电气工程系
2013年11月
《专业综合设计》任务书
课题名称
VGA显示的多通道数字示波器
指导教师
崔雪英
执行时间
2013~2014学年第一学期第11周
学生姓名
学号
承担任务
评分
刘玉
1009121046
理论分析与计算
张小东
1009121090
硬件电路设计(AD采样;转换部分)
许怀生
100912108
硬件电路设计(其他部分)
陈奇
1009121010
软件设计(软件流程图部分)
江陆子
论文撰写,排版
设计目的
用FPGA平台实现VGA显示的多通道数字示波器
设计
要求
(1)示波器实时采样频率为10MHz,A/D转换精度为10bits。
(2)模拟信号输入电压为-2.5V---+2.5V,频率为0-1MHz。
(3)两路数字信号输入。
数字信号低电平为0V,高电平为3.3V,频率为0-1MHz。
摘要
本设计是基于sopc技术的VGA显示数字存储示波器。
采用在FPGA内嵌入32位软核处理器MicroBlaze的SOPC技术为核心来构建系统,充分利用FPGA中的可编程逻缉器件资源构成各部分数字电路,处理器与eda技术相互补充,形成了整个基于VGA显示的数字示波器的核心,完成高速数据采样控制、数据处理及波形显示等系统功能。
设计分为模拟信号预处理电路、AD采样电路、触发电路、RAM存储、Flash存储、可调数字信号产生、MicroBlaze控制模块、VGA显示输出与人机交互接口控制。
设计中采用实时采样,AD采样后的数据经过触发电路,满足触发条件后送到RAM中,然后显示在显示器上,并能够相应按键存储命令,实现波形数据的非易失性存储。
设计中发挥可编程逻辑器件和处理器各自优势,符合现代设计理念,满足设计要求。
关键词:
多通道,FPGA,数字示波器,10位AD,VGA显示
第1章方案论证与设计
1.1设计思路
本系统以Xilinx公司的FPGA芯片XC3S500E为控制核心,FGPA内建双缓冲机制的VGA显示模块,实现中文信息显示和绘制波形的颜色控制。
使用Verilog描述硬件控制A/D转换器,存储采样数据并进行数据处理,简化了硬件电路,提高稳定性。
输入模拟信号系统通过4级级联放大器,达到了所要求的带宽和精度。
使用硬件比较器达到单次触发,和存储显示功能和正负延时功能。
选用存储容量为8K的EEPROM芯片24C64作为手动存储的存储介质,实现掉电不丢失。
另外通过软件实现了自动选择扫描速率和垂直量程的功能。
图1系统框图
1.2方案论证与比较选择
数字存储示波器系统由信号调理电路、触发电路、A/D采样、数字通道、数字信号产生电路、控制处理系统、键盘控制模块、VGA显示模块等组成。
方案一:
由Verilog硬件描述语言完成全部逻辑控制功能,组成可编程片上系统。
此方案优点是处理速度快,不占用多余的片上资源。
但是系统功能复杂,且控制、运算量大,开发起来比较困难。
方案二:
采用EXCD-1开发板为控制核心,由Verilog硬件描述语言实现采样频率控制模块、数据存储控制模块和VGA显示,键盘人机交互模块。
嵌入MicroBlaze软核作为主控制模块,用来处理实时性要求低和复杂的运算,并完成彩色通道显示,中文界面显示等。
整个控制系统都集中在单个芯片上,大大简化了外围硬件电路设计,增加了系统的稳定性和可靠性。
FPGA的高速性能比其他控制芯片更适合于高速数据采集和处理,而且使用FPGA内部存储模块完成输入信号的量化存储,在存储速度上有着外接RAM无法比拟的优势。
方案选择:
综上所述比较可知,方案二既可满足题设基本要求又能充分发挥扩展部分,电路简单,易于控制,所以选择方案二。
1.3系统总体方案分析
系统总体上利用Xilinx系统开发环境ISE,内建AD采样控制,键盘控制,VGA控制等多个模块,并利用XPS将MicroBlaze微处理器嵌入到FPGA中,实现了可编程片上系统。
MicroBlaze通过LBM总线访问片上存储模块BlockRAM;通过OPB总线上挂接外设接口连接并进行驱动。
VGA显示部分采用双缓冲机制工作,在FPGA内建GRAM,按照一定时序将将RAM内缓存数据映射到VGA显示器上。
通过这种机制,我们可以灵活地
另外大跨度增益自动调节是程控增益放大电路设计的一个难点,本系统通过4级级联放大器,并合理地由软件控制继电器实现增益的步进,达到了要求的带宽。
第2章理论分析与计算
2.1实时采样与等效采样的选择
通常采样是按固定顺序进行,并且采样顺序与示波器屏幕上显示的顺序相同,这就是实时采样,实时采样技术的好处就是可以捕获单个信号。
题目给出AD的采样速率为10M,当档位在1us/div,显示器上选择分辨率为40点/div,此时显示器上每四个相邻扫描点为相同的幅值,但被检测信号的频率范围是在0—1MHz,即在最高频率1MHZ时,实时采样可以在每周期采10个点以保证取到一个完整的信号波形。
等效时间采样又称重复采样,在满足以下两个条件时:
1.波形必需重复;2必需稳定触发,示波器可以从多个波形周期获得波形不同点的采样,然后在屏幕上完整恢复波形,它包含顺序采样和随机重复采样两种技术,其好处是可用很慢的模数转换器。
,且题目要求能检测单次按键的波形,等效采样不能完成非周期波形的采样,故选用实时采样方式。
2.2采样速率分析
显示波形的水平轴的调节通过采样点的时间间隔的变化来调整,题目要求有1us/div,1ms/div,1s/div三个档位,并且水平显示分辨率为20点/div,因此对应的采样速率是25ns/点、25us/点、25ms/点,当显示波形的水平分辨率为1us/div时,能分辨的信号最高频率为1MHZ,由奈圭斯特定理要求采样速率至少为2MHZ才能使信号不失真;分辨率为1ms/div时,可以分辨的信号最高频率为1KHZ,采样速率至少应为2KHZ,同理分辨率为1s/div时,采样速率至少为2HZ。
本设计中保持AD的采样速率为10M,完全可以满足实际需求。
2.3垂直灵敏度分析
设计要求垂直灵敏度分为10mv/div,100mv/div,1v/div三档,我们的垂直刻度为8div。
A/D转换器的输入信号电压幅度为0~2V,当示波器满刻度显示时,被测信号的幅度将分别为:
VI1=1V/div×8div=8V,VI2=0.1V/div×8div=0.8,VI3=10mv/div×8div=80mV。
A/D转换器的满刻度输入值为VMAX=4V,程控放大器电路的增益AN=VMAX/VIN,其中N=1、2、3,对应于3挡不同垂直灵敏度的增益分别为:
A1=2/8=0.25;A2=2/0.8=2.5;A3=2/0.08=25。
我们进一步提高了参数,增加了250倍档,1mv刻度。
2.4扫描速率分析
A/D的转换速率取决于被测信号的频率范围,或DSO对扫描速度的要求,设计要求扫描速度含1ms/div、1μs/div、1s/div三挡,我们通过FPGA内建分频电路实现了最高采样率16MSa/s,每10倍频步进,共六档,增加了该示波器的实用性。
水平显示分辨率为64点/div,以保证显示波形清晰稳定。
2.5显示分辩率分析
显示波形的垂直分辨率:
显示RAM中的数据为12位,其中模拟信号经AD后的值为10位,两路数字信号的值各占1位,,要求中有垂直分辨率为10mv/div,100mv/div,1v/div,垂直刻度为8div。
A/D转换器的输入信号电压幅度为0~5v,当示波器满刻度显示时,被测信号的幅度将分别为:
VI1=1V/div×8div=8V,VI2=0.1V/div×8div=0.8v,VI3=0.01v/div×8div=0.08V。
A/D转换器的满刻度输入值为VMAX=5V<8v,根据题目要求通过外部输入来信号来改变分辨率以适应不同精度。
将AD采样的值和数字信号的值据当前档位进行计数存储,即1us/div时每10个点保存一个,1ms/div时每10000个点保存一个,1s/div时每采样10000000个点保存一个。
第3章系统硬件设计
在Xilinx的EXC1控制板的基础上,为实现系统功能,所设计的外围硬件电路主要包括:
电源电路、信号调理电路、A/D转换电路、触发电路、及键盘接口电路。
下面只叙述其主要功能实现部分。
3.1信号调理电路
由于模拟信号输入为±2.5V,而所用A/D有效输入为2Vp-p,因此需要输入信号进行比例缩小,因此需要设计一个比例运算电路。
本设计采用了高速放大器AD826来实现这一功能。
AD826可以作为出色的ADC/DAC缓冲器或有源滤波器用于数据采集系统中,0.01%建立时间为70ns,最大输入失调电压低至2mV。
利用AD826来搭建一个反向比例运算电较路,其运算公式为:
根据设计要求,取Rf=1KΩ,R1=2.5Rf=2.5KΩ,Rp=R1∥Rf=0-71KΩ。
为了保证信号显示与输入信号同相,再采用AD826搭建反相器,将输出信号接入到后面的AD876中进行采样转换。
信号调理原理图
3.2模拟通道与AD采样电路设计
此部分由于贴片元件多,抗干扰等要求苛刻,因而自己绘制了PCB。
模拟部分由AD采样部分,程控放大部分,电源部分等构成。
AD采样电路图
程控放大器的作用是对输入信号进行衰减或放大调整,使输出信号电压在AD转换器输入电压要求范围内。
信号从探头输入,进入程控放大(衰减)电路进行放大(衰减),再对被放大(衰减)的信号进行电平抬高后送入高速AD转换器对信号进行采样,采样所得的数据存入FPGA内建的存储器中。
时钟引出插针。
由FPGA为高速AD转换器提供从32Hz-16MHz的6种不同的频率信号作为不同水平扫速时的采样时钟频率。
从程控放大器输出的信号送入AD转换器。
在本电路中选用的是精密运算放大器OPA4727和高速AD8012,合理的搭配两种运放来设计电路,互补优劣,使系统既达到了高精度和高带宽,又大大节约了设计成本。
我们选用10bit,65MSa/s,的ADC10065.达到了采样率和精度的要求。
3.3A/D转换电路
AD876是一款CMOS、160mW、10位、20MSPS模数转换器(ADC),内置一个片内输入采样保持放大器。
它采用多级流水线架构,内置输出纠错逻辑,可提供精确的性能,并保证在整个工作温度范围内无失码。
参考输入的驱动和检测连接将外部压降降至最低。
可以将AD876置于待机工作模式,此时功耗降至50mW以下。
模拟输入端接受2Vp-p值范围内胡信号,数字I/O接口支持+5V或+3.3V逻辑。
可以将数字输出引脚置于高阻态;输出格式为标准二进制编码。
A/D转换模块原理图
3.4触发电路设计
数字存储示波器中触发电路的作用是:
在满足触发条件时开始对采集的数据按规定的起点地址进行存储和显示。
触发电路如图所示。
电阻R2、R3用于调节或选择触发电平,分别为和20K,后者为可调电位器,可以在0~5V范围内任意选择触发电平。
触发电路原理图
3.5FPGA部分硬件设计
顶层模块包括例化的8个子模块。
1.AD采样时钟产生模块Modulead_clk_gen。
2.AD与fifo控制模块Modulefifo_control(核心控制模块,作用为AD与fifo读写控制和Uart发送控制)。
3.VGA显示模块vga_drv与GRAM模块。
4.键盘输入模块。
5.锁相环倍频模块。
6.缓存采样数据的双口RAM模块。
下面对有关部分进行说明:
3.5.1VGA显示部分
该模块使用双缓冲机制,软核MicroBlaze通过读写显存来控制VGA显示。
考虑VGA显示部分要求至少有三种颜色,我们使用2bit数据表示一个点,可以完成4色显示,可以对不同通道使用不同颜色加以区分。
网格与水平标度轴由硬件实现,CPU通过接口方便地进行访问,充分利用了SOPC的优势。
GRAM位宽32bit,大大提高了FPGA刷屏的速度。
vga_drv与GRAM对内嵌的MCU设计成为BlackBox,MCU只需向相应地址发送合适数据即可显示想要的波形。
经实践证明该方案可稳定地显示多种颜色和中文信息。
3.5.2数字信号的产生模块
在FPGA内建比较器,使用一个表示信号平均值的数据与AD采样得来的数据进行比较得到同频同相的A路信号,再经由A信号触发计数器,经过合理设置计数脉冲,得到有45°延时,占空比25%的B路信号。
表示信号平均值的数据由MicroBlaze测量信号提供。
3.5.3FLASH存储部分
由于要求掉电不丢失,因此我们使用开发板上的一块AMD的型号为AM29LV160DB的FLASH存储器,当按下存储健后,FLASH把RAM中的数据写到FLASH中,根据资料中的读写时序图,使用状态机实现这个过程,当按下回显的按键时将FLASH中的数据读回图像显示RAM,再显示出来。
3.5.4键盘模块
键盘采用PS2键盘,,用FPGA作PS2键盘的控制器,在FPGA中嵌入相应的功能模块,充分利用了FPGA的内部资源,增加了系统的可靠性和灵活性。
键盘电路
第4章软件部分设计
4.1软件流程图
系统程序流程图
4.2软件组成
本系统的软件部分包括AD采集控制,水平分辨率控制,垂直分辨率设置,多个颜色的波形画线函数,测量功能,自动功能,存储与回放,存储显示状态控制,通道选择控制,用户界面实现等。
由于系统充分利用了SOPC的优势,将大部分工作交由硬件完成,从而大大简化了系统的软件设计。
第5章系统测试与结果分析
5.1测试仪器
DS1102E数字示波器1台,EE1641D函数信号发生器1台,数字万用表1
5.2测试方法
用标准数字示波器和本设计示波器并联测量同一信号的幅度和周期,测量所得数据分别记为Vi/Vo,T1/T2。
5.3测试数据
表1.垂直灵敏度测试
档位
输入Vi/V
输出Vo/V
误差=|Vo-Vi|/Vi×100%
1V/div
2.50V
2.47V
1.25%
1.00V
0.97V
3.0%
100mv/div
300mV
297mV
1.0%
100mV
98mV
2.0%
10mv/div
30.0mV
31.0mV
3.3%
10.0mV
10.3mV
3.0%
表2扫描速率测试
档位
输入f1
输出f2
误差=|f1-f2|/f1×100%
1s/div
5.00Hz
5.09Hz
4.5%
15.00Hz
15.33Hz
1.2%
1ms/div
220Hz
218Hz
1.0%
660Hz
663Hz
0.45%
1us/div
220KHz
224KHz
1.8%
660KHz
643KHz
2.6%
表3数字通道测试
档位
输入f1
输出f2
误差=|f1-f2|/f1×100%
1s/div
5.00Hz
5.04Hz
0.8%
15.00Hz
15.30Hz
2.0%
1ms/div
220Hz
216Hz
1.8%
660Hz
665Hz
0.75%
1us/div
220KHz
217KHz
1.3%
660KHz
664KHz
0.6%
由表中数据知,测量结果都在测量误差允许范围内,满足题目要求的误差≤5%。
5.4实际效果
图2实际显示效果图
5.5结果分析
本设计完成了题目所要求的各项基本指标,并达到了全部的发挥部分要求。
实现了实时显示和存储多通道显示,自行产生两路数字信号,且A路数字信号与输入模拟信号同频同相,中文提示时间、幅度刻度和通道颜色,图像左右平移,存储显示的正负延时。
很好地完成了设计任务。
总结
本设计以EXCD-1开发板为控制核心,实现了多通道VGA显示的数字存储示波器。
通过测试,系统不但完成了基本要求,也完成了发挥部分的要求。
在设计制作过程中遇到了不少难题,但经过几天的不懈努力,经过一次次的测试和改,最终圆满完成了设计任务。
参考文献
[1]李辉.基于FPGA的数字系统设计.[M]西安电子科技大学出版社
[2]黄智伟.全国大学生电子设计竞赛技能训练.[M]北京航空航天大学出版社
[3]何宾.xilinx可编程逻辑器件技术详解.[M]清华大学出版社
[4]夏宇闻verilog数字系统设计教程北京北京航空航天大学出版社,2003
[5]孙航XIlinx可编程逻辑器件的高级应用与设计技巧,北京,电子工业出版社,2004
附录
主要程序
1、###########################
#CreatedbyBaseSystemBuilderWizardforXilinxEDK10.1.03BuildEDK_K_SP3.6
#SunSep1922:
50:
272010
#TargetBoard:
HepHepEXCD2-500BoardRevC
#Family:
spartan3e
#Device:
XC3S500E
#Package:
PQ208
#SpeedGrade:
-4
#Processor:
microblaze_0
#Systemclockfrequency:
50.00MHz
#OnChipMemory:
8KB
#TotalOffChipMemory:
1MB
#-RAM=1MB
###############################################################################
2、户的按键做出响应程序部分
/************************************************/
//Locatedin:
microblaze_0/include/xparameters.h
#include"xgpio_l.h"
#include"xparameters.h"
#include"xgpio.h"
#include"xbasic_types.h
XGpiokey,output;
volatileu32out_put;//xxxxxxxxxxxxxxxxxxxx共18位
//波形左移波形右移标尺左移/右移暂停/继续开显示/显示时间尺度幅值单位数字信号频率调节存储回放多道显示选择
volatileu8h_scale,v_scale,trig,disp,channel,mov;
volatileu8freq,vga_on_off,pause_run,,cursor_left.cursor_right;
////////////////////////////////////////////////////////////////////
//
//函数名:
delayusdelayms
//功能描述:
延时2us1ms
//参数:
Xuint16delay
//返回值:
void
//
///////////////////////////////////////////////////////////////////////
staticvoiddelayus(Xuint16delay)
{
volatileXuint16i,j;
for(i=0;ifor(j=0;j<10;j++)
;
}
staticvoiddelayms(Xuint16delay)
{
volatileXuint16i,j;
for(i=0;ifor(j=0;j<3785;j++);
}
/*************************************************
Function:
key_scan()
3、scription:
扫描键盘并返回键值
Calls:
nono
CalledBy:
main
TableAccessed:
TableUpdated:
/
Input:
/。
Output:
Return:
按键值
Others:
*************************************************/
Xuint8key_scan()
{
Xuint8value;
Xuint8temp,sccode,recode;
pio_SetDataDirection(&key,1,0x00);//设置为输出
//P1=0xf0;
XGpio_DiscreteWrite(&key,1,0xf0);//输出0xf0
delayus
(1);
XGpio_SetDataDirection(&key,1,0xf0);//设置为输入
if((XGpio_DiscreteRead(&key,1)&0xf0)!
=0xf0)//若读回值不是0xf0
{
delayms(5);
if((XGpio_DiscreteRead(&key,1)&0xf0)!
=0xf0)
{
//P1=0xf0;
XGpio_SetDataDirection(&key,1,0x00);//设置为输出
XGpio_DiscreteWrite(&key,1,0xf0);//输出0xf0
//temp=P1;
XGpio_SetDataDirection(&key,1,0xf0);//设置为输入
temp=XGpio_DiscreteRead(&key,1);//读回值
sccode=temp&0xf0;//取高四位
//P1=0x0f;
XGpio_SetDataDirection(&key,1,0x00);//设置为输出
XGpio_DiscreteWrite(&key,1,0x0f);//输出0x0f
//temp=P1;
XGpio_SetDataDirection(&key,1,0x0f);//设置为输入
temp=XGpio_DiscreteRead(&key,1);//读回值
recode=temp&0x0f;//取低四位
temp=sccode|recode;
//xil_printf("temp:
%x\r\n",temp);
switch(temp)
{
case0xEE:
value=0;break;
case0xDE:
value=1;break;
case0xBE:
value=2;break;
case0x7E:
value=3;break;
ca