《基于USB的数据采集系统的研究与设计毕业论文.doc》由会员分享,可在线阅读,更多相关《基于USB的数据采集系统的研究与设计毕业论文.doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据采集系统USB接口的实现数据采集系统USB接口的实现自动化专业学生 XXX指导教师 XXX摘要:USB通用串行总线是一种新型的微机接口规范,随着客户对系统的数据采集速度要求的不断提高,USB以其易于扩展、速度快、方便使用等优点越来越多的应用于数据采集系统中。本文论述了一种基于USB总线的数据采集系统的设计方法,通过对USB协议和设备构架的充分理解,对以单片机AT89C52和USB接口芯片CH372为核心的数据采集系统进行了硬件设计,并在此设计的基础上给出相应的电路原理图。硬件设计主要解决的是CH372、TLC549和TLC5620与单片机之间的接口电路问题;USB软件设计由USB设备固件程
2、序、设备驱动程序以及主机应用程序三部分组成。本系统充分展现了USB总线安装方便、使用方便、功能齐全等优点。关键词:USB通用串行总线;单片机;数据采集系统Realize of Data Acquisition System Based on USBStudent majoring in Automation XXXTutor XXXAbstract:USB Universal Serial Bus is a new type of computer interface specification. With customers on the system data acquisition sp
3、eed requirements continue to increase, more and more USB was used in data acquisition systems with its easy to expand, fast, easy to use, etc. This paper discussed a USB-based data bus acquisition system design approach, through the USB protocol and device architecture fully understanding, AT89C52 m
4、icro controller and USB interface chip CH372 as the core of the data acquisition system hardware design, and the corresponding circuit diagram on the basis of this design. The hardware design is mainly to solve the problem of the interface circuit CH372, TLC549 and TLC5620 communicated with micro co
5、ntroller; USB software was designed by the USB device firmware, device drivers, and the host application consists of three partsThe system has the advantage of USB bus to install, easy to use, full-featured, etc.Key words:USB bus;Data collection;MCU1 绪论1.1 课题背景和研究意义在工业生产中,往往需要使用PC机进行各种数据采集和处理,如温度和压力
6、。数据采集系统的主要任务是数据信息的采集、A/D转换,然后通过PC接口总线将数据送到计算机中进行进一步的处理。目前,以该系统为核心的设备在国内和国外已被广泛应用,如工业控制中现场数据采集设备;视频电话,家庭影院及其他多媒体设备。数据采集卡与计算机外设一样,与主机通讯接口一般基于PC机上的ISA总线、PCI总线、RS-232总线等1。虽然PCI总线具有更高的传输速率,并支持“即插即用”功能,但其缺点是插拔麻烦,而且由于PC扩展插槽一般56个,所以最多也只能有56个PCI数据采集卡同时使用在同一计算机,同时PCI插槽在主板上占用相当大的空间,这不利于小型化的计算机系统。对于ISA总线也是存在同样的
7、问题。虽然RS-232C串行总线连接器简单,但其传输速度慢,且主机串口数目非常有限。总之,这些传统接口的数据采集设备在使用上存在以下缺陷:安装麻烦,受计算机插槽数量、中断资源、地址的限制,在一些强电磁干扰试验现场可能不会专门做出电磁屏蔽,从而会出现所收集的数据失真的情况。通用串行总线USB很好地解决了这些问题。USB总线接口的数据采集系统具有以下优点:1.设备装配简单。USB设备支持即插即用,无需打开机箱安装USB设备,无需再关闭计算机。2.接口数目多,每个USB主机可以通过USB集线器同时挂接最多127个外围设备,可以有效的解决I/O口数目不够用的问题。3.数据传输速度比一般的串行总线快,可
8、以达到绝大部分多点数据采集系统的要求。4.USB总线能够直接对设备进行供电2。1.2 USB的发展USB(通用串行总线)作为一种新的外设连接技术,最初由康柏、DEC、IBM、英特尔、微软、NEC和北方电信等七大集团合作开发的。这项技术的重点在于简化计算机和外围设备的连接过程,兼容低速和高速,从而解决串行设备和并行设备连接电脑的争论,为用户提供一个可扩展的、共享的、容易来使用的串行总线。随着各级的发展和渗透,外设和PC连接与扩展已变得越来越重要。1994年,微软公司的即插即用计划,重点在于PC外围设备和扩充电路板连接在一起,实现系统对端口和中断等资源自动分配,无需用户干预。1996年康柏、英特尔
9、和微软三家厂商提出设备托架的概念,其目的是实现高度的可扩展性3。1.X版本在USB中首次引入,它的总线传输速率低,有12Mbps(全速)和1.5Mbps(低速)两种。目前,它主要用在传统的PC外设,如键盘、鼠标、显示器等,移动存储设备,如U盘,以及新兴的消费类电子产品,如移动电话、MP3播放器、MP4、MP5等。USB2.0于2000年4月公布,是一个高速模式的版本,它的数据传输速度可达480Mbps,同时保持USB1.1优势的前提下,保证了向下兼容性,可以完全支持USB1.1产品。不过,如果要使用高速传输,则必须使用兼容USB2.0的主机软件和主机控制器,这意味着这台主机的操作系统必须安装U
10、SB2.0的补丁,同时安装支持USB2.0主机控制器或PCI扩展卡。随着USB设备急剧增长,设备和设备之间的直接数据传输变得越来越重要,在2001年12月底USB OTG技术应运而生,开发设备上给予双重身份。作为主机的同时也可以作为一个设备,其实质是在设备加一个嵌入式计算机来执行主机任务。这项技术使USB设备来摆脱对电脑的依赖,USB应用的范围大大扩展。1.3 国内外现状国外公司纷纷推出了很多以适应不同精度,不同条件要求的USB数据采集产品。典型的是美国NI公司开发了一系列的USB数据采集卡,NI公司于2006年6月推出了两款最新的采样率高达1.25MB/s的USB2.0总线M系列数据采集设备
11、。这些新器件不仅能提供最高速率的数据采集功能,更是一种强大的测量服务软件,以简化编程工作和系统设置。新设备包括一个免费的USB2.0高速交互式数据记录软件进行分析。但是,该公司的USB数据采集卡系列产品的价格是非常昂贵的。近年来,国内也有不少公司也都纷纷推出了USB数据采集卡,而这些产品大多是基于USB1.1协议规范,数据传输速度远低于基于USB2.0协议规范数据采集卡,因此限制了采集速度。目前,USB接口的开发和应用在广度和深度上远远不如传统的串行端口、并行端口以及各种总线插卡,其应用主要局限于制定一些标准的PC外围设备,如U盘、键盘、鼠标。这主要是因为作为一个新的技术和新的标准,USB规范
12、是更复杂的,相应的技术支持比较少,应用程序开发人员都不是很了解,USB接口作为通用I/O接口使用有一定硬件和软件的开发难度。USB2.0接口具有低成本、灵活方便、高性能以及可靠稳定的特点,将会逐步成为计算机的主要输入和输出方式。总体来看,目前国内USB数据采集设备的发展已经取得了较大的进步,但与国外在开发和应用的深度和广度而言,还有一定的距离,在一些现场数据采集的要求相对高的场合还是较多的采用外国产品。因此,随着电脑对USB接口的普及和数据采集卡的实际应用增加,使用USB2.0协议规范开发符合各种场合的数据采集系统,以及推进产品的国产化已成为急需解决的现实问题4。1.4 本设计研究的主要内容设
13、计一款自适应的USB接口的数据采集系统,能够通过通用的串行总线接口替代传统的数据采集板槽式应用。此设计包括硬件系统和软件系统的设计。数据采集系统的硬件系统包括A/D转换电路、D/A转换电路、接口芯片与USB连接图以及周边电路的设计。软件系统包括固件程序、驱动程序以及用户程序的设计来完成数据的采集及显示工作。2 硬件系统的设计2.1 硬件方案的选择在芯片方面处理器采用功能强大的AT89C52,因为其适用于许多较复杂系统控制的应用场合;A/D转换器及D/A转换器分别采用TLC549及TLC5620;由于CH372具有灵活省事的外置盒内置双重固件模式,内置了USB通讯中的底层协议,所以接口芯片采用C
14、H372。2.1.1 芯片的选择 本设计采用51单片机中的AT89C52为主控制器件。AT89C52是美国ATMEL公司生产的低电压,高性能8位CMOS单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,可灵活应用于各种领域。AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在硬件组成、引脚排列、指令系统和工作特点等方面兼容。其主要工作特性是:片内程序存储器内含8KB的Flash程序存储器,擦写寿命可达到1000次;片内数据存储器内含256字节的RAM;具有32根可编程的I/O口线;具有3个可编程的定时器;中断系统是具有8
15、个中断源、6个中断矢量、2级优先权的中断结构;具有一个数据指针DPTR;低功耗工作模式有空闲模式和掉电模式;AT89C52工作电源电压典型值为5V5。CH372具有灵活省事的内置和外置两种双重固件模式,内置了USB通讯中的底层协议。在外置固件模式下,所有USB请求由外部单片机根据需要自行处理,从而实现符合各种USB类规范的设备。在内置固件模式下,本地端单片机只负责数据交换,端点0的所有事务由CH372自动处理默认,单片机程序非常简洁6。2.1.2 硬件系统设计方框图图2-1 总体设计方案模块关系方框图16路模拟信号经A/D转换器转变成数字信号送入微处理器,再由D/A转换器转变为16路开关信号送
16、出;开关量信号经过开关输入电路读入微处理器进行处理,处理后的结果经74LS273锁存输出;8路脉冲信号由脉冲输入电路输入微处理器经处理后送出;整个过程计算机通过接口芯片CH372对微处理器进行控制;微处理器由电源直接供电。2.2 A/D转换和D/A转换2.2.1 TLC549芯片电路设计 TLC549是TI公司生产的一种高性能、低价位的8位A/D转换器,它以8位开关电容逐次逼近的方法实现A/D转换,最大转换速率为40KHZ,4MHZ典型内部系统时钟,电源为3V至6V。它能很好的采用三线串行接口方式与各种微处理器连接,构成各种廉价的测控应用系统7。TLC549的其他特点包括可在微处理器控制下控制
17、片内采样-保持电路或自动工作;具有差分高阻抗基准电压输入端、易于实现比率转换的高速转换器;整个开关电容逐次逼近转换器电路的设计允许以不大于0.5的误差在0-17s的时间范围内实现最低有效位精度的转换。TLC549中REF-接地,REF+接VCC,具体电路设计如图2-2所示:图2-2 A/D转换电路TLC549内部包含控制逻辑电路,数据寄存器以及采样,内部系统时钟和保持。器件有两个控制输入:芯片选择和I/O CLOCK,这是为了提高访问速度和灵活性。这些控制输入与TTL兼容的3态输出易于与微处理器或小型计算机实现串行通信。器件可在17s甚至更短时间内完成转换。TLC549重复一次输入-转换-输出
18、周期为25s。I/O CLOCK和内部系统时钟独立使用且不需要任何二者之间的相位关系或特定的速度。由于这种独立性和系统时钟的内部产生,控制软件和硬件只需关心利用I/O时钟读出先前转换结果和启动转换,从而简化了器件的软件和硬件控制任务。内部系统时钟以这种方式驱动转换电路以便控制,硬件和软件不需要涉及此项任务。2.2.2 TLC5620芯片电路设计 TLC5620I和TLC5620C是带有高阻抗缓冲输入的4通道8位电源输出数模转换器集合。这些转换器可以产生单调的、1至2倍于基准电压和接地电压差值的输出。器件内集成上电复位功能,确保启动时的环境是可重复的。TLC5620中GND接地,REF A-D连
19、接+5V电源,VDD接+5V电源及0.1f电容,具体电路图如图2-3所示:图2-3 D/A转换电路对TLC5620I和TLC5620C是通过一根简单的3路串行总线来实现数字控制的。该总线兼容CMOS,并易于向所有的微处理器和微控制器设备提供接口。REF A-D四个引脚分别表示DAC A-D基准电压输入。11位的命令字包括1位范围位、2位DAC选择位和8位数据位,范围位用来选择输出范围是1倍还是2倍。DAC寄存器采用双缓存,允许设备中写入一整套新值LDAC实现了对DAC输出值的同时更新。输入则采用了史密斯触发器,从而避免了高噪声。2.3 USB接口芯片CH372是CH375芯片的功能简化版和CH
20、371的升级产品,它是一个USB线的通用设备接口芯片。CH372可以方便的挂接到MCU/DSP/MPU/单片机等控制器的系统总线上,它在本地端具有8位数据总线和中断输出以及写、读、片选控制线;在PC系统中,CH372的配套软件提供的操作接口简洁易用,这使得本地端的单片机与该芯片的通讯方便得就如同读写文件一般。CH372需与上位机及下位机连接来完成数据交换,下面详细介绍其连接电路的设计。2.3.1 CH372和上位机连接电路设计图2-4 CH372与USB总线连接图如果CH372的电源电压为3.3V,则应该将V3引脚与VCC引脚短接,共同输入3.3V电压,并且电容C3可以省掉。图2-4中,在电源
21、断电后将电解电容C4中的电能及时释放掉会用到可选电阻R2,使VCC及时下降到0V,确保在下次通电时CH372能够可靠地上电复位。为使CH372能够可靠复位,电源电压从0V上升到5V的上升时间应该少于100mS,所以电容C4的容量和电阻R3的阻值都不能太大。2.3.2 CH372与下位机连接电路设计图2-5 CH372与单片机连接电路在没有外部扩展总线的单片机系统中,单片机也可以用普通的I/O引脚模拟出8位并口时序操作CH372芯片。在普通的MCS-51系列简化单片机的典型应用电路中,CH372的固定为低电平,一直处于片选状态,U5的P1端口作为8位双向数据总线,在单片机程序中,可以控制各个I/
22、O引脚模拟并口时序与CH372进行数据交换。2.4 周边电路设计由于系统要求必须由16路开关量以及8路脉冲信号输入,因此周边电路的设计包括开关量输入电路、脉冲输入电路以及多路开关电路,完成信号的输入处理及输出工作。2.4.1 开关量输入电路设计 74LS244为三态输出的八组缓冲器和总线驱动器。由于系统要求有16路开关量输入,因此,开关量输入电路由2片74LS244组成。开关量输入电路如图2-6所示:图2-6 开关量输入电路2.4.2 开关量输出电路设计 74LS273是带有清除功能的8D触发器。低电平清除,上升沿锁存。满足所需建立时间的D输入信息在时钟脉冲正边沿作用下传送到Q输出端,时钟触发
23、发生在一个特定的电平上,它不直接和正脉冲的过渡时间有关。当时钟输入为高电平或低电平时,D输入信号对输出无影响。触发器保证对0到30M的时钟频率范围响应,而最高时钟频率的典型值是40M。对于273每个触发器的功耗典型值为39mW,对于LS273为10mW。由于系统要求有16路开关量输出,因此,开关量输出电路由2片74LS273组成。电路如图2-7所示:图2-7 开关量输出电路2.4.3 脉冲输入电路设计 8253是可编程的定时器/计数器,其内部有三个独立的16位定时器/计数器,每个通道都可以按二或十进制计数,并且每个通道都可按6种不同的方式工作。其GATE0GATE2是门控脉冲输入端,CLK0C
24、LK2是计数器02的时钟脉冲输入端,OUT0OUT2是输出端。当8253做外部事件计数器时,在CLK端所加的计数脉冲由外部事件产生,这些脉冲的间隔可以不相等。这时,8253所能实现的定时时间决定于计数脉冲的频率和计数器的初值,即定时时间=预置的计数初值n时钟脉冲周期t8。由于系统要求有8路脉冲量输入,因此,脉冲量输入电路由3片8253组成。电路如图2-8示:图2-8 8路脉冲输入电路2.4.4 多路开关电路设计 CD4051是单8通道数字控制模拟开关,有三个二进制控制输入端A0、A1、A2和INH输入,具有低导通阻抗和很低的截止漏电流。这些开关电路在整个VDD-VSS和VDD-VEE电源范围内
25、具有极低的静态功耗,与控制信号的逻辑状态无关。当INH输入端为1时,所有的通道截止。三位二进制信号选8通道中的某一通道,可连接该输入端至输出。系统要求有16路模拟量输入及输出,模拟量输入输出信号分别经过2片CD4051选择。多路开关图如图2-9所示: 图2-9 多路开关电路其中A0-A3为地址,S0-S15为模拟信号,IN/OUT为总输入输出。CD4051带有三个通道选择输入端A、B、C和一个禁止端INH。当CBA为000111B时,可产生8选1控制信号,使8路通道中的某一通道的输入与输出接通。当INH为0时,允许通道接通;当INH为1时,禁止通道接通。改变CD4051的IN/OUT07及OU
26、T/IN的传递方向,可用做多路开关和反多路开关9。使用禁止端INH,可以很方便地实现通道数的扩展。本系统使用两片CD4051组成16路的多路开关。当通道选择码取00001111B之一时,便唯一地选中这16路通道中的某一通道。3 软件系统的设计基于USB的数据采集系统软件部分总共分为三块:采集设备固件程序、采集设备驱动程序和用户应用程序。采集设备固件的作用是辅助硬件,任何基于微处理器及外围电路的功能设备正常工作都离不开固件的参与;驱动程序采用基于WDM模型的驱动程序;对于基于USB的数据采集系统,用户应用程序也是必须存在的,功能是开启、关闭USB设备,检测USB设备,显示分析数据等。下面对软件的
27、设计详细介绍。3.1 USB固件程序设计所有基于微处理器及其外围电路的功能设备保证正常工作都离不开固件的参与,固件的作用就是辅助硬件,即控制硬件来完成预期的功能,若没有固件的控制和参与,硬件设备只是简单的芯片堆砌,无法达到预期的功能。因此,用户必须编写固件程序去辅助硬件完成USB的通信任务。具体如下:(1)初始化。设置一些特殊寄存器的初始值,以实现所需的设备功能或属性,例如使能端点、开中断、配置端口等。(2)辅助硬件完成设备的重新枚举过程。包括模拟设备的重新连接与断开,对收到的设置包进行判断分析,从而对主设备的请求做出适当的响应,完成对设备的配置任务。(3)对中断的处理。(4)数据的接收发送。
28、(5)外围电路的控制10。固件程序采用模块化设计设计成中断驱动模式,其总体结构如图3-1所示。请求处理程序中断服务程序数据接收/发送主程序硬件接口访问程序图3-1 固件程序结构和数据流向各模块主要功能如下:主程序:完成USB接口芯片及数字信号处理器的初始化、数据接收/发送标志位的判断和中断请求等待。中断服务程序:固件程序设计的重中之重就是中断服务程序。首先读取中断寄存器的值判断所发生中断的类型,然后根据具体的中断类型进入相应的处理子程序或设置相应的标志位。请求处理程序:USB标准请求处理程序来负责处理枚举阶段主机发给设备的标准请求,以及正常工作时主机发送的厂商的请求。固件接收第1个SETUP中
29、断开始,就进入USB枚举的过程,枚举过程是由主机发出一系列的请求并要求及时得到设备的响应,如果不需要操作,也必须指示出一个空响应,使主机能为其准备所请求的资源,建立好主机和设备之间的信息沟通机制11。数据接收/发送程序:当用户通过主机端应用程序向设备发送或索要数据时,数字信号处理器调用数据接受/发送的子程序完成数据的接受/发送。数据的接收和发送过程如下:图3-2 发送数据过程图3-3 接收数据过程硬件接口访问程序:硬件接口程序负责完成数字信号处理器对芯片的读写操作,它是整个固件程序中的最底层,同时也是使用最频繁的部分。3.2 驱动程序的设计Windows环境下驱动程序有3种模型:KMD模型、V
30、XD模型、WDM模型。WDM模型是全新的驱动程序模型,现在主流操作系统基本上都是采用基于WDM模型的驱动程序9。WDM模型的为分层体系结构,具体如图3-4所示:图3-4 WDM结构图这里首先介绍两个概念IRP及URB。IRP 即I/O请求包。它是驱动程序的核心。I/O管理器接收到一个I/O请求,然后把它传递到设备驱动程序之前,分配并初始化一个IRP。URB 即USB请求块。USB设备驱动程序在向设备发送一个请求之前,必须首先创建一个URB,然后把URB送到总线驱动程序,这样设备驱动程序才会得以运行。对于USB设备,其WDM驱动程序分为USB功能驱动程序和USB底层驱动程序。USB底层驱动程序由
31、操作系统提供,负责与硬件打交道,实现底层通信。USB功能驱动程序由设备开发者编写,不对硬件进行操作,而是通过向USB底层驱动程序发送包含请求块URB的IRP,以实现对USB设备信息的发送和接收12。3.3 用户应用程序设计3.3.1 操作流程 一般用户应用程序必须的功能是采样数据读取、采样控制以及数据显示,其他功能(例如数据分析、数据存储)可以根据应用系统的需要进行定制。根据功能划分,应用程序可以细化为以下几个模块:主框架、设备访问模块、采样设置模块和数据显示模块,模块之间的关系如图3-5所示:数据显示模块采集设置模块主框架设备访问模块图3-5 应用程序模块结构图数据显示模块、设备访问模块和采
32、样设置模块都只与主框架进行通信。数据显示模块负责数据的波形显示,采样设置模块负责采样参数的配置,设备访问模块负责与下层设备的通信,整个系统以主框架为中心。采样设置模块,主要用于配置采样参数,包括通道、各通道的量程和总的采样率。在Win32系统中,可以把每个设备都抽象为文件,此时的应用程序只需要几条简单的文件操作API函数,就可以实现与驱动程序中的某个设备通信。API函数及对应关系如表3-1所示:表3-1 API函数与驱动程序例程对应关系API函数IRP说明Create FileIRP_MJ_CRETE打开设备Read FileIRP_MJ_READ从设备获取数据Write FileIRP_MJ
33、_WRITE向设备发送数据Close HandleIRP_MJ_CLOSE关闭设备Device I/O ControlIRP_MJ_DEVICE_CONTROL控制设备具体执行流程图如图3-6所示:图3-6 执行流程图3.3.2 设备读写接口程序的实现 对于我们的硬件板,当把前面开发的设备驱动程序安装到系统后并以它作为设备与上层应用程序的软件接口时,也可以使用这些方式来实现应用程序与它的通信。但是为了修改和设计应用程序更加方便,因此本文便把读写设备封装在相应的读写函数中。对于应用程序来讲,读写USB端口和读写串口类似。数据传输流程图如图3-7所示:图3-7 数据传送程序流程图下传数据程序:fu
34、nction mDownloadData(iBuffer:array of byte; iLength:cardinal ):cardinal;var mDemoReq:COMMAND_PACKET; MLength:cardinal;begin if ( iLength 4096 ) then begin Messagebox( FrmMain.Handle, 单次下传数据长度超过4096字节, mCaptionInform, MB_OK+MB_ICONERROR ); mDownloadData:=0; exit; end; mDemoReq.mCommandCode:= DEF_CMD_
35、DOWN_DATA;/ 连续下传数据块 mDemoReq.mCommandCodeNot := $FF- DEF_CMD_DOWN_DATA; mDemoReq.mParameter0 := ACCESS_MCS51_XRAM; / 读写51单片机的外部RAM(本演示板的单片机没有外部RAM,所以无法演示) mDemoReq.mParameter1 := 00;/ 指定外部RAM缓冲区起始地址,该例是将数据下传到起始地址为0X8200的外部RAM mDemoReq.mParameter2 :=$82; mDemoReq.mParameter3 := iLength mod 256; / 传输数
36、据总长度低二位 mDemoReq.mParameter4 := iLength div 256; mLength := CONST_CMD_LEN;/ 命令包的长度 if ( CH372WriteData( mIndex, mDemoReq, mLength ) ) then / 通过CH372发送命令包,成功 begin mLength := iLength;/ 数据块的长度,一次下传不超过4096字节 if ( ( mLength mod 64 ) = CONST_CMD_LEN ) then mLength:=mLength+1; / 防止数据包的长度与命令包的长度相同,如果相同,则多发
37、送一个无效数据 if ( CH372WriteData( mIndex, mDemoReq, mLength ) ) then / 通过CH372发送数据,成功 mDownloadData:=mLength else MessageBox( frmmain.Handle, CH375WriteData 下传数据失败, mCaptionInform, MB_OK + MB_ICONERROR ); end else MessageBox( frmmain.Handle, CH372WriteData 发送命令失败,DEF_CMD_DOWN_DATA, mCaptionInform, MB_OK
38、+ MB_ICONERROR ); mDownloadData:=0;end;上传处理程序:Function mUploadData( iBuffer:array of byte;iLength:cardinal ):cardinal;varmDemoReq:COMMAND_PACKET ;mLength:cardinal;begin if ( iLength 4096 ) then MessageBox( frmmain.Handle, 单次上传数据长度超过4096字节,mCaptionInform, MB_OK + MB_ICONERROR );mDemoReq.mCommandCode
39、:= DEF_CMD_CLEAR_UP;/ 连续上传数据块之前进行同步,实际是让单片机清除上传缓冲区的已有内容mDemoReq.mCommandCodeNot :=$FF-DEF_CMD_CLEAR_UP;mLength := CONST_CMD_LEN;/ 命令包的长度if ( CH372WriteData( mIndex, mDemoReq, mLength ) ) then / 通过CH372发送命令包,成功 begin mDemoReq.mCommandCode := DEF_CMD_UP_DATA;/ 连续上传数据块 mDemoReq.mCommandCodeNot := $FF-
40、DEF_CMD_UP_DATA; mDemoReq.mParameter0 := ACCESS_MCS51_XRAM; / 读写51单片机的外部RAM(本演示板的单片机没有外部RAM,所以无法演示) mDemoReq.mParameter1 := 00;/ 指定外部RAM缓冲区起始地址,该例是将数据下传到起始地址为0X8200的外部RAM mDemoReq.mParameter2 :=$82; mDemoReq.mParameter3 := iLength mod 256; / 传输数据总长度低二位 mDemoReq.mParameter4 := iLength div 256; mLengt
41、h := CONST_CMD_LEN;/ 命令包的长度if ( CH372WriteData( mIndex, mDemoReq, mLength ) ) then / 通过CH372发送命令包,成功 beginmLength := iLength;/ 数据块的长度,一次上传不超过4096字节if ( CH372ReadData( mIndex, iBuffer, mLength ) ) then/ 通过CH372接收数据,成功 mUploadData := mLengthelse MessageBox( frmmain.Handle, CH372ReadData 上传数据失败,mCaptio
42、nInform, MB_OK + MB_ICONERROR ); end else MessageBox( frmmain.Handle, CH372WriteData 发送命令失败DEF_CMD_UP_DATA, mCaptionInform, MB_OK + MB_ICONERROR ); endelse MessageBox( frmmain.Handle, CH372WriteData 发送命令失败DEF_CMD_CLEAR_UP, mCaptionInform, MB_OK + MB_ICONERROR ); mUploadData:= 0;Endend4 系统测试4.1 数据采集过
43、程4.1.1 模拟信号 模拟多路信号经多路开关选择后进入TLC549进行A/D转换,转换后的数字信号送入单片机进行处理,处理后的信号可以通过USB接口芯片送入计算机进行处理,也可以经过TLC5620转换为模拟信号,再通过多路开关选择后输出。计算机也可通过USB接口芯片对单片机进行控制。数据采集过程如图4-1所示:CH372PC机USB控制器模拟信号CD4051模拟TLC5620TLC549AT89C52CD4051信号图4-1 模拟信号采集过程4开关信号 开关74LS27374LS244AT89C52信号CH372PC机USB控制器.1.2 开关信号 开关量经过74LS244读入单片机进行处理
44、,处理后的结果经74LS273锁存输出,整个过程由计算机通过CH372芯片进行控制。采集过程如图4-2所示:图4-2 开关量采集过程4脉冲信号AT89C52脉冲8253信号CH372PC机USB控制器.1.3 脉冲信号 脉冲信号经计数后读入单片机进行处理,主要处理数据的累计值、脉冲频率、周期等,然后将处理后的信号送出。整个过程由计算机通过CH372芯片进行控制。如图4-3所示:图4-3 脉冲信号采集过程4.2 测试结果4.2.1 输入模拟量测试 输入模拟量测试结果如表4-1所示:表4-1 输入模拟量测试结果模拟电压(V)123456实测值(V)1.0032.0042.9964.0084.994
45、6.012误差0.30%0.20%0.10%0.20%0.10%0.20%由上表可以算出,输入模拟量测试最大误差为0.3%,为误差允许范围。4.2.2 输出模拟量测试 输出模拟量测试结果如表4-2所示:表4-2 输出模拟量测试结果模拟电压(V)123456实测值(V)1.0012.0042.9944.0115.016.012误差0.30%0.20%0.20%0.27%0.20%0.20%由上表可以算出,输出模拟量测试最大误差为0.30%,为误差允许范围。4.2.3 脉冲量测试 脉冲量测试结果如表4-3所示:表4-3 脉冲量测试结果输入频率(Hz)1K2K3K4K5K6K实测值(Hz)100220043008401250106012误差0.20%0.20%0.27%0.30%0.20%0.20%由上表可以算出,脉冲量测试最大误差为0.3%,为误差允许范围。由于电路中线路本身存在电阻,并且在使用过程中不可避免的受到干扰,因此系统存在误差。总结本论文在研究USB总线技术的基础上,提出了USB接口的数据采集系统的一种实现方案,设计并实现了基于USB接口的数据采集的硬件系统;实现了CH372、单片机AT89C52之间,以及主机软件和数据采集系统之间的通信。本系统为通用性高速数据采集系统,可用于生物电波、声波分析等瞬态信号的实时采集、观察等场合。该基于USB总线的高速
限制150内