基于USB总线和89C51单片机的数据采集系统设计

发布者:caoxians4589最新更新时间:2007-02-12 来源: 控制工程网关键字:USB  控制  驱动  中断 手机看文章 扫描二维码
随时随地手机看文章
在工业生产和科学技术研究过程的各行业中,常常要对各种数据进行采集,现在常用的采集方式是在PC机或工控机内安装数据采集卡,如A/D卡及RS-422卡、RS-485卡。采集卡不仅安装麻烦,易受机箱内环境的影响,而且由于受计算机插槽数量和地址、中断资源的限制,不可能挂接很多设备。而通用串行总线(Universal Serial Bus,简称USB)的出现能很好地解决以上这些冲突。我们利用89C51单片机设计了基于USB总线的数据采集设备,并可与MAX485结合起来实现数据的远程采集。

系统硬件设计

USB数据采集系统硬件模块主要由串行A/D转换器、89C51芯片、USB接口芯片和多路模拟开关等组成。硬件总体结构框图如图1所示。

图1 硬件总体结构框图


USB接口芯片采用National

Semiconductor公司的一种专用芯片USBN9602。该芯片内部集成微处理器接口、 FIFO存储器、时钟发生器、串行接口引擎(SIE)、收发器、电压转换器,支持DMA、微波接口。

多路模拟输入信号经多路模拟开关控制将其中的一路接入串行A/D转换器,A/D转换器经光电隔离后串行输出到移位寄存器,移位寄存器将此结果转为8位并行数据,89C51系统通过8位的并行接口传送A/D转换器采集的数据,存储在FIFO存储器中;一旦FIFO存满,SIE立刻对数据进行处理,然后89C51系统将数据从FIFO存储器中读出,由收发器通过数据线(D+、D-)送至主机。 USBN9602与89C51的具体接口电路如图2所示。图中USBN9602的CLKOUT与89C51的XTAL1相连,即USBN9602的时钟输出为89C51提供时钟输入。USBN9602的复位端接RC电路以保证复位电路可*地工作。由于晶振频率较高,结合USBN9602内部网络,在XOUT端串接100mF电容及470mH电感,起稳定内部振荡频率的作用。

图2 USBN9602与89C51接口电路

系统软件设计

系统软件包括设备固件、 USB设备驱动程序和应用程序。

设备固件(firmware)设计

此处固件是指固化到89C51E2PROM中的程序,其主要功能是: (1)控制A/D转换器的采样。(2)控制芯片USBN9602接受并处理USB驱动程序的请求及应用程序的控制指令。现主要介绍89C51系统如何控制USB控制器(USBN9602)与主机的通信。89C51系统对USB控制器的操作是严格按照USB协议1.1进行的,按照USB协议1.1的规定,USB传输方式分为4种:控制传输,块传输,同步传输和中断传输。在实际开发中使用了控制传输和块传输。控制传输主要用来完成主机对设备的各种控制操作,也就是用来实现位于主机上的USB总线驱动程序(USBD.SYS)以及编写的功能驱动程序对设备的各种控制操作。块传输主要用来完成主机和设备间的大批量数据传输以及对传输数据进行错误检测(若发生错误,它支持“重传”功能)。

89C51系统控制USB控制器的工作过程可以简单地概括为:当USB控制器从USB总线检测到主机启动的某一传输请求后,通过中断方式将此请求通知89C51系统,89C51系统通过访问USB控制器的状态寄存器和数据寄存器获得与此次传输有关的各种参数,并根据具体的传输参数,对USB控制器的控制寄存器和数据寄存器进行相应的操作,以完成主机的传输请求。

USB设备驱动程序设计

USB系统驱动程序的设计是基于WDM(Windows driver model 驱动程序模型)的。WDM采用分层驱动程序模型(见图3所示),分为较高级的USB设备驱动程序和较低级的USB函数层。其中USB函数层由两部分组成:较高级的通用串行总线模块(USBD)和较低级的主控制器驱动程序模块(HCD)。

在上述USB分层模块中,USB函数层由Windows98提供,负责管理USB设备驱动程序和USB控制器之间的通信,加载及卸载USB驱动程序,与USB设备通用端点(endpoint)建立通信来执行设备配置、数据与USB协议框架和打包格式的双向转换任务。

目前Windows98提供了多种 USB设备驱动程序,但并不针对数据采集设备,因此需用DDK开发工具设计专用的USB设备驱动程序。在本设计中由四个模块实现:初始化模块、即插即用管理模块、电源管理模块以及I/O功能实现模块。

图3 USB系统驱动程序层次关系


初始化模块提供一个入口函数DriverEntry(),所有对各种IR

P(I/O Request Packet,IRP请求包)的处理例程都在此入口函数中做出定义。

即插即用管理模块实现USB设备的热拔插及动态配置。当硬件检测到USB设备接入时,Windows98查找响应的驱动程序,并调用它的DriverEntry例程,PnP(即插即用)管理器调用驱动程序的AddDevice例程,告诉它添加了一个设备;在此处理过程中,驱动程序收到一个设备启动请求(IRP_MN_START_DEVICE)的IRP。同理,当要拔除时,PnP管理器会发出一个设备删除请求(IRP_MN_REMOVE_DEVICE)的IRP,由驱动程序进行处理。通过对这些PnP请求的处理,可支持设备的热插拔和即插即用功能。
电源管理模块负责设备的挂起与唤醒。

I/O功能实现模块完成I/O请求的大部分工作。若应用程序想对设备进行I/O操作,它便使用Windows API函数,对WIN32子系统进行WIN32调用。此调用由I/O系统服务接收并通知I/O管理器,I/O管理器将此请求构造成一个合适的I/O请求包(IRP)并把它传递给USB设备驱动程序,USB设备驱动程序接收到这个IRP以后,根据IRP中包含的具体操作代码,构造相应的USB请求块并把此URB(USB请求块)放到一个新的IRP中,然后把此IRP传递到USB总线驱动程序,USB总线驱动程序根据IRP中所含的URB执行相应的操作(如从USB设备读取数据等),并把操作结果通过IRP返还给USB设备驱动程序。USB设备驱动程序接收到此IRP后,将操作结果通过IRP返还给I/O管理器,最后I/O管理器将此IRP中操作结果返还给应用程序,至此应用程序对USB设备的一次I/O操作完成。

应用程序设计

用户态的应用程序是数据采集系统的中心,其主要功能为:开启或关闭USB设备、检测USB设备、设置USB数据传输管道、设置A/D状态和数据采集端口、实时从USB接口采集数据、显示并分析数据。应用程序主流程图如图4所示。

图4 应用程序主流程图


由于USBN9602提供的FIFO不超过64字节,当它存满后,USBN9602自动将数据打包即时请求读入数据,由SIE自动发送数据包。另外,当系统启动A/D模块后,便会创建两个线程:采样线程和显示存盘线程。采样线程负责将采集数据写到应用程序提交的内存;而显示存盘线程负责给应用程序发送显示和存盘消息。当应用程序接收到此消息后,便从它提交的内存中读取数据并显示和存盘。此处需要注意的是采样线程和显示存盘线程在读写应用程序提交的内存时要保持同步。

远程数据采集系统设计

传输距离是限制USB在工业现场应用的一个障碍,即使增加了中继或Hub,USB传输距离通常也不超过几十米,这对工业现场而言显然太短了。现在工业现场有大量采用RS-485传输数据的采集设备,其优点主要为传输距离可达到1200米以上,并且可以挂接多个设备,但传输速度慢,且需要板卡支持,安装麻烦。但将RS-485与USB结合起来就可以优势互补,产生一种快速、可*、低成本的远程数据采集系统。

设计这样一个系统的关键设备是RS-485~USB转换器,可以采用USBN9602+89C51+ MAX485实现这一功能,整个系统的基本思想是:将传感器采集到的模拟量数字化以后,利用RS-485协议将数据上传,上述RS-485~USB转换器在主机端接收485的数据并通过USB接口传输至主机进行处理,而主机向USB发送数据时,数据通过RS—485~USB转换口转换为485协议向远端输送,从而能够实现远程数据的双向传输。如图5所示。

软件方面的设计跟前所述类似。

图5 采用USB和485实现远距离数据传输

结语

基于USB外设的应用目前在国内外处于高速发展阶段,利用USB进行数据采集和工业控制已得到成功应用,特别是随着USB协议2.0的推出,数据传输速率高达480Mbps,如此高的传输速率必将使USB在数据采集中的优势更加体现出来,同时会使其在更广阔的领域得到更深层次的应用。

关键字:USB  控制  驱动  中断 引用地址:基于USB总线和89C51单片机的数据采集系统设计

上一篇:基于嵌入式的无线条码扫描仪系统的设计
下一篇:基于32位低端嵌入式系统的图像采集模块

推荐阅读最新更新时间:2024-05-13 18:17

嵌入式linux在工业控制领域中的应用
摘要:针对嵌入网络设备的应用特点,介绍了嵌入式linux的主要技术及在工业控制领域的应用方法。结合硬件平台详细说明了嵌入式linux系统的主要实现方法同时也简要介绍了该嵌入式系统的实时内核、内存机制和文件系统的设计等内容。 关键词:嵌入式系统;嵌入式linux;工业控制 1 前言 随着Internet的飞速发展,网络应用越来越广泛,对各种工业控制设备的网络功能要求也越来越高。当前的要求是希望工业控制设备能够支持TCP/IP以及其它Internet协议,从而能够通过用户熟悉的浏览器查看设备状态、设置设备参数,或者将设备采集到的数据通过网络传送到Windows或Unix/Linux服务器上的数据库中。这就要求工控系统必须具备两
[嵌入式]
"意念控制"时代已来临?目前只能指挥老鼠
中国的一个研究团队已经将人的大脑与老鼠大脑“连接”起来,实现对老鼠行动的“心灵控制”。研究人员打造了一个无线的“脑脑连接”系统,让人类能够通过思维操控“半机械老鼠”。 这项研究描述了一种能够将人类大脑与计算机连接的“脑脑接口”技术,这项技术能够借助计算机破译信号并且刺激老鼠大脑实现移动。研究人员在发表的研究中详细解释了这项技术,以及如何将电极植入到老鼠大脑的两个区域。 研究人员在试验中借助电极“训练”老鼠做出特定的动作,无线指令信号则是通过老鼠背部的微型刺激器发出的。在首先进行的测试中,研究人员使用了一个八角形迷宫,老鼠从一个角出发前往另外一个角。 人类操控者装备了一台脑电图测试仪(EEG)来测量大脑信号。EEG设备直接连接到计算
[机器人]
灰度高压驱动芯片HV632的结构原理
  HV632的结构原理   HV632的结构框图如图2所示。根据结构图简述其工作原理:8位二进制总线数据通过D1~D8口输入到Data Latch(数据锁存器)中,在移位时钟(Shift Clock)的上下沿分别进行锁存,每16个Shift Clock脉冲为一组,因此可以锁存32个8位二进制数据,在第一个Shift Clock脉冲的上升(或下降)沿读入的数据锁存到Data Latch1,并与高压输出HVout1相对应,依此类推,最后一个8位二进制数据锁存到Data Latch32中,并与高压输出HVout32相对应。每一个数据锁存器锁存的数据都会在Comparator(比较器)中与8 B Counter(8位计数器)的输出进
[电源管理]
灰度高压<font color='red'>驱动</font>芯片HV632的结构原理
51单片机控制步进电机的程序
初学单片机:   #include reg52.h #include stdio.h code unsigned char tab =             {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};  unsigned char code F_Rotation ={0x02,0x04,0x08,0x10}; unsigned char Dis_Shiwei;//定义十位 unsigned char Dis_Gewei; //定义个位 sbit key1=P3^0;//定义按键位置 sbit key2=P3^1; sbit key3=P3^2; sbit key4=
[单片机]
飞利浦51LPC系列单片机用于控制交流电机
    摘要: 飞利浦公司研制的51LPC系列单片机是采用两倍速80C51内核,具有低成本、低功耗、低电磁干扰(EMI)、高抗干扰性及内建电源Brownout侦测、模拟功能、UART、I2C和片内RC振荡器的新一代单片机。本文介绍51LPC系列单片机控制交流电机的原理电路和源程序。     关键词: P87LPC761 Brownout侦侧 模拟比较器 EMI 电流过零检测 半波整流 双向可控硅 1 概述 PHILIPS 51LPC系列单片机目前已包括P87LPC760/1/2/4/7/8/9共七个型号。51LPC提供高速和低速的晶振和RC振荡方式,可编程选择;具有较宽的操作电压范围2.7~6.
[工业控制]
三星推出扫地机器人VR7000 可实现语音控制
日前,在CES 2017展会上,推出了新品POWERbot7000扫地机器人。据悉,该机器人可支持Echo互联进行语音控制,还可根据地面情况自动调整吸力。     三星推出扫地机器人VR7000  可实现语音控制   在CES 2017展会上,三星推出其POWERbot VR7000扫地机器人,支持亚马逊Echo互联进行语音控制。语音控制对于扫地机器人而言是一项新技术。   三星表示其WiFi连接的POWERbot扫地机器人都具备Alexa语音控制功能。在2016年12月初,三星推出其POWERbot Turbo VR9350扫地机器人。   此升级版POWERbot VR7000获得2017 CES创新奖。身高
[机器人]
AGV机器人的驱动原理
  在日常生活中,很多物流公司已经在使用AGV自动导引机器人。   一、直流电机驱动管理系统   AGV的直流电机驱动系统在20世纪90年代之前基本都是由直流电机驱动的。直流电机本身效率较低,尺寸和质量相对较大。直流电机驱动系统的和电刷限制其转速升高,最高转速为6000-8000r/n。因为这个特点,一般除了小型汽车之外,电动汽车很少使用直流电机驱动系统。   二、感应电机驱动   感应电机是在20世纪90年代开发并结合了新技术,目前仍处于完善阶段。具有效率高、体积小、质量小、结构简单、免维护、寿命长等优势。该系统具有较宽的调速范围,可以有效实现经济低速恒转矩,高速恒功率运行,但是交流器的成本相对较高。  
[机器人]
STM32 ILI9341驱动TFTLCD屏(六)LCD画直线
通过前面的学习,已经掌握了LCD显示图片以及显示Gif动画。这些图片其实也可以自己通过写显存,以画画的方式完成。而画画最基本的就是点和线了。 要画一个点,只要取一个点的区域,写该点的显存就可以完成。 void LCD_DrawPoint(u16 x,u16 y,u16 color) { ILI9341_SetPageAddr(y,y); //页地址设置 ILI9341_SetColumnAddr(x,x); //列地址设置 ILI9341_WriteMemory(&color,1); //写点的显存 } 接着进行测试,连续画多个点看最终效果。 主函数 #include stm32f4xx.h #i
[单片机]
STM32 ILI9341<font color='red'>驱动</font>TFTLCD屏(六)LCD画直线
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved