在电子与通信行业以及试验测试中,信号发生器和示波器是应用最广泛的电子测量仪器。传统仪器的技术和性能都已经比较成熟,但存在体积较大、不易携带、功能固定、并且价格昂贵等缺点。虚拟仪器是计算机技术与仪器技术深层次结合产生的产物,代表了当前测试仪器的发展方向之一。虚拟仪器系统的必备组件包括功能强大的编程工具、灵活易用的数据采集硬件及个人电脑。在实际测量中,需根据需求选择相应的数据采集卡,但这些卡的价格均比较昂贵,而同样具备A/D功能的声卡是一个非常优秀的音频信号采集系统,具有16位量化精度,数据采集频率可达到44.1 kHz且已成为大多数计算机的标准配置,当所研究信号的频率范围在音频范围内(20 Hz~20 kHz)时,利用声卡进行数据采集便是一个更好的选择。
文中基于虚拟仪器的设计概念,利用方便廉价的计算机声卡分别设计和实现了虚拟信号发生器和虚拟示波器,特别适合于实验室环境下低频信号的产生与分析。本文使用声卡进行A/D、D/A转换以及信号的采集和播放,使用LabVIEW软件设计了虚拟仪器的前面板并实现相关信号的运算、分析和处理。所设计的虚拟信号发生器和示波器具有传统仪器的功能,相比于传统仪器,具有成本低廉、使用方便、扩展性强等优点。
1 虚拟仪器技术和声卡工作原理
1. 1 虚拟仪器的特点
虚拟仪器首先是由美国国家仪器公司于20世纪80年代中期提出来的,实现“软件即仪器”的概念。随着计算机技术和大规模集成电路的飞速发展,虚拟仪器技术也得到了很大的发展。虚拟仪器的实质是将传统仪器硬件和计算机软件技术结合起来,以实现并扩展仪器的功能。计算机软件是虚拟仪器的核心,硬件只是为了解决信号的输入输出,虚拟仪器集成了仪器的所有采集、控制、数据分析、结果输出和用户界面等功能,使传统仪器的部分硬件甚至整个仪器都被计算机软件代替。
虚拟仪器实现了仪器的智能化、模块化和多样化,体现出多功能、低成本等操作优点。与传统仪器相比,虚拟仪器具有更广的应用领域,因此它成为仪器行业发展的一个重要方向,并受到许多国家仪器行业的重视。
虚拟仪器开发平台目前主要有两类:一类是基于传统语言的Turbo C,Microsoft公司的Visual Basic与Visual C++等,这类语言需要开发人员有较多的编程经验和较强的调试能力;另一类是专业图形化编程软件,如HP公司的VEE,NI公司的LabVIEW和LabWindows/CVI等。
1. 2 LabVIEW开发平台
LabVIEW是一个很好的图形化开发环境,专为数据采集和仪器控制而设计,它将信号采集、测量分析和数据显示功能集中在同一个开放式的开发环境中。LabVIEW具有丰富的库函数供用户调用,图形化的编程语言简单直观、开发速度快,在编写程序的同时可以自动生成图形化用户界面,可充分利用计算机强大的计算和显示功能,被广泛应用与自动控制和测试领域中。
1. 3 声卡工作原理
声音的本质是一种波,表现为振幅、频率和相位等物理量的连续变化。声卡是计算机进行声音处理的适配器,它有3个基本功能:一是音乐合成发音功能;二是混音器(Mixer)功能和数字信号处理(DSP)功能;三是模拟声音信号的输入和输出功能。声卡是一个非常优秀的音频信号采集系统,其数字信号处理包括模数变换器ADC(Analogue Digital Converter)和数模变换器DAC(Digital Analogue Converter),ADC用于采集音频信号,DAC则用于重现这些数字声音。
声卡的技术指标包括采样频率、采样位数(量化精度)、声道数、复音数量、信噪比(SNR)和总谐波失真(THD)等,其中采样频率、采样位数是主要指标。现在的声卡一般采用PCI接口,具有16位采样精度,支持双通道,最高采样频率达44.1kHz。
声卡已成为多媒体计算机的一个标准配置,因此基于声卡的虚拟仪器具有成本低,兼容性好,通用性和灵活性强的优点,驱动程序升级方便,可以不受硬件限制,安装在多台计算机上,具有很好的可行性。
2 虚拟信号发生器设计
文中在LabVIEW开发平台下设计并实现了双通道虚拟信号发生器,设计中主要利用了LabVIEW提供的声卡驱动函数,所设计的双通道虚拟信号发生器能够产生常用的基本波形,并且实现了频率显示,频率调节,幅值调节,直流偏置调节和频率扫描等功能。整个程序结构设计采用在LabVIEW状态机的基础上引入事件结构的方法,提高了程序的运行效率。
2.1 LabVIEW中有关声卡信号输出的主要函数
在虚拟信号发生器的设计中,用到了LabVIEW软件“声音输出”模块部分的函数,如图1所示。下面对设计过程中用到的主要函数及其功能作简单介绍:
1)“配置声音输出”函数。该函数的作用是配置一个生成数据的声音输出设备,初始化声卡的配置,包括采样频率,采样模式,声卡参数等。
2)“设置声音输出音量”函数。该函数用来设置声音输出设备的播放音量。
3)“写入声音输出”函数。该函数将准备好的数据写入声卡驱动程序进行播放输出。
4)“声音输出清零”函数。该函数使设备停止播放音频,清空缓存,将任务返回至默认的未配置的状态,并清空与任务相关的资源,将任务变为无效。
2.2 虚拟信号发生器的前面板设计
前面板为用户提供了友好的操作界面,本文根据传统仪器的操作面板和本仪器所能实现的功能设计了虚拟信号发生器的前面板,如图2所示。前面板主要由四个部分组成,包括波形显示部分、公共参数设置部分、CH1通道和CH2通道设置部分。波形显示部分用于显示两个通道的输出波形,公共参数设置部分用于设置声卡的采样率、通道数、采样位数、缓冲区大小和音量,CH1和CH2通道进行设置每个通道生成的波形参数,包括波形类型、频率、偏移量、幅度、方波占空比、噪声等,并可以利用公式输出自定义波形。
2.3 虚拟信号发生器的程序框图设计
程序框图是图形化的源代码,前面板中的每个控件在程序框图中都有相应的接线端与之对应,通过数据连线和不同的程序结构即可控制整个程序的流程和数据传递。虚拟信号发生器的程序框图主要包括3个模块:声卡配置模块、波形设置模块和波形输出模块,如图3所示。
声卡配置模块首先设置“配置声音输出”函数,本设计将声卡设置为连续采样,每通道缓冲数和声音格式都可以在前面板进行设置。然后将采样信息传输到“波形设置模块”,选择所要产生波形的类型。
波形设置模块使用条件结构选择不同类型的波形,可以分别选择正弦波、方波、锯齿波、三角波、高斯白噪声、叠加正弦波以及自定义波形。该模块还可以设置相应的波形参数,包括频率、幅度、偏移量和方波占空比。
数据输出模块调用“写入声音输出”函数,通过声音输出设备输出声音信号。最后由“声音输出清零”清空缓冲区,结束任务。
3 虚拟示波器设计
本文利用LabVIEW中的数字声音记录节点,设计并实现了基于声卡的虚拟双踪数字存储示波器,采样频率为44.1 kHz,线路输入端口最高电压限制为1 V,对高于1 V的信号采用比例运算放大电路衰减后输入,能适合很多场合的需要。
设计的虚拟示波器的技术指标如下:
1)输入频率范围:10~20 000 Hz;
2)通道数:2;
3)采样频率:44.1 kHz;
4)ADC分辨率:16位。
虚拟示波器的两个重要指标分别是分辨力(指能辨别一个物体不同部分的能力)和精度。其中分辨力包括水平分辨力和垂直分辨力,精度也包括水平和垂直两种精度。虚拟示波器的水平分辨力是由时钟信号采样点的时间间隔决定的。采样频率越高,水平分辨力就越高。虚拟示波器的垂直分辨力是由模数转换器的位数决定的,n位的转换器有2-n的分辨力。因为所采用的声卡是16位的,其在垂直方向上可以分辨出65536个数据点,分辨力为1/65536。虚拟示波器的垂直精度受模数转换器精度的限制,一般要比分辨力低。
3.1 LabVIEW中有关声卡信号采集的主要函数
在LabVIEW的函数选板下有“声音”选项,在该选项下,LabVIEW提供了一系列使用Windows底层函数编写的与声卡有关的函数,这些函数主要分为两大模块:声音输入和声音输出。在虚拟示波器程序设计中主要用到的是“声音输入”模块,如图4所示。
1)“配置声音输入”函数。该函数的作用是配置声音输入设备,采集数据,并把数据存放到缓冲区,后面使用“读取声音输入”VI将数据从缓冲区读入。
2)“读取声音输入”函数。该函数的作用是将数据从缓冲区读入。在使用该VI之前,必须使用“配置声音输入”VI来配置设备。
3)“声音输入清零”函数。一般声音输出设备不可共享,若在某个程序运行之前,设备已经被其他程序占用,则此应用程序不能再使用该设备,所以,在程序中一旦对声卡使用完毕,应该立即释放。该函数的主要作用是使设备停止声音数据采集,清空缓存,从任务返回至默认的未配置的状态,并清空与任务相关的资源,任务变为无效。
3.2 虚拟示波器的前面板设计
前面板用来提供用户与虚拟示波器的接口,通过一个友好的图形界面,模拟传统仪器操作,实现对虚拟示波器的控制,并且显示数据处理结果。
本文设计的虚拟示波器的前面板如图5所示,按照功能来分,显示屏可以分别显示原信号波形图和信号的频谱图,波形图开关、频谱图开关可以暂停画面便于保存截图,保存图像按钮可以将截图保存为bmp图像,通道选择部分可以选择单通道或是双通道一起显示,触发部分可以调控信号的触发源、触发极性以及触发电位,标定比率便于标定电压,采样数用于确定采样精度,定位部分可以分别调节显示精度、幅度和偏移,信息按钮可以显示相关制作信息。
3.3 虚拟示波器的程序框图设计
3.3.1 总体设计
虚拟示波器的程序框图主要包括数据采集模块,波形显示模块,频谱分析模块,XY轴设置模块,触发设置模块,图像暂停与截图模块和信息显示模块7大部分,如图6所示。下面结合虚拟示波器的相关功能模块来分别介绍对应的程序框图。
3.3.2 数据采集模块
数据采集模块利用声卡数据采集函数完成声卡采集时一些必要参数的设置,如声卡采样模式、采样数、设备ID等,并将声卡采集到的信号(已由模拟信号转换为数字信号)传送给波形显示模块。其工作流程如下:
1)使用配置声音输入函数确定声卡的参数和数字声音格式,如缓冲区大小、采样速率、采样模式(固定点数采样或连续采样)、采样通道数、样本位数(16 bit或8 bit),本设计的虚拟示波器采用双通道连续采样,采样频率为44100,样本位数为16,每通道采样数可以在前面板上设置。
2)使用读取声音输入函数从缓冲区中读取采样数据,从采集到的波形数组中选择一个波形送到波形显示模块,使用while循环使采样连续进行。
3)使用声音输入清零函数停止数据采集,清空缓存,从任务返回至默认的未配置的状态,并清空与任务相关的资源,使任务变为无效。
3.3.3 波形显示和频谱分析模块
信号从数据采集模块输出后乘以标定比率,然后分成两路,一路直接进入波形图控件在前面板显示信号的时域波形,另一路进行FFT分析后再输入波形图控件在前面板显示信号的频谱图。
3.3.4 XY轴设置模块
波形显示模块负责显示波形,并且可以通过旋钮来控制X轴和Y轴量程和偏移,同时根据通道的选择(通道A或者通道B)显示相应的波形。
X轴控制是时间轴调节。“X轴精度”调节每刻度显示的时间长度。在该控件中设置6个档位,档位越小显示的越精确。“X轴精度”中0.5ms/p档表示时间轴是从0~0.003 s,增量为0.5 ms,起始时刻为0。由于屏幕大小限制,还需要“X轴偏移”来调节屏幕标尺来显示其他部分的波形,在该控件中设置了14个档位,档位每增加一位屏幕显示向右移动一格。
Y轴控制是幅度调节。“Volts/Div”调节每刻度显示的电压值,在该控件中设置5个档位,档位越高每格显示的电压越大精确度越低。“Y轴偏移”控制信号在Y轴方向上下移动,该控件与信号相加可以使信号整体向上或者向下移动。设标定比率为N,则Y轴偏移的范围为-N~+N。
3.3.5 触发控制模块
示波器的触发功能可以稳定重复的波形,捕获单次波形,这对清楚地检定信号至关重要。虚拟示波器触发控制模块通过子VI来实现,如图7所示。的输入端有波形数据输入(通道A、通道B)、触发极性(Slope)输入(上升沿、下降沿)、触发电平(Ievel)输入、触发源(Source)输入(内触发、外触发)。
程序运行后,首先判断用户触发源的选择,当触发源选择“外触发”时,直接将输出的波形数据输出;当触发源选择“内触发”时,执行边沿子VI。
边沿子VI由一个波形数组索引实现,该子程序实现选择触发源、根据触发电平的大小和触发极性进行触发的功能。其原理如图8所示,首先判断用户设置的触发电平大小是否在波峰和波谷范围内,在此范围内则进行触发。对输入电压信号的第i点和i+1点的值进行比较,正极性触发时,若第i点的值等于或小于触发电平,同时第i+1点的值大于触发电平,则第i点为触发点,将此值送入触发子VI数组子集函数的“ind ex”端口,每次采集数据后,都从触发点开始提取子数组,送入前面板,实现波形的同步显示。负极性触发时与之相反。
3.3.6 图像暂停与截图模块
图像暂停模块通过条件结构来选择相应的程序,当前面板的开关拨到“工作”时,执行“真”条件分支,前面板正常显示波形,当开关拨到“暂停”,执行“假”条件分支,数据不再输入给波形图控件,前面板显示的波形静止。
截图保存模块通过波形图的属性节点Get Image来实现,可以将当前显示的波形截图并保存为bmp格式图片。需要截图时先用暂停功能将波形静止,再保存截图。
4 结论
文中基于声卡和LabVIEW图形化编程软件开发了虚拟信号发生器和虚拟示波器,特别适合于实验室环境下低频信号的产生与分析。所设计的虚拟信号发生器和示波器具备传统仪器的功能,相比于传统仪器,具有成本低廉、灵活性好、扩展性强等优点。但在实际应用中,它也存在一些缺陷,例如声卡对输入信号的电压要求不能超过1 V,即有幅度限制;根据奈奎斯特采样定理,当采样频率为44 kHz时,理论上能测量的信号最高频率为22 kHz,但实际上所能准确测量的信号频率达不到该理论值,即频率限制。后续工作中需要设计外围的放大和衰减电路以增大可测信号的动态范围,并对仪器的功能进行完善。