摘要:本文介绍了基于USB 总线的数据采集设备的开发方法,包括硬件设计、firmware(固件)设计、基于windows驱动程序模型(WDM)的设备驱动程序设计以及应用软件的设计,同时也介绍了基于USB的远程数据采集系统。
在工业生产和科学技术研究过程的各行业中,常常要对各种数据进行采集,现在常用的采集方式是在PC机或工控机内安装数据采集卡,如A/D卡及RS -422卡、RS-485 卡。采集卡不仅安装麻烦,易受机箱内环境的影响,而且由于受计算机插槽数量和地址、中断资源的限制,不可能挂接很多设备。而通用串行总线(Universal Serial Bus,简称USB)的出现能很好地解决以上这些冲突。我们利用89C51单片机 设计了基于USB总线的数据采集设备,并可与MAX485结合起来实现数据的远程采集。
系统硬件设计 USB数据采集系统硬件模块主要由串行A/D转换器 、89C51芯片、USB接口 芯片和多路模拟 开关等组成。硬件总体结构框图如图1所示。 USB接口芯片采用Nati onal 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电感,起稳定内部振荡频率的作用。
图1 硬件总体结构框图
系统软件设计 系统软件包括设备固件、 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功能实现模块。
图2 USBN9602与89C51接口电路
图3 USB系统驱动程序层次关系
图4 应用程序主流程图
初始化模块提供一个入口函数DriverEntry(),所有对各种IRP(I/O Request Packet,IRP请求包)的处理例程都在此入口函数中做出定义。 即插即用管理模块实现USB设备的热拔插及动态配置。当硬件检测到USB设备接入时,Windows98查找响应的驱动程序,并调用它的DriverEntry例程,PnP(即插即用)管理器调用驱动程序的Ad dDevice例程,告诉它添加了一个设备;在此处理过程中,驱动程序收到一个设备启动请求(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所示。 由于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在数据采集中的优势更加体现出来,同时会使其在更广阔的领域得到更深层次的应用。
点赞
收藏
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
利用89C51 设计基于USB 总线 的数据采集 设备,还可与MAX485结合起来实现数据 的远程采集 。该系统 具有可靠性高、性价比高和多点采集 等优点。
2021-03-19 15:04:42 7203 本文的智能抓取系统 以 51 单片机 作为控制系统 ,89C51 作为主控芯片,拥有六路接口的 PWM 舵机和四个独立接口的总线 舵机,实现按键控制、采集 电路、电源和过流保护等功能。
2022-10-13 10:35:36 5496 在i2c 总线 上,连接多个89C51 ,把一个89C51 做为主控器,其他的作为被控器,能否实现一个单片机 控制多个单片机 的功能,如果能,该如何实现?
2023-05-08 18:05:56
89c51 /s51 单片机 芯片内包括哪些?89c51 单片机 的引脚及功能有哪些?
2021-09-24 09:30:13
本帖最后由 eehome 于 2013-1-5 10:07 编辑
基于单片机 AT89C51 的数据采集 系统 设计
2012-08-14 19:37:10
步进电机控制程序(C 语言+89c51 单片机 )
2008-10-10 14:37:08 1117 该文介绍89C51 单片机 在直流电机转速控制系统 中的应用、实现方法、硬件结构等。本系统 采用霍尔元器件测量电动机的转速,用89C51 单片机 对直流电机的转速进行控制,用DAC083
2009-08-11 11:10:24 91 用89C51 单片机 系统 进行温度实时采集 与控制:摘要:用89C51 单片机 系统 进行温度实时采集 与控制是本设计的主要内容。本设计介绍的单片机 温度自动控制系统 的主要内
2009-09-29 11:29:31 216 2.1 89C51 系列单片机 的结构2.2 89C51 单片机 引脚及其功能2.3 89C51 存储器配置2.4 CPU时序2.5 复位及复位电路2.6 输入/输出端口结构 2.1 MCS?51 系列单片机 的结构 ?
2010-02-23 17:31:29 0 介绍了单片机 数据采集 系统 的硬件原理和软件设计。该系统 以89C51 单片机 为核心,以12 位TLC2543 为串行模数转换器,由MC14489 构成采集数据 实时显示系统 ,带有RS2232 通信接口,系统 具
2010-09-10 16:20:55 193 基于单片机 89C51 的程序设计。设计思路清晰,内容丰富易懂。
2015-11-13 14:48:41 2 基于89C51 单片机 太阳能跟踪控制装置系统 设计简述。
2016-05-11 11:08:05 55 89C51 单片机 IO 口模拟串行通信的实现方法
2016-08-31 13:56:35 21 基于89C51 单片机 的编码译码显示实验电路设计
2017-01-04 11:34:34 0 本文为大家带来两个89C51 单片机 的步进电动机控制系统 设计。
2018-01-16 13:39:33 15686 基于89c51 单片机 IO口操作的几个历程
2018-04-23 15:37:53 16 设计了一个用AT89C51 单片机 、串行A/D转换芯片TLC2543等构成的数据采集 系统 本系统 不仅可以采集 模拟信号,而且可以与PC机 通信,将采样数据 送人PC机 中,从而实现实验数据 实时采集 、处理、存储和显示。
2019-10-10 16:25:25 0 该数据采集 与传输系统 以89C51 及89C 2051为核心,由数据采集 模块、调制解调模块、模拟信道、测试码发生器、噪声模拟器、结果显示模块等构成。在本方案中仅使用通用元器件就较好地实现了题目要求的各项
2019-10-11 15:09:05 1 89C51 单片机 课程设计资料免费下载。
2021-05-28 14:27:00 137 基于89c51 单片机 的步进电机控制系统
2021-08-31 10:10:46 71 基于89c51 单片机 的NRF24L01通信实验
2021-08-31 10:38:26 93 基于89c51 单片机 的时钟可调定时器设计
2021-08-31 10:05:33 64 89c51 单片机 电路
2023-04-20 09:15:42 7 基于89C51 单片机 的8位LED右移源程序
2023-05-16 10:50:47 4 基于89C51 单片机 的8位LED左移源程序
2023-05-12 16:50:18 1 基于89C51 单片机 的8位端口检测8独立按键源程序
2023-05-16 10:49:57 2 基于89C51 单片机 的9累加源程序
2023-05-16 10:47:25 1 基于89C51 单片机 的9累减源程序
2023-05-16 10:44:32 1 基于89C51 单片机 的24c 02存储多个数据 源程序
2023-05-16 10:44:07 5 基于89C51 单片机 的24c 02记忆开机次数源程序
2023-05-12 16:47:44 6 基于89C51 单片机 的99累加源程序
2023-05-16 10:42:25 0 基于89C51 单片机 的99累减源程序
2023-05-16 10:41:59 0 基于89C51 单片机 的999累加源程序
2023-05-16 10:36:08 0 基于89C51 单片机 的999累减源程序
2023-05-16 10:35:13 1 基于89C51 单片机 的1602液晶静态显示源程序
2023-05-16 10:28:09 2 基于89C51 单片机 的1602液晶显示的计算器源程序
2023-05-16 10:22:06 24 基于89C51 单片机 的1602液晶移动显示源程序
2023-05-16 10:12:15 0 基于89C51 单片机 的2402存储1个数据 源程序
2023-05-16 10:09:14 0 基于89C51 单片机 的9999累加源程序
2023-05-16 10:07:20 0 基于89C51 单片机 的9999累减源程序
2023-05-16 10:06:33 0 基于89C51 单片机 的DS1302 时钟原理源程序
2023-05-16 10:05:51 11 基于89C51 单片机 的DS1302可调时钟源程序
2023-05-16 10:05:14 3 基于89C51 单片机 的LED循环左移源程序
2023-05-16 10:02:17 1 基于89C51 单片机 的PCF8591 DA输出模拟源程序
2023-05-12 16:54:51 3 基于89C51 单片机 的RS485基本通讯原理源程序
2023-05-16 09:54:17 54 基于89C51 单片机 的T0外部计数输入源程序
2023-05-16 09:53:49 0 基于89C51 单片机 的T1外部计数输入源程序
2023-05-16 09:53:18 0 基于89C51 单片机 的按键 12864显示源程序
2023-05-16 09:52:43 9 基于89C51 单片机 的按键长按短按效果源程序
2023-05-16 09:45:16 19 基于89C51 单片机 的不同频率闪烁1个LED灯源程序
2023-05-16 09:44:45 9 基于89C51 单片机 的不同频率闪烁多个LED灯源程序
2023-05-16 09:43:44 4 基于89C51 单片机 的步进电机按键控制源程序
2023-05-16 09:43:00 7 基于89C51 单片机 的步进电机正反转源程序
2023-05-16 09:42:01 13 基于89C51 单片机 的步进电机综合控制源程序
2023-05-16 09:39:23 2 基于89C51 单片机 的查表显示LED灯源程序
2023-05-12 17:23:49 1 基于89C51 单片机 的产生1mS方波源程序
2023-05-16 09:38:47 5 基于89C51 单片机 的产生200mS方波源程序
2023-05-16 09:38:08 5 基于89C51 单片机 的产生多路不同频率方波源程序
2023-05-12 17:26:22 2 基于89C51 单片机 的超温报警测试源程序
2023-05-16 09:37:37 3 基于89C51 单片机 的串口测温电脑显示源程序
2023-05-16 09:35:11 2 基于89C51 单片机 的串转并数字芯片测试源程序
2023-05-16 09:20:51 0 基于89C51 单片机 的单个数码管模拟水流源程序
2023-05-16 09:20:12 8 基于89C51 单片机 的点阵流动广告模拟源程序
2023-05-16 09:18:31 6 基于89C51 单片机 的点阵模拟电梯上行下行源程序
2023-05-12 17:25:02 2 基于89C51 单片机 的电机速度测试程序 (需选配测速模块)
2023-05-12 17:18:01 2 基于89C51 单片机 的定时器0源程序
2023-05-16 09:17:48 2 基于89C51 单片机 的定时器1源程序
2023-05-12 17:29:38 9 基于89C51 单片机 的定时器2源程序
2023-05-16 09:17:18 0 基于89C51 单片机 的定时做普通时钟可调源程序
2023-05-16 09:13:54 0 基于89C51 单片机 的独立按键依次输入数据 源程序
2023-05-16 09:12:29 3 基于89C51 单片机 的舵机按键控制程序源程序
2023-05-16 09:09:44 9 基于89C51 单片机 的非门数字芯片测试源程序
2023-05-15 11:11:39 0 基于89C51 单片机 的共阳数码管静态显示源程序
2023-05-15 11:10:29 4 基于89C51 单片机 的红外接收原理源程序
2023-05-15 11:08:35 8 基于89C51 单片机 的红外解码1602液晶显示源程序
2023-05-15 11:07:59 6 基于89C51 单片机 的红外解码数码管显示源程序
2023-05-15 11:07:26 6 基于89C51 单片机 的红外遥控继电器源程序
2023-05-15 11:06:45 3 基于89C51 单片机 的火焰传感器控制继电器源程序
2023-05-15 11:06:06 26 基于89C51 单片机 的继电器控制原理源程序
2023-05-15 11:05:26 10 基于89C51 单片机 的交通灯测试源程序
2023-05-15 11:04:44 7 基于89C51 单片机 的警车声音源程序
2023-05-15 11:03:52 3 基于89C51 单片机 的矩阵键盘反转扫描源程序
2023-05-15 11:02:29 3 基于89C51 单片机 的矩阵键盘简易计算器源程序
2023-05-15 11:01:52 31 基于89C51 单片机 的矩阵键盘行列扫描源程序
2023-05-15 11:00:55 3 基于89C51 单片机 的看门狗溢出测试源程序
2023-05-15 10:59:42 1 基于89C51 单片机 的喇叭滴答声源程序
2023-05-15 10:59:12 0 基于89C51 单片机 的喇叭发声原理源程序
2023-05-15 10:58:26 2 基于89C51 单片机 的喇叭音量调节源程序
2023-05-15 10:55:42 5 基于89C51 单片机 的秒表源程序
2023-05-15 10:37:52 16 基于89C51 单片机 的抢答器源程序
2023-05-15 10:37:12 2 基于89C51 单片机 的闪烁1个LED源程序
2023-05-15 10:35:23 3 基于89C51 单片机 的实用密码锁源程序
2023-05-15 10:34:05 3 基于89C51 单片机 的数码管闪烁源程序
2023-05-15 10:29:35 4 基于89C51 单片机 的数码管显示动态数据 源程序
2023-05-15 10:28:59 2 基于89C51 单片机 的数码管消隐源程序
2023-05-15 10:27:49 1 基于89C51 单片机 的数码管循环右移1源程序
2023-05-15 11:21:03 4 基于89C51 单片机 的数码管循环右移2源程序
2023-05-15 11:20:21 1 基于89C51 单片机 的数码管右移1源程序
2023-05-15 11:15:21 0 基于89C51 单片机 的数码管左移源程序
2023-05-15 11:14:56 1
已全部加载完成
评论