一、引言
在当今的电子测量领域,示波器作为一种重要的测量工具,对于信号的观察、分析和调试起着关键作用。传统的物理示波器存在体积大、成本高、功能相对固定等局限性。随着计算机技术和电子测量技术的飞速发展,虚拟示波器应运而生。基于高速数据采集卡的虚拟示波器凭借其强大的性能和灵活的功能,成为了研究和开发的热点。
二、高速数据采集卡的选择
采样率
采样率是衡量数据采集卡性能的关键指标之一。对于高频信号的采集,需要选择具有高采样率的采集卡,以确保能够准确捕捉信号的细节。例如,对于频率高达 100MHz 的信号,采样率应至少为 200MHz 以满足奈奎斯特采样定理。
分辨率
分辨率决定了采集到的数据的精度。较高的分辨率可以提供更精细的电压测量,例如 12 位或 14 位分辨率的采集卡能够提供更准确的信号幅度测量。
输入通道数
根据实际需求选择合适的输入通道数。如果需要同时测量多个信号源,就需要选择具有多个通道的采集卡。
三、虚拟示波器的软件架构
驱动程序
与高速数据采集卡进行通信,控制采集卡的工作模式和参数设置,如采样率、触发方式等。
数据采集模块
负责从采集卡获取数据,并进行初步的处理和缓存。
信号处理模块
对采集到的数据进行滤波、放大、解调等处理,以提取有用的信号特征。
显示模块
将处理后的信号以波形的形式显示在计算机屏幕上,同时提供各种测量和分析工具,如幅度测量、频率测量、相位测量等。
四、虚拟示波器的功能实现
触发功能
包括边沿触发、脉冲触发、逻辑触发等多种触发方式,以便准确捕捉特定的信号事件。
测量功能
能够测量信号的峰峰值、有效值、平均值、频率、周期等参数。
存储和回放功能
可以将采集到的数据保存为文件,以便后续分析和处理,同时能够回放已保存的数据。
远程控制功能
通过网络实现远程控制和数据传输,方便在不同地点进行测量和分析。
五、开发中的关键技术和挑战
实时性
确保在高速数据采集过程中,数据的处理和显示能够实时进行,避免出现卡顿和延迟。
抗干扰能力
由于环境中的电磁干扰等因素,需要采取有效的措施提高系统的抗干扰能力,保证采集到的数据的准确性。
软件优化
对软件进行优化,提高程序的运行效率,减少资源占用。
六、应用前景
基于高速数据采集卡的虚拟示波器在电子研发、通信工程、工业控制、医疗设备等领域都有着广泛的应用前景。它不仅可以降低测量成本,提高测量效率,还可以根据用户的特定需求进行定制化开发,满足不同领域的多样化测量需求。
例如,在通信工程中,可以用于监测和分析通信信号的质量;在工业控制中,可以对生产线上的传感器信号进行实时监测和故障诊断。
总之,基于高速数据采集卡的虚拟示波器的开发具有重要的理论意义和实际应用价值,将为电子测量领域带来新的发展机遇。
摘 要:本文基于PCI接口的CS 82G高速数据采集卡和Visual C++编程工具,开发了一种快速的虚拟示波器试验系统,实现了高速数据的采集和动态波形的显示,并具有频谱分析和数字滤波功能。
关键词:虚拟示波器;数据采集;CS 82G
引言
虚拟仪器以通用计算机作为系统控制器,各种复杂测试功能、数据分析和结果显示都完全由计算机软件完成,在很多方面较传统仪器有无法比拟的优点。
本文在带有PCI总线接口的CS82G高速数据采集卡和Visual C++编程工具的基础上开发的快速虚拟示波器试验系统,集成了波形采集、数据分析、输出、显示等多种功能。同时,为保证数据采集和波形显示的实时性,设计中还采用了多线程技术。
图1 CS 82G采集卡系统框图
图2 软件系统总体流程图
虚拟示波器的系统组成
系统组成
本虚拟示波器系统主要由数据采集卡、计算机和专用的软件组成。 其中数据采集卡完成对输入测量信号的调理采集、缓存,并通过计算机PCI总线送入内存;计算机在应用程序控制下,对数据进行处理、运算,最后完成各种电量测试并在屏幕上用图形或数据形式显示。这一切均可在人机交互方式下完成。
数据采集卡的硬件结构
本虚拟示波器采用的是Gage公司的CS 82G高速数据采集卡。其硬件结构框图如图1所示。
该数据采集卡是一个具有两个模拟量输入通道的标准的PCI总线插卡,卡上集成的两个高速8位ADC,最高工作频率高达1 GHz,在单通道工作模式下,两个ADC同时投入工作,分别在脉冲的上升沿和下降沿进行转换,所以最高采样频率可以达到2GHz。全卡的功能电路由数字控制逻辑电路统一控制。卡上配置有16MB的高速存储器,解决了高采样率和相对较低的PCI总线数据传输速率的匹配问题。
在使用之前必须对采集卡的硬件进行配置,这些控制程序用到了相应的底层DAQ驱动程序。通过采集卡自带的DLL,可以在程序中灵活地对硬件输入阻抗、输入电压范围、放大器增益大小、采样频率、每次采样点数等参数进行控制。
模拟信号经同轴电缆进入采集卡的输入通道后,经过前置滤波电路、衰减电路、可变增益的放大电路,将信号处理成ADC可以处理的标准电平,经过A/D采样量化转化成计算机可以处理的数字信号并缓存到存储器。该采集卡支持软件通过PC机的PCI总线接口控制模拟通道的阻抗匹配、放大器的增益选择、启动ADC及转换结束的识别,并允许将采集数据以DMA方式传输到计算机内存,同时对数据信号进行分析处理、显示、存储及打印输出。
系统的软件设计
虚拟示波器的软件开发环境
虚拟仪器最核心的是软件技术。目前,用于虚拟仪器开发的软开发平台主要有两大类:一类是通用的可视化软件编程环境,主要有Microsoft公司的Visual C++和Visual Basic、Inprise公司的Delphi和C++ Builder等;另一类是一些公司推出的专用于虚拟仪器开发软件的编程环境,主要有NI公司的图形化编程环境LabView及文本编程环境LabWindows/CVI、Agilent公司的图形化编程环境Agilent VEE。考虑到软件的灵活性、高效性和可移植性,本设计中采用Visual C++作为虚拟示波器的开发环境。
软件的方案设计
图2展示了本设计中软件系统的总体流程图。程序开始工作后,首先进入主线程,进行相关的初始化工作,主要是软件界面的初始化(采集卡的初始化在采集子线程中进行)。OnStart()函数的主要目的是执行StartCapture()函数以启动数据采集子线程,执行StartProcessing()函数以启动数据处理子线程,主线程进入消息循环,并通过消息和子线程进行通信。采样线程和数据处理线程实际上是由g_bRunThread变量控制的循环过程,这样可以方便主线程控制工作线程的退出。数据采集线程利用了采集卡驱动程序提供的中断采样函数,采样深度n由控件设定,每当采集完成n个点的采样时,采样数据便被送入卡上的缓冲区,然后通过PCI总线向计算机传输数据,当数据传输完毕之后,采样线程向数据处理线程发送WM_RECEIVE消息,通知数据处理模块对这n点进行分析处理。在主线程里,主要接收用户操作的消息,比如通道参数的设定、通道显示的设定、数据的存储打印以及察看历史数据、波形等操作。
软件功能模块
该虚拟示波器有5大功能模块:数据采集、用户界面、频谱分析、数字滤波以及波形显示。
信号采集模块
信号采集模块主要完成对数据的采集,根据所采集信号的不同采用不同的采样频率。这个模块中应用程序会通过采集卡的驱动程序和硬件进行通信,如果把这个模块放在程序主线程中实现,那么,当应用程序与驱动程序进行数据通信时,主界面就会冻结。为了解决这个问题,本文直接创建一个子线程来单独完成与驱动程序的通信任务,让主界面专心于响应视窗界面的信息。在子线程中通过调用gage_start_capture( )函 数进行数据的采集。
用户界面模块
界面主要分为三个视图:主视图基于ScrollView,用于显示波形;另外两个视图基于FormView,一个用于动态显示采集数据的特征参数,另一个用于对示波器进行操作。
频谱分析模块
本软件利用快速傅里叶变换(FFT)进行频谱分析,采用按时间抽取FFT算法,然后将幅值频谱分析结果在用户界面上以坐标曲线形式显示。进行FFT时可以选择点数,有1024、2048、4096三种选择,如果点数不够,程序自动补零。
数字滤波模块
本软件可以对所采集信号进行低通和高通滤波。首先根据给定通带截止频率、阻带截止频率、通带衰减和阻带衰减设计出Butterworth模拟滤波器,再用双线性变换法设计出数字滤波器。
波形显示模块
当前波形显示主要有两种方法,分段显示和滚动显示。本设计采用了滚动显示的方法,并且提出了一种新的滚动显示算法,突破了滚动显示只能观察变化缓慢的信号的限制。算法核心思想如下。
1. 得到所采集数据块的第一个和最后一个数据点的横坐标m_xMin和m_xMax,两者之差即为波形的逻辑宽度。
2. m_xMax-m_xMin的值为逻辑坐标,把它转化为设备坐标cx,用cx设定整个滚动视图的宽度。
3. 为了提高画图的效率,需要画出滚动视图可视部分的图形,也就是剪裁区的图形,因此要确定剪裁区。
4. 画出坐标以及剪裁区内的一段波形。利用CSplitterWnd:: DoScrollBy()函数,根据采样间隔的大小决定断滚动视图速度的快慢。这样视图滚动以后相应的剪裁区也会发生改变,从而能动态画出新的波形。
实验与讨论
在实验中使用该系统对正弦信号和锯齿波信号进行了采集,并对两个通道的信号分别进行了频谱分析。实验时示波器参数设置如下:采样模式为双通道,其中通道1对正弦信号进行采样,通道2对锯齿波信号进行采样;采样率为120MS/s;触发源为软件触发;触发时间极限为20ms;输入信号电压范围为+/-5V。实验结果显示达到了预定的效果。
设计中一个关键问题是在保证数据采集实时性的同时,又能及时地响应用户的操作或进行数据显示。在本文中,为解决这个问题采用了多线程技术,除了一个处理用户输入消息的用户界面线程之外,还创建了两个辅助线程,从而最大程度地保证了系统的实时性。