PCI通信总线

2024-07-15

PCI通信总线(共7篇)

PCI通信总线 篇1

PCI总线及在其基础上发展起来的CPCI总线,在工业控制、数据采集、信息通信、航空航天等领域得到了广泛的应用。高级数据链路控制(HDLC)是一个在同步网上传输数据并面向位的数据链路层协议,具有透明传输、可靠性高、传输效率高以及灵活性高等特点,可以实现点到点或者点到多点的数据传输,在路由器、网关等通信或者网络设备中应用广泛[1]。为了满足实际工作的需要,并为后续系统升级提供拓展空间,本文设计并实现了一款基于PCI总线、符合HDLC协议的通信卡,以满足高速数据传输的需要。通信卡采用PCI总线控制器实现PCI总线接口设计,采用FPGA实现HDLC通信协议及接口逻辑设计,采用RS-422标准对外通信,实现与外系统的互连。

1 HDLC通信卡总体方案

通信卡主要采用PCI9054和FPGA构成硬件系统,其硬件结构图如图1所示。数据传输流程为:接收数据时,通过RS-422接口芯片接收数据,数据格式满足简化的HDLC协议;通过FPGA内部的HDLC模块进行数据接收和串并转换;然后在本地控制逻辑的控制下通过PCI9054以DMA方式传给上位机,实现数据的接收和判读;发送数据时,上位机软件将数据以DMA方式传给PCI9054再输入FPGA,在其内部HDLC模块的作用下,进行数据并串转换和HDLC协议转换,最后通过RS-422发送器进行电平转换和数据发送。预留SDRAM以满足大容量数据通信需要。

2 HDLC通信卡电路设计

2.1 总线接口设计

PCI总线具有高性能、低成本、开放性、兼容性良好等优点,但PCI总线具有严格的时序关系和电气规范,使得开发工作量和难度比较大。PCI总线一般都采用各IC生产商设计的PCI专用接口芯片进行PCI总线设备的开发,以减少开发难度、降低工作量。基于此考虑,在本设计中,采用PLX公司的PCI9054芯片进行总线开发[2]。

PCI9054芯片满足PCI V2.2协议,可作为桥接芯片在PCI总线和本地总线(local bus)之间提供信息传输,既可以作为两个总线的主控设备去控制总线,也可以作为两个总线的目标设备去响应总线。其本地总线可工作在M、C、J三种模式,可方便地与多种微处理器连接。在C模式下,因本地总线的地址线和数据线分开,时序与控制逻辑比较简单,得到了广泛应用[3]。因此本通信卡中,PCI9054工作于C模式从设备方式,本地总线时钟采用40 MHz恒温补偿晶振。PCI9054的PCI总线端引脚按照对应关系与PCI总线金手指连接器相连,本地端地址总线为15 bit,数据总线为32 bit,控制总线包括ADS、BLAST、LHOLD、LHOLDA、LW/R#、READY、EOT#引脚,将它们分别与FPGA的IO口互连。

2.2 FPGA芯片选型与设计

HDLC协议是面向比特的高级数据链路控制规程,具有强大的差错检测功能、高效和同步传输的特点,利用它可以确保数据信息可靠互通。市场上有许多使用简单的专用HDLC芯片,但由于HDLC标准的文本较多,这些芯片出于专用目的难以通用于不同版本,缺乏应用灵活性,且其片内存储器容量有限。另一种方法是通过软件对MCU编程实现HDLC协议,虽然功能灵活、适应性强,但处理速度慢、占用处理器资源多,难以高速实现对HDLC数据的插“0”和去“0”操作,一般只适用于路数较少的低速场合[4]。

为了实现与当前系统HDLC协议的兼容,本通信卡采用FPGA实现HDLC收发功能模块,充分利用FPGA硬件可编程的特点,发挥其速度快、灵活性高、并行处理信号、实时性能够预测的优势。同时,考虑到通信卡传输一帧数据的长度通常为512 KB~1 KB,而PCI9054的DMA只有32长字FIFO,且PCI读写速度与HDLC收发速度不一致,需要利用FIFO进行数据缓存,达到时序匹配的目的。为了提高系统集成度及其可靠性,采用FPGA内部存储单元实现FIFO功能。因此,综合考虑FPGA内部存储单元数量、IO引脚数量等,选择Altera公司的EP2C20-F240用于功能模块开发。EP2C20F240为QFP封装,可用IO口142个,内部LE 18 752个,内部RAM为239 616 bit,可以满足系统开发需要。

2.3 差分接口设计

通信卡对外通信采用RS-422方式传输数据,传输频率最高为768 k Hz。因此,选用MAXIM公司的RS-422发送器MAX3032E和接收器MAX3094E,其数据传输率最高分别可达20 Mb/s和10 Mb/s,满足数据高速传输需要。

3 HDLC通信卡逻辑设计

通信卡上的FPGA完成PCI9054本地总线数据读写时序逻辑的转换,实现HDLC收发模块和FIFO数据缓存功能。设计中采用VHDL硬件描述语言实现各功能模块,利用Altera公司的集成开发环境Quartus II(11.0)完成相关的编译、调试、下载等开发工作。

3.1 本地总线数据读写模块

PCI9054工作于C模式从设备方式,采用分散/聚合(Scatter-Gather)DMA方式进行数据快速传输,以发挥其速度快的优势。根据PCI9054读写时序图可知,在C模式从设备方式下,FPGA读取PCI9054本地端ads_n和blast_n的引脚状态,判断是单周期读写状态还是猝发读写状态,实现地址获取和数据读写,其状态机如图2所示。同时,在上位机读数据完毕后,如果读FI-FO为空则将EOT#引脚拉低,将数据传输结束信号上传,强行停止主机数据读操作。这就需要在DMA初始化过程中,设置DMAMODE寄存器的第14位为EOT#有效模式。

3.2 HDLC通信模块实现

HDLC的标准帧格式如表1所示,但HDLC也有由用户定义的非标准帧格式,常用于点对点的通信中。在非标准格式中,地址段、控制段、CRC段是可选的。本通信卡主要用于点对点通信,且采用简化的HDLC协议,即省略地址段、控制段、CRC段。其中CRC校验功能由上位机软件实现[4,5]。

HDLC是面向位的,在待传数据中出现与标志字一样的数据时,如果不进行处理,就会被误认为是帧边界。为了避免此错误,HDLC规定采用“零比特填充法”使一帧中两个字段之间不会出现6个连续1。具体做法是:发送数据时,先进行帧数据扫描,只要发现有连续的5个1,则立即插入一个0,以此保证数据中不会出现连续6个1;接收数据时,先找到3E字段以确定帧的边界,接着对其后的比特流进行扫描,每发现5个连续1就将其后的0删除,以此保证所传比特流中不出现帧标志,直到帧尾标志出现,从而实现HDLC在链路层的“透明传输”,保证发送端可以发送任意组合的比特流信息,而接收端都能准确无误地接收到[6]。

FPGA中实现的简化HDLC模块总体框图如图3所示。读写FIFO采用Altera公司的LPM功能模块实现,大小可根据需要设置,本通信卡设为512×32 bit。发送数据时,写FIFO接收PC数据(总线宽度为32 bit),首先进行并串转换,再进行插“0”操作,最后插入标志字按位发送出去,输出数据Tx和输出时钟Tx_Clk保持同步,整个过程由发送控制状态机进行控制。接收数据与发送数据过程相反,由接收控制状态机进行控制。其中输入、输出时钟可以设置为68 k Hz或者768 k Hz。

发送控制状态机和接收控制状态机分别如图4、图5所示。发送数据时,发送状态机首先判断写FIFO是否有数据,若有数据,则插入帧头,依次读取FIFO数据,完成插“0”操作和插帧尾操作,并按照从低到高的顺序发送数据,直至写FIFO为空。接收数据时,首先搜索帧头,为了防止接收到连续两个标志字而把后一个标志字误认为是数据,设置搜索数据状态(Data_find),若不是标志字,则作为数据进行去“0”操作,完成串并转换和帧尾检测,并将接收到的数据以32 bit为单位,逐次写入读FIFO中。当一帧传输结束,采用中断信号通知上位机及时读取数据。一旦检测到丢弃序列(0x7F),则结束对此帧数据的处理,并清空读FIFO里的数据,同时上报PC机错误信息,请求发送方重新发送数据。

3.3 功能时序图

图6、图7分别给出了利用Quartus II的在线逻辑分析仪Signal Tap II获取的PCI写数据、HDLC数据发送和HDLC接收、PCI读数据的时序波形图。从图中可以看到,HDLC模块正确实现了插“0”和去“0”操作,并能与PCI9054进行正确的数据收发。

本文采用PCI总线控制器PCI9054和FPGA技术设计实现了一款符合简化HDLC协议的通信卡,并已成功应用于实际工作中。实际应用表明收发数据正确,可以满足高速数据通信要求。同时,该通信卡设计中预留了一定的扩展空间,能够根据需要进行功能拓展。本通信卡可应用于信号处理、数据通信等场合,对PCI总线应用设计有一定的参考价值。

参考文献

[1]罗文翰,张剑锋.基于MPC860的HDLC通道驱动程序的设计与实现[J].电子技术应用,2005,31(15):66-68.

[2]张素兰,余国辉.基于PCI总线的高速串行通信模拟系统的设计与实现[J].计算机工程与设计,2007,28(15):3617-3620.

[3]陈斌,王成华,夏永君.基于DSP和PCI的通用数据采集及处理卡实现[J].计算机应用研究,2005(1):171-173.

[4]罗力凡,常春藤.基于VHDL的FPG开发快速入门.技巧.实例[M].北京:人民邮电出版社,2009.

[5]陆园琳,乔庐峰,王志功.多通道高速HDLC处理器的设计与实现[J].电子学报,2003,31(11):1630-1634.

[6]马萍,唐卫华,李绪志.基于PCIExpress总线高速数采卡的设计与实现[J].微计算机信息,2008,28(9-1):116-118.

PCI通信总线 篇2

PXI总线系统的卓越性能和较低的价格, 使得越来越多从事自动测试的工程技术人员开始关注PXI的发展。而PXI总线是PCI总线在仪器领域的扩展, 可以将PXI总线分为PCI总线和PXI扩展的总线两部分[1]。将进行PCI总线接口电路的设计, 从而为设计PXI模块仪器, 组建PXI总线自动测试系统做好准备。

目前, PCI总线接口电路的实现主要有两种方案:一是采用一片大容量FPGA/CPLD实现PCI总线接口逻辑;另一种是采用ASIC芯片完成PCI总线的接口电路[2]。由于PCI总线速度高, 协议复杂, 采用第一种方案虽然应用很灵活, 但是调试困难, 开发周期长, 而且采用一片工业级可用于PCI接口的FPGA/CPLD完成PCI总线接口功能, 远比使用PCI接口芯片的成本高。采用第二种方案, 功能强, 价格低, 稳定性好, 开发周期较短。通过对上述两种接口方案的比较, 从综合开发难度、芯片功能、开发速度和开发经费等方面考虑, 在此采用后一种方案完成PCI总线的接口设计。

1 PCI9030芯片及其主要特点

PCI9030是全球最大的PCI接口设备制造商PLX Technology于1999年3月推出的全新的32 b/33 MHz PCI目标设备接口芯片。它采用PLX先进的SMARTarget技术, 不仅为各种应用提供了最大的灵活性, 而且大大简化了系统设计, 具有最高的性价比, 能够满足各种应用的要求。PLX计划用它替代应用广泛的PCI9050 和PCI9052。PCI9030主要有以下特点[3]:

(1) 采用PLX先进的SMARTarget技术, 完全兼容PCI 2.2协议规范, PCI突发传输速率高达132 MB/s, 是第一个符合CompactPCI PICMG 2.1标准的工业级目标设备接口芯片。

(2) 支持高达60 MHz的局部总线操作, 突发传输模式下速率可达240 MB/s, 支持PCI目标预取模式、PCI目标可编程突发传输、PCI目标延迟写模式和PMW (Posted Memory Writes) 模式。

(3) 资源丰富, 应用灵活。它支持5个PCI to Local地址空间, 拥有9个通用I/O (GPIOs) , 4个可编程片选 (CS[3…0]) , 中断发生器/控制器, 支持Big/Little Endian字节转换, 可提供PCI缓冲时钟 (33 MHz) , 局部总线可编程读写选通定时等。

(4) 局部总线的配置可编程, 可支持复用或非复用模式的8位, 16位或32位局部总线。

(5) PCI9030支持3.3 V, 5 V电源容错, 因此在采用5 V电源的CPLD时, 不需要进行电平转换, 可以直接连接, 使得电路更加简洁。

2 PCI总线接口电路

PCI总线开关模块是在满足PCI总线数据传输协议的前提下进行写数据和数据回读, 完成PCI总线的基本数据传送。写数据时经过锁存和继电器驱动模块来驱动继电器工作, 可以通过数据线回读继电器的状态, 以判断数据传输的正确性, 其原理框图如图1所示。下面以本模块为例介绍PCI总线接口设计过程。

PCI总线接口电路主要分为3个部分[4], 即PCI总线接口、局部总线接口、串行E2PROM接口, 如图2所示。LCLK通过500 Ω电阻与BCLK0连接, 为PCI9030提供本地时钟信号。局部总线多路复用和非多路复用选择是通过硬件实现。这里选用多路复用, 故将PCI9030的MODE引脚通过电阻上拉至3.3 V电源。边界扫描JTAG不使用, PCI9030引脚ΤRSΤ¯应该通过电阻接地。

局部总线采用8位数据总线, 使用片选信号CS0和CS1, 通用接口信号GPIO0和GPIO1。一般情况, 所要实现的功能电路会需要一定的逻辑控制, 所以PCI9030提供的局部总线接口信号通常会引入FPGA/CPLD中, 并实现控制逻辑以简化电路。实例中采用EPM7128SQC100-10实现局部控制逻辑。

串行E2PROM接口部分采用93LC66B芯片, 写数据信号 (EEDI) 和读数据信号 (EEDO) 需要接上拉电阻。

另外, 还有一些问题需要注意。如果不用边界扫描应将TDI和TDO连接起来。

在非热插拔系统中, 应将PCI9030的CPCISW引脚通过的电阻接地[3]。

局域总线根据局域总线时钟信号运行, 并产生必要的内部时钟信号。该时钟与PCI时钟异步运行。BCLK0可以提供PCI缓冲时钟, 当其满足应用要求时, 可以省去本地时钟芯片, 否则需外接本地时钟信号产生芯片。

在对E2PROM编写配置信息前, 插入PCI板卡, BD-SEL¯需要上拉再接地才能进入系统, 所以通过跳线接地, 方便板卡调试。

PCI连接器上的两个引脚PRSNT1和PRSNT2应根据实际最大功耗进行设置, 具体设置见表1[5]。

3 E2PROM的配置

PCI总线“即插即用”的技术因为PCI系统除了可支持内存空间和I/O空间外, 还有一个配置空间[5,6], 所以可实现。配置信息是通过E2PROM存储并在复位时加载的, 因此其配置十分关键。

下面以所设计的PCI总线开关模块为例介绍其具体配置内容。对于PCI9030, 其器件ID号为9030, 供应商ID号为10B5, 子系统ID号为9030, 子系统供应ID号为10B5, 类码号为0680, 表示其为桥设备中的其他桥设备类[3]。中断寄存器的值设为0100, 表示使用中断ΙΝΤA¯

PCI总线开关模块为单功能设备, 所以使用一个本地地址空间就足够。这里使用本地空间1。本地空间1的范围寄存器值为0xFFFFFFC1, 表示被映射为I/O空间, 大小为64 B;本地空间1的基地址寄存器值为0x00000101, 表示空间1使能, 基地址为0x100;本地空间1的描述寄存器值为0x00000022, 表示本地空间1的数据总线宽度为8位。本地片选寄存器0的值是0x00000105, 表示本地地址落在0x100~0x107内时, 片选信号CS0¯有效。本地片选寄存器1的值是0x00000115, 表示本地地址落在0x110~0x117内时, 片选信号CS1¯有效。GPIO控制寄存器的值为00249036, 表示使用GPIO[0…3]的通用接口功能, 并设置GPIO0, GPIO1为输出I/O, 初值为1;GPIO2, GPIO3, GPIO8为输入I/O, 初值为0。其他寄存器的配置采用默认值, 具体值参考PCI9030数据手册。

4 板卡调试

通常使用PLXmon软件对板卡进行调试。在硬件没有错误, E2PROM内容配置正确的情况下, 将板卡插入PCI插槽, 启动PLXmon后会自动识别已插入的PCI板卡;然后就可以观察PCI配置寄存器 (PCR) 和局部配置寄存器 (LCR) 的内容;观察和修改E2PROM的内容。另外, 用户还可以进行内存和I/O端口的读写。

5 编写WDM驱动程序

在WindowsXP操作系统下编写WDM驱动程序[7,8,9,10], 最常用的开发工具是DriverStudio和WinDriver。在此采用DriverStudio编写PCI板卡的驱动程序。

首先, 根据DriverStudio的图形向导建立WDM功能驱动程序框架, 硬件选择PCI总线, 填写Device ID, Vendor ID, 子系统ID号和版本ID号;然后添加所需类和资源, 包括KIoRange类、KMemoryRange类和设备接口、选择读写存取方式、中断资源、根据需要添加控制码等。

在生成驱动程序基本框架后, 就要根据实际需求添加功能代码。由于PCI9030为从设备芯片, 不能主动发起总线传输, 没有DMA传输功能。因此, 开发PCI设备驱动程序WDM主要是实现对I/O映射空间和内存映射空间的访问。通常利用DriverStudio提供的KIoRange类和KMemoryRange类就可以简单的实现。

PCI基地址寄存器0专用于对本地配置寄存器的内存访问;PCI基地址寄存器1专用于对本地配置寄存器的I/O访问。通过访问本地配置寄存器, 可以充分利用PCI9030芯片内的资源, 包括中断控制器、GPIO、片选、局部总线可编程读写选通定时等。

编写完基本代码后, 编译即可生成*.sys和*.inf文件。根据需要可对*.inf文件做适当修改并拷贝到*.sys文件所在的文件夹中, 即可安装驱动程序。

6 结 语

正确的硬件电路连接是PCI板卡其他工作的基础和保证, 否则会导致PCI板卡根本上的失败。E2PROM的配置是PCI板卡能否正常工作的关键, 一点小的问题都会导致板卡不能正确识别和工作。调试工具和驱动软件的选择也应根据实际需要进行选择, 以提高开发效率, 缩短开发时间。

这里利用接口芯片实现PCI总线接口电路的设计, 可以提高开发效率, 降低开发成本, 同时验证其可靠性和稳定性, 为下一步开发PXI总线接口电路打下了良好的基础。

参考文献

[1]张毅刚, 彭喜元, 乔立岩.计算机自动测试[M].哈尔滨:哈尔滨工业大学出版社, 2006.

[2]张小宁.基于PXI/cPCI总线的高可靠自动测试系统的研究与实现[D].西安:西北工业大学, 2007.

[3]PLX Technology.PCI 9030 Data Book Version 1.4[R].2002.

[4]王胡舰, 吴瑞生, 刘翔, 等.利用接口芯片PCI9052制作PCI总线接口卡详解[J].工业控制计算机, 2004, 17 (12) :25-27.

[5]李贵山, 陈金鹏.PCI局部总线及其应用[M].西安:西安电子科技大学出版社, 2003.

[6]贾真, 林清.PCI总线应用设计与研究[J].现代电子技术, 2008, 31 (10) :85-87.

[7]武安河.Windows 2000/XP WDM设备驱动程序开发[M].2版.北京:电子工业出版社, 2005.

[8]张帆.Windows驱动开发技术详解[M].北京:电子工业出版社, 2008.

[9]杨波, 柳征, 姜文利.用DriverStudio开发PCI总线设备驱动程序[J].微计算机信息, 2007 (25) :1-3.

基于PCI总线的智能检测仪设计 篇3

1 PCI总线

1.1 PCI总线技术特点

PCI是先进的高性能局部总线, 可同时支持多组外围设备。PCI局部总线不受制于处理器, 为中央处理器及高速外围设备提供一座桥梁, 更可作为总线之间的交通指挥员, 提高数据吞吐量。PCI采用高度综合化的局部总线结构。其优化的设计可充分利用今日最先进的微处理器及个人电脑科技。它可确保电脑部件、附加卡及系统之间的运作可靠, 并能完全兼容现有的ISA/EISA/Micro Channel扩充总线。

1.2 PCI接口电路设计

本文在PCI接口电路设计时, 选用PLX公司的PCI9052专用接口芯片。图1为PCI接口电路示意图。

PCI9052提供用于适配卡的高性能的PCI总线目标接口, 使ISA适配器可以迅速、低成本地转换到PCI总线上。PCI9052可实现132 MB/S的数据传输能力。此PCI接口电路主要完成以下几个功能 (1) 地址译码和命令译码:为保证不会出现地址冲突, 采用全地址译码, 命令信号线C/BE[3::0]#也必须参加译码。 (2) 产生地址:PCI输出接口电路中应包含高速的地址产生部件用于向后级应用电路提供地址。 (3) 产生控制信号:PCI总线上的数据传输基本上由FRAME#、IRDY#、TRDY#和DEVSEL#四根信号线控制。因此必须根据主/从设备的忙闲等情况相应产生这些控制信号。

1.3 PCI总线的数据传输

图2为PCI总线上一次读突发操作时序。当有效时, 地址周期就开始, 且在时钟2的上升沿处稳定有效。在地址周期内, AD上包含有效地址, 上含有一个有效的总线命令。数据周期是从时钟3的上升沿处开始的。在此期间, AD线上传送的是数据, 而线上为字节使能信号, 指出哪几个字节是当前要传输的。和信号是由地址周期内所发地址选中的从设备提供的, 但要保证在之后出现。信号是主设备根据总线占有情况自动发出。数据的真正传输是在和同时有效的时钟前沿进行的。这两个信号的其中之一无效时, 就表示需要插入等待周期, 此时不进行数据传输。一个数据周期可以包含一次数据传输和若干个等待周期。如图2所示在时钟4, 6, 8处各进行了一次数据传输, 而在时钟3, 5, 7处插入了等待周期。在读操作的地址周期和数据周期之间, AD线上要有一个交换周期, 由从设备利用强制实现。在交换周期过后并且有信号时, 从设备必须驱动AD线。在时钟7处尽管是最后一个数据周期, 但由于主设备因某种原因不能完成最后一次传输 (此时无效) , 故不能撤销;只有在时钟8处, 变为有效后, 信号才能撤销。

2 智能检测仪硬件设计

2.1 硬件结构框图

图3为硬件结构框图, 检测仪以工业控制机为主机, 自行研制的4块基于PCI总线的功能电路板为分机 (4块功能电路板上各有1片89C52) 。主机负责系统的工作协调, 输出对分机的命令, 对分机传送的测量数据进行分析处理, 输出智能检测系统的测量、控制和故障检测结果;分机实现数据的采样、初级数据处理以及数据传送, 其中分机1用于采集模拟信号;分机2用于发送模拟激励信号和一次性指令;分机3用于采集数字通道信号;分机4用于发送数字激励信号。

2.2 单片机与工控机间的通信设计

在本智能检测系统中, 以工业控制机作为主机, 以单片机为信息处理核心作为分机, 单片机完成信息采集、处理和传输, 并接收、执行主机命令。主机定时扫描以单片机为核心的分机, 采集数据和发送控制信息。由于各分机与主机间的数据传输量较大, 因此通过共用双口RAM实现数据传输。IDT7132为2KΧ8 bit的双口RAM (图4) 。它具有两组完全对称的地址线、数据线和控制线, 允许两个CPU同时对存储器进行访问。该双口RAM内含有的仲裁逻辑可以解决两个CPU同时访问同一地址的问题。CPLD采用ALTER公司的MAX7000系列器件, 它在接口电路中主要完成以下工作:PCI9052的地址译码和管脚逻辑控制, 89C52的数据锁存和地址译码, 产生对双口RAM的逻辑控制信号。

3 智能检测仪软件设计

3.1 软件总体设计

软件运行和开发平台选用Windows 2000操作系统;人机接口界面和检测诊断程序的开发选用美国NI公司的面向仪器交互式C语言的LabWindows/CVI软件;专家知识库选用Microsoft Visual FoxPro 6.0开发, 采用微软ODBC (开放式数据库互连) 技术, 应用SQL语言 (标准查询语言) 实现专家知识、履历数据、检测结果的共享;技术咨询库选用Microsoft FrontPage软件进行开发。

软件总体设计结构框图如图5所示, 软件由7大功能模块组成。其中, 主控模块实现对检测仪操作流程控制;自检测模块用于检测仪自身的SRU级自检;数据采集处理模块完成PC机与各分机间数据的采集与处理以及控制指令和激励信号源的发送;故障诊断模块根据采集数据和专家知识库提供的知识, 按一定的推理机, 对被检设备进行智能诊断;专家知识库模块根据专家知识和经验导出了一系列规则, 汇聚了专家在这一技术领域的专业知识;技术咨询库提供各种技术帮助;显示、报警、排故模块通过人机界面将检测结果通知操作人员。

3.2 数据融合技术在智能检测仪中的应用

检测仪要采集来自多传感器的数据, 其中既有模拟信号又有数字信号, 为了提高检测仪的检测可靠性和检测精度, 在数据采集模块中采用了自适应加权融合算法。如图6所示为自适应加权融合模型。

对于不同的传感器都有相应的权数, 在总均方误差最小这一最优条件下, 根据各个传感器所得到的测量值以自适应的方式寻找其对应的权数, 使融合后的达到最优。引入加权因子, 智能检测系统的多传感器数据融合值为

总均方误差为

式 (3) 中σ2是各加权因子Wi的多元二次函数。根据多元函数求极值理论, 可求出当加权因子为:

时, σ2为最小值, 且

被测参数的真值是客观存在的常量, 可以根据已有的测量数据的算术平均值来进行估计。设:

此时的估计值为 (7)

总均方误差为

显而易见, , 而且, 随着k的增加, 逐渐减小。

4 结语

本文基于PCI总线而设计的智能检测仪在实际中已经得到推广应用。由于采用了PCI总线接口技术, 使得检测的速度快;采用了数据融合技术, 使得检测智能性强, 可靠性高。得到了应用方的一致好评。

参考文献

[1]Tom Shanley Don Anderson.PCI System Architecture (Fouth Edition) [M], 2000.7

PCI通信总线 篇4

PCI总线接口电路通常采用通用的PCI接口芯片来实现, 如 AMCC 公司的S5920, PLX公司的PLX9056等, 该种方式可以降低开发难度, 缩短开发周期, 但系统结构受接口芯片的限制, 无法灵活地设计目标系统。

本文采用符合PCI电气特性的FPGA来实现, 该种方式可以在单片FPGA中同时完成PCI接口和用户设计, 从而消除PCI接口芯片与本地通信的信号线的硬线连接, 提高系统的集成度和灵活性。在利用FPGA开发PCI总线接口电路时, 虽然可以通过用户编写状态机来实现, 但由于PCI总线协议非常复杂, 该种方法实现起来难度较大。因此, 本文利用FPGA生产商提供的IP核来实现CPCI系统中的PCI接口电路, 此时可不必关心复杂的PCI总线协议, 实现起来较为简单。另外, 本文在驱动程序开发的基础上, 对其实际性能进行了全面的分析。

1 基于IP核的PCI总线接口逻辑设计

在CPCI系统中, 外围板既可做PCI总线从设备, 实现基本的传输要求, 又可做PCI总线主设备, 实现对系统中的其他PCI总线设备及资源的访问。另外, PCI总线本身又支持单次和突发访问。则在利用FPGA开发PCI接口电路时, 基于IP核的PCI总线接口逻辑主要分为以下几个模块: (1) 从设备的单次访问通常用于主机板对FPGA中的控制寄存器的访问; (2) 从设备突发访问用于主机板与FPGA间的大批量数据的传送; (3) 由于启动一次主设备访问要调用主机板较多的软硬件资源来实现控制, 则主设备访问通常只采用主设备突发访问, 来实现FPGA与主机板内存间的大批量数据的传送, 通常称为DMA操作。

在本设计中, FPGA采用Xilinx公司生产的XC4VLX25, IP核采用Xilinx公司提供的可重用PCI核 (版本号为V3.166) 。该PCI核为用户提供灵活方便的主设备和从设备两种接口, 支持存储器读写、I/O读写、配置空间读写三种读写方式。利用该PCI核开发的PCI接口逻辑的结构框图如图2所示。

从图2中可以看出, 基于IP核的PCI接口逻辑主要包括从设备单次读写接口模块、从设备突发读写接口模块、主设备突发读写接口模块 (DMA读写模块) 和带备份功能的FIFO四个模块, 其中从设备单次和突发读写接口模块较为简单, 参见文献[1];本文仅就带备份功能的FIFO模块和主设备突发读写接口模块进行讨论。

1.1 带有备份功能的FIFO模块

在开发突发传送接口模块时, 在PCI核与用户逻辑之间需要提供一个高速缓存, 用来实现大量数据的缓冲。常用的缓存有双口RAM, FIFO等, 其中, FIFO以其接口简单, 便于实现而在逻辑开发时得到了广泛的应用。本文采用FIFO作为突发传送接口模块的缓存。

1.1.1 Xilinx PCI核突发读FIFO中存在的问题

在PCI核向主机板突发传送数据时, PCI核输出数据源使能信号 (M_SRC_EN或S_SRC_EN) , 用户逻辑用它作为FIFO的读信号并将FIFO的输出数据驱动到PCI核的ADIO总线上;此时, 为了提高传输效率, PCI核不是保持当前数据直到它被传送至主机, 而是会继续使数据源使能信号有效来将FIFO的下一个输出数据放在ADIO总线上。而若此时主机板以某种形式断开或中止传送事务, 则从FIFO中读出而未被传送的数据应该被备份回到FIFO中去, 以防止数据丢失。

对于一般的FIFO在读操作完成后, 被读的数据就会从FIFO中消失, 因此, 需要构建一个带有备份功能的FIFO。

1.1.2 基于双口RAM的带有备份功能的同步FIFO

通常, FIFO是由双口RAM+控制逻辑来搭建的, 因此, 为了便于同步控制, 本文利用双口RAM来设计一个带有备份功能的同步FIFO, 其结构框图如图4所示。

从图4中可以看出, 带有备份功能的同步FIFO中包括双口RAM模块、写地址产生模块、读地址产生模块和空满信号产生模块四个子模块组成。其中, ①双口RAM模块一般由FPGA中的distributed BlockRAM来构建而成;②空满信号产生模块用来产生FIFO的空信号和满信号, 由于读端口时钟和写端口时钟为同一时钟, 则当读地址等于写地址时, FIFO空信号有效, 当写地址等于读地址加上 (FIFO的深度-1) 或者写地址等于读地址减去1时, 都应该使FIFO满信号有效;③写地址产生模块用于产生写地址, 当写信号有效并且FIFO的满标志无效时, 写地址自加1;④读地址产生模块用于产生读地址, 当读信号有效并且FIFO的空标志无效时, 读地址自加1, 当备份信号BACK_UP有效时, 读地址自减1, 从而实现对在PCI核突发操作中从FIFO中读出而未被传送的数据的备份。

1.2 主设备突发读写接口模块 (DMA接口模块)

主设备突发读写接口模块的结构框图如图5所示, 其状态机模块如图6所示。

从图5中可以看出, 在外围板作为主设备进行突发传送时, 主机板要首先通过从设备单次读写接口 (简称为寄存器接口) 来设置突发传送的源地址和目标地址, 传送方向, 传送长度以及开始信号, 即:实现主控功能;另外, 当突发传送完成后, 接口模块通过将PCI核中的中断信号INTR_N置为低电平来使PCI核对主机产生中断。

在图6中, 状态机的状态转移条件:START信号表示突发传送的开始, DIR信号表示突发传送的方向, MDATA_FELL信号为M_DATA信号的下降沿, 表示PCI核的数据传输结束, RETRY信号为CSR[36], 表示PCI核需要重新申请总线。

状态机共有6个状态:

(1) IDLE状态:空闲状态, 在主机板配置好突发传送的相关寄存器后, 将START寄存器置为高电平, 则状态机会进入REQ状态;

(2) REQ状态:总线请求状态, 用于输出REQUEST为高电平, 然后根据传送方向 (DIR信号) 来决定进入读状态还是写状态;

(3) WRITE状态:写状态, 当PCI核的数据传输结束 (M_DATA信号的下降沿) 时, 如果PCI核需要重新申请总线, 则就要在对读出的FIFO数据进行备份后重新申请总线而进入REQ状态;否则, 在传输结束时, 就要在对多读出的FIFO数据进行备份后进入IDLE状态;

(4) READ状态:读状态, 当数据传输结束时, 如果PCI核需要重新申请总线, 由于此时是写FIFO而不是读FIFO, 则不必进行数据备份而直接重新申请总线而进入REQ状态;否则, 在传输结束时, 就要直接进入IDLE状态, 并且此时, 状态机都会将PCI核的中断请求信号INTR_N置为低电平来对主机产生中断, 表示突发传送的结束。

(5) RETRY_BACKUP状态和BACKUP状态:重试备份状态和备份状态。由于数据源使能信号 (M_SRC_EN或S_SRC_EN) 作为FIFO的读信号, 则该信号的个数为实际从FIFO中读出数据的个数, 而PCI核还输出数据有效信号 (M_DATA_VLD或S_DATA_VLD) 表示数据传输成功, 则该信号的个数表示实际传送数据的个数, 因此, 要备份的数据个数等于数据源使能信号的个数减去数据有效信号的个数。则该状态用于产生 (数据源使能信号的个数-数据有效信号的个数) 个BACK_UP信号, 来对从FIFO中读出但未传送的数据重新备份回到FIFO中去, 防止数据丢失。

2 驱动程序开发

2.1 开发环境选择

在CPCI系统中, 主机板通常采用Windows操作系统, 用作系统主控, 该操作系统对PCI总线具有良好的支持。本文在Windows XP操作系统下, 以VC++6.0为开发环境, 采用Windriver工具来开发外围板的PCI接口电路的驱动程序。与其他开发工具如DDK、DriverStudio等相比, Windriver操作更加简单高效、不涉及操作系统底层编程, 可以使设计主要集中在用户模式下, 大大降低了开发难度, 缩短了驱动开发周期。

2.2 基于IP核的PCI接口电路的驱动程序开发

利用Windriver开发设备驱动程序的流程大致如下: (1) 利用WD_OPEN () 打开Windriver设备, (2) 利用WD_PciScanCards () 来查找对应VendorID和DeviceID的PCI设备, (3) 利用WD_PciGetCardInfo () 来枚举该设备的资源 (存储器资源、I/O资源、中断资源等) , (4) 利用WD_CardRegister () 来锁定设备资源, (5) 主机板与外围设备间的数据传送, (6) 利用WD_CardUnregister () 解锁设备资源, (7) 利用WD_Close () 来关闭Windriver设备。

基于IP核的PCI接口电路的驱动程序主要包括从设备单次读写接口模块的驱动, 从设备突发读写接口模块的驱动以及主设备突发读写接口模块的驱动三个组成部分。

(1) 从设备单次读写接口模块的驱动可直接采用Windriver提供的XXX_WriteDword () 函数和XXX_ReadDword () 函数来实现主机板对FPGA中的寄存器资源的访问。

(2) 从设备突发读写接口模块的驱动可直接采用Windriver提供的XXX_ReadWriteBlock () 函数来实现主机板对FPGA中的带备份功能的FIFO的突发访问。

(3) 主设备突发读写接口模块 (DMA模块) 的驱动较为复杂, 首先, 利用WD_Lock () 函数来锁定一段连续的数据缓冲区, WD_Lock () 会返回两个地址指针:一个是Dma->Page[0]. pPhysicalAddr, 它为该缓冲区的物理地址, 用作突发传送的目标地址, 另一个是Dma->pUserAddr, 它为该缓冲区在用户模式下虚拟存储区的地址;其次, 用XXX_IntEnable () 函数进行中断注册, 此时用来清除中断的中断传输指令的地址和数值需要更改以匹配FPGA中的INT_CL寄存器;然后, 利用XXX_WriteDword () 将突发传送的源地址、目标地址、突发长度、传送方向等参数设置到FPGA中的对应寄存器中去, 并开启传送;最后, 在突发传送结束后, PCI核会向主机板产生中断, 驱动在收到中断后, 会通过内核模式的中断传送指令来清除中断, 并返回用户模式, 此时, 驱动可利用Dma->pUserAddr来访问被操作的数据缓冲区。

由此可见, 利用Windriver来开发PCI的驱动程序是较为方便的。另外, 在驱动程序开发完成后, 还可以很方便地将它打包成安装文件, 从而使驱动程序可以独立运行, 详见参考文献[2], 本文不再赘述。

3 实测性能分析

3.1 本测试中的CPCI系统组成

在本测试中, CPCI系统的组成为:

(1) CPCI机箱采用研华公司生产的MIC3042 8槽机箱;

(2) 主机板分别采用研华公司生产的MIC3358、MIC3390和MIC3392;

(3) 外围板1为采用本文中所述的PCI接口电路的6U CPCI板卡;

外围板2为采用PLX公司生产的PLX9056作为接口电路的6U CPCI板卡。

3.2 测试结果及性能分析

由于PCI总线的优势在于其突发传送, 因此, 本文采用实测PCI总线的突发传送数据率来衡量PCI接口电路的性能。

3.2.1 基于IP核的PCI接口电路的测试结果

通过将外围板1插入上述CPCI系统中, 利用三种主机板对外围板1的四种突发接口进行测试, 获得的实测结果如表1所示, 其中该PCI接口电路工作在32bits@33MHz模式下。

从表1可以看出:

(1) 基于IP核的接口电路对多种型号的主机板均具有较好的兼容性。

(2) 在主机板与外围板之间传送数据时, 写操作的效率要大于读操作的效率。

(3) 在采用MIC3358主机板时, 基于IP核的接口电路的从设备写接口效率高达42.1%, 主设备突发写接口效率可达62.5%。

3.2.2 基于PLX9056的PCI接口电路的测试结果

通过将外围板2插入上述系统中, 利用三种主机板对外围板2的四种突发接口进行测试, 获得的实测结果如表2所示, 其中该PCI接口电路工作在32bits@33MHz模式下。

通过比较表1和表2可以看出:

(1) 两种接口电路的传输效率均与主机板的型号有关。

(2) 采用本文中所述的基于IP核的PCI接口电路的总体性能要优于采用专用芯片的PCI接口电路。

4 结束语

本文在Xilin公司提供的IP核的基础上, 利用FPGA来实现了CPCI系统中外围板上的PCI接口电路。针对该PCI核中突发操作中存在的问题, 本文提出了一种带备份功能的同步FIFO的设计。在此基础上, 本文还详细描述了主设备突发读写接口模块 (DMA读写模块) 。最后, 在开发驱动的基础上, 通过与PLX公司生产的PLX9056专用接口电路相比较, 采用本文设计的PCI接口电路总体性能优于PLX9056。

参考文献

[1]Xilinx, Inc.LogiCORETMIP Initiator/Target v3.166for PCITM.www.xilinx.com.2008.55-111

[2]范涛.基于FPGA的PCI接口控制器的设计与实现[J].中国传媒大学学报自然科学版, 2007, V14 (2) .54-57

[3]Tom Shanley, Don Anderson.PCI系统结构 (第四版) [M].刘晖, 冀然然, 夏意军译.北京:电子工业出版社, 2000.

[4]PCI Local Bus Speei6cation Revision2.2.December18, 1998[s].

[5]Martin, R., D.Komatitsch, et al.“An unsplit convolutional perfectly matched layer improved at grazing incidence for seismic wave propagation in poroelastic media.”Geophysics.2008, 73 (4) :T51-T61.

[6]R.Huang, L.W.Schmerr Jr., and A.Sedov.A NEW MULTI-GAUSSIAN BEAM MODEL FOR PHASED ARRAY TRANSDUC-ERS.Review of Quantitative Nondestructive Evaluation, 2007, V.26.751-758

[7]Drossaert, F.H.and A.Giannopoulos"A nonsplit complex frequency-shifted PML based on recursive integration for FDTD modeling of elastic waves."Geophysics (2007) .72 (2) :T9-T17.

[8]Drossaert, F.H.and A.Giannopoulos"Complex frequency shifted convolution PML for FDTD modelling of elastic waves."Wave Motion (2007) .44 (7-8) :593-604.

[9]Komatitsch, D.and Martin, R.An unsplit convolutional Perfectly Matched Layer improved at grazing incidence for the seismic wave equation, in:Geophysics, 2007, 72 (5) , p.SM155-SM167.

PCI通信总线 篇5

1553B总线是美国军用标准MIL-STD-1553B所定义的一种串行数据传输总线,该标准对总线的结构布局、数据传输方式等进行了严格的定义,广泛用于航空、航天和军用场合的多终端之间的数据传输,具有实时性好、抗干扰能力强、冗余备份、易于扩展等优点,是一种确定的、可靠的、命令/响应式数据通信标准[1]。

电调滤波器是中心频率可以改变的带通滤波器,其中心频率由超短波电台的控制并保持一致,在无线电系统的射频链路中起到滤波作用,提高系统的电磁兼容能力。电调滤波器的控制接口采用1553B形式,在电调滤波器调试、实验、检验阶段需要通过1553B总线对电调滤波器进行相应控制,完成检测功能,因此急需开发基于1553B接口的电调滤波器控制软件。针对电调滤波器设备性能测试的具体需求,本文首先对1553B总线协议进行了简单介绍,利用PC计算机和PCI接口的1553B板卡为硬件平台,在Visual Basic 6.0编程环境下完成了基于1553B接口的电调滤波器控制软件程序设计。经实际使用,达到了预期的设计目标。

1 1553B总线

1.1 总线概述

1553B总线是20世纪70年代由美国军方和政府公布的一种串行多路数据总线标准,它规定了飞机内部数字式的命令/响应时分制多路数据总线的技术要求,同时规定了多路总线的操作方式和总线上的信息流的格式规范,是目前世界军用飞机中应用最广泛的数据传输系统,由于其高度的可靠性和灵活性,目前在在机载、舰载及地面武器设备中也得到了广泛的应用,并逐渐应用到民用领域[2]。

1553B总线系统主要包括终端模块、耦合器、电缆、电缆连接器、终端匹配器等,它们通过两根冗余电缆连接,最多可挂接32个终端。在总线通信过程中一条总线工作,另一条总线则处于热备份状态;总线耦合有直接耦合与变压器耦合两种方式。典型的1553B通信网络结构如图1所示。

与总线系统联接的终端按作用可分为总线控制器BC、远程终端RT和总线监控器BM。BC是在总线上惟一建立和启动数据传输任务的控制终端;RT是数据总线上用户子系统终端,它在BC的控制下接收或发送总线数据,只有当总线控制器发出命令后,远程终端才能做出响应,也即远程终端永远是被动的,即使它想给BC或其他RT发信息。BM监控总线上的信息传输,并能对总线上数据进行记录和分析,器本身不参与总线通信。每个终端被分配了惟一的总线形式,各终端之间信息传输方式有:BC-RT、RT-BC,RT-RT,广播方式和系统控制方式等[3]。

1.2 1553B总线通信

1553B总线的信息格式采用曼切斯特Ⅱ型编码,半双工工作方式。信号以串行数字脉冲编码调制形式在数据总线上传输,一个正脉冲继之一个负脉冲为逻辑1,一个负脉冲继之一个正脉冲则为逻辑0。在总线上传输的有3种类型的字:命令字、状态字和数据字。每种字的字长为20位,有效信息位是16位,每个字的前三位为同步字头,最后一位为奇偶校验位。有效信息(16位)及奇偶校验位在总线上以曼彻斯特码的形式进行传输。同步字头占三位,或先正后负(命令字、状态字)或先负后正(数据字),正/负电平各占1.5μs。由于系统的类型不同,可辨别出命令字和状态字,命令字由现行的总线控制器发出,而状态字总是由远程终端RT发出。信息字的详细格式如图2所示。

1553B消息是指由命令字、状态字、若干个数据字(字数从0~32不等)及状态字间隔在内组成的传输序列,每个消息中命令字和状态字是必须的且仅有一个。如果需要完成一定的功能,就要将多个消息组织起来,形成一个新的结构叫作帧[4,5]。

1553B总线上消息传输的过程是:由总线控制器向某一终端发布一个接收/发送指令,终端在给定的响应时间内发回一个状态字并执行消息的接收/发送。BC通过验收RT发出的状态字、数据字来检验传输是否成功并作后续的操作。

2 基于PCI接口的1553B控制程序设计

2.1 硬件平台设计

目前,采用计算机加PCI接口的1553B板卡是实现1553B模拟通信控制的主要方案,很多国外老牌厂家提供多种PCI接口的1553B板卡产品,并且提供相应的高级应用程序接口函数(API),可以同时实现多通道的BC,BM,RT功能,该种方案可以利用普通计算机的PCI接口进行程序设计,其设计灵活,软件开发时间短,具有较好的成本优势和易用性,可以很容易实现。本方案中采用美国Condor公司的PCI接口的1553B板卡及计算机为硬件平台。

2.2 控制软件设计

软件基于Windows XP操作系统,采用Visual Basic6.0语言编写[6]。其主要功能是:产生并发送满足传输格式的数据;接收、处理滤波器回传的信息;工作状态等内容显示与更新。Condor公司提供了busapi32.dll的动态链接库,借助DLL能很容易调用API的内部函数,实现应用程序的二次开发;使用动态链接库首先需要声明调用的函数,因为本程序采用传值方式,因此函数声明时在参数前加上By Val关键字。并利用关键字Sub将其声明为过程或者关键字Function将其声明为函数,所有函数在使用前均需要声明,例如:

Declare Function Bus Tools_BC_Aperiodic Run Lib"busapi32.DLL"(By Val cardnum&,By Val messageid&,By Val Hipriority&,By Val Wait Flag&,By Val Wait Time&)As Long定义了BusTools_BC_Aperiodic Run()函数的相关参数。

然后在应用程序中建立API_BC_MBUF结构体。该结构体包含1553B的相关数据消息格式,其中主要有1553B中的命令字、状态字、数据字信息,通过设置不同的命令字实现不同的功能(收发,BC/BM/RT设置),采用读取状态字确认1553B是否工作正常,数据字可以是发送的或者回传。因此,通过设置不同的消息号以及不同的命令字、状态字、数据字,可以实现不同的指令集合完成设备的全部功能。

程序工作流程包括板卡初始化,指令集合的建立,命令数据的发送与接收,程序异常的处理。

首先是PCI-1553B板卡的初始化过程,包括调用Bus Tools_API_Init Extended()函数实现板卡的初始化工作,初始化完成后可以通过调用Bus Tools_Get Revision()获取板卡的相关版本号,然后通过Bus Tools_BM_Init(),Bus Tools_RT_Init(),Bus Tools_BC_Init()三个函数实现板卡的BM、RT、BC的工作模式初始化,并通过BusTools_Set Internal Bus()函数设置内部总线,最后调用Bus Tools_BC_Message Alloc()分配BC的使用内存值。

其次,将mess结构体对应的消息号、命令字、状态字、数据字等变量进行修改,通过Bus Tools_BC_Message Write(g Board,n,mess)函数将不同的命令写入到对应的消息号上去(变量n与mess结构体中的消息号一致)。调用Bus Tools_BC_Start Stop()函数开启BC写入功能。重复该步骤完成指令集合的建立。最后,通过BusTools_BC_Aperiodic Run()将预先设置好的消息通过总线发送出去,滤波器接收到指令后执行相应动作并回传信息,在需要读取数据时调用Bus Tools_BC_Message Read()函数读取设备的返回状态及数据信息。并根据状态信息以及数据信息对显示界面进行相应处理。

电调滤波器的主要工作命令有自检命令、频率设置命令,其相应的工作流程图如图3所示,程序运行时的主界面如图4所示,程序工作时首先设置电调滤波器的1553B地址以及滤波器类型,然后初始化1553B板卡,成功后显示板卡的相关信息,自检、设置按钮发送自检、频率设置命令,通过读取回传信息可以显示当前的工作频率及状态,并能显示相应的故障类型以及工作方式。

3 结语

本文通过对1553B总线技术的研究,采用调用高级语言调用动态链接库的方法,以PC机和PCI接口的1553B板卡为硬件平台,在VB 6.0环境下设计了电调滤波器控制程序,经过多次使用及验证,软件工作稳定,功能完善,很好地解决了设备地面维修保障的实际困难,同时该方法具有通用性,通过修改相应的软件应用程序接口,可用于其他设备的1553B接口通信测试中。

参考文献

[1]佚名.MIL STD-1553B飞机内部时分制指令/响应式多路传输数据总线[S].美国军用标准,1978.

[2]罗志强.航空电子综合化系统[M].北京:北京航空航天大学出版社,1990.

[3]支超有,唐长红.机载数据总线技术及其应用[M].北京:国防工业出版社,2009.

[4]张晓斌,周舢,李士杰,等.基于1553B总线的先进飞机电气系统远程终端的仿真[J].测控技术,2006,25(1):52-55.

[5]侯青剑,缪栋.1553B总线及其在测控网路中的实现[J].计量与测试技术,2005,32(3):24-26.

PCI通信总线 篇6

为了减小空间大口径望远镜发射时的尺寸, 同时实现主镜在空中展开后, 子镜单元的精确定位和锁紧, 释放其展开动力和各个链接锁紧的动力源, 本系统设计了一种可展开空间大口径望远镜的可折叠展开主镜概念设计。通过7个步进电机来实现整个望远镜子镜模型折叠和展开, 同时满足在切除动力源之后的锁紧状态。基于PCI总线的运动控制器是一种基于PC机的PCI总线, 具有开放体系结构与PC机相结合, 用于控制伺服或步进电机的位置、速度、加速度等的控制器。运动控制器通常以专用运动芯片或者告诉DSP完成轨迹规划、曲线插补、伺服控制以及标准化通信接口控制功能。用户根据需要调用运动控制器的库函数开发相应的应用程序, 方便地实现各种运动控制功能, 在设计的人机界面上对控制对象进行实时监控, 运动控制卡使用方便, 因而在望远镜控制、机器人等领域有着重要的应用。

2 控制系统硬件组成

为了实现对大口径空间望远镜子镜折叠及展开控制系统的自动控制, 该控制系统采用工控机、PCI多轴控制器、步进电机驱动器和步进电机来组建整个控制系统。计算机控制运动控制器给步进电机驱动器发出一个脉冲信号, 驱动器便驱动步进电机旋转一定的角度, 步进电机的输出轴带动传动机构运动, 通过脉冲方式来实现对步进电机的精确定位和控制。

2.1 运动控制器

多轴步进电机运动控制器采用固高科技有限公司生产的GTS-800-PG-PCI系列运动控制器, 可以实现高速的点位运动。其核心由DSP和FPGA组成, 可以实现高性能的控制计算。它适用于广泛的应用领域, 包括机器人、数控机床、木工机械、印刷机械、装配生产线、电子加工设备、激光加工设备以及PCB钻铣设备等。GTS-800-PG-PCI系列运动控制器以工业控制计算机为主机, 提供标准的PCI总线的产品。运动控制器提供配套的运动调试软件, C语言函数库和Windows动态链接库, 能实现复杂的控制功能。能够将这些控制函数与自己控制系统所需的数据处理、界面显示、用户接口等应用程序模块集成在一起, 建造符合特定应用要求的控制系统, 以适应各种应用领域的要求。运动控制器提供两种不同的控制信号:正脉冲/负脉冲、脉冲+方向, 在控制步进电机时, 控制模式为开环控制。

2.2 步进电机和驱动器

步进电机采用的是伟通机电制造有限公司的60STH101-3004A步进电机和2H606M系列步进电机驱动器。电机和驱动器的参数如表1。

驱动器性能参数:输入电源:AC20V-60V 6A (MAX) ;电流输出:2.5A-6.0A;驱动方式:PWM (脉宽调制) 恒流载波, 两相正弦波电流输出;适配电机:60, 85, 86, 110系列两相混合式步进电机;工作环境:-10℃~55℃, 15~85%RH;细分:200~60000步数/转, 共有28档微步细分;信号接口与时序:共有共阳极, 共阴极和差分信号三种接法, 该系统采用差分信号接法如图1所示。

3 控制系统软件

GTS-800-PG-PCI系列运动控制器为用户提供了相应的调试软件MCT2008, 同时便于二次开发, 在Windows系统下, 用户可以使用任何能够支持动态链接库的开发工具开发应用程序, 支持Visual C++、Visual Basic和Delphi等应用程序。在该系统中, 我们采用Microsoft Visual Studio 2010进行了二次开发。

3.1 系统配置

在使用运动控制器进行各种操作之前, 我们需要对运动控制器进行配置, 使运动控制器的状态和工作模式满足要求。采用Motion Controller Tool Kit 2008中的配置组件, 生成相应的配置文件*.cfg, 在编程的时候通过调用相关的指令, 将配置信息传递给运动控制器, 即可完成整个运动器的配置工作。

该系统的步进控制方式的基本配置如图2所示。Profile输出的规划位置进入axis中, 在axis中进行当量变换的处理之后, 输出到step, 由step产生控制脉冲, 驱动电机运动。Axis需要驱动报警、正向限位信号、负向限位信号、平滑停止信号、紧急停止信号等一些数字量输出信号来对运动进行管理;同时, axis需要输出伺服时能信号给数字量输出, 来使电机使能。运动控制管理软件界面如图3所示。

3.2 运动指令

GTS运动控制器可以独立工作在点位、Jog、PT、PVT、电子齿轮或Follow运动模式 (电子凸轮) 下, 在该控制系统下我们采用点位控制模式。

(1) 在初始化函数On Init Dialog () 中打开GT_Open () 和复位GT_R es et () 运动控制器; (2) 配置运动控制器, 添加配置文件GT_Load Config (“test.cfg”) 并清除各轴的报警和限位GT_Clr Sts (1, 8) ; (3) 将AXIS轴设为点位模式GT_Prf Trap () ; (4) 读取点位运动参数GT_Get Trap Prm (1, &trap1) ; (5) 设置点位运动参数GT_Set Trap Prm (1, &trap1) ; (6) 添加定时器Set Timer (0, 1000, NULL) , 获取各个轴的位置信息GT_Get Prf Pos (1, &prf Pos1) ;

控制系统界面如图4所示。

状态指令和点位模式指令主要有:

4 结语

实验结果表明, 通过选取基于PCI总线的运动控制器以及采用Visual C++对运动控制器进行二次开发来组件整套运动控制系统能够很好的满足该空间望远镜子镜折叠及展开模型的控制要求, 而且实现简单调试方便, 为今后实际运用奠定了良好的基础。

参考文献

[1]孙鑫, 余安萍.VC++深入详解[M].北京:电子工业出版社, 2006.

[2]胡寿松.自动控制原理 (第五版) [M].北京:科学出版社, 2007.

[3]固高科技有限公司.GTS系列运动控制器用户手册[M].深圳:固高科技有限公司, 2011.

PCI通信总线 篇7

由于大部分I/O设备没有PCI总线功能,要实现设备与PCI总线的连接,需要PCI接口芯片、通用异步收发器UART(Universal Asynchronous Receiver Transmitter)等。而目前开发PCI总线与外部设备的串口通信大体上有两种方式:(1)使用专用的芯片,如:PCI专用接口芯片S5920、S5933等;UART专用芯片8250、8251、16450、16550等。使用厂家提供的专用接口芯片,用户可能只使用到它的部分功能,会造成一定的资源浪费,而且专用芯片价格高。(2)使用可编程器件FPGA。使用FPGA较使用专用芯片具有以下优点:一方面用户可以根据需要进行设计,不会浪费资源;另一方面可以将PCI接口、UART都做在一片FPGA内,这样就不需要外接专门的芯片,简化了电路、缩小了体积、提高了系统的可靠性。

1 系统硬件设计

本设计中选用Altera公司的FPGA芯片EP1C6SQ240作为核心器件,完成PCI接口以及UART的设计,实现PCI总线与串口的连接。选用美信公司的MAX490芯片作为电平转换电路。系统的硬件连接框图如图1所示。

数据传输过程:上位机通过PCI总线发送并行数据到UART的数据缓存器中,然后数据经UART的数据缓存器进入UART的移位寄存器进行并串转换后,通过串口传到下位机。反之,下位机通过串口将数据传送到UART的移位寄存器中,进行串并转换,然后进入UART的数据缓存器中,最后传到上位机。

设计中采用,传输距离长、抗干扰能力强的RS422串口。但是规定RS422:逻辑1的电平为-6 V~-2 V;逻辑0的电平为+2 V~+6 V。而FPGA的I/O电平一般为0~3.3V,二者之间的电平不兼容。为了使二者之间的供电电压保持一致,必须加入电平转换电路。为此选用美信公司的MAX490芯片来实现二者之间的电平转换,其电路原理图如图2所示。

1.1 PCI总线接口

PCI总线接口的功能是将一个不支持PCI协议的后端设备接口到PCI总线上。为了实现PCI总线接口的基本功能,必须完成如下模块的设计:PCI空间配置模块、偶校验模块、地址译码和命令译码模块、设备状态机模块等。PCI总线接口原理框图如图3所示。

1.1.1 PCI空间配置模块

PCI协议支持3种地址空间:I/O空间、内存空间和配置空间。配置空间是PCI所特有的一种空间,其大小为256 B,前64 B是必需的,记录了PCI串口设备的基本信息。PCI设备的一些主要的信息如下:

(1)Vendor ID、Device ID:分别表示设备的生产厂商和设备编号。

(2)Command:命令寄存器,包含设备控制位,包括允许存储器读写响应等。

(3)Status:状态寄存器,记录PCI总线的相关事件信息。

(4)Base Adress Register:基地址寄存器,指示此PCI设备按I/O方式还是按内存方式进行读写以及需要的地址空间大小。

(5)Interrupt Line、Interrupt Pin:为设备使用的中断号和中断引脚。

1.1.2 偶校验模块

PCI总线的偶校验用于检验数据传输是否正确。在PCI总线上,利用偶校验模块检查每次传输中主设备是否正确地寻址到目标设备,以及它们之间的数据是否正确地传输。

1.1.3 地址译码和命令译码模块

地址译码模块主要用于检测地址与此PCI串口设备的基地址是否匹配,如果匹配,则PCI串口设备响应当前的总线操作。

命令译码模块表示PCI串口设备响应不同的总线命令,通过检测PCI-cbe[3:0]信号线上的值,完成命令译码。

1.1.4 设备状态机模块

PCI总线接口电路是时序复杂的接口电路,它的复杂性由PCI总线操作的多样性决定。根据PCI的总线操作类型和总线操作时序关系,在这里抽象出一种简洁明了,符合总线时序、更易于硬件描述语言实现的状态机。总线接口状态机示意图如图4所示。状态机的设计是整个设计的核心部分,利用该状态机可以完成配置寄存器、存储器、I/O的读写操作。

状态机包括4个状态:空闲(idle)状态、配置读写(con)状态、存储器或I/O读写(rw)状态、传输中止(backoff)状态。系统复位后,状态机转入空闲状态,在空闲状态中采样总线,并根据总线的变化来决定状态机即将转入的状态。如果此时命令总线上是配置寄存器读写命令,判断PCI-irdy信号是否有效来决定下一可能的状态。如果信号无效,则状态机转入传输中止状态,然后返回空闲状态;如果信号有效,则状态机转入配置读写状态。如果此时命令总线上是存储器或者I/O的读写命令,则判断PCI-frame信号是否有效来决定下一可能的状态。如果信号无效,状态机转入传输中止状态,然后返回空闲状态;如果信号有效,状态机转入存储器或I/O读写状态。

1.2 UART模块

PCI总线传输的是并行数据,而串口传输的是串行数据,要想实现PCI总线与串口的数据传输,必须通过UART完成数据的串并/并串转换。本文设计的基于FPGA的UART由4个模块组成:波特率发生器模块、寄存器控制模块、接收模块以及发送模块。UART的总体框图如图5所示。

1.2.1 波特率发生器模块

波特率发生器实际上就是一个分频器,用来产生和串行通信所采用的波特率同步的时钟,这样才能按照串行通信的时序要求进行数据接收或发送[3]。本设计中UART收发的每一个数据宽度都是波特率发生器输出时钟周期的16倍,即假定当前按照9 600 b/s进行收发,那么波特率发生器输出的时钟频率应为9 600×16 Hz。

1.2.2 寄存器控制模块

设计的UART包括:2个数据缓冲寄存器(接收、发送缓冲寄存器);2个状态寄存器(中断识别、线路状态寄存器);2个控制寄存器(中断使能、线路控制寄存器);2个移位寄存器(接收、发送移位寄存器)。寄存器控制模块完成除了移位寄存器外的所有寄存器的读写控制。

1.2.3 接收模块

接收模块包括接收缓冲寄存器和接收移位寄存器。在接收数据开始时,为了能够准确地传输数据,先要清空接收缓冲寄存器和接收移位寄存器,然后接收移位寄存器等待检测数据的起始位。检测到有效的起始位后开始接收数据,同时启动接收数据计数器,统计接收数据的位数,直到接收到满足需求的数据位。如果需要奇偶校验,则产生校验位。最后接收停止位,完成1帧数据(起始位+数据位+奇偶校验位+停止位)的接收,将数据存入接收缓冲寄存器,进行下一帧数据的接收,并通知上位机读取数据。

接收模块通过状态机来完成数据接收,其状态机包含4个状态:空闲状态(idle)、移位状态(shift)、奇偶校验状态(parity)和停止位状态(stop),如图6所示。其工作过程如下:当系统复位时,状态机进入空闲状态,等待接收开始位;当开始位被确定有效后,状态机进入移位状态。在移位状态中,接收模块为每个数据位的移入等待16个内部时钟周期,接收完特定的数据位后,若奇偶校验使能有效,则跳转到奇偶校验状态;否则,进入停止位状态,而后进入空闲状态,重复上述过程。

1.2.4 发送模块

发送模块包括发送缓存寄存器和发送移位寄存器。在发送数据开始时,清空发送缓存寄存器和发送移位寄存器后,发送缓存寄存器接收发送来的数据,然后从发送缓存寄存器向发送移位寄存器发送数据。首先发送起始位到发送移位寄存器,同时启动发送数据计数器,记录发送数据的个数,直到发送移位寄存器接收到满足需求的数据。若奇偶校验使能有效,则跳转到奇偶校验状态;否则,进入停止位状态,完成1帧数据的发送。只要发送缓存寄存器不为空,则继续传输下一帧数据。其状态机的实现与接收模块的类似。

2 系统软件设计

2.1 驱动程序

Win Driver是一套PCI驱动程序开发包。它改变了传统驱动程序开发的方法与思路,极大地简化了驱动程序的编制。同时,Win Driver又没有牺牲驱动程序的性能,是一套高效、快捷的PCI驱动程序开发软件包[4]。WinDriver可在VC/C++、Delphi、BC++、VB等多种开发环境中使用,本设计选用VC++作为驱动程序的开发环境,通过Win Driver生成VC++代码,根据设计的需要修改生成的代码以完成此PCI设备的驱动。驱动程序流程图如图7所示。

2.2 应用程序

应用程序负责调用、连接驱动程序,实现与驱动程序的通信。连接到驱动程序后,向驱动程序注册,同时启动串口监测工作线程,等待事件发生。当驱动程序接收到中断后,通过发送消息通知应用程序,处理发生的事件。处理后退出应用程序,结束等待事件线程。应用程序流程图如图8所示。

本文介绍了一种基于FPGA的PCI总线串口卡设计方法,简单说明了其硬件的设计和驱动程序、应用程序的编写方法。该设计符合通用的PCI规范,支持即插即用功能,传输速率高,抗干扰能力强。可以广泛应用于各类测试设备、工厂自动化等,具有很高的实用价值。

摘要:为了方便外部设备与计算机进行串口通信,提出一种基于FPGA的PCI总线串口卡设计。利用Altera公司的FPGA芯片EP1C6SQ240实现了串口和PCI总线的连接。介绍了用FPGA实现PCI接口、UART的方法,将PCI接口、UART的核心功能集中在FPGA上,使整个设计紧凑、小巧。该设计符合PCI 2.2规范,传输速率高,可广泛应用于各类测试设备、工厂自动化、有线通信等领域。

关键词:PCI总线,FPGA,串口,UART,WinDriver

参考文献

[1]徐志春.基于PCI总线的多串口通信适配卡设计[J].微计算机信息,2007,23:294-296.

[2]王友波,刘明业.PCI总线接口控制器的FPGA设计[J].北京理工大学学报,2004,24(5):423-426.

[3]杨大柱.基于FPGA的UART电路设计与仿真[J].微计算机信息,2007,23(5-2):212-213.

【PCI通信总线】推荐阅读:

总线通信技术06-25

总线数据07-12

485总线07-22

总线平台07-27

总线方式07-28

仪表总线08-06

总线驱动08-13

总线故障08-16

安全总线08-22

ISA总线05-20

上一篇:试车故障下一篇:制造及施工工艺