一、概述
谷物品质快速检测仪是应用近红外光谱分析技术来检测谷物的内部品质,如粗蛋白,水分等。随着光学、计算机处理技术、化学计量学理论和方法的不断发展,以及新型近红外仪器的不断出现和软件版本的不断翻新,近红外光谱技术的稳定性、实用性和准确性不断提高;其分析快速,简便,非破坏性以及可同时测定多成分的优点不断为人们所认识;不仅可用来测定样品的水分、粗蛋白、脂肪、淀粉等常量成分,还被用来测定氨基酸、脂肪酸,以及对生产加工过程进行在线质量控制;分析对象也从粉样样品扩展到分析完整籽粒样品[5]。
本文研究的目的就是快速、准确地测得谷物品质的相关参数,所以仪器的性能就体现在快速、准确的测试并分析测试结果的能力。图1为近红外光谱仪的装置示意图,近红外光谱仪一般由光源、分光系统、测样器件、检测器和控制及数据采集处理系统组成;其中的关键部件就是光谱数据采集和分析单元,本文主要讨论数据采集部分的设计及实现。
图1.近红外光谱仪器示意图
1-光源;2-分光系统;3-反光镜;4-测样器件;5-漫反射检测器;
6-透射检测器;7-计算机;8-USB数据采集通讯部分
由于我们使用的是基于电荷耦合器件(CCD)的多通道近红外光谱仪,这类仪器扫描光谱速度快,一般单张光谱的扫描速度只有几十毫秒,所以对CCD信号的采集和传输速度有比较高的要求,为满足这些速度要求所以采用USB接口方式取代原来的并口通讯方式。同时为了适应现代仪器的小型化和通用化,仪器和计算机的连接也要求我们选择USB接口总线,从而实现光谱数据的高速采集和传输,并完成谷物品质的快速检测。
二、系统设计
该系统可对4路模拟信号进行不间断采集,输入信号范围-10V~+10V,AD转换位数16位。设计多通道数据采集目的,为了实现多通道的差分信号采集来补偿温度等其它因素产生的噪声。由于温度的变化对CCD有很大的影响,所以系统采用了两个CCD,每两路对同一个CCD进行差分采集。其中一个CCD作为光谱扫描,另一个放置和前一个相邻的位置用作差分补偿。通过多通道差分补偿能提高系统的性能,从而保证测量的准确性。
该采集系统总体框架为主机(能支持USB2.0计算机)、内部包含CPU及FIFO高速缓存的USB接口控制芯片FX2和高速模数转换器(ADS7825)。系统分为硬件设计和软件设计两部分。其中硬件设计主要是以ADS7825为核心的数据采集单元和以FX2为核心的USB接口单元两部分。软件可分为三部分:采用Keil C51语言编写的FX2的芯片固件程序、Visual C++编写的USB设备驱动程序和上位机Win32应用程序。下面分别介绍数据采集的软硬件设计部分。
2.1 硬件设计
硬件设计主要是实现数据采集单元和USB数据传输单元电路设计。其数据传输为控制信号和采集数据。控制信号方向为主机到外设(OUT),数据量较小;采集到的数据由外设到主机(IN),数据量较大。系统基本操作过程为:主机给外设一个采样控制信号CLK;A/D转换完成的数据直接进入CY7C68013的内部端点FIFO,当FIFO容量达到指定程度后,自动将数据打包传送给USB总线,主机进行接收,保证有较高的传输速度。
1 数据采集模块[1]
数据采集模块主要实现以ADS7825为核心对4路模拟输入信号进行AD转换。ADS7825是BB公司生产的高性能模数转换器件,它具有4路模拟输入通道,5V单电源供电,16位并行输出等独特性能。
其工作原理,在此着重介绍ADS7825在并行输出方式下的工作过程,如下图2所示为其并行输出时电路原理图。在并行输出方式下,启动初始化过程是由R/C(pin22)脚变为低电平并至少保持40ns开始,启动转换。BUSY(pin24)脚变为低电平,并保持到数据转换和数据输出寄存器刷新完毕。如果BYTE(pin21)脚为低电平,在BUSY的上升沿,触发输出信号的高8位数字;相反,若BYTE脚为高电平,输出信号的低8位数字。最终转换的数据以完全二进制数字格式输出。REF是外部参考电压输入端或内部参考2.5V电压输出端。此引脚应与一个2.2μF电容相连,并与REF脚的输出阻抗构成一个低通滤波器滤过带限噪声。CAP为内部参考电压的缓冲输出端,也应与一个2.2μF电容相连,在ADS7825的转换周期内,这样连接可提供给内置D/A转换器最佳的转换写入电流,同时对缓冲输出也是一种补偿。另外,在BUSY为低电平期间,不再接受新的转换指令。ADS7825在并行输出模式情况下,根据通道选择方式的不同,还可以分为连续转换方式和可编程通道选择方式。在CS、R/C和PWRD同时接低电平的情况下,若CONTC(pin25)脚为高电平时,ADS7825处于连续转换工作模式。此时,ADS7825将按顺序连续采集和转换4路通道中的信号;而在CONTC变为高电平之前,当前通道号就相应存入A0和A1通道选择的寄存器中,也就是说在连续转换模式下(即CONTCE为HIGH),A0和A1为输出端。对于前一个通道来说,输出数据BUSY在跳变为高电平时变为有效。另外,每一次转换结束,BUSY要跳变为高电平时,A0和A1能够输出将要转换信号的通道号。
在可编程通道选择方式下,模拟输入通道的选择是由程序控制指令完成的。控制器发出数据转换指令和要转换的通道号,通过片选信号与A0和A1端译码选择需要的模拟通道,此时A0和A1为数据通道选择输入端。在完成数据通道的选择之后,后续各引脚的工作过程与连续转换方式下的情况类似。
图2. ADS7825并行输出电路原理图
图3. CY7C68013和ADS7825连接原理图
2 USB接口单元
USB接口单元的主要实现芯片是Cypress公司的CY7C68013,负责完成硬件系统和PC上位机之间的数据传输。Cypress公司的EZ-USB FX2系列芯片是世界上第一个集成USB2.0协议的微处理器,它支持12Mb/s的全速传输和480Mb/s的高速传输,可使用4种USB传输方式:控制传输、中断传输、块传输和同步传输,完全适用于USB2.0,并向下兼容USB1.1。其CPU采用增强型8051,它比标准8051的速度更快、功能更强,且指令集和标准8051完全兼容,并可使用C51编译器。FX2内部包含8.5KB的RAM,它们兼做程序存储器和数据存储器,增强型8051的固件代码就存储在该区域内,FX2也具有I2C总线,以使其能从外部EEPROM中下载芯片程序。另外,FX2系列芯片采用3.3V供电,且可使用USB总线电源,但是功耗较大。 [2]
本系统中使用CY7C68013的PA0-PA6管脚作为AD工作状态的控制信号,以决定ADS7825数据采集和存储,PB0-PB7为8位数据总线根据工作状态进行高低8位的数据传输。如图3所示为CY7C68013和ADS7825连接原理图。
2.2 软件程序的编写
软件程序包括包括三部分,芯片固件程序、驱动程序、上位机Win32应用程序。
1 芯片固件程序
CY7C68013芯片固件程序负责PC发来的各种USB请求,以完成主机与外围电路间的数据传输。该固件框架使用Keil C51 C编写,其中使用了许多Keil C对标准C的扩展。固件框架主要包含初始化、处理标准USB设备请求以及USB挂起时的电源管理。
框架完成了一个简单的任务循环(见图4)。首先框架初始化内部的状态变量,然后条用用户初始化函数TD_Init。从该函数返回后,框架初始化USB接口到未配置状态并使能中断。然后每隔1s进行一次设备重枚举,直到端点0接收到一个SETUP包。一旦检测到SETUP包,框架将开始交互的任务调度,其任务调度的步骤如下:
①调用用户函数TD_Poll,实现数据采集。
②判断是否有标准设备请求等待处理,如果有,则分析该请求并响应;其中,DR_VendorCmnd函数负责处理上位机发出的供应商定义请求,通过上位机发送请求来控制AD采集的开始和结束。
③判断USB内核是否收到USB挂起信号。如果收到,则调用用户函数TD_Suspend。从该函数成功返回后,再检测是否发生USB唤醒事件。如果未检测到,则处理器进入挂起方式;如果检测到,则调用用户函数TD_Resume,程序继续运行。如果从TD_Suspend函数返回FALSE,则程序继续运行。
图4. 固件程序流程图
图5. 驱动程序流程图
2 USB驱动程序和应用程序的开发
GPD(General Purpose Driver)是一个通用目的的设备驱动程序,是应用程序与EZ-USB 外设进行通信的桥梁。EZ-USB的GPD 代码Cypress公司提供原型,用户可以在此基础上生成定制驱动程序。
1)定制驱动程序的生成
采用Cypress 提供的GPD,由于GPD 只能执行一些标准的USB 设备请求和数据传输,
不能满足用户特定外设的需要,需进行扩充以生成用户定制驱动程序。对GPD 中的EZUSBSYS. C,EZUSBSYS. H,SOURCES 进行修改,再在WindowsDDK 与VC ++ 6. 0 下利用Build 命令重新编译即可生成用户定制驱动程序。
2)设备驱动程序与应用程序的接口
设备驱动程序介于硬件与用户应用软件之间。用户可以以一种规范的方式调用Win32API函数访问硬件,而不必考虑如何控制硬件。为了方便人们开发新的驱动程序,Windows已经自带了一些类驱动程序,用户只需要在这些类驱动程序的基础上编写功能驱动程序来实现特定的功能。图5给出了驱动程序的调用流程,可以清楚地看到功能驱动程序所处的层次。
开发过程中主要是了解应用程序中如何调用驱动提供的接口函数。用户应用程序通过
I / O 控制调用访问EZ-USB 设备驱动程序达到控制USB 设备的目的,应用程序首先通过调用Win32函数CreateFile来取得访问设备驱动程序的句柄,再利用Win32函数DeviceIoControl对设备进行I / O 控制。
(1) 获取设备句柄。
EZ-USB 设备驱动程序可以与多个EZ-USB 设备通信。每一个连接到主机的EZ-USB 设备,驱动程序都为它创建一个形如Ezusb-i(i从0递增)的链接符。Win32 函数CreateFile以设备链接符为参数获取第i个Ezusb设备的句柄。通过CreateFile函数获取USB 设备句柄后,再利用I / O控制来处理设备的I / O 请求。[2]
(2) 设备I / O 控制
应用程序通过Win32 函数DeviceIoControl向设备驱动程序发送I / O 请求。DeviceIoControl函数通过I / O 控制码(IOCTRL)及其他辅助参数向设备驱动程序发送特定的I / O 请求并返回操作结果,来实现数据或控制命令的传输。[2]
3.2.3 Win32应用程序
上位机应用程序主要负责读取硬件所输出的数据采集结果并向下发送控制指令,而且能存储和显示采集到的波形。Win32程序使用VC++6.0实现,通过USB中断或块传输来读取AD采集结果,采样速度可以达到20K。
五、结速语
本文通过介绍ADS7825和EZ-USB FX2芯片的特点及相关的软硬件基本开发过程,阐述了实现光谱数据采集系统的全过程。笔者根据上文提到方法设计了硬件并编写了相应的固件程序、驱动程序和应用程序,在实际应用中已获得正常使用。