当前位置:无忧公文网 >范文大全 > 征文 > 基于单片机和USB接口的数据采集系统设计

基于单片机和USB接口的数据采集系统设计

时间:2022-03-23 09:12:52 浏览次数:

摘 要:以EZ-USB FX2作为USB接口芯片设计一种数据采集系统。该系统应用EZ-USB FX2芯片构建单片机和主机的数据管道,接口符合USB2.0协议。详细介绍该系统的硬件组成和软件设计,包括FX2的固件设计和主机用户程序。EZ-USB FX2芯片工作在从属FIFO方式下,通过适当的配置可与单片机方便地进行连接,单片机可以像访问外部存储器一样访问FX2的端点。主机应用程序通过USB接口向设备发送相应的命令来控制采样过程。该系统硬件扩展方便、编程简单。

关键词:FX2;Slave FIFO;USB;数据采集

中图分类号:TP334 文献标识码:B 文章编号:1004-373X(2009)04-065-03

Design of Data Acquisition System Based on Single Chip Computer and USB Interface

LI Guozhu

(Xi′an University of Arts and Science,Xi′an,710065,China)

Abstract:A data acquisition system is designed based on the USB interface chip EZ-USB FX2.The system uses EZ-USB FX2 chip to form the data pipeline between microprocessor and computer.The interface conforms to the USB2.0 protocol.EZ-USB FX2 chip works in the slave FIFO way.The chip can be connected with microprocessor conveniently by suitable configure.The microprocessor can access to FX2′s endpoint by the same way as access to external memory.The user′s application program controls the sampling process through USB interface by transmission corresponding command to the equipment.To the system,the expansion of hardware is convenient and the programming is simple.In this paper,both hardware design and software design of the system are discussed in great detail,including the firmware of FX2 and user′s application program of the computer side.

Keywords:FX2;Slave FIFO;USB;data acquisition

在工业生产和科学技术研究中,常利用PC或工控机对各种数据进行采集,以获得所需要的控制信息和实验数据。传统的数据采集系统多以ISA,EISA或PCI插卡的形式完成数据传输,这种方式存在安装麻烦,受计算机插槽数量、地址、中断资源限制,可扩展性差等缺点[1]。由于通用串行总线(Universal Serial Bus,USB)具有自动被系统识别,自动安装驱动程序、自行进行系统配置,以及支持不同速率的同步和异步传输方式,支持热插拔和即插即用(Plug and Play,PNP)等优点,已逐渐成为现代数据传输的发展趋势。

目前实现USB数据传送多采用专用的USB接口芯片,文献[1,2]采用的PDIUSBD12可支持USB1.1协议,文献[3]采用的接口芯片为USB100也仅支持USB1.1协议,文献[4]采用CP2102符合USB2.0协议,其通用的驱动程序可将设备作为虚拟的COM端口设备进行操作,文献[5]采用Philips公司ISP1581芯片作为USB2.0的接口芯片。这里采用Cypress公司的CY7C68013作为USB接口芯片,设计实现了基于单片机和USB2.0的数据采集系统。该系统可实现单通道模拟信号的采集,主机应用程序负责启动和停止采样,采样间隔时间由主机应用程序设置调整,采样数据传给主机应用程序显示并保存。

1 系统硬件设计

1.1 系统硬件组成

整个系统的硬件结构如图1所示。AT89C52为主控单片机,负责控制A/D转换、上传采集数据、接收并执行主机的命令。CY7C68013为USB接口芯片。A/D转换芯片采用TI公司生产的TLC549,AD780是一款高精度参考电压芯片,可为TLC549提供2.5 V或者3.0 V的参考电压。系统+5 V电源由主机的USB接口提供,CY7C68013所需的电源为+3.3 V,由+5 V电源接稳压芯片AP1117提供,图中没有画出。

1.2 TLC549

TLC549[6]是以8位开关电容逐次逼近A/D转换器为基础而构造的CMOS A/D转换器,将其设计成能通过三态输出与微处理器或外围设备串行接口。TLC549用输入/输出时钟(I/O CLOCK)和芯片选择(CS)输入作数据控制,转换结果由 DATAOUT 引脚输出。I/O CLOCK 端的最高频率可达1.1 MHz。TLC-549片内系统时钟工作在4 MHz(不需要外部时钟)。片内系统时钟使内部器件的操作独立于串行输入/输出时序并允许TLC549像许多软件和硬件所要求的那样工作。I/O CLOCK和内部系统时钟可以实现高速数据传送,使得TLC549可实现40 kHz的采样频率。TLC549具有通用控制逻辑及自动工作或在微处理器控制下工作的片内采样/保持电路,差分高阻抗基准电压输入端,易于实现比例转换的高速转换器,定标及隔离电路。整个开关电容逐次逼近转换器电路的设计允许在小于17 μs的时间内,以最大误差±0.5为最低有效位的精度实现转换。

1.3 CY7C68013及其固件程序

EZ-USB FX2系列芯片CY7C68013是业界第一个支持USB2.0,同时向下兼容USB1.1规范的单片机,为描述方便以下简称该芯片为FX2。FX2支持全速传输(12 Mb/s)和高速传输(480 Mb/s),该芯片将USB2.0收发器、串行接口引擎SIE、增强的8051内核、GPIF等集成于一体。FX2内含4 KB的端点缓冲区FIFO,可以被配置为具有不同大小缓冲区的IN或OUT端点(EP2,EP4,EP6,EP8),具有USB协议所规定的4种传输方式,即控制方式、中断方式、批量传输、和同步传输方式[7]。Cypress公司为FX2提供了完善的软件开发工具包,降低了开难度,加快了开发进度。

FX2可以工作在3种不同的模式下完成USB数据的传输,即Ports模式、GPIF模式和Slave FIFO模式。Ports模式[8]下其USB数据的传输主要在FX2的8051内核参与下完成,数据传输通过执行指令实现,因此数据的传输率比较低,对大批量数据传输一般采用后两种方式。GPIF方式,称为通用可编程接口方式,在此模式下,FX2的FIFO是由内部的GPIF控制的,FX2利用由软件编程输出读写控制波形读取FIFO标志,控制FIFO的选通,并且对外部设备提供了用户专用接口,可以对许多通用总线接口进行访问,如ASIC,DSP和存储器等。文献[9,10]利用FX2的GPIF方式构建了USB数据传输通道。Slave FIFO方式是将FX2的FIFO作为外部控制器(如FPGA或单片机)的从属FIFO,外部控制器可像普通FIFO操作一样对FX2的FIFO进行读写,而不考虑该包的大小,传输速率可明显提高,文中FX2在Slave FIFO模式下工作。FX2有3种封装形式:128引脚、100引脚和56引脚,这里选用FX2的56引脚的封装形式。

FX2芯片在使用时必须先下载固件程序,固件程序主要负责完成芯片初始化,对芯片进行必要的配置、处理设备请求、进行数据传输等相应工作。用户通过编写适当的固件程序完成对FX2的设置。Cypress公司提供了一个固件程序开发框架可以大大简化FX2芯片固件程序的开发难度。通过编写用户初始化函数TD_Init(),用户可以规定各种端点资源的使用以及配置外围接口的输入/输出等。其主要配置语句如下:

IFCONFIG = 0xCB;//FX2配置为异步Slave FIFO方式,内部时钟48 MHz

EP2CFG = 0xA0;//EP2,4×512 B,BULK,OUT

EP2FIFOCFG = 0x10; //EP2自动OUT,8位

EP6CFG = 0xE0; //EP6,4×512 B,BULK,IN

EP6FIFOCFG = 0x08;//EP6自动IN,8位

EP4CFG = 0x20;//EP4无效

EP8CFG = 0x60;//EP8无效

PINFLAGSAB = 0x8E;//FLAGA固定为EP6FF,FLAGB固定为EP2EF

PINFLAGSCD = 0x04;//FLAGC固定为EP2PF

PORTACFG |= 0x40;//PA7引脚配置为SLCS

FIFOPINPOLAR = 0x00;//所有引脚低电平有效

EP2FIFOPFH = 0x00;//FP2端点的整个FIFO大于等于1时,

FP2的可编程标志激活

EP2FIFOPFL = 0x01;

固件程序将FX2配置为异步Slave FIFO模式,总线宽度8位,在4个端点中,EP4和EP8未被使用,EP2和EP6的配置如表1所示。由于采用自动输入/输出模式,主机和单片机通过旁路FX2的CPU直接连接,所有数据被直接通过FIFO管道提交,不需固件程序干预。在FX2的Slave FIFO模式下,FIFOADR[1∶0]引脚作为地址线选择某个端点,SLCS相当于片选信号,SLWR(写)与单片机的WR引脚相连,SLRD(读)和SLOE(输出使能)与单片机的RD引脚相连。单片机通过访问地址为0x00的外部存储器的方式就可以实现对EP2的访问,同理可访问EP6端点。

单片机通过FX2的3个标志引脚(FALGA,FLAGB,FLAGC)来全面掌握FX2的各端点FIFO的状况。FLAGA定义为输入端点EP6的满标志,当输入数据满时该引脚为低电平;FLAGB被定义为输出端点EP2的空标志,当主机传来的数据被读空时该引脚为低电平;FLAGC定义为当EP2端点整个FIFO中的字节数大于等于1时为低电平。假设当前主机没有传送命令,则FLAGC为高电平,当主机发送命令后,EP2的字节数大于等于1,则FLAGC变为低电平。这样在FALGC引脚上产生了一个下降沿,将此引脚与单片机的INT0引脚相连,则当主机发送命令后单片机会触发INT0中断,在INT0的中断处理程序中单片机读取并执行传来的命令。

2 系统软件设计

2.1 驱动程序

在EZ-USB FX2开发包中,提供有通用的驱动程序包,对该程序包稍加修改就可生成一个具有下载固件并完成设备重枚举功能的设备驱动程序。文献[7]对驱动程序的开发步骤有详细的记述,这里采用的就是这个通用驱动程序(GPD)。

2.2 主机应用程序

主机应用程序主要实现向设备发送命令数据包,接收设备传送的数据并进行显示,主机应用程序通过通用驱动程序来完成对设备的控制和通信。应用程序采用VC6.0编写,与设备通信时,首先通过调用Win32函数CreateFile()来取得访问设备驱动程序的句柄。该函数的语句实例如下:

HANDLE DeviceHandle;

DeviceHandle = CreateFile("\\\\\\\\.\\\\ezusb-0",GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);

用户得到设备句柄后,就可以使用Win32函数DeviceIoControl()来向设备提交相应的IOCTL控制码,进行读写和控制操作,完成相应操作后应用程序通过Win32函数CloseHandle()关闭设备句柄结束1次操作。以下是部分操作的代码实例:

//读操作

BOOL status = FLASE;//执行结果

status = DeviceIoControl (g_hDevice,//输入设备句柄

IOCTL_EZUSB_BULK_READ,//批量读取数据的IOCTL控制码

&bulkControl,//输入缓冲区,指向BULK_TRANSFER_CONTROL

//结构的指针,该结构主要用来提供管道号

sizeof(BULK_TRANSFER_CONTROL),//输入缓冲区长度

inBuffer,//保存读取数据的缓冲区指针

FX2_BufferSize,//USB传送数据的总长度,必须小于64 KB

&BytesReturned,//实际返回的字节数

NULL);

//写操作

status = DeviceIoControl (g_hDevice,//输出设备句柄

IOCTL_EZUSB_BULK_WRITE,//批量写数据的IOCTL控制码

&bulkControl,//输入缓冲区,指向BULK_TRANSFER_CONTROL结构的指针

sizeof(BULK_TRANSFER_CONTROL),//输入缓冲区长度

outBuffer,//保存要写到设备的数据缓冲区指针

nBufferSize,//USB传送数据的总长度,必须小于64 KB

&BytesReturned,//实际返回的字节数

NULL);

//关闭设备

CloseHandle(g_hDevice);

应用程序中有两个线程,辅助线程为采样线程,采样线程的流程如图2所示。

采样线程负责从设备读取数据,并通过消息传送机制与主线程通信;主线程负责采样数据的显示、存盘,向设备发送命令数据包,以及启动/停止采样线程。当执行启动采样命令时,主线程先向设备发送启动命令数据包,然后启动采样线程准备接收数据;当执行停止采样命令时,主线程先向设备发送停止命令数据包,然后停止采样线程结束数据的接收。命令数据包大小为4 B,包含有命令字和采样间隔时间参数等信息。

2.3 单片机程序

如上所述,单片机的INT0中断一旦触发,表示主机有命令数据包传送到。在INT0的中断处理程序中,单片机读取EP2端点的数据直到EP2端点为空(FLAGB为低电平),获得上位机发送的命令数据包。若接收到启动命令,则根据命令数据包的采样间隔时间参数来设置计数变量和定时器T0的初值并启动T0;若接收到的命令为停止命令,则停止定时器T0。在T0的中断处理程序中若相应的计数变量达到设定值,则完成A/D转换、读取数据以及将数据写入EP6端点的操作。计数变量和T0的初值均根据命令数据包的参数进行设置,因此设备的采样间隔时间可以由主机程序进行调整。

3 结 语

工作于Slave FIFO方式下的FX2相当于在外部控制和主机之间构造了一个的数据管道。通过对FX2的FIFO标志引脚FLAGA,FALGB,FLAGC的配置,使该芯片可以方便地与单片机进行连接,单片机通过外部中断获知主机数据的到达,通过其他标志引脚获得端点FIFO的信息,单片机和主机通信时,感觉不到FX2的存在。基于单片机和FX2的数据采集系统扩展方便、编程简单、无需外接电源、采样间隔时间由主机调整,实现了数据采集系统的小型化和便携化,在现场信号采集,教学实验,仪器仪表等领域具有一定的应用前景。

参 考 文 献

[1]张树明,方昌林.基于USB总线的数据采集系统[J].机床与液压,2005(12):132-134.

[2]周兴,戴胜华.基于单片机的USB数据采集系统设计[J].仪器仪表标准化与计量,2006(1):25-27.

[3]石晓瑛,许智榜.基于AT90S8515和USB接口数据采集系统[J].微计算机信息,2005,21(10):90-92.

[4]丛伟波,杨勇,韩清凯.低功耗数据采集系统的USB接口设计[J].单片机与嵌入式系统应用,2005(1):25-27.

[5]张建鹏,解国明,李刚.基于ISP1581型接口电路的USB2.0接口设计[J].国外电子元器件,2005(9):7-10.

[6]李国厚.串行A/D转换器TLC548/549及其应用[J].仪表技术,2001(3):35-36.

[7]钱峰.EZ-USB FX2单片机原理、编程及应用[M].北京:北京航空航天大学出版社,2006.

[8]袁卫,赵小明,张建奇.Ports模式下CY7C68013和FPGA的数据通信[J].单片机与嵌入式应用系统,2006(7):49-51.

[9]贾宝金,王宝珠,李晓玲.基于USB的数据采集系统的设计与研究[J].现代电子技术,2007,30(24):187-190.

[10]岳跃平,霍玉晶,何淑芳.基于USB2.0 技术的高速双路数据采集系统[J].微计算机信息,2007,23(7):104-105.

作者简介 李国柱 男,1976年出生,山西长治人,讲师,硕士。研究方向微机控制。

推荐访问: 单片机 采集系统 接口 数据 设计