新闻中心

EEPW首页 > 测试测量 > 设计应用 > 基于PXI总线的虚拟数字示波器软件设计

基于PXI总线的虚拟数字示波器软件设计

作者:时间:2013-02-05来源:网络收藏

测试总线在近几十年发展非常迅速:从早期的通用接口总线GPIB到近期的VXI、外围设备接口总线(Peripheral Component Interconnection,PCI)、PXI、IEEE1394、通用串行(Universal Serial Bus,USB)测试总线。其中是最新一代的测试总线技术,是PCI总线在测试领域的扩展(PCI eXtensions for Instruments),于1997年被美国NI公司首次提出,并于次年被采用为工业标准。可简单地认为是MicorosoftWindows、Compact PCI(CPCI)和VXI技术的综合:机械规范方面采用CPCI的核心技术,即欧式插卡机械机构和气密式针孔接头,特别适用于恶劣的工业环境;电气规范方面在保持了PCI/CPCI总线所有优点的前提下增加了专门的系统参考时钟、触发总线、星形触发总线和模块间的局部总线,以此来满足高精度的定时、同步与数据通信要求;软件规范方面也与PCI/CPCI一致,核心是Microsoft公司的Windows操作系统,所以PXI系统与PC兼容,方便选择很多现成的应用软件开发工具。系统将PC机性能价格的优势、CPCI优越的机械性能和VXI易于系统集成化等优点集合了起来,所以是当今发展最快的总线技术。迄今为止,已经有美国NI等数十家公司推出PXI(CPCI)模块上千种。基于此,本文采用PXI总线,利用现有的PXI工控机及高速板,设计了基于PXI总线的虚拟数字存储示波器软件。

基于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中,供给高层应用软件调用。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭