基于USB的数据采集系统的设计与研究

时间:2009-12-16

  1引 言

  数据采集作为获取信息的手段,越来越多的应用在各种工业系统中。目前数据采集系统多以PCI,ISA或。

  EPP/ECP等完成数据的传输,这些方式开发调试比较困难,安装不便,通用性和可移植性差;而且PC上的插槽数量、地址、中断资源的有限导致这些方式的可扩展性差[1]。目前广泛应用的USB总线接口具有安装方便、高带宽、易于扩展等优点,USB 2.O的传输速率可达到480 Mb/s,已逐渐成为现代数据传输的发展趋势之一[2]。

  2 EZ-USB FX2以及CY7C68013的特点

  本文选择C2ypress公司LISB接口芯片CY7C268013(56一pin),该芯片属于EZ-IJSB FX2系列。Cypress EZ-USBFX2是世界上款USB 2.O集成微控制器[3]。其在1个芯片上集成了USB收发器(USB Transceiver),串行接口引擎(Serial Interface Engine,SIE),CPU(增强型8051微控制器)和一个通用可编程GPIF接口(General ProgrammableInterface,GPIF)。集成的LISB收发器通过USB电缆的D+和D一线连接到主机,串行接口引擎(SIE)进行数据的编码和解码、完成错误校验、位填充和其他USB需要的信号级任务。

  终,SIE传输来自或将要到达USB接口的数据。FX2的SIE可以在全速(12 Mb/s)和高速(480 Mb/s)两种速率下运行。为了适应USB 2.O增加的带宽,FX2端点FIFO(First In FirstOut)和Slave FIFO(同外部逻辑或处理器连接的缓冲区)组合在一起,这样可以节省内部数据之间的传送所消耗的时间。CPU是具有快速的执行时间和更多特点的增强型8051,他把内部RAM用作程序和数据存储。

  CY7C68013有以下主要特征:

  (1)软件。8051从到内部RAM的程序开始运行,这个特征允许固件程序通过主机到芯片内部RAM中,从而方便了调试和固件的改写。

  (2)四个可编程。BULK/INTERRUPT/ISOCHRO一NOUS端点,可以是双缓冲区,三缓冲区或者四缓冲区,这样可以根据外部数据的速率调整缓冲区的宽度和深度,以适应不同的需要。

  (3)GPIF。允许直接连接到大多数并行接口:8位和16位;由可编程波形述符和配置寄存器来定义波形;支持多个Ready(RDY)输入和Control(CTL)输出。

  (4)3.3 V。电压供电,减小了控制器的功耗。

  3数据采集系统的硬件设计

  本系统主要由模数部分、通信部分和电源转换3个部分组成。整个数据采集系统完成对信号的采集、传输和存储。图1为本采集系统结构框图。

  主要工作流程:经过调理的模拟信号经过模/数转换器(ADC0804)转换为数字信号;USB2.O控制器负责把ADC转换后得到的数据读取到其内部FIFO缓冲区,由程序判断ADC的转换结束;中断信号决定ADC上的数据是否有效。PC的用户应用程序发出接收数据的请求,并由设备发出相应的响应决定是否开始传输数据。当系统上电后,系统自动识别设备后加载驱动程序,USB控制器的固件程序通过USB电缆从主机自动到其内部程序RAM中,并经过列举和重列举后开始正常工作,计算机可以通过用户软件取得系统的各种配置信息。USB控制器以GPIF(通用可编程接口)Master模式控制数据采集和读取,并通过CY7C68013 GPIF的"波形图"控制ADC的采集和读取数据的时序。

  3.1 USB控制器外围电路设计

  USB控制器及其外围电路组成了系统的数据读取和传输模块,这部分主要负责读取和传输ADC转换后的数据,并负责与PC机的通信,从而完成这个系统的功能。由于CY7C68013把多重功能都集成到一个片子上,所以外部电路显得不是很复杂,与一般的电路比较,减少了电路复杂的外部数据线和信号线的连接,有利于提高整个系统的可靠性[4]。LISB控制器部分外围电路原理图如图2所示。


  CY7C68013用自己的片内晶振电路和一个外部24 MHz晶振组成系统的时钟电路。他有一个片内锁相环(PLL)电路,利用PLL可以把24 MHz振荡器频率倍频至480 MHz供收发器使用。内部计数器把24 MHz的频率分频为内部8051需要的默认的12 MHz的时钟频率。XTALIN和XTALOUT分别为晶振的输入和输出引脚,分别与晶振相连,同时,晶振的两个引脚分别通过一个20~33 pF的负载电容接地。DMINUS和DPLUS为USB的D+,D一信号线,分别和LISB连接器的相应引脚相接。LJSB连接器上的VBUS和GND为总线电源线,整个系统的所需要的各种电压都是通过该电源转换而得到。SCL和SDA分别为I2C总线的时钟线和数据线,在本设计中,系统的固件程序采取从主机的方法。因此,这里无需连接外部E2PROM,这两个引脚要分别通过一个2.2 Ω的电阻连接到电源引脚VCC上。RESERVED引脚为芯片的保留引脚,通过一个2.2 Ω接地。

  RESET引脚为芯片的复位引脚。该引脚有一个滞后作用并且低电平有效。因为内部锁相环在VCC升至3.3 V后大约200 μs保持稳定,所以,RESET引脚所连接的外部RC网络要取适当的值来满足这个需要,典型的取值为:R-100 kΩ,C=0.1μF。wAKEUP为唤醒引脚,在805l和芯片的其他部分为低功耗状态时,USB系统挂起,PLL和晶振停止工作,当外部逻辑触发wAKEUP,晶振重新工作之后,PLL趋于稳定,同时,8051也会收到一个唤醒中断。RDY0,CTLO,CTL1引脚分别和对应ADC及其外围电路的接口相连,FD[15:0]分别和ADC的对应数据线连接。

  3.2 A/D采样通道设计

  本文采用的是CY7C68013的GPIF工作模式,因此直接利用了GPIF的16位并行接口,这样每次可以按字(2个8位)读取数据。考虑到ADC0804的廉价,并且省去了连接多路选择器和其相关的控制接口电路等因素,提高系统的可靠性,利用2片AI)C0804同时与GPIF接口相连接,避免了利用多路开关时的所需的转换时间m56,在程序部分,也省去了选择模拟信号通道部分。

  3.3 电源电路设计

  在本设计中,需要3种大小不同的供电电源,除了ADC0804需要的+5 V供电电源外,还有CY7C68013需要的+3.3 V的供电电源,模数转换器ADC0804需要的+2.5 V的基准电压电源。由于整个系统可以使用总线电源供电,不需要外加电源,因此需要把+5 V的总线电源转换为系统各个部分所需的电源。+3.3 V电源是CY7C68013所需芯片供电电压。设计中,选用的是MAxIM公司的电源转换芯片MAX882n 0,连接电路如图3所示。

  模/数转换器需要外部提供基准电压,ADC0804需要+2.5 V电压,而且基准电压是否稳定、,直接影响数据转换的。而NationalSemiconductor公司的LM336-2.5 V是一个能提供+2.5 V电压的器件,他的集成电路是的2.5 V并联推挽稳压二极管组成,还有一个用来调节温度对电压影响的引脚ADJ。芯片所产生的2.5 V的电压可以很方便的从5 V电压系统中获得。

  4数据采集系统的软件设计

  该数据采集系统的软件系统主要由3部分组成:USB固件程序(Firmware)、I_JSB设备驱动程序以及客户应用程序。3部分程序之间相互协作来完成整个采集卡的功能。

  4.1 固件程序设计

  固件程序是指运行在设备CPU中的程序。只有在该程序运行时,外设才能称之为具有给定功能的外部设备。固件程序负责初始化各硬件单元,重新配置设备及A/D采样控制。固件代码的存储位置有3种:种是存在主机中,设备加电后由驱动程序把固件到片内RAM后执行,即"重新枚举";第二种方法是把固件代码固化到一片E2PRAM中,外设加电后由FX2通过I21C总线到片内RAM后自动执行;一种方法是把程序固化到一片R()M中,使之充当外部程序存储器,连在FX2三总线上。本文选用种方式,这种方式便于系统的调试和升级。

  Cypress公司为CY7C68013提供了一个开发框架,可以在KEILC51环境下开发。由于开发框架的引入,大大缩短了用户的研发周期。该框架由以下几部分组成:

  (1)Fw.C中包含了程序框架的MAIN函数,管理整个51内核的运行,因为CypreSS对这个部分的功能进行了精心划分,一般是不用改动的。

  (2)用户必须将PERIP H.C实例化,他负责系统周边器件的互联。固件的设计主要针对这个文件,用户必须根据自己系统的需要,实例化这个文件,以实现自己的功能。在这个文件中有几个函数是比较关键的,在这里做特别说明:

  TD Init函数,负责对USB端点进行初始化设置。本设计中将端点6设置为1 024个字节,缓存深度为4级,模式设为自动输入方式。

  TD Poll函数,负责系统中循环任务的处理。他主要是对各个端点的状态进行查询,处理各种OUT或IN端点的交互。值得说明的一点是,这种处理只是辅助性质的,大部分工作由硬件自动完成。

  GPIFINIT.C,其中只有一个Gpiflnit函数;他是GPIF模块的初始化函数,一般在TD Init函数中调用。这个函数是由Cypress公司提供的一个GPIF、Designer开发工具根据用户设计的波形生成的,用户不需要自己设计波形查询表,减轻了设计者的工作强度。DSCR.A51是描述表文件,负责LISB设备的描述工作,CY7C68013在上电后自动利用其中的VID和PID取代默认的VID和PID。

  4.2驱动程序的编写

  数据采集系统的设备驱动程序和应用程序都是设备的主机端程序。设备驱动程序是硬件和应用程序之间的桥梁,通过驱动程序,应用程序可以对硬件进行控制。该系统需要2个驱动程序,即通用驱动和固件的驱动。通用驱动完成与外设和用户程序的通信及控制;而固件的驱动则只负责在外设连接LISB总线后把特定的固件程序到FX2的RAM中,使FX2的CPU重启,模拟断开与USB总线的连接,完成对外设的重新设置。主机根据新的设置安装通用驱动程序,重新枚举外设为一个新的USB设备。

  在本系统的驱动程序开发中,使用的开发工具是Jun-go公司的winDriver,他支持多种操作系统。winDriver开发的优点是用户不需要了解操作系统内部的具体工作机理,同时也不需要了解各个系统DDK(Developing orDebugging in Kernel)的开发工具,用户只需使用winDriv-er提供的开发平台,即可完成驱动程序的设计工作,剩下的底层细节由winDrivei内核统一处理。从而降低了对开发者编程能力的要求,同时也大大缩短了开发周期。下面就使用winDriver开发驱动程序的步骤做简要说明:

  启动winDrivet。的Dri veiwizard工具;利用Driver--wizard检测硬件是否正常;在Driverwizard中选择所使用的开发环境,这里使用VC++6.0开发环境,并生成驱动程序代码;对生成的代码进行修改,使其符合系统的需要;在winDrivet环境的用户模式下,调试驱动程序;如果程序需要内核访问以提高驱动程序的效率,进入内核开发。

  4.3 用户程序的编写

  用户程序是系统与用户的接口,他通过通用驱动程序完成对外设的控制和通信。在编写用户程序时,首先要建立与外设的连接,然后才能实施数据的传输。启动采样后,为了保证不丢失数据,用户程序应该建立一个工作线程专门获取外设传来的数据。程序中主要用到2个API函数:CreateFile()和DeviceloControl()。CreateFile()取得设备句柄后,DeviceloControl()根据该句柄完成数据传输。程序框图如图5所示。

  5 结 语

  本文系统地介绍了基于USB接口的数据采集系统,完成了软硬件的设计工作。数据采集系统具有20 kS/s的采样速率,8位分辨率,采样小于1%,输入范围为一5~+5 V。在本数据采集系统的设计中,CY7C68013芯片灵活的接口和可编程特性简化了外部硬件的设计,提高了系统的可靠性,也利于PCB板的制作与调试。基于USB 2.0的数据采集卡可以即插即用,弥补了传统采集板卡插拔困难的不足。随着时代的进步,技术的发展,USB必将在更广阔的领域得到更深层次的运用。


  

参考文献:

[1]. PCI datasheet https://www.dzsc.com/datasheet/PCI_1201469.html.
[2]. CY7C68013 datasheet https://www.dzsc.com/datasheet/CY7C68013_1054335.html.
[3]. BULK datasheet https://www.dzsc.com/datasheet/BULK_2523104.html.
[4]. 805l datasheet https://www.dzsc.com/datasheet/805l_2246002.html.
[5]. ADC0804 datasheet https://www.dzsc.com/datasheet/ADC0804_122972.html.
[6]. MAxIM datasheet https://www.dzsc.com/datasheet/MAxIM_1062568.html.
[7]. LM336-2 datasheet https://www.dzsc.com/datasheet/LM336-2_1082497.html.
[8]. A51 datasheet https://www.dzsc.com/datasheet/A51_1823359.html.
[9]. PCB datasheet https://www.dzsc.com/datasheet/PCB_1201640.html.


上一篇:基于ARM-Linux的MiniGUI的仿真与移植
下一篇:非易失性半导体存储器的相变机制

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料