陈梦旎,鲍爱达,马游春,李学超
(1.中北大学 电子测试技术国家重点实验室,太原 030051;2.中北大学 仪器科学与动态测试教育部重点实验室,太原 030051)
随着军用武器的不断发展,电磁轨道炮作为新一代战略武器,受到了各国军方的青睐。和传统火药不同,电磁炮能够将弹丸在短时间内超高速发射,利用电磁力转变为动力,大幅度提高弹丸的速度和射程[1]。电磁发射作为一种新概念的武器发射手段,研究测量发射过程中的关键参数至关重要。其中,对电枢的瞬态过载测试是辅助研制电磁炮、评估电磁炮性能的重要手段,主要以获取弹丸发射时的加速度为主。过载测试数据一般通过搭载加速度计的弹载数据记录仪来获取[2]。
通常在工程应用数据回读传输时,采用的422总线或485总线等通信接口,在传输过程中会受到电磁干扰、噪声、功耗等制约,同时需要满足传输速率和距离等要求,这些接口不满足实际需求[3]。USB 2.0通用串行总线的传输速度可达到480 Mbps,满足过载测试数据回读系统传输率和稳定性的需求[4],具有即插即用、成本低廉、传输速率高、接口应用广泛和占用资源少等优点[5]。因此本系统选择USB 2.0接口作为过载测试系统与上位机的交互接口。一般的USB接口设计中,USB传输协议使用较为复杂[6],需开发USB专用固件,开发时间相对较长[7];不需开发USB专用固件的情况下,采用异步FIFO通信模式,数据传输速率仅达到8 MB/s[8]。
基于以上传输方式存在的问题,本文设计了一种针对电枢发射的瞬态过载数据回读系统。系统采用了较少的逻辑单元实现了瞬态过载数据采集系统与上位机的数据传输,显著降低了数据回读系统的成本。该系统开发周期短,降低了硬件设计的复杂性,能够实现数据的可靠、快速传输,数据传输速率可达到46 MB/s。
该系统主要由四部分组成,分别是过载数据采集模块、电源模块、FPGA主控模块和USB回读模块,如图1所示。过载数据采集模块主要实现采集弹丸发射时的瞬态过载数据。弹丸发射后,通过加速度传感器获取到信号,经过信号调理和数字量化后,经由FPGA模块内部的FIFO将数据传输给存储模块。电源模块负责转换电压,为回读系统提供稳定的电流和电压。FPGA模块是核心部分,接收到上位机下发的指令后判断指令内容,再相应地根据指令内容进行操作[9]。根据上位机下发的读取数据指令,FPGA读取过载数据存储模块内的信息,将并行数据暂时缓存到FPGA内部FIFO,上位机下发指令后,传输给USB模块。USB模块利用FT232HL芯片的同步读写模式,通过其内部的读、写FIFO实现数据传输,最后使用USB接口输出到上位机显示和储存。
图1 系统设计方案
过载数据采集模块用于处理加速度传感器采集的数据。电磁炮发射完成后,传感器采集的过载数据电压输出范围为±50 mV,必须经过信号调理放大和A/D转换电路,之后由主控模块内部缓存将数据传输到存储模块。采集模块的原理如图2所示。在该采集模块中,采用仪表放大芯片和数字电位器相结合的办法,可根据需要调整调理电路的放大倍数。一般的信号调理电路根据运算放大器外围电阻确定放大倍数,该电路解决了这种一旦确定阻值放大倍数就不可更改的问题。
图2 数据采集模块原理图
2.1.1 调理放大电路
该系统采用仪表放大器和数字电位器实现信号的调理放大,MAX4208是具有超低失调电压、低功耗、高精度等特性的仪表放大器。由于加速度传感器输出的是差分信号,因此需要提供一个偏置电压使得输出信号始终为正值,便于后续电路的处理。该芯片采用双运放跨导架构,可充分使用差分输入信号的全部动态范围。由于芯片供电电源为5 V,因此偏置电压值通过数字电位器设置为2.5 V。通过利用该偏置电压引脚,该电路实现将过载信号的差分输入转为可调增益的单端输出。
电路中的信号增益是通过调整芯片的REF引脚与FB引脚和OUT引脚与FB引脚之间两个外部电阻值来确定的。这两个外部电阻连接的是数字电位器的LB、WB和HB引脚。数字电位器芯片具有两个通道,在功能上彼此独立,两端电阻值为10 kΩ,分别具有256位分辨率,意味着有256种阻值可选择。两个电位器的电阻配比都由WA、WB划片引脚确定,每次划片位置信息由芯片内部的非易失性存储器存储,可通过FPGA 发送指令调整划片位置,改变仪表放大器外围电阻值的大小,从而实现自定义增益大小。
2.1.2 A/D转换电路
该系统采集单通道过载数据,经过调理电路的过载信号为模拟信号,由于进入FPGA处理的信号需为数字信号,所以设计一个A/D模数转换电路,以此保证对原始信号进行处理分析。A/D芯片的采样吞吐率和转换速率直接影响到采集模块的采集效率,同时还有功耗和噪声干扰等方面对模块的影响,因此,选择合适的A/D芯片是数据采集模块的关键。在该系统中,A/D转换电路采用的芯片是AD7686。该芯片是16位的单通道模数转换器,具有低噪声、低功耗等特性,在供电电压为5 V,采样速率为100 kSPS时,功耗仅有3.75 mW。该芯片采样吞吐率达到500 kSPS,完全满足对过载数据的采样需求。当时钟沿上升,芯片对IN+、IN-输入电压差进行采样,电压差范围为0-REF。REF参考电压设置为芯片供电电压5 V。该芯片可使用三线或四线的SPI串行接口直接与FPGA连接,本系统中使用三线接口模式,节约资源。该模式下,FPGA通过SCK和CNV引脚控制AD芯片,CNV引脚拉高后,在时钟约束下AD芯片开始对模拟过载数据量转化,通过SDO引脚输出数字量。
由于USB接口能够提供稳定电压[10],因此,本设计中各个模块的电压均由USB接口提供,电源模块的原理如图3所示。过载数据采集模块使用的供电电压为5 V,可直接通过USB接口得到。FPGA主控模块和过载数据存储模块使用的供电电压分别是3.3 V、1.2 V、2.5 V,均需通过线性稳压器降压得到。本设计模块中,USB接口提供的5 V电压通过SPX3819稳压器,分别输出3.3 V、2.5 V、1.2 V电压。相比于DC-DC稳压器,SPX3819系列稳压器具有很好的低噪声输出性能,芯片尺寸小,设计简单。
图3 电源电路原理图
主控模块是整个系统的核心,控制着数据采集模块、存储模块和USB回读模块的正常运行,负责接收数据采集模块的数据,将模拟数据量化编码后编帧发送给存储模块;负责从FLASH中读取存储模块的数据,通过USB接口芯片将数据发送到上位机;负责接收应答上位机的传输、读数等指令,将有效指令信息分发给相应的模块单元。在控制芯片的选择上,选用FPGA作为主控芯片。在常见的主控芯片中,单片机是单线程芯片,硬件固定,通过软件编程实现功能,按照顺序实现逻辑;DSP用于高速执行串行算法,常用于数字信号处理中,硬件设计一旦确定,不宜修改;FPGA是硬件可编程芯片,具有并行处理的能力,适合处理并行任务,可显著提高工作效率,工作更稳定,性能更可靠,普遍应用于实现数字电路[11]。本系统选用XILINX Spartan-3系列的XC3S400芯片作为主控模块,内置高达25 344个逻辑单元,具有最多502个I/O引脚数和 576 Kb 的Block RAM,性能满足瞬态过载测试数据回读系统的要求。并且芯片内部具有可配置嵌入式SRAM块,可设置为不同容量的存储器结构,可将SRAM块配置为内部FIFO控制单元,负责对过载存储数据进行缓存。
该系统选用USB接口负责过载测试系统与上位机之间的指令和数据传输。一般来说,USB的接口设计有多种方法,除了选择支持USB接口的单片机和专用的USB接口芯片外[12],还可使用USB/FIFO桥接芯片。前两种方式通常需要自己开发驱动程序,电路设计方面较为复杂。第三种方式的芯片内部集成了USB协议,不需编写驱动程序。因此本文采用第三种方式。
本文选用FTDI公司的FT232 HL芯片进行通信传输。该芯片是基于USB 2.0的单通道高速桥接芯片,驱动自行处理USB协议数据。此款芯片可通过EEPROM配置为不同的串行或并行接口,如UART、245 FIFO、JTAG、SPI(MASTER)和I2C等接口。在并行FIFO传输模式下,异步数据传输速率高达8 MB/s,同步模式可达40 MB/s。同步通信模式下,通信双方在同步时钟域工作,在时钟的边沿控制下进行数据的读写[13]。异步通信模式下,通信双方则工作在不同的时钟域。因此,同步通信与异步通信相比,具有较高的传输速率。本系统使用同步245 FIFO模式,进行数据的高吞吐量传输,大幅提高数据的传输速率。
该系统将FT232HL内部时钟作为上位机和FPGA的同步信号。FPGA和FT232HL的接口如图4所示,USB芯片的ADBUS[7:0]为8位双向I/O数据接口,与主控模块的数据输入引脚连接,用于数据的发送和接收。RXF#和TXE#分别为读、写准备信号,当两者都为低电平时表示FPGA可读、可写。RD#和WR#分别为读信号和写信号,由FPGA控制。与异步模式相比,同步FIFO接口独有两个信号:CLKOUT时钟信号和OE#输入信号。该芯片驱动60 MHz的时钟供外部系统使用,并且所有信号在时钟上升沿到来时有效。读信号有效之前,输出OE#使能信号需提前至少一个时钟周期有效,以供数据缓存区的周转。
图4 FT232HL模块与FPGA接口连接图
FT232HL的硬件接口电路如图5所示,直接与USB接口相连,右边的引脚均与FPGA相连。通过与93LC56 存储芯片相连,将FT232HL配置为FT245 FIFO模式的信息存储于芯片中。FT232HL虽然内部可自行产生时钟,无需外挂晶振,但没有外部晶振可能会导致输出信号错乱。因此,该芯片电路设计外接12 MHz晶振,连接该芯片的XCSI和XCSO引脚[4]。将12 MHz晶振五倍频得到60 MHz时钟信号,供数据回读系统和上位机使用。
图5 FT232HL硬件电路
该芯片使用的总线电源经过滤波电路处理,为整个电路提供+5 V电压。DM、DP引脚连接USB数据线,用于数据通信。通过VCCD输出引脚向 VCCIO、VPLL和VPHY 引脚提供+3.3 V的电压,同时为了减小噪声干扰,在VCCD引脚与VCCIO、VPLL和VPHY引脚之间加入了电容滤波电路。
该模块采集的过载数据是单路信号,采样率一般不超过10 kHz。系统上电复位后,主控模块FPGA控制单路信号进入信号调理模块,经过调理放大后,进行A/D转换。在A/D转换过程中,将CONV信号置低来控制模数转换。转换完成后,需要时刻判断BUSY信号的状态,若BUSY置高,则说明正在执行模数转换操作,若该信号为低电平,则说明转换结束。在转换结束后,使用读控制信号控制数据的读取,完成过载数据的采集。
数据采集模块中,采用单通道16位的AD芯片对数据模数转换,转换的数字信号传输到存储模块。由于AD转换速率和存储芯片存储的速度不同,直接传输可能导致数据错传、少传等问题,因此在FPGA内部建立FIFO IP核缓冲数据。由于采用16位的AD芯片,因此分为两个八位进行传输。本系统调用FPGA内部宽度八位、深度4K的FIFO IP核,实现采集模块向存储模块的通讯。系统上电后,每次都要对FIFO块内清空,避免残留数据干扰。当读速度快于写速度,FIFO内的数据全部被读出,则会产生空信号;当写速度快于读速度,FIFO内数据量会达到最大深度,则易产生满信号。在软件设计中,需设定空标志、半满标志和满标志,控制相应的读写操作,使数据传输无误。
当AD采集完成时,FIFO的读控制信号置高,在时钟沿来临时,采集模块向FPGA内部FIFO写入数据,存储芯片按照FIFO先进先出的原则读出数据。数据存储模块与回读模块通信时,使用FT232HL同步FIFO模式实现通信,芯片内部包含1K字节的读写缓冲区。FIFO的写控制信号由USB接口芯片给出,芯片内部写FIFO写入FPGA内的数据,将其转换为8字节数据,可与FPGA实现直接通信。上位机读取USB接口芯片内部读FIFO块内的数据,写FIFO与读FIFO之间互相传输。USB 2.0物理层与上位机信息交互,将主控模块的8位数据以串口形式传输,处理FT232HL的读写请求,实现对FIFO控制信号和数据的处理。
在本系统中,过载数据存储在FLASH中,上位机发送固定的读取数据、擦除数据、停止读数等操作指令来实现与测试系统的数据传输与通信。接收到来自上位机的“EF91”读数操作指令后,存储模块控制FIFO将过载数据通过USB接口传输到上位机。存储模块利用CE、RB、ALE、CLE 控制线实现了存储芯片的数据读取与上传[14]。上电后,由FPGA向FLASH发送读数据00H命令,然后发送数据的行地址和列地址,之后写入确认命令30H,若FIFO非空,则读取该地址的数据。若接收到“EF90”擦除命令,则FLASH以块为单位进行擦除,上位机接收到芯片擦除完成的信息后再进行读取等操作。“EF92”是停止读数指令,可根据系统的需要进行操作。
由于瞬态过载数据量过大且变化率过快,在读取数据时,可自行设置起始读取地址,目的在于省略有效数据到来前的无效数据,只取中间有效的数据,以此来节省读数时间。同时,将两个8位串口数据编帧为16位的并行数据,读取操作的地址位标志是通过将高三位设置为“101”来实现的,起始地址位由剩下的十三位来实现,用以提高数据传输速率。
USB模块的主要功能是接收FPGA内部FIFO的缓存数据,通过FT232HL发送到上位机。FPGA与FT232HL之间通过8路双向数据线传输数据和控制信号。此外,FT232HL包含1 K字节的接收和发送缓冲区[15],用于USB数据和FPGA串行I/O数据之间的交换缓冲。FT232HL的同步245 FIFO模式时序如图6所示。CLKOUT是一个60 MHz时钟信号,用于芯片驱动,系统信号状态的变化与时钟信号同步。
图6 FT232HL同步245 FIFO读写时序图
若读准备信号为低电平,则芯片FIFO接收缓存区内不为空,表示数据可读。若该信号为高,则表明FIFO 接收缓冲区为空或有数据正在处理,此时,无法从缓冲区读取数据[16]。如果写入准备信号为低,则FIFO发送缓冲区未满,说明可写入数据。若该信号为高电平,则表明当前的FIFO传输缓冲区已满或正被写入新字节,此时无法执行写入操作[17]。当接收到上位机下发的控制信号时,先拉低读准备信号,在OE#信号拉低持续至少一个时钟周期后,拉低读信号,芯片可通过八位数据总线将数据传输给FPGA。当芯片接收到发送数据的命令后,通过驱动WR#为低电平,FPGA在CLKOUT上升沿开始持续向FT232HL写入数据。写数据过程中,FPGA需持续判断FIFO发送缓冲区的状态。
本系统中,FPGA控制USB芯片的读写使用状态机实现,如图7所示。整个控制流程有5种状态,分别为IDLE空闲状态、START读写预备状态、READ读数据、WRITE写数据和读写数据完毕。当USB接口芯片处于空闲状态时,使能OE信号和读写控制信号置高,FPGA和上位机不能进行读写数据操作。此时判断FT 232HL芯片内部读写FIFO状态,若读FIFO非满,则进入读操作预备状态,读数据准备信号RXF拉低。之后将OE使能信号和读数据信号拉低,芯片内部读FIFO从FPGA内部FIFO中读取数据。若读操作过程中RXF拉高,表明FPGA要发送的数据发送完毕,可进行下一次的操作。读操作完成后,OE使能信号和读数据信号置高,返回空闲状态。若写FIFO非空,则进入写操作预备状态,写数据准备信号TXE拉低。在写操作时,先将OE使能信号拉高,再拉低写数据信号,写FIFO块中的数据通过USB接口开始发送至上位机。若写操作过程中TXE拉高,表明上位机未准备好接收数据,等TXE信号置低后可继续写操作。写操作完成后,OE使能信号拉低,写数据信号置高,返回空闲状态。
图7 FT232HL同步245 FIFO读写时序图
要想通过USB接口实现主控模块与上位机的数据通信,还需对上位机软件进行设计。由于FT232HL芯片内部集成了USB协议,省去了驱动程序的编写工作,芯片可直接配置为高速USB转串口通信或单通道USB通信。前者是将芯片模拟为虚拟串口,可直接与上位机通讯,但该种方式传输速率较低。为获得更好的传输性能,本系统选用单通道USB通信。
3.5.1 上位机软件设计
上位机控制USB通信的流程如图8所示。采用D2XX作为USB接口的设备驱动程序[18],通过调用链接库的函数实现USB与上位机的通信。上位机调用函数可检测到当前连接的所有USB接口设备,通过FT_GetDeviceInfoList函数能够获得指定USB接口的详细信息。确认设备信息后,通过调用 FT_Open()以及 FT_Read()函数打开并读取 USB 设备的传输数据[19]。成功连接指定设备后,清空FT232HL的发送和接收缓冲区,之后再对USB 设备进行配置。
图8 上位机流程图
在配置设备时,最为关键的是设置FT232HL的工作模式。FT232HL默认为异步串行模式,通过FT_SetBitMode(ftHandle, 0, 0x40)将芯片进行设置,由应用程序发送到当前驱动程序,芯片则被设置为同步模式。另外,需对USB传输块大小、FT232HL工作模式、读写等待时间等进行配置。配置完成后,上位机向 USB 设备发送读取数据命令,若缓冲区此时无数据,则上位机开始读取FPGA上传的数据信息,并对数据进行处理并存储。读取和写入 USB 设备所用到的函数分别是FT_Read和FT_Write函数。
读取数据完成后,通过上位机得出数据传输的速度。主控模块按照固定的帧格式编帧通信内容,通过检查通信帧帧头来分析上位机接收数据的错误率[20]。上位机读取完数据后,可通过FT_close函数关闭USB接口。
3.5.2 FT232模式配置
过载测试系统通过USB芯片连接FPGA主控模块和上位机之前,需先安装USB驱动程序对芯片进行配置,下载固件后才能控制芯片的使用。使用的配置软件是官方软件FT_Prog,点击扫描之后,软件会自动检测到USB设备。首先需要配置93LC56,并设置 USB 设备的各种信息和同步245 FIFO模式。要注意的是当配置外部晶振时,需选中USB External Oscilator,若无配置选中该项则会导致芯片无法启动。上电后,FT232HL会读取到设备的VID、PID以及各种信息,同时LED指示灯D1被点亮[21],表明芯片的同步245FIFO工作模式已配置成功。
为验证芯片时序,对FT232HL芯片进行了时序仿真,芯片接收上位机下发数据时,时序波形如图9所示。可以看到rxf_n、oe_n、rd_n依次拉低电平,在oe_n拉低至少一个时钟周期后,FT232HL在时钟上升沿接收到有效数据,上位机发送的数据和芯片接收到的数据相同,因此可认为芯片接收数据功能没有问题。芯片发送数据时序仿真波形如图10所示,可以看到txe_n、we_n依次拉低电平,数据从34开始,每次加1,持续向上位机发送数据。由时序仿真波形可知,FT232HL的读写控制达到要求。
图9 接收数据时序仿真
图10 发送数据时序仿真
在过载测试数据回读系统实物测试中,搭建了系统硬件电路。上位机与回读系统使用USB接口连接,存储模块接收到读数指令,上位机对其进行参数设置、系统复位和数据读取擦除等操作。为验证过载数据回读系统的传输能力,将数据回读至上位机进行速度测试。经过多次测试,本系统采用FT232HL高速芯片,数据传输速度能够稳定达到46 MB/s。
将该回读系统搭载在电磁轨道炮实弹测试,测试完成后,将存储数据导出,测试结果如图11所示。回读过程中,数据没有丢失现象,该弹丸发射过程中最大加速度可达13 330 g。该测试表明,该回读系统能实现可靠传输,已成功应用于过载测试项目中,能够完成存储模块内过载测试数据的读取。
图11 过载测试数据结果
本文设计了一种基于FPGA的瞬态过载测试数据回读系统,系统使用高速USB 2.0芯片FT232HL与上位机实现通信,利用该芯片的同步接口,数据传输速率达到46 MB/s,在满足数据传输准确性的同时提升了速率。该回读系统集成度高,降低了USB接口设计的难度,加快了系统的开发进程。测试结果表明,该系统可成功实现过载数据的可靠回读,验证了瞬态过载测试数据回读系统的可靠性和稳定性。整体硬件电路设计简单,可广泛应用于类似的数据传输项目中。