数字存储示波器的设计
一、实验目的
1.掌握数字示波测量的基本原理。
2.熟悉数字存储示波器的硬件结构。
3.掌握虚拟数字存储示波器的CVI软件设计。
设计虚拟数字存储示波器
(1)设计一个包含耦合方式选择、伏/格调整、触发源选择、时基选择等基本功能的虚拟数字存储示波器界面,要求显示屏水平刻度为10div,垂直刻度为10div。
(2)在完成内容(1)的基础上实现幅值、时基可调的虚拟双踪数字存储示波器。
要求:①垂直灵敏度至少包含50mV/div、0.1V/div、0.5V/div、1V/div四档;②扫描速度至少包含0.1u/div、1u/div、10u/div、100u/div、500u/div、1m/div、10m/div、0.1s/div八档;③增加双踪示波功能,能同时显示两路被测信号波形。
(3)数据处理设计
要求:①显示被测信号幅值包括:有效值、峰峰值、平均值;②显示被测信号的频率值。
(4)在电子测量实验箱中示波器硬件提供32K存储深度的基础上设计波形存储、回放功能。
三、实验器材
1.SJ-8002B电子测量实验箱 1台
2.计算机 1台
3.信号源(也可以使用平台的DDS信号源) 2台
4.Q9线 1 条
5.示波器 1台
4.1 数字示波器原理
数字存储示波器是用 A/D 变换器把模拟信号转换成数字信号,然后把数据存储在半导体存储器 RAM 中。当有需要时,将 RAM 中存储的内容调出,通过 LCD 用点阵或连线的方式再现波形,其原理框图可以参考图1。在这种示波器中信号处理和信号显示功能是分开的,它的性能主要取决于进行信号处理的AD、RAM 和微处理器的性能。由于采用 RAM 存储器,可以快写数慢读数,使得即使在观察缓慢信号时也不会有闪烁现象。
4.2 虚拟数字存储示波器组成
图1 虚拟数字存储示波器
虚拟示波器将计算机和测量系统融合于一体,用计算机软件代替传统仪器的某些硬件的功能,用计算机的显示器代替传统仪器物理面板。通过相关的软件可以设计出的操作方便、形象逼真的仪器面板,不仅可以实现传统示波器的功能,而且具有存储、再现、分析、处理波形等特点,还可以进行各种信号的处理、加工和分析,完成各种规模的测量任务。而且仪器的体积小、耗电少,方便携带,可以在不同的计算机上使用。
因此,在SJ-8002B中,也引用了虚拟数字存储示波器的原理来实现数据的采集。其中的信号调理、AD转换、存储数据的SRAM以及控制逻辑都在是实验平台中,计算机主要起到了数据的处理和显示的作用。
4.3 SJ-8002B电子测量实验箱示波器硬件结构
4.3.1测试范围及采集参数调整范围
测试电压幅度范围:-20V~+20V(峰峰值)
测量频率范围:1Hz~1MHz
采样时钟:
timebase序号 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
采样时钟频率 |
20M |
20M |
20M |
20M |
20M |
20M |
20M |
20M |
20M |
20M |
timebase序号 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
采样时钟频率 |
10M |
5M |
2.5M |
1M |
500K |
250K |
100K |
50K |
25K |
12.5K |
可程控增益:
Div序号 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
通道总增益A |
20 |
10 |
5 |
2 |
1 |
0.5 |
0.2 |
0.1 |
0.05 |
0.02 |
数据缓存深度:64KB
对采集的数据进行分析,显示波形的峰值、平均值、有效值和频率、周期等参数。
4.3.2 硬件原理图
图2 SJ8002B示波器硬件原理图
图2为示波器模块的原理框图。由图可见,高速采集的双通道是完全独立的,因此可以完成多种不同的测试任务,实现虚拟双踪数字存储示波器的各种功能。
4.3.3 控制逻辑
示波器的硬件控制主要分为数据写入(采集)和数据读出(显示)两个部分。其中控制逻辑全部都在存储在CPLD内部,如图3所示:
图3 示波器的硬件控制逻辑
Ain1和Ain2通道接入同样的采样时钟,同时进行转换。转换后的数据经过缓冲器,送至SRAM锁存。当一次采集完成后,由主机读回数据,进行进一步的处理,如滤波、显示等。
数据写入:AD9288在采样时钟CLK的控制下,将两路输入模拟信号数字离散为8bit数字信号经过数据缓冲器送至SRAM。地址由同一个地址计数器提供,该地址计数器为加/减计数器(采集数据时递增,读取时递减)。这样,每次采集所得数据都会顺利的存入SRAM中。
4.3.4采集部分
采集部分的关键器件是ADI公司的AD9288,它是8bit双通道含有采样保持电路的单片集成的模/数转换器,具有低功耗、体积小、动态特性好、易于实用的特点。双8bits、40MSPS,低功耗(每个通道90mw),SNR=47DB(在41MHz时),每个通道的模拟输入范围1.024Vp-p,中心电平Vin0=1/3 Vdd,3.0V模拟供电(2.7V-3.6V),两种数据输出模式(补码或原码),电平兼容TTL/CMOS。
4.3.5 调理电路
由于AD9288采用了差分输入,所以需要将实验板的模拟输入的直流耦合单边信号,无失真的转化为差分信号,并将信号的幅度进行平移,以满足AD9288 0.5~1.5V的输入要求。采用了如下的通道电路实现信号的转换。
图4 差分信号转化电路
电路中,U1是一个跟随器,作用是阻抗匹配;差分信号的产生采用了2个运算放大器,其中U2是作为输入的同相放大器,U3是作为输入补给的反相放大器。两个二极管和U4组成了信号平移部分。
4.3.6 衰减和增益控制电路
由于示波器的测试范围(-20V~+20V)比AD9288的测试范围(0.5V~1.5V)宽,因此,在采集电路的前端加入信号衰减和信号增益两级幅度调整电路,保证测量的正确性以及提高测量的精确度。
图5 衰减电路
输入通道的第一级是髙阻衰减电路如图5所示,这样可以保证数字示波器有较高的输入阻抗,同时把较大的输入信号经过衰减,以满足后续电路。这里通过继电器来实现电路的切换。通过设置衰减器的通断设置初级放大系数A1=0.5、1.25、2.5、5;幅度的粗调和直流偏移部分是由12位DAC7512来控制。通过电子开关改变运放的增益,从而实现幅度的调节。次级放大系数为A2=×5,所以通道总增益A=K1*A1*K2*A2
4.3.7 数据处理
计算出被测信号的有效值、均值、峰值、频率。
离散信号的电压平均值及峰值的数学表达式如下所示:
电压有效值:
电压平均值:
电压峰-峰值:
信号频率计算:根据频率的定义,每秒变化的次数。
被测信号的上述参数可调用实验平台软件提供的函数processing_data()获取,该函数的详细说明见5.2节中实验平台提供的函数列表。
5.1 虚拟数字存储示波器界面设计
设计一个包含耦合方式选择、伏/格调整、触发源选择、时基选择等基本功能的虚拟数字存储示波器界面,要求显示屏水平刻度为10div,垂直刻度为10div,如图6所示。
图6 虚拟数字存储示波器面板
其中用到的控件有列表控件(Ring)、命令按钮(Command)、图形控件(Picture)、文本控件(Text)、数值控件(Numeric)。
5.2 在完成界面设计的基础上实现幅值、时基可调的虚拟双踪数字存储示波器
要求:①设置垂直灵敏度至少有50mV/div、0.1V/div、0.5V/div、1V/div四档;②设置扫描速度至少有0.1u/div、1u/div、10u/div、100u/div、500u/div、1m/div、10m/div、0.1s/div八档;③增加双踪示波功能,能同时显示两路被测信号波形;④数据处理设计:显示被测信号幅值包括:有效值、峰峰值、平均值;显示被测信号的频率值。
在设计时,可以参考的程序流程和函数调用如图7所示,首先进行EPP接口的初始化以及取回用户界面设置的采集参数,如耦合方式、触发方式、垂直灵敏度、时基等,然后启动采集;当预设的采集点数采集完以后计算机把数据读回;最后对读回的数据进行处理,例如计算幅度、频率,进行滤波并且显示波形等操作。
设计前,请完成各档位对应的增益和时基的计算选择并把结果填入下面的表1和表2中。计算方法举例:
⑴ 给定垂直灵敏度20mv/div ,则量程 = 20mV × 10 = 200mV = 0.2V ; 由于AD9288的输入范围是 0.5V----1.5V,为提高分辨率,可采用5倍的通道总增益,即0.2V×5=1 V,对应于4.3.1节的SJ8002B电子测量实验箱测试范围及采集参数调整范围即可得到Div序号为2。
垂直灵敏度 |
50mV/div |
0.1V/div |
0.5V/div |
1V/div |
量程(V) |
||||
通道总增益 |
||||
Div序号 |
表1
⑵ 给定扫描速度为200u/div,则采样时间TS =200u×10 =2000u=2ms,由于满屏采样点数固定为25000点,所以由FS×TS <25000,可得到FS < 12.5M 。由于提供的时钟没有12.5M,因此可选择最接近的10MHZ作为采样时钟。
Timebase序号 |
||||
tdiv(s) |
0.1u/div |
1u/div |
10u/div |
100u/div |
采样时钟(HZ) |
||||
Timebase序号 |
||||
tdiv(s) |
500u/div |
1m/div |
10m/div |
1s/div |
采样时钟(HZ) |
表2
图7 示波器软件流程图
设计中可参考的CVI软件和实验软件平台提供的主要函数如下表所示:
(1) |
函数功能 |
EPP接口初始化 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
函数原型 |
void epp_init(void) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
输入参数 |
无 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
输出参数 |
无 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回值 |
无 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(2) |
函数功能 |
返回控件的当前值 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
函数原型 |
int GetCtrlVal (int panelHandle, int controlID, void *value) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
输入参数 |
panelHandle - 内存当中的面板句柄,即为控件所在面板的句柄值 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
输出参数 |
value 返回的控件当前值 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回值 |
0 -成功 其他值-失败 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(3) |
函数功能 |
Ain1和Ain2采集过程控制 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
函数原型 |
int sampling ( unsigned char coupling1_cw, int div1, int DC1_code,unsigned char coupling2_cw, int div2, int DC2_code,int timebase, unsigned chartri, int sampling_points,int Panel_Handle, int stop_ID, unsigned char ain1_data[], unsigned char ain2_data[],double *show_pots) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
输入参数 |
coupling1_cw,coupling2_cw == Ain1,Ain 2通道的耦合方式控制字
DC1_code,DC2_code == Ain1,Ain 2通道的垂直偏置,取值范围10~4095
tri == 触发源选择 0:时钟CLK1 3: 外部信号 4:内部DDS1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
输出参数 |
ain1_data[] == Ain1的采集值 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回值 |
0-采集成功;输出值有效 |
(4) |
函数功能 |
由enable_timer( )函数调用来设置定时器启动,实现循环采集 |
函数原型 |
int SetCtrlAttribute (int panelHandle, int controlID, int controlAttribute, ...) | |
输入参数 |
panelHandle - 内存当中的面板句柄,即为控件所在面板的句柄值 | |
输出参数 |
无 | |
返回值 |
0 -成功 其他值-失败 | |
(5) |
函数功能 |
采集数据处理-根据采集的参数设置,计算信号的频率,峰峰值,平均值和有效值 |
函数原型 |
int processing_data (unsigned char data[], int points, unsigned char coupling_cw, int div,int timebase, double *signal_fr, double *vp, double *vm, double *ve) | |
输入参数 |
data[ ] - 采集数据存放数组 | |
输出参数 |
signal_fr== 信号频率Hz | |
返回值 |
0 -OK ,输出值有效 | |
(6) |
函数功能 |
在图形控件上显示波形 |
函数原型 |
int PlotWaveform (int panelHandle, int controlID, void *yArray, int numberOfPoints, int yDataType, double yGain, double yOffset, double initialX, double xIncrement, int plotStyle, int pointStyle, int lineStyle, int pointFrequency, int color) | |
输入参数 |
panelHandle - 图形控件所在面板的句柄值 | |
输出参数 |
无 | |
返回值 |
整数 代表所绘图形的句柄 |
5.3 在电子测量实验箱中示波器硬件提供32K存储深度的基础上设计波形存储、回放功能
在5.2节设计的虚拟存储示波器面板上有两个命令按钮(Command)控件,如图6所示,保存波形(保存按钮)调用ArrayToFile()函数,打开波形文件(打开按钮)调用FileToArray()函数,波形的显示调用PlotWaveform()函数,以上函数均由CVI软件提供,可直接使用。
6.1 双踪显示波形的观测
由两台函数信号源分别产生两路电压信号,一个产生幅度为5V,频率为5KHz的正弦波,另一个产生幅度为3V,频率为5KHz的三角波,从设计的虚拟数字存储示波器进行双踪显示,并画出波形。
画信号一波形:画信号二波形:
6.2由函数信号源产生一个频率为5KHz,幅度变化(有效值)如下表的正弦波,利用设计的虚拟数字示波器进行有效值测量。
标准信号(V) |
0.25 |
0.5 |
2.5 |
5 |
通道1(Ain1)(V) |
|
|
|
|
通道2(Ain2)(V) |
|
|
|
|
6.3由函数信号源产生一个幅度为5V,频率变化如下表的正弦波,利用设计的虚拟数字示波器进行频率测量。
标准信号(KHZ) |
0.01 |
0.1 |
0.5 |
1.0 |
5.0 |
10.0 |
50.0 |
100.0 |
1000.0 |
通道1(Ain1)(KHZ) |
|
|
|
|
|
|
|
|
|
通道2(Ain2)(KHZ) |
|
|
|
|
|
|
|
|
|
七、思考和练习题
1.能否用一个带宽为20MHz的示波器观测重复频率为15MHz的正弦波和方波?为什么?
2.利用示波器测量各种波形参数时,你如何减小其测量误差?
3.测量方波的上升和下降时间可以有哪些方法?
评论
查看更多