原创 【应用设计】基于高速数据采集卡的虚拟示波器开发

2008-1-21 22:05 5031 7 7 分类: 测试测量

引言 原文位置
原文位置
    虚拟仪器以通用计算机作为系统控制器,各种复杂测试功能、数据分析和结果显示都完全由计算机软件完成,在很多方面较传统仪器有无法比拟的优点。 原文位置
原文位置
    本文在带有PCI总线接口的CS82G高速数据采集卡和Visual C++编程工具的基础上开发的快速虚拟示波器试验系统,集成了波形采集、数据分析、输出、显示等多种功能。同时,为保证数据采集和波形显示的实时性,设计中还采用了多线程技术。 原文位置
原文位置
                      CS 82G采集卡系统框图原文位置
                                图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的值为逻辑坐标,把它转璞缸阠x,用cx设定整个滚动视图的宽度。 原文位置
原文位置
       3. 为了提高画图的效率,需要画出滚动视图可视部分的图形,也就是剪裁区的图形,因此要确定剪裁区。 原文位置
原文位置
       4. 画出坐标以及剪裁区内的一段波形。利用CSplitterWnd:: DoScrollBy()函数,根据采样间隔的大小决定断滚动视图速度的快慢。这样视图滚动以后相应的剪裁区也会发生改变,从而能动态画出新的波形。 原文位置
   原文位置
     实验与讨论 原文位置
原文位置
     在实验中使用该系统对正弦信号和锯齿波信号进行了采集,并对两个通道的信号分别进行了频谱分析。实验时示波器参数设置如下:采样模式为双通道,其中通道1对正弦信号进行采样,通道2对锯齿波信号进行采样;采样率为120MS/s;触发源为软件触发;触发时间极限为20ms;输入信号电压范围为+/-5V。实验结果显示达到了预定的效果。 原文位置
原文位置
      设计中一个关键问题是在保证数据采集实时性的同时,又能及时地响应用户的操作或进行数据显示。在本文中,为解决这个问题采用了多线程技术,除了一个处理用户输入消息的用户界面线程之外,还创建了两个辅助线程,从而最大程度地保证了系统的实时性。

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条