刘龙飞 张彦军 朱思敏
(中北大学仪器科学与动态测试教育部重点实验室,山西 太原 030051)
美国国家仪器公司(简称NI公司)是全球著名研制生产信号采集设备和虚拟仪器的专业机构,1997年,NI公司在PCI基础上开发了PXI(PCIextensions for instrumentation)总线。在仪器扩展方面,PXI总线已成为工业标准;在数据传递方面,PXI的性能较早期的系统有了显著的提高。目前,全世界有近60个研究机构推出约500种PXI产品[1]。PXI在我国航天航空领域的应用也比较广泛,但引进设备的接口和信号参数等大多与实际需求不符。为更方便地应用与推广由PXI总线构成的信号采集和信号源等系统,必须根据技术要求来开发符合标准的产品。本文提出了一种基于PXI总线的多通道数据采集卡,并介绍了各功能模块的工作原理。
本数据采集系统由PCI9054总线控制器、FPGA、外部FIFO、数模转换电路、信号调理电路、多路信号选通电路等部分组成。其中,PCI9054总线控制器实现PXI总线接口功能,ADS8041用于对输入模拟信号进行A/D转换,FIFO存储器在前后数据传输过程中起到数据缓冲的作用,FPGA对数模转换器、FIFO、PCI9054、多路模拟信号选通进行控制。系统总体结构框图如图1所示。
图1 系统总体结构框图Fig.1 Block diagram of the system structure
本系统工作原理如下:多路模拟信号经过调理电路后,在FPGA的控制下通过ADG706进行选通;然后送入ADS8041进行模数转换,转换后的数字量存储到FIFO中;当FIFO存储器中的数据量达到半满时,数据通过PCI9054传递给PXI总线并存储到PC机内存中,通过上位机软件进行存盘、显示、绘图。
整个系统采集过程采用FPGA进行严格的时序控制。
PXI总线规范具有PCI的性能和特点,其兼容CompactPCI的技术规范,故PXI总线接口芯片采用了PLX公司的PCI通用接口芯片(PCI9054)。PCI9054支持主模式、从模式和DMA传输方式,能够广泛地应用到各种适配卡和嵌入式系统中。
PCI9054提供了PCI总线接口、LOCAL总线接口和串行EPROM接口这3种物理总线接口。PCI总线接口信号主要有RST#、FRAME#、AD[31∶0]、C/BE[3∶0]#、IRDY#、CLK、TRDY#、DEVSEL#和 INTA#;串行 EEPROM 接口信号有EECS、EEDI、EESK和EEDO;本地总线接口信号有ADS#、BLAST#、CS0#、LA[5∶2]、LW/R#、LRESET#、READY#和 L INTi1[2]。PCI总线接口与 PXI接口对应端口相连即可。串行EEPROM接口信号只需要连接到NM93CS56芯片对应的引脚即可,而本地总线信号则要根据系统设计的需要进行选择。PCI9054有C、M和J模式[3]这3种工作模式。本设计采用的是C模式下PCI Initiotor操作,本地处理器或本地总线主控设备能够直接通过 PCI9054访问 PXI总线,从而进行数据传输。PCI9054接口示意图如图2所示。
图2 PCI9054接口示意图Fig.2 Schematic diagram of PCI9054 interface
串行EEPROM采用93CS56芯片,用于存放PCI9054的重要配置信息,如厂商ID、器件型号ID、局部空间基地址、局部空间大小及映射类型、中断控制和响应等信息。当系统上电时,这些配置信息将被自动加载到PCI9054的PCI配置寄存器和本地配置寄存器中,用于对系统进行初始化。主控计算机将根据PCI9054内部相关配置寄存器的内容分配系统所需要的资源。
各种接口芯片都需要外接串行EEPROM芯片来加载配置数据。EEPROM配置芯片存储了PCI9054的配置信息,只有正确加载了EEPROM内部的正确信息,才能够顺利进入系统。
针对EEPROM配置芯片的选型问题,PLX公司在相应资料中已经给出了若干推荐的型号,要求EEPROM配置芯片必须同时满足以下两个条件:芯片必须支持串行连续读写模式;3.3 V供电时芯片能够保证最大支持的串行时钟速率大于1 MHz。本文选择了由Fairchild Semiconductor公司生产的NM93CS56。PCI9054提供了4个管脚与串行EEPROM相连接,它们分别是 PEECS、PEEDI、PEEDO、PEESK,对应 于NM93CS56的 CS、DI、DO、SK 这4个管脚,这4对管脚一一对应连接[4]。PCI9054与EEPROM的接口电路设计如图3所示。
图3 PCI9054与EEPROM的接口电路Fig.3 Interface circuit between PCI9054 and EEPROM
值得注意的是,当PCI在没有使用EEPROM时,应该使用1 kΩ下拉电阻才能进入系统;当使用空的EEPROM或者已经烧好的EEPROM时,则需要使用3.9 kΩ上拉电阻才能够进入系统。因此,设计时应将此引脚根据实际需要焊接上拉或下拉电阻。
PCI板卡模块的上电工作流程如下:PCI卡插到PC机插槽中→系统上电自检→PCI9054的RST#复位→PCI9054检测EEPROM是否存在→PCI9054根据EEPROM的配置信息初始化其内部寄存器→BIOS根据PCI9054配置寄存器的内容进行系统资源分配→进入系统,安装 PCI9054 驱动[5]。
A/D转换电路采用ADS8401芯片来实现。ADS8401是一个16位、1.25 MHz的A/D转换芯片,它具有零迟缓、片上基准、低功耗等特性。调理选通后的输入信号首先进入ADS8401并转换为16位数字信号,在FPGA的控制下依次取高8位与低8位进行编帧;然后存入FIFO存储器中;当达到半满状态时,在FPGA的控制下,FIFO输出的HF#信号产生一个低电平信号,用于驱动PCI9054的本地总线中断信号有效;产生PXI总线中断后,将FIFO存储器中的数据送入PC机进行处理,这样就实现了整个系统的采集工作[6]。
PCI9054的读写时序是状态编写VHDL代码的参考关键,一些关键信号如READY#等的状态控制稍有失误,就会造成读写数据不正确,甚至会造成计算机死机、蓝屏等严重后果[7]。本文详细研究了PCI9054的读写时序状态机,并按照状态机的逻辑编写VHDL代码,实现了PCI总线对本地总线的读写操作。系统仿真结果如图4所示。
图4 系统仿真结果界面图Fig.4 Interface of system simulation result
图4中,rst为全局复位信号;clk为外部50 MHz时钟信号;lhold为本地总线请求信号;lholda为本地总线请求应答信号;ads为本地总线触发信号;blast#为突发传输信号;lwr为本地读写信号(高电平为写,低电平为读);ready为本地总线准备好的信号;data为PCI写入的多通道参数数据;ram_id为定义的通道计数器。
采用LabVIEW软件对输入信号采集模块进行了实际测试。实际测试结果如图5所示。
图5 实际测试结果图Fig.5 The actual test results
本文在PXI-1031硬件平台上,设计实现了多通道PXI总线数据采集卡。该卡采用PCI9054芯片作为与PXI总线信号连接的接口芯片。本采集卡已成功应用于航空航天中大型设备的测试,并取得了很好的效果。
[1] 吴晓琳,巩伟.PXI6534数字采集卡的原理与应用[J].信息技术,2012(1):154-158.
[2] 尹勇,李宇.PCI总线设备开发宝典[M].北京:北京航空航天大学出版社,2005.
[3] 张秀峰,毛先萍,阿米妮古.基于Matlab的PCI数据采集在过程控制系统中的应用研究[J].工业控制计算机,2012,25(8):11-13.
[4] 马超,皮亦鸣.基于PCI9054的PCI接口数据通信系统[J].中国科技论文在线,2008,3(1):70-73.
[5] 安冬.基于 PCI9054从模式的数据采集卡设计与应用[J].北京:计算机测量与控制,2010:2439-2440.
[6] 方庆山.基于PCI总线的数据采集卡设计[D].南京:南京理工大学,2008.
[7] 羊三周.基于FPGA的PCI数据采集卡设计[D].太原:中北大学,2006.