摘要
目前,通用串行总线(Universal Serial Bus 简称USB)作为计算机领域的新型接口技术,已经应用于我们生活的方方面面。高速、热插拔、通用性强等特点令他在计算机接口上占主导地位;labview是一种基于图像文本语言的程序开发环境,同时作为一款虚拟仪器它已经被工业、学术、研究实验室等领域所普遍认可,在数据采集、信号分析等方面也有广泛应用。
本文则基于sub2.0的高速传输和labview的显示与储存技术;运用FPGA控制ADC芯片和usb模块;最终实现了将8路采样数据在labview上以波形图表显示出来并存储至Excel表格的整个系统设计。最终本文还焊接了简单的测试电路,同时采集8路的电压值并实时监测。且最终设计出的用户上位机可安装在没有Labview引擎的电脑上,具有更加广泛的实用性。
关键字:FPGA、usb2.0、labview、AD采样
一、 系统总体结构
1.1硬件选择
1.1.1 FPGA器件
Spartan系列开发板是针对FPGA的初、中级学习者设计,帮助用户降低学习成本和加快用户快速进入可编程逻辑器件设计开发领域,该核心板可配合与之配套的实验主板进行相应的实验,也可做为CPLD、FPGA研发的原形。核心板简单实用、扩展性好,适合前期用户开发验证用。
核心板上拥有下面资源:
FPGA主芯片:XC6SLX9
有源晶振:25MHz
引脚数目:144
1.1.2 ADC器件
AD7606是一款8通道同步数据采集系统,片内内包含模拟输入箝位保护、二阶抗混叠滤波器、跟踪保持放大器等基础器件。其采用单5V电源供电,同时所有通道都能以高达200KSPS的吞吐速率采样;输入的钳位保护电路可以耐受最高达正负16.5V的电压;无论以处于什么工作频率,AD7606的模拟输入阻抗均为1M欧姆。
1.1.3 USB2.0器件
USB2.0控制器芯片采用Cypress公司的CY7C68013a芯片。FX2内嵌有480Mbit/s的收发器、锁相环和内嵌可工作在48Mhz的增强型8051内核。8051内核特性如下:
具有256Byte的寄存空间,两个串口,三个定时器,两个数据指针。
四个机器周期即组成一个指令周期。
只做USB的事务管理、控制,不参与数据传输。
USB固件可由USB总线下载,片上不需集成ROM。
拥有四个FIFO接口,可工作在内部或外部时钟下。
其具体模块如下图所示:
1.2系统的总体构架
本系统主要分为硬件控制和软件设计两部分。硬件部分则主要包括FPGA、USB2.0和ADC器件;软件部分主要包括Labview上位机的设计。系统的整体结构如下图所示:
首先从来自外界的电压信号从AD模块的引脚传入,然后AD7606芯片对输入的电压信号的采集以16位宽的数据发送给FPGA;当然在此之前FPGA需要对AD模块进行控制,并区分出AD模块传输来的数据是几通道的;然后FPGA将接收来的数据写入到USB2.0的FIFO中;最后再使用由Labview设计的上位机读取出FIFO里面的数据并将它显示并存储起来,当然实现这一步的前提是使用Labview附带的NI-VISA软件对USB2.0进行硬件驱动。
二、 各模块的详细设计过程
2.1 AD7606采集模块
2.1.1 AD7606与FPGA的连接
本系统对AD7606的控制是由FPGA完成的,即FPGA只有按照一定的时序要求,与AD模块完成正确的通信过程,ADC器件才会将采集来的数据发送给FPGA主控制器,FPGA与AD7607之间的引脚连接如下图所示:
根据上图可分析得出,AD7606发送给FPGA的信号和数据有3个,其中BUSY为高电平时表示ADC芯片正在将模拟信号转化为数据信号,此时无法输出采样数据,而低电平则表示转化完成;FIRST_DATA为第一个输出数据的标志,在本工程中没有使用;DB是16位宽的,它便是经过ADC采集后数据。而FPGA发送给AD7606的数据信号有5个,其中CS为读取使能,低电平有效;RD也为读取使能,低电平有效;RESET为AD的初始化;CONVSTAB为AD启动转化命令,当其由低电平转化为高电平时,启动AD转化随之BUSY也会拉高;最后OS表示是否采用过采样,其具题功能表如下:
2.1.2 AD采样的状态分析
由AD7606时序要求,可在FPGA中将ADC器件的控制与信号接收分为12个状态,从预备等待状态,到数据的发送再到结束循环,具体状态转化图如下图所示:
由上图可知,在程序运行时,寄存器i是每个时钟周期自增的,当转换到新的状态后就变化为0。因此可看出自AD模块复位后在初始状态等待20个时钟周期后进入驱动状态,此时将CONVSTAB信号拉低,拉低再拉高时,ADC器件就会进入模数转化状态。当BUSY输出为零,即模数转化完成后,便可以将采集来的数据按照8通道的顺序依次发送到数据引脚上。且本工程中,每个通道的停留时间为三个时钟周期,知道取完第8通道的值,结束采样再回到初始状态。
2.1.3 AD采样的时序分析
对AN706用户手册REV1.0进行深度学习探讨以后,同时结合上述状态分析,可得出AD7606驱动时序。首先AD模块的复位信号是在过65536个系统时钟周期后拉低,而FPGA整个系统时钟是由25MHZ的时钟使用pll产生的5MHZ时钟;而CONVSTAB信号是在复位信号拉低后20个系统时钟周期后拉低两个周期;输出后CONVSTAB信号给ADC器件后,ADC就会进入转化状态,同时将BUSY信号拉低并输出给FPGA;当转化完成,BUSY信号也会拉高,接下来将CS信号一直拉低,保持有效使能状态;而RD信号则先拉低三个周期,拉高一个周期,此时DB传输CH1通道的采样值,再拉低三个周期,拉高一个周期,接着读下一个通道的采样值,直到读完第8通道采样值,则再进入20是个系统周期的等待时间。不断循环前述过程从而完成不断采样的过程。
2.1.4 AD采集数据介绍
输出的十六位宽的数据中,最高位为符号位,剩余15位都是显示电压值的大小,且测量范围为-5V +5V,则可知1000_0000_0000_0001所代表的的电压值为:
以此类推,接收到采集来的数据,首先可以通过符号位知道电压的正负,其次用低15位的数值乘以上式的最小电压便可得出当前电压,且经过外加电压和高精度的电压表比较,电压测量精度在0.5mV以内。
2.2 USB2.0数据传输模块
2.2.1 USB固件程序设计
首先声明一点,一个完整的USB系统必须从驱动程序和固件程序入手,CY7C68013A芯片中有一个做事务管理作用的8051内核,当完成驱动后,就必须对8051内核进行控制,让他成为一个本工程需要的数据传输器件。Cypress公司为了简化和加快用户使用CY7C68013A芯片,为用户提供了一个完整的固件程序的框架,如下图所示:
在上述的框架中fw.c文件包含main函数,它执行了枚举等USB维持的大部分操作,它调用的一个函数Slave.c为可供用户修改和自定义的外部函数,即用户一般需要且只需要对Slave.c函数进行修改,以满足并实现当前工程所需要的功能。Slave.c函数主要功能就是对一些功能寄存器进行配置,需要配置的寄存器如下表所示:
以上寄存器配置方式见CY7C68013用户手册,本文仅以较为重要的IFCONFIG为例,讲解寄存器配置方式。以上寄存器均为一字节长度寄存器,其每一位的高低都对应着一种配置,对于IFCONFIG寄存器而言,其每一位对应配置如下表:
结合上表再根据本工程中USB设备该有的相关功能:外部时钟源、IFLCK时钟输出关闭、Slave FIFO同步工作、GSTATE在PORTE输出、使用Slave FIFO模式可最终得出IFCONFIG寄存器的配置代码为:IFCONFIG = 0x03;。按照这种方式可以此得出其他寄存器配置代码,从而完成USB固件程序设计。
2.2.2 USB2.0与FPGA的连接
FPGA不仅承担着对ADC器件的控制,另外还对USB2.0数据传输起着控制作用,即FPGA只有按照一定的时序要求,与USB2.0模块完成正确的通信过程,FPGA才能将来自ADC器件的数据正确的发送到USB2.0的FIFO中,FPGA与SUB2.0之间的引脚连接如下图所示:
由上图可知,EZ-USB FX2发送给FPGA主控制器的信号只有两个:FLAGA为端点EP2空满信号位;FLAGB为端点EP6空满信号位,如果为高电平说明端点EP6空间空;而EP2和EP6分别被配置为了读和写的FIFO。而FPGA发送给EZ-USB的信号数据有7个:IFCLK为FPGA输出给USB模块的时钟信号,对应CY7C68013而言,其工作的时钟范围为5Mhz-48Mhz,为了保证数据的准确性,本工程中FPGA的输出时钟为5Mhz,同时输出时钟相位应该落后FPGA的工作时钟270度;SLOE为CY7C68013的EP2端点输出使能信号,且低电平有效;SLRD为CY7C68013的EP2端点的读控制信号,且低电平有效,需要注意的是在向EP6写入数据时,这两个引脚必须置为高电平;SLWR为EP6写控制信号,且低电平有效;PKTEND为数据包结束信号,在本工程中未使用;FIFOADR为2bit的FIFO位选择地址总线,10位EP6端口地址;FD即为FPGA发送给USB的FIFO的数据,且可知其发送方式为16位宽并行发送。
2.2.3 Slave fifo同步逻辑时序分析
对CY7C68013用户手册进行深度学习探讨以后,可得出Slave fifo同步逻辑时序,当来自USB模块的FLAGD信号拉低时,表示EP6为空,则当前写状态在下一个时钟的上升沿拉高进入写状态,同时输出的写信号也拉低,数据开始写入EP6,每一个时钟周期数据均传递一个16位宽的数据,同时USB模块在IFCLK的上升沿采集数据;当写完256个16位宽的数据后,EP6被写满,同时FLAGD被拉低,写信号也拉高;直到EP6数据被上位机读取后,EP6再次变空,FLAGD被拉高,再次进入写时序中。
2.3 Labview上位机程序的设计
2.3.1 NI-VISA对USB2.0的驱动
USB设备的驱动是开发USB工程的一个关键地方,没有驱动,USB就无法和PC端完成数据通信。它主要是为了让上位机操作系统识别出USB设备,并建立上位机和USB设备之间的通讯。
Labview的安装包中一般附带有NI-VISA的驱动软件,若没有可打开附带的NI Package Manager软件;在驱动程序栏中搜索NI-VISA,里面有很多版本的NI-VISA,要根据电脑系统和Labview的版本来选择不同的NI-VISA:例win10系统labview2018需使用的是NI-VISA 18.5版本。若无法下载高级版本的NI-VISA Driver Wizard,则需要先在官网对NI Package Manager进行更新。下载网址:http://www.ni.com/download/package-manager-18.5/7834/en/。
NI-VISA安装完成之后,便可对USB设备进行驱动。
2.3.2 基于Labview的应用程序设计
与其他基础编程软件不同的是,Labview的运行是按数据流进行的,也就是从数据起点出发以此往下运行,而该程序的数据来源则为来自USB设备的数据,每取一个FIFO的数据,读取之后先经过字符串至字节数组的转换,转换后的数据为一个512行的一个一维数组。其中第一列为第一个数的低八位;第二列为第一个数的高八位,以此类推总共存储有256个数据。这256个数据中,第一个数据为CH1通道的采样数据、第二个数据为CH2通道的采样数据…,第九个又为CH1通道采样数据…,如此循环。因此先把一维数组转换为256行2列的二维数组,即每一行数据表示一个通道的采样值,第一列为低8位数据,第二列为高八位数据,则将该数据转换为256行1列的一维数组,且代表电压值的表达式为:
其中,V代表电压值的数组;A代表由原始数组转化来二维数组。
最后再将一维的电压数组转换为32行8列的二维数组,则每一个列表示一个通道的采样数值,最后很轻松就可以将8通道采样值分别以数值和波形图显示并存储起来。以上便是一个FIFO数据进入后经过的数据处理,再在外面加一个while循环控件,并且可由用户调节每次循环之间的时间间隔。最后8通道的采样数据可通过隧道传输到循环外,并将隧道的属性设置成有条件的连接隧道,即当条件为真时,隧道开启,并将所有的值都依次存储到Labview的数据存储缓存区中,条件为假时,暂停存储,若在设置条件为真,则接在原来数据的后面继续存入缓存区,直到停止运行时,运行程序就会将缓冲区的数据全部写入到已经设置好路径的Excel表格中存储起来。综上所述可得出一下程序框图:
四、系统的调试与测试
4.1 FPGA程序的载入
运用ISE软件可建立FPGA运行的时钟IP核,并依次将上述模块加入到工程目录下,最后运行完成FPGA程序的载入。需要注意的时,由于本工程中设置的USB设备使用的外源时钟,为保证USB设备能正常运作,需要将让外源时钟在向USB载入固件之前就产生,因此应该先载入FPGA程序。
4.2 USB固件的载入
固件的载入可直接使用Cypress官网给出的USB2.0调试上位机:CyConsole。打开上位机在Options栏中选择EZ-USB interface,在选择当前的USB设备后,点击Download即可将前文中生成的.hex文件载入到CY7C68013中,此时它便成为可供数据传输的USB设备。
4.3 Labview用户界面介绍与成品展示
4.3.1用户界面介绍
已经设置好的Labview上位机用户界面具体情况如下图所示:
在运行之前首先应该选择USB设备,即已经经过NI-VISE驱动后的USB设备,然后在存储数据的文件路径上选择一个.xls文件,然后可开始运行运行之后,8通道出采样值将会以波形的形式显示在波形图表框中,每一种通道对应一种颜色,同时还可以选择性的显示某一些通道的波形;8通道的的采样值也会具体以数值的形式显示在左下角;另外采集速率选择即为对USB设备读取时间周期,即时间数值越大,采集的速度是越慢的;若需要存储数据则点亮存储数据的按钮,同时显示存储中的灯也会亮起,再点一下就会暂停存储,再次电亮也会接着之前的继续存储采样数值;最后点击停止,对USB设备的数据读取也会停止下来,想要存储的采样数据也会存储到相应的Excel表格中。
4.3.2成品使用展示
首先整个系统的电路结构如下图11.1所示,主要为FPGA、AD7606和USB2.0三个设备。为了验证系统的准确性,在万用板上焊接了8个电阻依次分压,8个电阻中,除了第三个是1k欧姆电阻,其他的都是2k欧姆;同时焊接了9个跳线,其中8个是用来给8通道进行采集,剩下一个供接地使用,实物图如下图11.2所示。系统检验结果则如图11.3所示,图中显示了8通道的电压波形和数值,由图也可看出此时电压的输出经过了一个减小的过程,这正与实际过程中对直流稳压电压源的调节一致。
五、参考文献
[1]郭艳. USB2.0接口多通道数据采集系统的设计[D].西安理工大学,2018.
[2]陆晓,包晓敏,饶照明.基于LabView的数据记录及数据库访问技术[J].湖北民族学院学报(自然科学版),2019,37(02):201-205.
[3]陶沙,王珍凤.基于LabVIEW的虚拟示波器的设计[J].阜阳师范学院学报(自然科学版),2016,33(03):21-23.
[4]田慧,管雪元,姜博文.基于Zynq的数据采集系统的研究与设计[J].电子测量技术,2019,42(02):135-141.
[5]刘雨聪.基于FPGA的高速多通道AD采样系统的设计与实现[J].电子技术与软件工程,2018(10):92.
[6]刘达.基于LabVIEW USB高速通信海量数据存储系统的设计[J].电子测试,2019(08):78-79.