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

2009-8-13 11:38 2493 6 6 分类: MCU/ 嵌入式
本文介绍了基于USB总线的数据采集设备的开发方法,包括硬件设计、firmware(固件)设计、基于windows驱动程序模型(WDM)的设备驱动程序设计以及应用软件的设计,同时也介绍了基于USB的远程数据采集系统。电子园51单片机学习网t0T7?4E8d+D;X_


/diK o*oK+V@(^b44606  关键词:通用串行总线;数据采集;单片机电子园51单片机学习网(chh WH ?w

电子园51单片机学习网$?L q FAj3rG'[/v O

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

E-A'P K&Zr qrq@44606

.^ v~WY _j44606

:ISib2D"~a3g*T44606
系统硬件设计
电子园51单片机学习网5_v5z/O(q6o]4E

电子园51单片机学习网+t&] QO"Y%S u*n

电子园51单片机学习网9}H2^$h gx ` o

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

`ce&M|,tW44606

Zy9dJ I^Q+K S5z44606

;zs.u(Hv4j]%Q*D1]44606

6136_200904071905451RX6T.jpg
电子园51单片机学习网0^/l(`;dhDK

图1 硬件总体结构框图
电子园51单片机学习网U2\"l*e/G

S+~)P)vn'I44606

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

{7? w$o)Bp44606

6{#xOq f3AG3b44606  多路模拟输入信号经多路模拟开关控制将其中的一路接入串行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电感,起稳定内部振荡频率的作用。

3U+i"zA1Mel*g!e:r44606

J Z-X9{ C^44606电子园51单片机学习网Yh? j_R


系统软件设计

$R,H8Iuf1A%[ vw44606电子园51单片机学习网1C"^*`5h-x F2^'H+l

电子园51单片机学习网&Ys!m^e1z

  系统软件包括设备固件、 USB设备驱动程序和应用程序。电子园51单片机学习网)Z%{5X0T3iE"o!a


&a;R3SCSB1j44606  设备固件(firmware)设计电子园51单片机学习网LMqO#FK)T*ts


.b?E$I,VO44606  此处固件是指固化到89C51E2PROM中的程序,其主要功能是: 电子园51单片机学习网9o4[)k,]&t$u'pb&?v
  电子园51单片机学习网([~9Bu*aSL9D
  (1)控制A/D转换器的采样。

!o(T0RMHo9O44606

1pN#vq-e44606  (2)控制芯片USBN9602接受并处理USB驱动程序的请求及应用程序的控制指令。电子园51单片机学习网WP:z'I-UU#z


u'O)d(Z%p!x|)G7y44606  现主要介绍89C51系统如何控制USB控制器(USBN9602)与主机的通信。电子园51单片机学习网6Y_~2Sm7`R;Zd

电子园51单片机学习网#|%g4~#w0L&e*N@

  89C51系统对USB控制器的操作是严格按照USB协议1.1进行的,按照USB协议1.1的规定,USB传输方式分为4种:控制传输,块传输,同步传输和中断传输。在实际开发中使用了控制传输和块传输。控制传输主要用来完成主机对设备的各种控制操作,也就是用来实现位于主机上的USB总线驱动程序 (USBD.SYS)以及编写的功能驱动程序对设备的各种控制操作。块传输主要用来完成主机和设备间的大批量数据传输以及对传输数据进行错误检测(若发生错误,它支持“重传”功能)。

2W^%~8v7Y%c[ j44606 电子园51单片机学习网6]0kw@I6S&F\

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

电子园51单片机学习网 mq6?2xF

  USB设备驱动程序设计

2I!Spd f44606

'z2@ t4^+u*vE44606  USB系统驱动程序的设计是基于WDM(Windows driver model 驱动程序模型)的。WDM采用分层驱动程序模型(见图3所示),分为较高级的USB设备驱动程序和较低级的USB函数层。其中USB函数层由两部分组成:较高级的通用串行总线模块(USBD)和较低级的主控制器驱动程序模块(HCD)。电子园51单片机学习网Y1m \ [jY$V6m;p


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

#vu wJl44606 电子园51单片机学习网Vu"vP0r!l2Yft4E

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

电子园51单片机学习网3Xdl7H&i0y)Us(s!c

Z |G@({t1E"]44606

6136_200904071905452zL3M.jpg

*ER AmI OvaW44606
图2 USBN9602与89C51接口电路

qj)qu-E R44606电子园51单片机学习网2zF"w0P4i1W

电子园51单片机学习网L0N,x/@N8I s5_4f0d:w

电子园51单片机学习网2o#}q(e ?(})d x



6136_200904071905453ousJ.jpg

qH#J1`NLa44606
图3 USB系统驱动程序层次关系
电子园51单片机学习网vV/{3FF5_w p%{Yf

X'G T){1byUc44606 电子园51单片机学习网C)wa9s5xui

u7Jw }t44606

6136_200904071905454X7R3.jpg
电子园51单片机学习网h,~h6HD9ye
图4 应用程序主流程图
电子园51单片机学习网T-?:@p;o J

(@ [MT)i44606 电子园51单片机学习网"ah6?ogz X4~

  初始化模块提供一个入口函数DriverEntry(),所有对各种IRP(I/O Request Packet,IRP请求包)的处理例程都在此入口函数中做出定义。

q:yIr&x44606

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

N hZ6}2r)Xjfu9]{x44606

x kz2qnr44606  电源管理模块负责设备的挂起与唤醒。电子园51单片机学习网#H#]0X6aG#M;fov


1oL'r7a7O44606  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操作完成。

!PMVc P44606 电子园51单片机学习网'EZ V/E-QdN

  应用程序设计

8n[1Vy]0|w44606

` N6\(P?n4T3e? n44606  用户态的应用程序是数据采集系统的中心,其主要功能为:开启或关闭USB设备、检测USB设备、设置USB数据传输管道、设置A/D状态和数据采集端口、实时从USB接口采集数据、显示并分析数据。应用程序主流程图如图4所示。
&K*m!|1fub'p44606由于USBN9602提供的FIFO不超过64字节,当它存满后,USBN9602自动将数据打包即时请求读入数据,由SIE自动发送数据包。另外,当系统启动A/D模块后,便会创建两个线程:采样线程和显示存盘线程。采样线程负责将采集数据写到应用程序提交的内存;而显示存盘线程负责给应用程序发送显示和存盘消息。当应用程序接收到此消息后,便从它提交的内存中读取数据并显示和存盘。此处需要注意的是采样线程和显示存盘线程在读写应用程序提交的内存时要保持同步。电子园51单片机学习网C&O\?2GP

电子园51单片机学习网)_OCC9d%J

  远程数据采集系统设计电子园51单片机学习网5U3j JTbE;m


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

'?/AX Z;T H6mOY44606

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

r @/u6cO2yzg Ev44606

(Qx%_/zNo M p44606  软件方面的设计跟前所述类似。

{$|*RG(?d1F,o:PS44606

&K Y:Jw ?7XC5B&]44606

AV(d eK7R ?F M44606

6136_200904071905455E03e.jpg

-^,`([N9O8i$DoY Y44606
图5 采用USB和485实现远距离数据传输
电子园51单片机学习网h%a|&Ri+R

&Y4TF8Z"B'|44606

:u s9R/x$W44606

T4LqNO^+i? Tyq44606
结语

i7W7r)|,G g%Zl44606

4e!UG'C9}0w ?uQ44606

*vK%\Km.C#Q.n}44606  基于USB外设的应用目前在国内外处于高速发展阶段,利用USB进行数据采集和工业控制已得到成功应用,特别是随着USB协议2.0的推出,数据传输速率高达480Mbps,如此高的传输速率必将使USB在数据采集中的优势更加体现出来,同时会使其在更广阔的领域得到更深层次的应用。电子园51单片机学习网(]-Q#_ @`gc

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条