新闻中心

EEPW首页 > 测试测量 > 设计应用 > 基于USB通信的科氏粉料流量测控系统设计

基于USB通信的科氏粉料流量测控系统设计

作者:时间:2016-10-29来源:网络收藏

引言

本文引用地址:http://www.eepw.com.cn/article/201610/308696.htm

目前,由北京航空航天大学与冀东发展集团有限责任公司合作研发的科氏(以下简称“”)已经成功应用到工业现场,运行状况良好,测量精度优于±0.5%。底层和PC端上层控制软件通过RS-232串行接口。这样,操作者就能够方便地对测控系统的各个参数进行修改,同时研发人员在进行现场调试时进行流量数据采集,然而,基于RS-232的测控系统还存在一定的应用限制。

虽然测控系统的流量测量精度高,但是其控制精度并不能满足现场要求,针对于此,作者所在课题组正在开展控制技术的相关研究工作,这就要求尽可能完整地采集流量数据,为控制技术研究提供精确的数据支持。目前,测控系统的RS-232速率为9 600bps,并不能满足需求,必须通过提高通信速率实现,然而,这样会增加CPU处理数据的负担,导致通信数据不正确的情况发生,降低底层程序性能。同时RS-232串口通信为端到端传输模式,在实际运行时,上层应用程序无法对当前通信状态进行实时监测,不利于测控系统对各个设备运行状态的准确实时监测和控制。

综上所述,开发更为快速、方便、可靠的人机通信接口变得尤为重要。结合通信速率高、通信可靠、即插即用、成本低廉等优点,本文设计了基于通信的测控系统。

1 设备简介

USB(Universal Serial Bus,通用串行总线)设备是USB通信系统中不可或缺的部分,随着USB技术的不断发展,USB设备类型也逐渐增加,主要包括Audio设备、Communicat ion device设备、HID设备、Image设备、Printer设备、Mass storage设备、Hub设备等等。其中,HID类是比较大的一个类,属人机交互操作的设备,用于控制计算机操作的一些应用中,如USB鼠标、USB触摸板、遥控等设备。Windows操作系统自带了HID类设备的驱动程序,用户直接调用相应的API函数即可完成通信,不用开发特定的Windows驱动程序,这样能够有效缩短应用程序的开发周期。本文在测控系统中,采用HID设备进行USB通信设计。

2 测控系统USB通信设计

根据系统功能需求,测控系统可分为系统上层、系统底层、中控室和系统外设4个部分。图1为测控系统原理框图。

a.jpg

系统上层为基于C#语言的Windows应用程序,主要完成测控系统的数据交互功能。

测控系统底层为测控系统核心,主要由STM32F103VET6处理器(简称STM32)和μC/OS—II实时操作系统构成。主要通过对应的命令方式完成对外设进行控制、传感器测量信号采集、粉料流量计算与控制。

中控室为测控系统的远程监控终端,通过4~20 mA电流实现测控系统的流量监测与控制。

系统外设主要包括变频器、继电器、电动机以及各类信号终端。系统底层通过对应的命令方式对外设进行控制,或对传感器测量信号进行采集。

2.1 测控系统底层USB通信设计

STM32为ST公司推出的基于ARM Cortex-M3内核的微控制器,自带USB全速设备接口,支持USB2.0通信协议,可配置1~8个USB端点,包含512字节的SRAM数据缓冲区。因此,基于STMS2的USB通信设计可以有效简化系统硬件电路。

图2为测控系统USB接口硬件电路图。其中,JP-USBENABLE接口用于实现对测控系统USB通信功能控制,USBENABLE用于底层应用程序控制USB设备的连接状态。

b.jpg

2.1.1 HID设备内核定义

在进行USB通信设计之前,必须完成USB设备的底层驱动设计。将ST公司提供的针对于STMS2的USB固件库移植到现有工程目录中,这样只需修改库文件中关于USB设备的相关定义即可。在该库中,提供了完整的HID设备定义所需描述符,包括设备描述符、配置描述符、报告描述符、厂商字符串、产品字符串等。只需根据需要进行相关描述符的修改即可满足要求,在此,只针对设备描述符、配置描述符、报告描述符做简要介绍。

(1)设备描述符

设备描述符主要完成USB设备的基本定义,主要包括设备类、最大数据包大小、配置个数等。在这里进行如下定义:

设备类:HID设备。

最大包大小:64字节。

配置个数:1。

(2)配置描述符

配置描述符主要完成USB设备的配置定义,包括当前配置下的接口个数、接口定义、每个接口下的端点定义。在本测控系统的USB设备配置描述符中有如下定义:

接口个数:1。

接口端点个数:2(一个IN端点和一个OUT端点)。

端点最大包大小:64字节。

(3)报告描述符

HID设备要和主机进行正常通信,必须在主机对设备枚举时提供完整的通信报文描述符,主机将根据设备提供的报告描述符进行USB通信控制。在报告描述符中可以定义多个报告(输入报告、输出报告),在这里,只定义一个输入报告和一个输出报告,其中报告大小均为64字节。

2.1.2 基于μC/OS—II的USB通信设计

μC/OS—II为多任务实时操作系统,通过多任务的编程方式易于实现具有较高性能的嵌入式系统。目前测控系统包含5个任务:

CACULATE_TASK:计算任务,完成粉料流量的计算。

CTRL_TASK:控制任务,完成测控系统流量的控制。

GETWEIGHT_TASK:称重任务,读取称重仓的数据。

UART_TFASK:串口通信任务,完成串口的数据交换。

DETECT_TASK:检测任务。实时监测测控系统的工作状态。

基于此,测控系统底层应用程序新增USB通信数据接收任务USBCOMRX_TASK和数据发送任务USBCOMTX_TASK。其中,USBCOMRX_TASK任务实时接收上层应用程序下发的命令,并将命令进行解析处理;USBCOMTX_TASK任务实时将相关数据通过USB接口发送到上层应用程序。

为提高通信数据的可靠性,设计了专用的环形数据缓冲区。图3为数据缓冲区结构示意图,其最小单位为数据包。

c.jpg

在程序设计时有如下定义:

typedef struct{

//数据缓冲区

U8 DataBuffer[BUFLEN][CMDLEN];

//数据起始位置

U8 DataStart;

//数据结束位置

U8 DataStop;

//通信信号量

OS_EVENT*USB_sem;

}UsbBuffer;

缓冲区由二维数组构成,每一行代表一帧数据,由BUFLEN帧数据组成,每帧数据长度为CMDLEN。其中,DataStart指示缓冲区有效数据包的起始位置,Datastop指示缓冲区有效数据包的结束位置。USB_sem为通信所需信号量,对于接收数据缓冲区,USB接收中断服务子程序中将接收到的数据包复制到该缓冲区中,并更新DataStop值,然后通过该信号量通知USBCOMRX_TASK进行数据处理;对于发送数据缓冲区,需要通过USB接口发送数据的任务,将待发送数据填充到相应的缓冲区中,并更新DataStop值,然后利用该信号量通知USBCOMTX_TASK进行数据发送。

图4为USBCOMRX_TASK任务流程图。当任务收到接收信号量时,循环处理缓冲区中DataStart至DataStop之间的有效数据包。

e.jpg

图5为USBCOMTX_TASK任务流程图。当任务收到发送信号量时,循环发送缓冲区中Datastart至DataStop之间的有效数据包。

f.jpg

2.2 测控系统上层USB通信设计

系统上层为基于C#语言的Windows应用程序,基于此进行测控系统上层USB通信设计。测控系统上层USB通信设计主要有两个方面:USB连接状态监测和USB数据通信。

2.2.1 USB连接状态监测

USB连接状态监测主要对测控系统的连接状态进行监测,完成USB正常通信之前的准备工作。为实现USB连接状态的实时监测,采用线程的方式进行设计。

图6为USB连接状态监测线程UsbDeviceStatus流程图。USBConnected用于指示HID设备的连接状态,若目标USB设备已经连接主机,则堵塞当前线程,一旦监测到USB设备连接断开,则继续轮询主机上的HID设备。

g.jpg

2.2.2 USB数据通信

在Windows操作系统中,应用程序通过文件操作的方式使用USB设备。在USB连接状态监测线程中,如果查找到目标HID设备,会创建相应的文件操作句柄供应用程序使用。

文件的操作有4种方式:异步读、同步写、异步读和异步写。读、写文件操作即申请一次接收、发送数据操作。

在异步模式下,应用程序向USB控制器发送一次请求之后,无论请求是否成功,相应的请求函数即刻返回,将剩余的工作交由USB驱动程序完成;在同步模式下,则必须等到请求成功之后才返回。采用同步读的方式可以有效提高应用程序处理通信数据的实时性。在此采用同步读和异步写的方式进行USB通信。

采用同步读方式通信时,若底层没有数据包发送,则当前线程会处于堵塞状态,直到读取到数据线程恢复运行。在此采用线程的方式完成USB数据的同步读操作。

图7为USB接收数据线程流程图。通过ReadFile()函数的返回值即可判断USB的连接状态。表1为ReadFile()函数返回状态值对应的USB设备连接状态。

h.jpg

i.jpg

当应用程序需要通过USB总线发送数据时,首先会检测当前USB设备的连接状态,若状态为“连接正常”,则调用WriteFile()函数进行相应数据发送。

结语

根据系统功能需,完成了测控系统的USB通信功能设计,解决了如下几个问题:

①采用USB全速通信方式,通信速率高达12Mbps,较大程度提高了测控系统流量数据的采集速率,为流量控制算法研究提供了更加完整的数据支持,解决了RS-232串口通信速率低的局限性。

②增加USB通信方式,应用程序可以更加方便地监测测控系统的通信状态,有效提高通信连接和数据传输的可靠性。

③有效解决了RS-232串口通信不支持热插拔的问题,使得通信更加方便灵活。

针对于RS-232串口通信的应用局限性,进行了测控系统的USB通信设计,提高了科氏粉料流量测控系统的灵活性和应用可扩展性,在今后的市场中将具有更广阔的应用前景,同时,该测控系统的USB通信设计方法对嵌入式高速数据采集系统有_定的参考价值。



评论


相关推荐

技术专区

关闭