简易 数字存储示波器实验报告.docx
《简易 数字存储示波器实验报告.docx》由会员分享,可在线阅读,更多相关《简易 数字存储示波器实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
简易数字存储示波器实验报告
一.数字存储示波器简介及设计思路………………………………………………3
2.实验设计原理……………………………………………………………………5
三、系统各模块的简单说明…………………………………………………………5
四.最终实现功能说明………………………………………………………………8
五.实验设计实现功能模块具体分析………………………………………………9
六、实验硬件分配及总体仿真波形…………………………………………………15
一、数字存储示波器简介及设计思路
数字存储示波器是20世纪70年代初发展起来的一种新型示波器。
这种类型的示波器可以方便地实现对模拟信号波形进行长期存储并能利用机内微处理器系统对存储的信号做进一步的处理,例如对被测波形的频率、幅值、前后沿时间、平均值等参数的自动测量以及多种复杂的处理。
而我们此次要设计的便是一种简易的数字存储示波器。
数字存储示波器可实现以下功能。
通过对来自信号源的信号进行采集(可分为实时取样和等效时间取样),将获得的值存储在内置RAM内,后期操作有对波形的显示、波形的测量(如测量频率、幅值、上升下降时延等)和波形处理(如双踪两波形的相加、相减、X-Y显示等等)。
其工作示意图如下所示:
而我们设计的简易数字存储示波器实现的功能有对单一信道信号进行采样存储显示(分实时显示和存储后期调用显示)、对信号进行频率测量并显示数值、对波形进行上移、下移、扩展、收缩操作、示例波形演示(包括正弦波、锯齿波、方波)。
我们所用的硬件有实验箱上的高速的模数转换器TLC5510、FPGA芯片、单片机、LCD显示屏、FPGA内置RAM、外围扩展的RAM和键盘。
以下框图为实验箱硬件使用说明图:
因此我们所需要设计的部分便是A/D采样控制接口模块、键盘控制接口模块、存储器读写控制模块、LCD控制接口模块和LCD显示模块。
系统工作流程图如下所示:
通过RESET按键初始化,按键选择是否进行采样或是进行其他操作(如示例波形的演示、调用查看以前存储的波形),若进行采样,则将采集的数据存储到FPGA内置的RAM中,下一步进行是否存储或进行实时数据处理。
若进行实时数据处理则可以在LCD显示屏上观察到相应的波形,并且可以对其进行上移、下移、扩展、收缩和测频的处理。
二、实验设计原理
设计总体逻辑思路如下:
系统开始工作时,通过按键选择是否开始检测波形,若是,则首先由频率检测器检测频率,然后根据测得的频率选择适当的采样频率。
信号源产生的信号通过A/D采样,采样结果保存在FPGA内置的存储器中。
待存储完一帧数据时进行输出到LCD上显示。
待显示100ms后暂停100ms以消除视觉暂留效应,然后准备下一帧数据的存储和显示。
如若需要存储波形,则在当前显示的同时,将采样得到的数据送往片外的SDRAM存储,直至存储结束或者存储容量达到上限。
当需要显示存储波形时,则将外部SDRAM的数据读进来,送往LCD显示,其原理和实时显示大致相同。
在显示暂停期间,要读取按键情况进行整体控制,比如控制波形是否显示在LCD屏幕上、是否存储、是否显示实时波形还是存储波形、是否上下移动、是否进行时域扩展等。
在实验的验收中,因为缺少信号源的调试,因此A/D采样存储模块未得到验证。
为了展示对LCD显示控制,我们利用FPGA内部的ROM进行波形数据预存,通过对ROM读取来模仿外部的AD采样存储。
同时为了演示各种不同的波形(正弦、方波、锯齿波),同样可以通过按键进行选择。
最后我们可以在LCD上观察到稳定的正弦波、锯齿波,方波较差。
三、系统各模块的简单说明
根据上述硬件使用说明图以及实验原理,我们的设计总体有以下几个模块:
1)分频、测频模块和选择A/D采样速率模块
说明:
FREDEVIDER作为分频器得到所需要的各档采样频率。
同时部分频率分量也在其他模块的计时处使用。
FREQ_COUNT是测频模块,用于测量输入信号的频率。
其基本原理是给一个1s宽的高电平脉冲,在此期间对信号时钟的跳变进行计数,一秒结束后所得的数据就是信号的频率。
SAMPLERATE模块是为了针对不同频率信号的档位选择不同的采样频率。
为了在LCD上显示适当数量周期的波形,我们将频率设置为12个档位。
最低档位是1~5Hz,采样频率为100Hz,然后是5~10Hz,采样频率为200Hz,然后是10~50Hz,采样频率为1000Hz等等。
以此类推,直到最高档500K~1MHz,采样频率为20MHz。
2)按键控制模块
说明:
KEYBOARD模块是单片机和FPGA的接口和简单的初步处理,用来控制键盘操作;各buffer触发器是对按键的记录。
为了防止对按键的重复读入,此处的触发器设置为上升沿触发,这样每次按键只读入一次。
模块图如下所示:
3)实时波形处理模块
说明:
KEY_DEAL模块主要是处理按键,包括对按键的记录和相应的参数计算;tlc5510模块是对外部超高速A/D采样芯片tlc5540采样得到的实时数据进行采样存储控制的,作用是将采样得到的数据存储在内置的RAM内,用于实时显示,该RAM容量较小,只用来存储一帧的波形数据。
需要说明的是,tlc5510里面包括一个100ms的计数器,作用是在一帧数据显示完计时100ms等待,用于消除视觉暂留效应。
计时过后,开始下一帧数据的存储显示。
4)存储波形控制模块
说明:
该模块的主要作用是控制存储波形数据的读写操作和送到LCD显示,同时也包括在显示存储波形时对相应按键的处理。
STORE_CTRL模块对存储波形的数据进行采样存储的初步处理;SDRAM_CTRL模块对外部DRAM进行读写控制。
KEY_DEAL2是用来对按键进行处理,功能类似于实时部分中的KEY_DEAL,只是多了左右波形移位的控制。
5)LCD控制显示模块
说明:
SWITCH_CTRL是用于选择显示实时波形还是存储波形的数据;LCD_POSITION是用来计算LCD屏幕中即将扫描到的位置;LCD_DISPLAY是用来进行显示控制的,包括计算是否需要显示和相应的RGB的输出。
6)PLL锁相环模块
整个系统的工作频率需要大于LCD的扫描频率20M,因为需要在即将得到的扫描点处进行是否需要显示的计算和处理。
我们通过FPGA内部配置一个锁相环,以得到80M的时钟。
四、最终实现功能说明
本次实验最后实现了波形频率的测量、波形的稳定显示、波形的上下移位、时域上的伸缩扩展以及内置不同波形的选择,完成了设计最初目中的大部分。
和最初的预期相比有一部分没有实现,即外部的A/D采样和保存部分。
同时由于我们使用的系统箱中,所要用到的FPGA-LCD接口引脚与FPGA-单片机接口引脚有复用部分,因此放弃用键盘操作控制系统功能,而是选用八位数码管下方的八个开关进行按键输入。
同时测得频率显示在数码管上。
示例波形选择查看时,得到的正弦波和锯齿波均能很好地展现,而方波却不能得到稳定的波形。
我们认为大致的问题是因为方波中大部分持续数据都一样,在同一行中需要持续显示多个数据,而数据的处理可能稍微跟不上(就是说80M仍然不能完全保证时序),因此波形不稳定。
另外需要说明的是,左移右移只对存储波形的显示有效,因为在实时显示下,波形总是会一帧一帧的更新,按键没有意义。
在切换到另一种波形显示时,当前波形显示的格式应该回到默认状态,而与之前的设置无关。
同理,当前的按键值也只对当前显示的波形格式有效。
因此实时显示和存储显示的Reset还要受waveform的影响,可参见原理图。
五、实验设计实现功能模块具体分析
以下为本次实验验收时的系统框图:
由于框图比较大,为方便观看,将其分开观看。
各模块功能具体说明:
1、KEY_DEAL:
主要是处理按键,包括对按键的记录和相应的参数计算。
对于八个按键开关:
KEY1:
RESET键(高电平有效);
KEY2:
波形上移;
KEY3:
波形下移;
KEY4:
波形扩展;
KEY5:
波形缩小;
KEY6:
波形左移(仅对存储后读取波形有效);
KEY7:
波形右移(仅对存储后读取波形有效);
KEY8:
选择示例波形(通过按键形成一个计数器,1是正弦波,2是方波,3是锯齿波,0没有)。
八个数码管中前三个是显示频率测量值的有效数字,第四个是显示频率的档位。
显示出来的频率档位只设置为两个,小于1K的为第一档,1K~1M的是第二档。
第一档显示百、十、个三位,二档显示百千、十千、千三位,所以有效数字有限。
对于按键基本是以触发器的形式保存的(在keydeal内部可以看出,同时对于需要计数的key值是每记住一次就清除一次,防止下次误读入,而对于waveform则无所谓,因为是持续显示)。
同时,KEY_DEAL模块负责计算对应于上移、下移时,LCD显示屏上的位置。
其计算原理需要结合下面有关计算LCD横纵坐标来看。
对于上移和下移,只需要根据按键值改变基准位置就可以了,比如每上移一次,基准行值减小“1111”,即15,往下移动则基准行值加上“1111”。
当然这里有位移限制值,当移动到最值时便不可进行操作。
对该模块的功能进行简单仿真。
本次仿真假使UP=1,即使波形上移,仿真波形如下:
2、FREQDEVIDER:
对系统时钟进行分频,得到本实验设计所需的各种采样频率。
本模块设计无难度,主要就是分频程序的编写。
以下为仿真波形:
输入为CLKIN,输出为各个分频信号CLKOUT1-11。
(由于截图问题,后面周期很大的波形没有表示出来。
)
3、FREQ_COUNT:
对信号进行频率测量。
对于信号频率的测量,主要思想是通过输入一个1s的脉冲(由20k频率的时钟计数20000得到1s,其中20k的时钟频率由分频器得到),在这1s内对待测信号进行计数,等同于过零点测频,1s后得到的数据就是待测信号的频率。
4、WAVE_CHOOSE:
用于选择需要显示的波形,分别是零、正弦波、方波、锯齿波。
00,01,10,11分别对应无波形输出、正弦波输出、锯齿波输出和方波输出。
5、DATA_CHOOSE:
根据WAVE_CHOOSE,从三个ROM中进行波形数据选择输出。
6、RAM_ADDR:
用来设置计算读取ROM地址的,包括步长的选择。
说明:
对于波形的扩展和收缩,需要通过此模块实现。
其设计思路如下:
如果将ROM中的数据每隔两个点读一次,那一个周期只要读32个点(总共64个),一个周期在LCD上占的列值为96(每三个列显示一列)。
如果要扩展时间波形,那么就将读取地址的步长变为原来的一半,与上面的比较,就是变为步长是1,那么我一个周期需要显示64个点,总共占据LCD的192列,这样波形就扩展了。
同理,如果要收缩,那么将时间步长增大,这样读取的数据点少,一个周期占的显示列就少,整个屏幕就可以显示更多的周期。
在设计中,是以2倍2倍的关系进行扩展和1/2的关系进行收缩的。
7、LCD_POSITION:
用来计算LCD中即将扫描的位置。
LCD的工作原理是逐点逐行的扫描,扫描的规格是1026*506,但是显示的有效区域是800*480。
对LCD的显示控制输出数据分为三类(一类为18位的RGB颜色值,一类是扫描时钟,最后一类是数据加载允许DE,即DATAENABLE)。
因此控制的原理是需要知道LCD现在扫描到什么地方,当到达需要显示的位置时,输出恰当的RGB值或者令DE=1。
LCD_POSITION模块用来计算下一个即将扫描的LCD的位置,输出为扫描位置的两个坐标参数,即行和列。
当LCD屏幕作为示波器显示屏幕时,可将LCD横轴作为时间轴,纵轴作为幅值轴。
在横轴上,每隔一个点取一个显示(这样的好处是需要的采样数据少,同时可以只显示几个波形,而不至于显的太拥挤,不然LCD上的点会比较密集)。
对于纵轴,因为要代表幅值,一个很直观的策略就是待显示的点与基准零点(取为368行,因为显示中心是240行,幅值最大256,上下折半就是128,那么最地点的位置就是240+128=368)之间的行差值就是数字信号的幅度。
所以在要显示的时候,首先从LCD_POSITION中读出下一个要显示的点,然后将列值作为ROM的地址(列值的低几位,因为整个屏幕要显示几个周期的波形),读出信号的幅值数据,将它与即将显示的行值相加,再和基准线比较,如果相等,就表明这是我们要显示的点,否则就不是,通过此来选择RGB的数值。
因为数据处理需要一些时间,从ROM中读出数据也需要时间,因此设置处理时钟和读写数据时钟的速度为80M,而LCD的扫描显示是20M,这样可以保证在下一个显示点真正显示的时候,数据已经处理好,到底要不要显示已经决定好了。
80M的时钟是通过20M的时钟经过锁相环(PLL0)实现的。
8、LCD_SHOW:
用来进行显示控制的,包括计算是否需要显示和RGB的输出。
对于LCD的显示,我们的处理方法是,在有效的显示区域(800*480)始终令DE='1',在不需要显示的点设置RGB全1,显示出的是白色,在要显示点的部分,设置显示蓝色(蓝白对比色差比较大,便于观察)。
需要显示的位置是通过如下方法实现的:
该模块有一个输入L_POSITION,作为波形的基准行。
该输入是从KEY_DEAL中得到的,主要是处理按键对波形控制的上下移动。
在每次读入下次即将扫描到的点时,首先根据读入的列数看是否为偶数列,如果是(每两列显示一个点),则用即将扫描到的行值减去基准行值L_POSITION,将差值与从ROM中读入的代表幅值的数据相比较,如果相等,则下一个点需要显示对应的图样,输出RGB为蓝色,否则输出白色。
在KEY_DEAL中,上下移动的按键对输出L_POSITION进行调整,如果上移,则将L_POSITION的值减小“1111”,即15,否则加上“1111”。
如此便可实现波形整体的上下移动。
9、ROM1、ROM2和ROM3:
存储上述三种波形一个周期的数据。
此部分的设计无难点,主要就是将相关数据按照采样原理存入RAM中。
六、实验未实现功能分析说明及问题分析
本次实验中,对波形进行采样并且存储到外围RAM中进行存储这一功能没有验证。
但我们的设计思路是这样的:
A/D采样模块,由于实验室当时没有相关的信号发生器,故验收时无法验证,A/D采样整个工作的流程为加载信号Reset之后,先对信号进行频率测量,在测得频率之后(一秒多一点点的时间),选择采样的频率(外部的AD采样时钟始终为20M的高速采样),但是抽样存储的时钟是由信号时钟的频率进行选择的。
设置为12个档位,1~5,采样频率为100,5~10,采样频率为200,10~50,采样频率为1000。
以此类推,直到最高档500K~1M,采样频率为20M。
而对于存储波形,为了方便显示,和LCD同步,存储的地址也是每隔三个取一个,而我们打算使用的有效显示列数为600,就是要显示200个数据。
实际中我们存储400个数据(存储地址就达到1200),这是为了在扩展、收缩波形时有数据可以显示(不然收缩一下可以显示的部分只剩下一半了)。
当存储完毕,送一个标志位给LCD的显示控制部分,准备显示。
当可以显示时,我们开始利用和现验收程序中几乎一样的方法从RAM中读取数据进行显示(注意此时RAM停止写入数据),共显示100ms(LCD_DISPLAY里有一个计数器,这是为了保持波形的稳定)。
由于在20M的扫描时钟下,扫描一次完整的屏幕需要的时间是20000000/1026/506,大约是26ms,所以100ms可以扫描不到四遍,即可显示四次波形,当然,由于视觉暂留效应(1s24幅图即可),我们看到的是稳定持续的波形。
在显示一百秒后,我们需要进行下一帧数据的存储(这里LCD的显示是一帧一帧的,不可能实时同步显示,同样是由于视觉暂留效应)。
为了消除上一帧数据显示的影响,我们在显示完100ms后再等待100ms(tlc5510中可以看出),然后进行新一轮的实时数据存储,存储完再进行显示,如此重复下去。
当需要存储波形的时候,我们一边一帧一帧的实时显示数据,同时也进行数据的存储,存储到芯片上附带的DRAM中。
同样,需要根据DRAM的大小设置存储时限,超过时限就不再存储。
这个时限是根据采样速率的变化而变化的。
当需要显示存储的波形时,我们就利用类似的方法处理SDRAM,但是和实时显示不同的地方在于:
因为LCD大小有限,一次只显示200个点,因此在不进行选择时,我们只显示当前的200个点,这个以基准的读地址为基础。
只当按一下向左或向右键时,则进行下一帧或者前一帧的显示,对应的处理方法是使基准的读地址加上或减去600(200个点),同样的,要注意的范围问题。
参数MAX_ADDR就是防止一直向右到没有数据可读。
每次在显示完毕一次后(即显示100ms之后),不仅要计时100ms然后读取新数据,还要对按键值进行处理,以便做出相应的反应。
这在KEY_DEAL中可以看出,因为处理是在READ_DONE的上升沿进行的,这样做的好处是使波形可以稳定的显示,同时也可以保证波形随着控制尽快的变化(大概200ms的时延,几乎感觉不到,且正常情况下,连续按键两次的间隔要大于200ms)。
七、实验硬件分配及总体仿真波形。
由于验收时我们未能进行拍照保存展示,所以事后我们只能通过SignalTapⅡ对ROM里的数据进行读出仿真,其中正弦波波形图如下所示:
关于实验箱硬件说明和引脚分配说明
采用实验箱上内部提供的CLK0作为20M的系统时钟。
待测信号的时钟用的是CLK5。
八个数码管工作模式5。
数码管前四个用作频率测得值的显示,前三位显示信号频率的三个有效数字,第四位显示档位。
需要注意的是这里涉及频率计数器的细节(见上分析)。
按键选用数码管下的八个开关(因单片机和FPGA引脚有复用,故放弃键盘模块)。
实验箱各控制引脚说明:
正负15V的电源打开,LCD与FPGA的接口引脚全部打到ON(即连接状态),工作模式选在模式5。