龚大伟,徐宝鹤,陆 丽
(上海电机学院电气学院,上海 200135)
随着数据采集系统被越来越多的领域广泛应用,使得数据采集系统需要具有更高的性能。目前大部分数据采集系统的控制核心主要分为以下4种:MCU、DSP、ARM和FPGA。其中MCU难以应用于复杂系统;DSP主要应用于对数字信号处理能力需求较高的场合,并且其难以实现复杂逻辑控制;ARM虽然具有丰富的功能,但不适合用于对控制需求较高的场合;FPGA因为其强大的并行处理能力以及能够实现复杂逻辑控制,从而被广泛应用于数据采集系统中[1]。所以文中数据采集系统的主控制板卡和从控制板卡均选用FPGA作为控制核心。
由于传统的三线制SPI总线通信只有一根miso数据线,无法实现多块控制板卡间的高速并行通信[2],所以文中的主控制板卡和从控制板卡之间采用改良式SPI总线连接。通过增加miso数据线的数量,使所有从控制板卡可以同时向主控制板卡发送数据,并且加快了传输速率。
为解决传统FPGA开发模式中的开发周期长、开发难度较高等问题,文献[3-4]使用LabVIEW FPGA工具包来进行系统开发。这种开发模式的优势是使用图形化编程语言,降低了程序的开发难度,让开发思路变得更加清晰,但不足之处是只能兼容NI公司的硬件,且NI公司的硬件大多较昂贵,所以文中选择LabVIEW FPGA工具包,其具有更好的兼容性,不仅解决了系统开发过程中存在的周期长、难度高等问题,也让系统拥有更多硬件选择,使系统具有更好的拓展性和经济性。
另外,由于单独使用LabVIEW FPGA工具包进行程序设计,存在程序编译时间较长、资源占用较多等问题,所以文中程序设计采用Vivado和LabVIEW FPGA相结合的开发模式。具体设计思路为:首先通过Vivado编写verilog程序,编译生成edf网表文件,再通过LabVIEW FPGA中的IP Block集成节点调用edf网表文件生成IP核。这种开发模式不仅缩短了程序编译时间,还降低了资源占用率。
文中的主控制板卡和从控制板卡均选用FPGA板卡,具体型号为AX7035,该板卡以XC7A35T-2FGG484芯片作为核心,完全满足系统需求。
文中选用8通道A/D采集模块,具体型号为AN706,该模块以AD7606芯片作为核心,具有8个数据采集通道、16位的采样精度和最高200 KSPS的采样速率,可以对±10 V和±5 V的双极性信号进行采集,能够满足系统高精度需求[5]。
系统的整体架构由1块主控制板卡、3块从控制板卡和3块A/D采集模块AN706构成,使系统具有24个采集通道,且每通道都具有16位的采集精度。其整体架构图如图1所示。系统的工作流程主要为:控制3块AN706采集多通道数据,并将数据传输到对应的3块从控制板卡;3块从控制板卡通过改良式SPI总线将接收的数据传输给主控制板卡;主控制板卡通过FIFO将数据传输给千兆以太网模块;最后通过千兆以太网模块将数据传输给上位机,通过上位机前面板的波形图控件对采集的数据波形进行显示。文中系统涉及了大量不同线程间的数据传输,由于不同线程可能具有不同的吞吐率,所以将数据通过FIFO进行传输,可以避免数据丢失或覆盖[6]。异步信号通过两级寄存器进行延拍,减小亚稳态出现的概率,确保了系统的稳定可靠[7]。
图1 系统整体架构图
AD采集模块AN706通过40pin扩展接口与从控制板卡AX7035相连。AN706的控制信号均由从控制板卡AX7035产生。AN706接口简图如图2所示。
图2 AN706接口简图
文中使用改良式SPI总线实现主控制板卡和从控制板卡间的通信。同步通信时钟SCK由改良式SPI总线主机模块产生,并提供给改良式SPI总线从机模块使用。为了加快传输速率,将输入的16位数据拆分为高8位和低8位,分别通过2根miso数据线进行传输。每个改良式SPI总线从机模块均拥有2根miso数据线,可以同时向改良式SPI总线主机模块发送数据,从而实现多块控制板卡间的高速并行通信。改良式SPI总线接口简图如图3所示。
图3 改良式SPI总线接口简图
文中系统采用AX7035开发板上集成的千兆以太网芯片KSZ9031作为千兆以太网模块的控制核心。该芯片只需占用较少的I/O引脚资源,在需要使用千兆以太网通信的项目中是一个不错的选择。由于文中系统只需通过千兆以太网向上位机发送数据,所以文中只设计了千兆以太网发送线程。千兆以太网接口简图如图4所示。
图4 千兆以太网接口简图
文中AN706的8个通道采用并行采样模式,采样速率均设置为200 KSPS,没有过采样[8]。为保证数据传输的准确性,程序中设置了输出有效信号data_out_valid。程序开始时,首先对A/D进行复位,然后发送并行采集信号AD_convstab,启动A/D转换。通过AD_busy信号判断AN706当前是否为空闲状态,当AD_busy信号为低电平时,表示AN706当前处于空闲状态,开始数据转换,拉低AD_CS信号。当8个通道的数据均转换完成后,进入转换结束状态,拉高AD_CS信号,取消片选。并在此时判断采样率计时器是否计满,计满后一次数据转换完成,数据输出有效,此时数据会移到FIFO中进行缓存,若不继续采集,则结束。AN706控制流程图如图5所示。
图5 AN706控制流程图
文中的AN706控制程序是根据AN706控制流程图使用硬件描述语言(verilog)进行编写,并且对程序的正确性和可靠性进行仿真验证,AN706控制程序的仿真验证图如图6所示。使用编译好的AN706控制程序生成edf网表文件,供LabVIEW FPGA调用生成IP核。
图6 AN706时序仿真验证图
文中的改良式SPI总线通信程序以状态机架构作为设计核心思想。SCK时钟分频为10分频,SCK时钟在空闲状态时会一直保持低电平,数据的发送和接收分别在该时钟的上升沿和下降沿进行。改良式SPI总线通信的程序分为主机程序和从机程序2个部分,其中主控制板卡作为主机,从控制板卡作为从机。主机程序的控制流程为:当开始信号有效时,通过计时器产生SCK时钟,供从机使用,并且开始进行数据的接收,拉低CS信号,当接收完指定位数的数据后,一次数据接收完成,拉高CS信号,若不继续接收,则结束。主机程序控制流程图如图7所示。
图7 主机程序控制流程图
从机程序控制流程为:当CS信号为低电平时,当前状态由空闲状态变为发送状态,当SCK信号的上升沿到来时,且当前状态为发送状态时,开始数据的发送,当发送完指定位数的数据后,一次数据发送完成,状态变回空闲,若不继续发送数据,则结束。具体的从机程序控制流程图如图8所示。
图8 从机程序控制流程图
根据从机程序控制流程图和主机程序控制流程图,使用硬件描述语言(verilog)对改良式SPI总线通信程序进行编写,通过仿真验证了其正确性和可靠性,改良式SPI总线通信的仿真验证图如图9所示。主控制板卡可以同时接收3块从控制板卡发送的数据,互不干扰,并加入了input_rdy信号、data_valid信号和input_valid信号作为握手信号,充分保证数据传输的准确性和稳定性。将编译完毕的程序生成edf网表文件,供LabVIEW FPGA调用生成IP核。
图9 改良式SPI时序仿真验证图
文中的LabVIEW FPGA程序设计主要分为主控制板卡部分和从控制板卡部分。主控制板卡部分主要包括千兆以太网通信线程和改良式SPI总线通信的主机线程;从控制板卡部分主要包括改良式SPI总线通信的从机线程和数据采集线程。这种模块化的程序设计也便于管理以及后期维护[9]。
4.3.1 主控制板卡部分
千兆以太网线程的主要功能是实现上位机与下位机的通信。具体参数配置为:FPGA和上位机的IP地址分别设置为192.168.0.2和192.168.0.3,转化为十六进制分别是C0A80002和C0A80003;发送数据的长度为1 536个字节;PC端的物理地址设置为广播,表示不对数据进行过滤。通过FIFO实现数据的跨线程传输,当send_en信号为真且FIFO没有超时,将FIFO中的数据发送给data_in端口,详细的程序框图如图10所示。
图10 千兆以太网通信线程
改良式SPI总线主机线程的功能是接收从控制板卡发送的数据。设计思路是使用LabVIEW FPGA中的IP Block集成节点将改良式SPI总线主机程序的edf网表文件生成IP核,对IP核中相应的输入输出端口进行I/O引脚配置,当data_valid信号为真时,FIFO会对此时接收的数据进行缓存,具体程序框图如图11所示。
图11 改良式SPI总线主机线程
4.3.2 从控制板卡部分
本文共有3块从控制板卡,由于程序设计大致相同,这里只举一例说明。从控制板卡部分主要包括改良式SPI总线从机线程和数据采集线程。改良式SPI总线从机线程的主要功能是将采集的多通道数据发送给改良式SPI总线主机线程。数据的输入主要是通过握手制FIFO实现,当input_rdy信号为真时,表示从机线程可以进行数据接收,当FIFO的输出有效时,从机线程会将当前接收的数据转化为串行数据通过2根miso数据线发送给主机线程。改良式SPI总线从机线程的程序框图如图12所示。
图12 改良式SPI总线从机线程
数据采集线程的设计思路同样是调用上述AD7606驱动程序的edf网表文件生成IP核,该线程的主要功能是控制AN706进行数据采集,并将采集的多通道数据传递给改良式SPI总线从机线程。根据AN706和AX7035的I/O引脚对应关系,对IP核中相应的输入输出端口进行I/O引脚分配,当data_out_valid信号为真时,8个FIFO将分别缓存对应的输出端子输出的数据,避免数据的丢失和确保数据的准确性。数据采集线程的程序框图如图13所示。
图13 数据采集线程
通过搭建系统验证平台,对系统进行验证分析,将3块AN706分别插入3块从控制板卡AX7035的J9扩展口中,再使用杜邦线将3块从控制板卡与主控制板卡相连,最后使用千兆以太网线将主控制板卡连接到上位机。系统验证平台如图14所示。
图14 系统验证平台
文中的上位机前面板通过LabVIEW FPGA进行设计,通过前面板的显示控件对采集的波形进行分析。由于传统的UDP通信存在数据覆盖和数据丢失的可能性,所以文中上位机设计基于winpcap工具包,这种直接从网卡中提取数据的方式,可以有效避免数据的丢失。
具体实验流程为:首先使用信号发生器产生2种波形分别为正弦波和三角波的电压信号,周期均为1 ms,峰峰值均为10 V,然后使用数据采集系统对产生的电压信号进行采集和传输,最后通过上位机前面板对采集的数据进行观测和分析。由于通道数过多,这里只列举部分进行说明。图15为系统前面板的部分波形图显示界面。由图15可知,系统能够正常工作,可以实现24通道并行采集,并且采集的信号波形完整稳定,无失真信号,信号周期为0.98 ms,峰峰值为9.94 V,与产生的电压信号基本一致,表明系统具有良好的稳定性和可靠性。
系统的采集范围为-5~5 V,采集通道数为24,采样精度为16位,系统理论分辨率为0.152 5 mV。表1为系统采集的部分数据量,可以计算出系统的误差都在0.65%左右,能够满足高精度需求。
(a)通道7
(b)通道8
(c)通道2
(d)通道3
(e)通道5
(f)通道6
表1 误差分析
文中的多通道数据采集系统由4块FPGA板卡AX7035搭配3块A/D采集模块AN706构成,使系统具有24个采集通道和16位的采样精度。多块FPGA板卡间采用改良式SPI总线通信,实现了多板卡间的高速并行通信。与传统开发模式相比,文中通过LabVIEW FPGA工具包调用edf网表文件生成IP核的方式,能够有效缩短系统开发周期和程序编译时间,很适合基于FPGA的系统开发。由实验结果可知,系统可以实现24通道并行采集,且能够适应多种类型的电压信号,具有良好的稳定性和可靠性。另外,文中采用了模块化的设计思想,也让系统的后期扩展和维护变得更加简便快捷。若需要提高系统的通道数和采样精度,可以通过修改相应的程序并更换A/D采集模块来实现。