基于高速数据采集卡的虚拟示波器的应用毕业设计内容摘要:

虚拟示波器和传统示波器的根 本区别在于: ( 1)传统示波器完全用硬件实现,功能和模块固定 ,其功能的自动测试系统,功能及模式由用户自己定义。 ( 2)传统示波器结构复杂,维护困难,对工作现场条件有较高的要求。 器结构简单,仅由计算机和一块数据采集卡和一张光盘组成,将采集卡插在 PC机的扩展槽上即可工作,软硬件维护都很方便。 9 第四章 虚拟示波器的方案设计 虚拟示波器主要由仪器硬件和功能软件两部分组成。 以 DAQ 方式构成的虚拟示波器的硬件主要由计算机和模块化硬件组成,计算机通常是个人计算机,也可以是任何通用计算机。 模块化硬件主要是数据采集卡。 本课题设计的虚拟示波器主要是由一块 PCI总线的高速数据采集卡、 PC 机和用 VC++ 开发的功能模块软件组成。 硬件的选择 计算机和数据采集卡组成了虚拟示波器的硬件平台。 数据采集卡是虚拟示波器的重要组成部件,其性能指标直接决定着虚拟示波器的采样速率、精度等主要指标。 CPU 的速度及计算机的内存影响着示波器处理数据的速度;计算机的硬盘决定着它的存储数据的容量。 数据采集系统的任务是采集原始的模拟信号,把它们转换为计算机可以处理的数字信号,其主要指标有采样精度和采样速度。 采样精度主要由 A/D 转换器的位数决定,而采样速度由 A/D转换 器最高工作频率决定,然而,两个指标是相互制约的。 数据采集卡的选择主要与采样率、采样通道数和测量精度有关。 根据第三章的分析,采样率是指模拟量输入通道在单位时间内能够采集的数据点数,一般用 Hz 即采样频率来表示,也有的用 S/s表示。 采样频率高,就能在一定时间获得更多的原始信号信息。 为了再现原始信号,必须有足够高的采样频率。 如果信号变化比采集卡的数字化要快,或者采样太慢,就会产生波形失真。 根据奈奎斯特理论,采样频率至少是被测信号最高频率的两倍,才不至于产生波形失真。 即应选用 2GHz 的数据采集卡才可以完成最高频率 为 1GHz 的被测信号的测量工作。 采样通道数是系统可以同时进行采样的信号通道数,在选取采集卡时需要注意以下几点:采样通道数是否满足系统要求;在需要差分输入测量时,板上有无差分输入以及差分输入的通道数;在测量多通道时,应注意采集卡能否扩展以及最多的可扩展的通道数。 软件开发环境的选择 在给定计算机和必要仪器硬件之后,构成虚拟仪器的关键在于软件。 虚拟仪器系统的一个重要革新就是仪器硬件软件化,用软件实现硬件功能。 虚拟仪器系统的核心技术是软件技术,一个现代化测控系统性能的优劣很大程度上取决于软件平台 的选择与应用软件的设计。 因此正确选择软件开发环境对于程序的开发和设计起着重要的作用。 10 目前,能够用于虚拟仪器系统开发、比较成熟的软件开发平台主要有两大类:一类是通用的可视化软件编程环境,主要有 Microsoft 公司的 Visual C++和 Visual Basic、Insprise 公司的 Delphi 和 C++ Builder 等;另一类是一些公司推出的专用于虚拟仪器开发的软件编程环境,主要有 Agilent 公司(由原 HP 公司分离出来的一个公司)的图形化编 程 环境 AgilentVEE、 NI 公 司的 图 形化 编程 环境 LabVIEW 及 文 本编 程环 境LabWindows/CVI。 在以上这些的软件开发环境中,面向仪器的交互式 C 语言开发平台 LabWindows/CVI具有编程方法简单直观、提供程序代码自动生成功能及有大量符合 VPP 规范的仪器驱动程序源代码可供参考和使用等优点,是国内虚拟仪器系统集成商使用较多的编程开发环境。 Agilent VEE 和 LabVIEW 则是一种图形化编程环境或称为 G 语言编程环境,采用了不同于文本语言的流程图编程方法,十分适合对软件编程了解较少的工程技术人员使用。 Visual C++是一种功能齐全的面向对象 的开发工具,可直接对硬件操作,支持多任务多线程。 Visual C++不仅是 C++语言的集成开发环境,而且与 Win32 紧密相连,所以利用Visual C++开发系统可以完成各种各样应用程序的开发,从底层软件直到上层面向用户的软件都可以用 Visual C++来开发完成;而且 Visual C++强大的调试功能也为大型复杂软件的开发提供了有效的排错手段。 随着软件版本的不断升级,其功能也越来越强大,几乎包括了 Windows 应用的各个方面。 Visual C++可以说是汇集 Microsoft 公司技术精华的主流产品。 它 最重要的特征是提供了 MFC 类库,封装了 Windows API 函数,并建立了应用程序框架,使开 发人员可以将主要精力集中在所要解决的具体问题上,尤其是利用 Visual C++的 AppWizard 功能生成的SDI 或 MDI 应用程序,进行少量修改后,就可以进入软件界面的外观设计。 由于 Visual C++的面向对象程序设计的特性十分适合虚拟仪器系统的软件开发,而且在本设计中所使用的数据采集卡的驱动程序是由 C语言开发,所以我 们选用 Visual C++作为虚拟示波器系统的软件开发工具。 软件总体方案 虚拟 示波器是采用基于计算机的虚拟技术,用以模拟传统示波器的面板操作和处理功能,也就是使用个人计算机及其接口电路来采集现场或实验室信号,并通过软件的图形用户界面( GUI)来模仿示波器的操作面板,来完成信号的采集、分析处理和显示输出等功能。 本课题设计的虚拟示波器,是在高速数据采集卡的支持下,配备一定功能的软件,完 11 成波形的存储、分析、显示等功能。 传统的测试仪器由信号采集、信号处理和结果显示三大部分组成,这三部分均由硬件构成。 虚拟示波器也是由这三大部分组成,但是除了数据采集部分是由硬件实现之外,其它两部分都是由软件 实现。 本次设计利用 Visual C++ 作为开发工具 ,采用了面向对象的程序设计方法,在Windows2020 下进行。 软件采用模块化设计,其总体框图如图 41所示。 从图 41可以看出软件部分的总体框图以及数据流、控制流的流向。 其中主控模块相当于一个任务调度中心。 当软件开始运行时,首先进入主控模块,然后启动数据采集线程和数据处理线程,于是数据采集模块和数据处理模块开始工作直至用户停止系统工作。 数据流从数据采集模块开始,分别流向数据存储模块和数据处理模块,数据存储模块负责把用户感兴趣的数据存人 硬盘,而数据处理模块负责数据的实时显示、数字滤波、频谱分析和波形的参数计算。 当用户需要查询历史信号时,可以启动历史查询模块,然后把查询到的数据送往历史曲线显示模块;如果需要打印历史信号,调用曲线打印模块即可。 数 据 存 储 模 块历 史 数 据 文 件数 据 查 询模 块曲 线 显 示模 块数 据 采 集 模 块主 控 模 块历 史 查 询 模块曲 线 打 印 模块数 据 处 理 模 块实时显示模块数字滤波模块频谱分析模块参数计算模块帮 助 文 件 模 块数 据 流 控 制 流 图 41 软件系统总体框图 12 主 程 序初 始 化O n S t a r t ( )消 息 循 环 S t a r t C a p t u r e ( )启 动 采 样 数 据S t a r t P r o e s s i n g ( )启 动 数 据 处 理 线 程采 集 数 据发 送 W M _ R E C I E V E选 择 处 理 种 类数 据 处 理选 择 数 据 区 间查 询 数 据 算 法存 储 数 据历 史 曲 线 显 示打 印 模 块开 始是 否 存 储 数 据是 否 查 看历 史 数 据g _ b R u n T h r e a dg _ b R u n T h r e a d 是 否 收 到W M _ R E C I E V EY e s Y e sY e sY e sY e s 图 42 软件系统总体流程图 13 第五章 虚拟示波器系统的软件具体实现 软件采用模块化设计,在功能上划分为多个模块,分别为 数据采集模块、软面板模块(用户界面模块)、数据处理模块、数据存储模块和帮助文件模块。 其中数据处理模块又划分为频谱分析模块、数字滤波模块、参数计算模块和波形显示模块。 各个模块之间的联系如图 51所示。 由于篇幅关系,本文中只给出了重要模块的设计。 数 据 采 集 软 面 板数 据 存 储数 据 处 理帮 助 文 件数 字 滤 波频 谱 分 析参 数 计 算波 形 显 示 图 51 系统软件功能框图 数据采集模块的设计 数据采集模块是最为关键的一个程序模块,这个模块中应用程序会通过采集卡的驱动程序和硬件进行通信,要发出各种控制字、参量字到仪器中去,同时又要对硬件的工作状态进行判 断和处理,然后读取采样值。 如果把这个模块程序在主线程中实现,那么,当应用程序与驱动程序进行数据通信时,主界面就会冻结。 为了解决这个问题,本文直接创建一个子线程来单独完成与驱动程序的通信任务,让主界面专心于响应视窗界面的信息。 在主线程中通过调用 StartCapture()函数启动数据采集子线程进行数据采集。 数据采集的编程过程 ( 1)初始化采集卡的驱动程序和硬件 这个过程包括两个部分,一是确定硬件安装位置及 I/O口和内存映射,由 文件来配置内存区域和 I/O 地址,二是用户进 行的采集卡驱动初始化,选择 (打开相应的 )采集卡,读取配置文件等。 驱动程序的初始化也可以直接调用 InitBoard()函数或对此函数进行适当的修改后调用 (该函数的源代码在 文件中 )。 ( 2)设置相关参数准备进行数据采集 该采集卡的所有的参数都是通过软件进行设置的,驱动程序中提供了一些数据结构, 14 使得参数设置比较容易进行,也可以不用这些数据结构。 设置参数主要包括:工作模式 (单通道,多通道 ),采样率、输入电压的范围、输入阻抗及耦合方式、触发源、上升沿、下降沿触发、触发电平、采样深度 (采样点数 ),所有这些参数设置被综合到一个函数中:SetBoard();对此函数进行适当的修改,即可满足采集的要求。 ( 3)开始采集数据 调用 gage_start_capture()函数即开始采集数据,如调用时传给该函数的参数为非零值,且触发条件设置为软件触发,则调用此函数后立即开始采集数据,否则就等待至触发条件满足时开始采集数据。 当计算机上只有一块 GaGe 公司的采集卡时,可以用另外两个函数来代替 gage_start_capture();即顺序调用 gage_init_clock()和 gage_get_data();执 行 这 两 个 函 数 的 速 度 比 执 行 gage_start_capture() 要 快 许 多 , 因 为gage_start_capture()要做一些额外的工作以确保多卡同时有效地工作。 ( 4)检测数据是否采集结束 相关函数为 gage_triggered() , gage_busy() , gage_force_capture() ,gage_abort_capture()。 gage_triggered()是用来检测采集卡是否已经触发,如果没有触发,则在采集卡的 RAM 上没有有效数据。 gage_busy()则是用来判断是否已经采集结束。 正在采集数据时,是不能读取采集卡上的 RAM 的 (该卡上的 RAM 是单端口的 )。 可以用gage_force_capture()强制触发一次,或者用 gage_abort_capture()结束这一次数据采集,这样可以对后续的数据采集产生影响。 ( 5)传输数据从采集卡 RAM 至计算机的内存 采样点在采集卡的 RAM中存储的位置 (地址 )可由函数, gage_calculate_addresses(),该函数返回三个地址值:开始地址、触发地址、结束地址。 传输数据的函数是gage_transfer_buffer_3();使用 它时需要传递的参数为开始地址和要传送的数据量。 数据采集的主要代码如下 { InitBoard(); /*初始化驱动程序和硬件 */ /* 校验当前采集卡的结构 * / Gage_get_driver_info(board_info); board_setting()。 /*对采集卡进行参数设置 */ /*开始数据采集,触发源为软件触发 */ gag。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。