基于PXI总线的数字示波器硬件与软件结构
硬件结构
数字示波器硬件即通常说的数据采集板,其原理框图如图1所示(图中省略电源和时钟部分):双通道被测信号经过模拟信号调理通道送入高速模数转换器,所得数字数据先送入2个先入先出(First In First Out,FIFO)缓存再送给本地总现最后由接口芯片PCI9030送入PXI机箱中。硬件的控制和状态读取需要根据用户指令由相应的软件完成,送入 PXI工控机的数据也要由软件进行处理,最后得到显示波形和测量结果。
图1 PXI数据采集板原理框图
软件构成
Windows 系统为了保证系统的安全性、稳定性和可移植性,对系统底层操作采取了屏蔽的措施,利用设备驱动程序将硬件与用户隔开。所以,软件分为两部分:底层设备驱动程序、高层应用软件。设备驱动程序从广义上来讲是指直接操作硬件的一组函数,完成硬件控制和数据采集。驱动程序在装入后成为操作系统内核的一部分。高层应用软件可以认为是虚拟示波器用户态程序,将用户界面,即面板上各种开关、按钮等控件以及波形、测量数据结果显示区和数据采集、数据分析联系在一起。当用户在界面上发出一定的命令后,应用程序首先调用应用程序接口(Application Programming Interface,API)函数,相关的系统服务将调用内核模式的驱动程序实现API,将命令信息转换成数据采集板认识的数据格式,按照数据采集板的物理地址送到底层硬件。同时数据采集板采集到的数据和底层硬件的各种状态信息也通过API传送给应用程序做显示和控制用。
驱动程序开发
Windows 驱动程序编制可以采用Windows设备驱动程序开发包(Device Drivers Kit,DDK),但需要程序员了解复杂的操作系统内核。简捷的方法是利用KRFTech公司的设备驱动程序开发工具WinDriver。 WinDriver是主要用于编写针对ISA/PCI插卡和USB等硬件设备驱动程序的工具包。对于硬件的访问,应用程序从WinDriver用户模式库调用WinDriver的功能接口,再由这个功能调用WinDriver的内核模块,即WinDriver自身提供的的驱动程序 WinDriver.vxd和WinDriver.sys去完成硬件的访问。
分析数据采集板,知道驱动程序要完成的基本功能包括设备初始化、对I/O和内存的读写、直接存储器存取(Direct Memory Access,DMA)以及中断等操作。首先利用WinDriver完成对硬件的诊断操作,获得数据采集板硬件参数,如端口地址范围、I/O方式、存储器地址、内存映射方式、中断号等。然后再根据硬件的这些参数生成一些源代码和框架函数,如:
SHBK_HANDLE SHBK_LocateAndOpenBoard(DWORD dwVendorID,DWORD dwDeviceID,BOOL
fUseInt)//定位并开启数据采集板;
void SHBK_EnableDisableInterrupts(SHBK_HANDLE hSHBK)//定义开启或终止中断;
DWORD SHBK_ReadPCIReg(SHBK_HANDLE hSHBK, DWORD dwReg)//读配置寄存器;
BYTE SHBK_ReadByte (SHBK_HANDLE hSHBK, SHBK_ADDR addrSpace, DWORD dwOffset)//读出某内存1字节内容,该内存地址为基地址加偏移量dwOffset;
void SHBK_WriteByte (SHBK_HANDLE hSHBK, SHBK_ADDR addrSpace, DWORD dwOffset, BYTE
data)//向内存写内容为data的1字节数据。
限于篇幅,只是举例给出了小部分函数,所有函数都未给出具体的实现代码。利用所有这些框架函数可以对硬件直接进行操作,为方便多个功能均要引用它们,将其封装在一个动态连接库(Down-Line Load,DLL)中,再根据实际的硬件设计进行调用,通过对内存和IO进行具体读写操作,编制对数据采集板硬件进行操作的功能函数,这些功能函数也被封装在此DLL中,供给高层应用软件调用。
虚拟数字示波器应用软件设计
LabWindows/CVI 是NI公司开发的基于C语言的软件开发平台,选用LabWindows/CVI用于虚拟示波器开发主要是基于LabWindows/CVI适用于各种测试、控制、故障分析及信息处理软件的开发,尤其是大型、复杂的测试软件,使用LabWindows/CVI开发可获得优良的测试性能[3]。为方便用户,设计的示波器面板使用方式与通用示波器无异,所有操作都与通用示波器类似,如图2所示,它包含如下内容:
(1) 控制设置区:可由用户控制相应控件设置时基、量程、测量通道、触发方式、触发极性、触发电平、触发位置、触发通道、耦合方式和是否平滑和反相显示波形,另外还专门有一个自动设置按钮,按下此按钮,软件将自动为用户设定合适的以上参数。
(2) 波形显示区:软面板左上部分按照标准示波器显示规范,横向分为10格,纵向分为8格;有可移动的两个光标,可供用户在波形显示区任意拖动。
图2 示波器面板
(3) 光标及测量结果显示区:分别可显示光标1、2位置,光标相对位置及相应的时间/幅度差值。另外,还显示出所测量信号的周期、频率、峰峰值、有效值和平均值5个量值。
整个系统软件总体模块如图3所示,主要包括:初始化模块、结束程序模块、控件消息处理模块、波形数据采集处理显示模块、光标及测量结果显示模块。其中后两部分软件模块严格说来也属于一种特殊控件的消息处理。在CVI中有一类特殊控件称为定时器(Timer),它在用户界面上是隐藏的,根据预先设置的时间间隔不断产生消息,利用其消息回调函数处理需要重复执行的代码。波形采集处理显示程序和数据显示程序分别为20 ms和1.2 s周期循环执行。在执行这两部分循环程序的同时,如果示波器面板上有控件被操作,应用程序将在两次循环中间处理控件消息,如需要还将调用底层驱动程序对硬件进行相应的设置,例如用户通过鼠标改变量程控件档位时,对该控件消息的处理是根据改变后的量程档位设置数据采集板上模拟调理通道上相应的衰减率。初始化模块包括定位和开启数据采集板、初始化用户界面和设置相应初始硬件参数,然后可开始采集数据。另外,软面板右下角有一个特殊按键“退出程序”,按下它则结束上述循环,退出应用程序。
图3 程序总框图
要完成如图2所示示波器功能,最终显示波形和数据,波形数据采集处理和显示是最重要的过程。当面板上“RUN/STOP”键状态为“RUN”后,调用驱动程序开始数据采集过程,首先要根据触发通道的不同和触发方式的不同,选取不同的数据采集方式,同时根据用户设置的触发电平和触发位置的不同也应该选择采集不同时间段的被测数据。得到的数据在送做显示之前,采集回来的波形数据根据需要可能还要经过一定的处理,如平滑、插值、防抖等。由于示波器的数字存储功能、实时采样特点,以及其单次触发、滚动显示、自动时基量程、波形停留、自动光标测量等特点,决定了此部分程序模块时序复杂、分支庞多,是设计和调试的重点。
结束语
本文所述虚拟数字存储示波器技术已运用在某自动测试系统中,其实现的示波器可双通道同时工作于100MHz采样频率,检测输入范围在10 mV~100V的信号(灵敏度为10mV)。该自动测试系统基于测试领域最先进的PXI总线技术,体积小巧、使用方便,抗干扰能力强,能满足军用研究所、基地维修中心等需要。