Loading
新闻中心库存中心价格中心PDF中心图片中心
ICGLE 电子技术支持中心,为电气人员和相关企业提供全面的信息(IC技术\IC库存\IC图片\PDF资料等)服务
总线设计PCB设计单片机DSPARM
JAVA驱动设计C/C++汇编J2EE网络协议中间件技术嵌入式系统无线通信通信网络模拟技术接口电路显示光电传感与控制EDA/PLD
气流体控制电子产品电机及工具通信设备仪器仪表电线电缆建筑电气低压电器高压电器电源工控自动化广电设备医疗器械More..
电源设计仪器仪表技术专递电路图片电子专栏储存技术汽车电子测量测试音响技术家用电器
成功方案市场分析行业标准应用前沿芯片应用综合专区
基于USB2.0与FPGA技术的高速数据采集系统的设计
来源:电子技术应用   作者:袁江南
字体大小:[大][中][小]

class=content style=display:block;padding:0px 10px>

近年来笔记本电脑迅速普及和更新,其中大部分已经不配置RS232接口,而USB接口已成为今后一段时间PC机与外设接口的主流。本采集系统的设计构建了一个基于USB接口的多功能通用数据采集、传输平台,将嵌入式系统的实时性、灵活性和PC机强大的数据存储、处理、显示功能结合起来。该采集系统在智能仪器仪表、测控系统、工控系统等领域有广阔的应用前景。
1 系统总体结构设计
1.1 系统总体结构
    系统总体结构框图如图1所示,系统包括:单片机与USB接口模块、FPGA模块、信号调理及A/D模块。其中,单片机外围电路相对简单,整个系统主要通过PC机的程序界面控制操作;USB接口负责与PC机通信;FPGA模块负责完成数据的采集与缓存。

                            
1.2 单片机与USB接口模块
    本设计的目的是构建以PC机为平台的数据采集系统,单片机的功能仅限于接收PC机的命令、控制FPGA工作。PC机作为整个系统的人机界面,控制整个数据采集系统进行采集、存储和处理。由此单片机可以选择低成本的8XC51系列。为了提高系统的灵活性,采用单片机与USB接口芯片分离的方案,选择Philip公司的ISP1581 USB2.0接口芯片。该芯片与8XC51系列单片机的接口非常简单,可以极大地降低系统成本。
1.3 FPGA模块
    采用FPGA进行采样控制的最大特点是系统具有重构性和通用性。设计中采用了Altera公司的低成本FPGA的Cyclone系列(实际试验时,在更便宜的Acex1k器件上也可以实现),控制高速A/D芯片以20MSPS的速度采样。FPGA模块的设计具体包括FIFO、单片机接口、A/D控制接口、DMA控制模块和主控制器等子模块的设计。
1.4 PC机端软件平台
     PC机采集程序使用VC++实现,直接调用Philips公司提供的驱动程序进行数据读写,大大降低了开发难度与风险。本设计中,PC机端软件设计包括应用程序的界面设计、多线程数据采集、存储与处理模块的设计,以及与USB底层驱动程序的通信动态链接库的设计。
2 USB接口模块设计
2.1 USB接口芯片

    USB接口芯片ISP1581具有体积小、高速、与单片机的接口相对简单等特点。除了控制端点外,ISP1581还有7个输入(IN)端点和7个输出(OUT)端点。每个端点可以灵活配置数据传输方式以及数据缓存区(FIFO)的大小,端点FIFO最大容量可以达到2KB。ISP1581芯片在配置枚举时需要单片机固件的支持,一旦正确完成了配置和驱动加载,单片机对于ISP1581芯片就如同普通存储器一样可以进行读写操作,以发送或接收数据。
2.2 固件编程
    USB通信完全由PC主机发起。在这种结构下,固件总是一直在等待主机命令,再根据命令去执行相应的程序。固件的基本思想是采用模块化设计,分成 main.c等7个模块。ISP1581固件结构如图2所示。图中,main.c为主循环,isr.c主要负责中断处理,Chap9.c主要负责响应主机的请求。用户的应用程序将来也可以包括在main.c循环中。

                                
2.3  单片机端程序设计
    单片机端程序主要包括初始化模块,外围Flash、EEPROM、RAM、液晶显示器、按键等的读写控制模块,USB接口芯片固件模块,A/D采样工作模式、速度以及采样数据的读写的FPGA硬件控制模块等。本设计的指导思想是:充分利用PC机和嵌入式系统的优点,对MCU端的要求尽量简化。具体软件流程示意图如图3所示。

                                      
    USB作为一个通信接口,首先必须完成配置,然后才能进行用户数据的发送/接收,在循环中必须随时检查是否有主机的配置命令。配置枚举过程是USB固件编程当中较为复杂的部分,其流程如图4所示。USB设备接入到主机并被主机识别后,主机首先以默认的地址(00H)发送一个设置(SETUP)包,新接入的设备必须接收此包并响应请求。然后主机会发送输入包读取设备描述符,初步判断设备的属性后,再设置设备的地址,随后再用这个地址读取设备的各种描述符以识别并且配置设备。可见,在设备配置过程中,主机读取的数据较多,设备一旦接收到一个SETUP包之后便会判断主机的请求类型,然后进入请求处理循环等待主机的进一步命令,如果再次收到一个IN令牌便会向控制端点中写入数据,并且根据数据长度再次写端点直到数据发送完毕。USB的标准请求包括读取设备描述符、配置描述符、端点描述符、设置地址、配置设备等,厂商请求由用户自行定义。

                                    
    ISP1581接收到主机的数据后,将根据相应的情况设置片内的中断寄存器标志中断源,然后向单片机申请中断,中断服务程序流程如图5所示。单片机响应中断后,首先读取中断标志寄存器并判断中断源,然后设置相应的标志。在用户的发送/接收程序中,将根据相应的标志产生相应的动作。例如,主机发送一段数据给ISP1581,ISP1581接收、握手完毕后,设置中断标志并申请中断。在用户的任务中发现有数据接收的标志,就可以读出ISP1581中的数据。而ISP1581向主机发送数据时,首先是主机发送一个IN类型的令牌发起一次传输,如果此时ISP1581相应端点的FIFO非空,则立即发送数据,然后向单片机申请中断,响应中断以后如果还有数据要发送,则应该向ISP1581的FIFO中写入数据,否则直接清空中断标志即可。主机和数据采集器之间的握手配合要事先设计好。

                                    
    根据输入传输要求,在具体的设计中,除了主数据传输端点外,还配置了一个数据缓冲区为64字节的、工作于中断传输方式的端点作为命令端口,负责与主机进行通信握手。如果主机想从设备读取数据,则首先发送一个读取命令,单片机接收到该命令后,就向主数据端点的FIFO中写入数据,随后主机发出读数据令牌,正好有数据可以发送。通过命令端口还可以发送各种命令,控制数据采集器动作。
3 FPGA数据采集模块设计
3.1 模块划分
    FPGA模块划分为A/D接口、FIFO、单片机接口、DMA接口控制、主控制器等模块,其中设置了一些可以单片机写入的寄存器。A/D的采集速度,FIFO的空、满、数据写入、读出速度都可以灵活配置。整个模块以Verilog语言写成,稍加修改可以同各种A/D芯片接口。整个设计在Altera公司的Cyclone系列的EP1C12中完成。在ACEX1K系列EC1K100器件上也可以实现,工作时钟频率为50MHz。
    为了提高系统的灵活性,在信号的调理、滤波模块中使用了Lattice公司的ispPAC80可编程滤波器作为输入滤波器,可以灵活地设定抗混叠滤波器的截止频率,最大截至频率可以达到750kHz,完全可以满足一般中、高频信号的滤波。FPGA作为A/D控制器可以同多种A/D芯片接口,本设计中使用了TI公司的10位高速A/D芯片TLC876。芯片工作于流水线方式,最高采样速率为20MSPS。
3.2 与单片机及ISP1581的接口
    FPGA在与单片机信号的接口过程中,使用了同步设计的方法。即首先对单片机的I/O信号进行采样同步化,获得各信号上升、下降沿的时刻,输出同步脉冲,然后在这些时刻点处根据同步脉冲的出现与否来控制系统进行动作。这种设计的优点是可以在设计中采用同步状态机,以获得较高的运行速度和稳定的工作性能。这也是ALTERA、XILINX等公司的FPGA数字系统设计中所推荐使用的方法。
    为了提高FPGA中的FIFO与ISP1581中的数据存储器的数据交换速度,FPGA与ISP1581之间采用DMA方式进行数据交换。
    ISP1581有两种工作方式,由BUS_CONF、MODE0、MODE1三根引脚控制:
    (1)如果上电时检测到BUS_CONF引脚为低电平,则工作于分裂总线方式(Split Bus Mode)。ISP1581具有8-bit地址/数据复用总线和16-bit的DMA专用数据线。此时MODE1引脚如果为低电平,则可以将芯片的ALE/A0引脚与89X51的ALE脚直接相连,进行地址/数据总线复用;而如果MODE1为高电平,则ALE/A0脚要接其他的89X51引脚,由用户编程将ALE/A0脚拉高/低进行地址/数据复用,而MODE0脚在这种方式下没有使用或作为其他用途。
    (2)如果上电时检测到BUS_CONF引脚为高电平,则工作于通用处理器方式(Generic Processor Mode)。此时MODE1脚没有使用(可接Vcc),MODE0引脚则可接低/高电平,这样可以使芯片的读/写引脚分别符合Motorola/89X51微处理器的读写规范。所以让ISP1581芯片工作于分裂总线方式可以方便地与8051系列单片机接口,其AD[7:0]作为数据/地址总线复用,RD、WE、ALE分别为读、写、地址锁存线,DATA[15:0]作为DMA数据总线使用。
    ISP1581芯片中与DMA相关的引脚有DREQ、DACK、DIOR、DIOW。DMA传输前必须设定工作模式、初始化DMA相关寄存器,然后对DMA命令寄存器写入一个命令便可以启动DMA传输。传输模式有主、从、IDE、ATA等方式。通用数据采集系统比较适合采用从模式,在这种模式下,单片机接收到主机发来的开始采集命令后,立即命令FPGA启动采样,然后命令ISP1581启动DMA传输,ISP1581将DREQ引脚拉高,表示请求数据,此时FPGA将数据准备好后,拉低DACK引脚,待准备好数据后,在DIOR线上产生读脉冲,供ISP1581将数据读入内部FIFO。DMA也可以使用主模式,此时读脉冲DIOR由ISP1581产生。DMA工作时序图如图6所示。

                           
4 PC机多线程数据采集程序设计
    USB的数据传输使用了虚拟管道的概念,可以同时接入127个设备。每个设备可以拥有若干个端点,每个端点可以跟主机组成一个连接,构成一个通信的最小实体。在数据传输过程中,只要带宽允许,主机可以同时跟几个端点通信,因此要求在主机的应用程序中开启多个线程进行通信。在本设计中,采用了命令端点和数据端点分开的方式。命令端点配置成中断或批量传输方式,在主机应用程序中专门开启一个线程同该端点进行通信,开启另外一个线程进行采样数据传输,而两个传输之间互相不影响。用户界面使用另外的线程,这样在传输过程中,应用程序可以随时响应用户的命令。在具体的设计中,点击数据采集开始命令即建立并且启动一个采集线程。在这个无限循环的线程函数中设置了一个标志变量,如果该变量为真,则线程函数继续运行;否则线程终止,停止采集。这样用户界面线程可以通过修改线程运行标志变量来控制线程的运行。采用多线程采集程序的一个问题是线程函数必须是一个全局函数,不属于任何一个类,这样它就无法访问类的私有成员或保护成员,解决这个问题的方法是:因为线程函数在创建时允许传送一个指针参数给它,于是可以构造一个结构数据类型,数据成员中包含一个指向类的指针。在创建线程时将想要访问的类的指针包含在一个按前述定义的结构变量中,并将该结构的指针作为参数传给线程函数。这样就可以在线程函数中定义一个类对象,并把前述的类指针赋给它,通过类指针就可以访问该对象中的所有成员了。在本设计中采用多线程程序设计后,系统工作非常稳定。
   目前,国内外的数据采集系统常用的接口方式有多种,如 RS232 串行口、并行口,ISA 总线、PCI总线等。这些总线接口虽各具优点,但也都有其难以克服的缺点而被逐渐淘汰。USB接口具有连接方便、无需外接电源、即插即用、支持热插拔、动态加载驱动程序等特有优点,在主机和数据采集系统之间可以实现简单、快捷、可靠的连接和通信。本设计应用ISP1581USB接口芯片与FPGA技术,构建了一个使用灵活的通用数据采集系统。该系统充分利用了PC机的大存储量,强大的数据处理能力,高清晰的大屏幕显示(相对于嵌入式系统而言),以及嵌入式系统的实时与灵活性。目前正在使用此平台构建一个在消声室环境中针对机械振动噪声的采集与分析系统。此系统在智能仪器以及工业自动化等众多领域中必将有广泛的应用前景。
参考文献
[1] 萧世文. USB2.0硬件设计[M].北京:清华大学出版社,2002.
[2]  周立功.PDIUSBD12USB固件编程与驱动开发[M].北京:北京航空航天大学出版社,2003.
[3]  张念淮. USB总线接口开发指南[M].北京:国防工业出版社,2001.
[4]  Philips Semiconductors. ISP1581 programming guide[Z].2004.
[5]  USB.org. Universal serial bus specification rev.2.0[Z].2006. http://www.usb.org/developers/docs/.
[6] 倪明辉. USB在FPGA控制的高速数据采集系统中的应用[J]. 计算机测量与控制,2006,14(2).

Upload by 小刘(2008-8-13)
IC
·嵌入式网络智能控制系统的研究
·蜂窝/WLAN多模终端的设计考虑
·基于HMS30C7202嵌入式系统的..
·基于SEP3203的嵌入式以太网口的..
·利用CAN收发器提高CAN网络的安全..
·高性能T比特路由器高可用性的研究与实..
·Linux串口上网的简单实现
·从以太网供电中获取更多的电力
·串行ATA总线应用技术
·基于GPS的嵌入式公交自动报站系统的..
·基于嵌入式Linux的便携式RFID..
·滑动相关法伪码捕获的FPGA实现
·基于嵌入式Linux的智能手机系统设..
·电源应用中场效应晶体管的崩溃效应
·基于AD7888的高稳定度激光器多路..
·一种高速低压低静态功耗欠压锁定电路
·MAX2140内部ESD二极管的保护..
·电流测量的原理和产品
·利用PCI1510实现PCI板卡的热..
·基于VC的USB接口通信程序设计
·基于I2C总线技术的USB接口设计
·LCD控制器驱动的24位TFT真彩屏..
·GPS99808模块在汽车防盗系统中..
·热插拔可靠性的新标准
·基于LT1641的双路热插拔电路设计
·四通道I2C多路复用器提供了地址扩展..
·基于PCI总线和DSP芯片的图像处理..
·Linux 2.6 内核中的最新电源..
·高功率以太网供电不再困难
·采用UCC28051的100W通用线..
·电压不足期间支持电信电源的小电容
·负载管理与负载开关的设计与实现
·交叉耦合门防止推挽驱动器交叠
·台式电源测试的革命
·锂电池组的主动电荷平衡
·绿色动力新潮流——燃料电池
·输出电容器的等效串联电阻对滞环控制功..
·动态电源路径管理简化了太阳能板对电池..
·今天的绿色 POL DC/DC 转换..
·使用LXI加强汽车电子测试
IC
推荐技术文章:
·针对无线宽带相位噪声的测试方案..
·在低成本测试夹具上实现对表面贴装射频....
·基于CC1100的无线手持终端的设计..
·核磁共振系统中微波射频开关的设计与应....
·基于无线传感器网络的电机运行状态监测....
·Zigbee无线传感器网络平台的设计....
·利用红外技术解决音频无线传输难题..
·温度传感器TMP275在家庭环境监控....
·CF+插槽宿主的供电及热插拔控制设计..
·一种新型的高压变频分布式控制系统..
·固定翼飞机竖直飞行控制系统的设计..
·霍尔效应技术提供紧凑型电流测量传感器..
·语音控制的智能小车设计..
·高精度超声波测距系统的设计与实现..
·基于PLC的玩具整体燃烧自动测试仪的....
·用于各类摄像应用的高速CMOS图像传....
·设计下一代自动化测试系统..
·基本电能质量测量方法和常见问题原因..
·基于FPGA的通用开关电源控制器硬件....
·FPGA器件的设计实现、设计优化与模....
·ARM的位置无关程序设计在Bootl..
·基于OV6630图像传感器和DSP的..
·基于DSP和CPLD的软开关电源数字..
·解决DSP设计面临的终极挑战
·基于P89C52RD2和FPGA的可..
·单片机的图形化编程方法探讨
·单片机系统多串行口设计技术研究
·51单片机红外遥控解码程序
·基于16位单片机的无刷直流电动机控制..
·PIC单片机控制lcd12864液晶..
·用PIC单片机实现LCD显示单个B字
·AVR内部EEPROM读写范例
·AVR模拟比较器使用范例
·用51单片机做的拉幕式数码显示课程设..
·用AT89S51单片机来制作的手动计..
·用AT89S51单片机多路开关状态指..
·单片机AT89S51与ADC0809..
·报警产生器-课程设计
·USB总线在光栅位移传感器检测系统中..
·无线传感器网络低占空比MAC协议研究
IC
IC

©2007 版权归ICGLE所有   页面执行时间:62.500毫秒