王选择,曾志祥,范宜艳,杨练根
(1.湖北工业大学机械工程学院,湖北武汉 430068;2.湖北省现代制造质量工程重点实验室,湖北武汉 430068)
实时高速数据采集与处理在现代工业生产及科学研究中的重要地位日益突出,要求也不断提高。在信号测量、图像处理等一些高速,高精度,大数据量的测量场合中都要求设备接口简单灵活并且具有较高的数据传输率,同时要求主机能够对数据做出快速反应,并及时分析和处理[1-2]。
目前数据采集与控制系统的接口方式常见的有RS232串口、ISA总线、PCI总线、USB等。RS232串口的速率达不到要求,ISA和PCI总线虽然在数据存取速度上可以达到系统要求,但是接口方式通用性比较差,价格昂贵,不利于系统的小型化。USB2.0(通用串行总线)传输速度最快可达480Mbps,支持热插拔和即插即用,方便快捷,通用性强[3]。因此将USB技术应用于系统数据采集传输与控制非常合适。
系统数据采集的处理器控制部分,FPGA(现场可编程门阵列)以其开发周期短,费用低,工作频率和集成度高,稳定性良好、抗干扰能力强等优点,在数据采集数字电路中被广泛应用[4]。
负温度系数热敏电阻器(NTC)作为温度传感器,应用RC串联电路系统产生的相位差与热敏电阻阻值存在的数学关系以及热敏电阻与温度的负温度系数的关系,设计了温度传感方法。利用FPGA对相差进行数字逻辑处理,将处理结果通过USB接口芯片CY7C68013A传输给PC机,上位机交互界面在 Visual C++ 6.0 开发环境下设计开发,完成数据的显示以及对下位机的控制。
RC串联电路如图1中间部分所示,正弦激励信号作为输入信号,经过RC串联电路后,从中间端输出的信号将会滞后输入信号一定的相位差α.
假设输入信号为Ui=sinwt,电路中电阻电容分别为R,C,α的大小为:
α=-arctanwRC
图1 原理电路
将被测物与温度传感元件热敏电阻组合在一起,根据上式,在C和w确定的情况下,通过对相位差α的测量,就可以换算出热敏电阻R的大小,也就知道了被测物当前工作温度。如图右边部分所示,将两个正弦信号分别过零比较之后得到具有一定相差,同频率的两个方波信号a,b.而α大小的计算需要将相差通过一定的逻辑运算,利用FPGA对相差的脉宽进行脉冲计数得到[5]。
系统采用型号为EP2C8的FPGA为控制核心,CY7C68013A为USB接口芯片。上位机发出数据采集指令,经USB发给FPGA,系统开始对脉冲计数数据采集,并缓存在FPGA的内部,同时工作在slavefifo模式下的USB芯片访问FPGA,取出数据,通过USB端点传给上位机,计数值通过数学运算得到当前温度值并显示。同时,上位机将预设温度换算成计数值通过USB发给FPGA,FPGA把获得的实时脉冲计数值与预设值比较,即实时温度与预设温度,从而通过电路控制TEC的制冷或者制热,达到自动控温的效果。整个工作过程涉及到相差脉宽计数模块和USB控制模块,模块之间相互配合完成数据的采集与传输。
2.1相差脉宽计数模块
为了对图1中两个信号的相差脉宽进行脉冲计数,首先对2个输入方波信号a、b进行异或处理,得到我们要测量的相差cout,然后将cout信号与FPGA的时钟信号clk进行相与得到ck信号。其处理结果如图2所示。
图2 逻辑处理结果
设计计数模块时,为了提高精度,利用PLL将时钟信号倍频到200 MHz.根据上面的处理结果,模块不用直接对cout信号直接脉冲计数,只用对ck信号计数即可。由于a与b的周期相等,为了消除单次计数的误差,利用a信号得到一个10倍于a信号周期的方波信号c,然后以c信号为基准,在c信号高电平区间对ck信号进行脉冲计数,因此得到10次测量的总和。这个总和的结果我们在Nios II中对其取平均之后传输。
利用Verilog语言将上述处理过程以及计数方法生成计数模块,并在SOPC中为其输出添加一个PIO连接到计数模块。这样,在Nios II中就可以对数据进行读取。
2.2USB控制模块
FPGA为系统的控制器,并内嵌32位Nios II嵌入式软核处理器,用硬件描述语言设计USB外设接口控制模块,然后在SOPC(可编程片上系统)平台上将其封装成IP核,在Nios II IDE集成开发环境中通过IP核与寄存器的操作对USB设备进行控制。EZ-USB FX2LP系列芯片CY7C68013A内部提供了多个FIFO缓冲区,外部逻辑可以对这些端点的FIFO缓冲区进行读写操作[6]。FPGA的引脚电平信号控制USB数据的读和写,因此要编写USB控制模块通过FPGA向USB设备发送控制信号以及数据。slavefifo模式[7]下FX2与FPGA的接口电路如图3所示。
图3 异步slavefifo读写接口
根据上述的读写接口以及读写时序编写接口模块,设计中将各寄存器映射成Avalon Slave端口地址空间内一个单独的偏移地址。可以通过Avalon接口采用“基址+地址偏移量”的方式来访问IP核内寄存器。USB接口模块还需要一个简单的Slave端口地址空间内一个单独的偏移地址。可以通过Avalon接口采用“基址+地址偏移量”的方式来访问IP核内寄存器。USB接口模块还需要一个简单的Slave端口来处理复位、片选、寻址以及对内部寄存器进行读写,完成从Nios II处理器接收指令与数据[8-9]。其中包含clk、resetn、chipselect、address、readdata、writedata等。根据读写接口,该设计一共有8个寄存器,如表1所示。为了能访问这些寄存器,需要设计三位地址,从而8个地址空间。
有了上述Verilog HDL编写的USB接口模块文件,利用SOPC Builder创建新原件,并将其集成在SOC中,在Nios II中利用自带的Avalon函数和底层驱动对上述寄存器进行操作完成数据的读写与传输。
系统软件是数据采集与控制系统的重要组成部分。主要包括3个部分:上位机应用程序、驱动程序和固件程序。上层应用程序用以完成数据的显示、处理以及发送指令等功能。固件程序完成初始化工作和对USB各类寄存器进行配置。驱动程序作为桥梁连接在上位机应用程序和USB固件程序之间。
表1 USB接口模块寄存器逻辑列表
3.1CY7C68013固件程序设计
USB固件程序是USB设备功能的核心,用于完成USB设备的识别,重列举,设备请求,USB协议处理,外部硬件的功能,负责与USB主机之间的数据通信等。为了简化编程,利用Cypress公司提供的固件程序框架进行固件开发[10-12]。设定FX2的工作模式为slavefifo模式,总线为16位双向数据总线。IFCLK由内部时钟提供,且输入不反向。配置EP2为OUT端点,BULK传输,双缓冲,每个缓冲区的大小为512字节,上位机通过OUT端点给下位机FPGA发送指令与数据。配置EP6为IN端点,BULK传输,双缓冲,每个缓冲区大小为512字节,下位机FPGA采集的数据通过IN端点上传给上位机。同时配置FLAGB为EP6满标志,FLAGC为EP2空标志。设置EP2FIFO为自动输入模式,EP6FIFO为自动输出模式。这样,FPGA连续不断地将数据发送到FIFO中,FIFO自动向USB提交数据包,使得EZ-USB的CPU不参与数据包的传输控制,不需要在固件程序中执行任何代码,因此用户函数TD_Poll()内部不用编写代码。系统初始化函数TD_Init(void)的主要代码如下:
void TD_Init(void)
{……
IFCONFIG =0xCB;//使用内部时钟
SYNCDELAY;
EP2CFG=0xA2;//二缓冲,大小为512字节
SYNCDELAY;
EP6CFG=0xE2;//二缓冲,大小为512字节
SYNCDELAY;
PINFLAGSAB =0xe6;//FLAGB为 EP6满标志
SYNCDELAY;
PINFLAGSCD =0xf8;//FLAGC 为EP2空标志
SYNCDELAY;
EP2FIFOCFG =0x11;//EP2为自动输入,数据总线宽度为16位
SYNCDELAY;
EP6FIFOCFG =0x09;//EP6为自动输出,数据总线宽度为16位
SYNCDELAY;
……
}
3.2设备驱动程序
USB设备的开发,需要进行USB驱动程序的设计,在Windows操作环境下,一般不能直接对硬件接口进行操作,必须采用驱动程序作为桥梁连接在上位机应用程序和USB固件程序之间,使上位机的操作系统能够识别USB设备,并与USB设备能够进行通讯[13-14]。该设计采用了为EZ-USB系列芯片提供的通用驱动程序ezusb.sys以及驱动程序的INF文件,可以根据需要修改设备的VID和PID的值,这样USB设备才能够被正确识别并加载。
3.3上位机应用程序
在设备开发中上位机应用程序用于与用户进行接口,对硬件获取的数据进行显示、存储以及实时显示波形图等。该系统的上位机应用程序在Visual C++ 6.0 开发环境下设计开发,首先调用CreateFile()打开设备,并返回设备的句柄,然后通过句柄调用DeiceIoControl()函数向驱动程序发送控制字。驱动程序根据控制字向硬件层发送IRQ并与设备通信。
应用程序通过USB先向FPGA发送执行脉冲计数模式的指令,FPGA收到指令后开始获取计数值并向上位机传输,通过数学关系转换,将计数值换算成相差值以及被测物当前的温度值,并实时显示。同时可以在应用程序的编辑框中输入预设温度值,将这预设温度值转换成计数值通过USB发给FPGA,FPGA将预设计数值与刚刚发送的实时计数值进行比较,从而对TEC进行驱动制冷或者制热,达到温控目的,同时返回TEC的当前状态,在应用程序界面中显示。系统的应用程序界面如图4所示。
图4 应用程序界面
实验中将热敏电阻,半导体制冷器TEC和被测物组合在一起。当被测物温度升高时,热敏电阻的阻值减小,相位差脉宽将会变小,FPGA测量的计数值就会减少。由于一定脉宽计数值下对应一个温度,将被测物实时温度对应的计数值与上位机发来的预设温度对应的计数值进行比较,对FPGA的一个I/O口写1,另一个I/O写0操作,通过型号为TC4427的双列驱动器,使得P1为5 V,P2为0 V,Q2与Q3两个三极管导通,电流由Q2流向Q3,从而驱动TEC进行制冷。相反,Q1与Q4导通,电流由Q1流向Q4,TEC制热。驱动器的输入来自FPGA的I/O口,输出与图中的P1和P2相连。当I/O口为逻辑1时,输出则为5 V;I/O口为逻辑0时,输出则为0 V.
图5 TEC控制电路
通过以上的设计,成功实现了FPGA与EZ-USB FX2 CY7C68013A之间的通信,工作在slavefifo模式下的EZ-USB能够准确,高速地将FPGA从外围电路获取的温度数据传输到计算机,同时计算机也可以快速,准确地将数据发到FPGA从而控制TEC,TEC响应迅速。实验表明,该系统工作稳定,能够确保实验数据的准确性。
参考文献:
[1]李明勃,张洪平.基于USB2.0的高速数据采集系统.电子技术应用,2009(10):109-112.
[2]李露,段新文.基于FPGA的高速数据采集卡的设计.现代电子技术,2012,35(18):146-148.
[3]张敏,赵宜楠,林满照.基于USB接口的便携式信号采集器.现代电子技术,2011,34(4):138-140.
[4]王水鱼,何文华.便携式数据采集系统.仪表技术与传感器,2012(10):76-78.
[5]王选择,曾志祥,钟毓宁,等.基于相差识别的半导体激光器温度精密测量与控制.光电子·激光,2013,24(2):239-245.
[6]薛圆圆,赵建领.USB应用开发宝典.北京:人民邮电出版社,2011.
[7]薛飞,宁铎,黄建兵,等.基于SOPC图像采集系统的设计.仪表技术与传感器,2011(12):49-51.
[8]欧海平,周砚江,张华叶,等.基于SOPC的步进电机加减速PWM控制器IP核设计.机电工程,201128(6):708-711.
[9]冯志华,高社生,张云安.Nios II软核处理器的PWM控制器设计.微处理机,2008(1):134-137.
[10]刘志华,郭付才,彭新伟,等.基于CY7C68013A的FPGA配置和通信接口设计.电子技术应用,2013,39(2):18-21.
[11]郑恭明,沈媛媛.基于Nios II的伪随机序列信号发生器IP核设计.工矿自动化,2011(2):52-55.
[12]齐新军.基于USB总线的NIOS系统与主机通信实现.煤炭技术,2011,30(1):197-199.
[13]代月松,裴东兴,徐菲.USB在数据采集系统中的应用.电子测试,2012,(8):63-67.
[14]谢勇,姚远程,秦明伟.基于USB2.0与LabVIEW的高速数据采集系统设计.电子设计工程,2012,20(19):5-7;10.