,,
(武汉海王机电工程技术有限公司,武汉 430000)
随着我国科学技术的发展,自动化设备应用越来越广泛,安装于室外的设备越来越多,例如自动化城市建设,自动化铁轨建设,自动化管路建设应用已经非常普遍。对于复杂设备的调试,传统方式是配置显示屏,而安装于室外的设备往往会无人看守,设备厂家并不希望无关人员看到设备调试信息,且安装显示屏对设备的成本、功耗和体积都会有所增加。基于这种现状,安装于室外的设备调试往往是由调试人员自备调试电脑现场连接进行调试。而电脑等设备,调试时在现场需要放置平台、依拖等,这在高空作业,狭窄管道,预埋设备等环境调试时,会带来诸多不便。而且电脑电池待机能力有限,室外现场不一定具备充电条件,中途充电会极大的降低工作效率。笔者介绍的调试方式使用安卓设备(安卓手机、pad等),具有携带方便,待机能力强,还可以使用充电宝充电等优势。此调试方法适用场景还包含使用分布式结构的大系统。分布式结构往往各设备间距离较远,系统构架决定了其所有信息都传入集中控制室内,而单个设备调试不方便,使用本方法可以很好地解决这个问题。
笔者以安装在管道上的膨胀节检测设备为例,介绍其安装调试使用安卓设备的方法,膨胀节是在管道(烟、风管道)中间设置的、能补偿管道长度方向上的热胀冷缩量并保持管道密封性的装置。补偿管道长度变化的附件,又称伸缩节或补偿器[1]。膨胀节在航天、化工、消防等管道系统中应用越来越广泛,使用寿命与管路压力、温度和使用次数有关,膨胀节使用次数用尽,对于传输介质为高温、高压、高危等工况是很大的隐患。膨胀节检测设备安装于管路上,用于采集存储膨胀节的状态信息。膨胀节安装环境条件特殊,检修不方便,安装分布位置广。本设计调试膨胀节检测设备时采用数据线接入手机,对于剩余空间狭窄等不方便靠近的设备,采用蓝牙方式接入。
系统目标是可以通过安卓设备设置膨胀节检测设备基本参数,获取其工作状态、传感器测量值等信息。本文重点讲通讯实现的技术要点。
针对这种需求,笔者设计基于ST公司的ARM Cortex-M3内核的控制器作为膨胀节检测设备MCU,膨胀节检测设备通过数据线或蓝牙连接安卓设备,同时针对性的开发安卓端软件用于设备调试。现场人员可以根据实际情况安装使用数据线或者蓝牙。膨胀节检测设备采集数据,通过USB或者蓝牙发送到安卓设备端,安卓设备记录分析存储数据,同时把用户对系统功能、参数等设置发出来给膨胀节检测设备。采用ARM Cortex-M3内核的控制器STM32在通讯方面有丰富的接口选择:IIC接口(SMBus/PMBus)、USART接口、SPI接口、CAN接口(2.0B)、USB 2.0全速接口等[2]。根据项目资源要求本设计选取的芯片型号是STM32F103RBT6,内置128 KB Flash、20 K的RAM,处理器最高工作频率72 MHz。
膨胀节检测设备通过数据线与安卓设备通讯的实现基于USB HID技术,HID是Human Interface Device的缩写,HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等,不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备[3]。STM32部分芯片内部集成了USB外设,可以大大提升设计速度、节约成本、提高了USB电路设计准确性,只需设计USB接口电路,就可以实现基于STM32芯片的电路板的USB通信设计[2]。STM32F103RBT6支持USB HID模式,更是有全速和低速两种通讯模式可配置,具有数据传输速率快、效率高、集成度高、配置灵活等特点。全速设备理论通讯速度可以达到12 Mbps。
安卓设备能外接调试设备基于USB OTG技术。USB On-The-Go通常缩写为USB OTG,是USB2.0规格的补充标准[4]。它可使USB设备,例如播放器或手机,从USB周边设备变为USB主机,与其他USB设备连接通信。USB具有高速度、低成本、低功耗、即插即用等优点[5]。在正常情况下,这些支持OTG的USB设备和USB主机(如台式机或者手提电脑),仍然作为USB周边设备使用[4]。Android系统可以通过USB配件模式连接像机器人控制器,扩展坞,音乐设备,读卡器等这些配件;USB主机模式支持各种各样的USB外设和Android USB配件,像数码相机,键盘鼠标和游戏手柄等附属设备[4]。这两种模式在Android3.1(API 12)及以上都是直接支持的[6]。本设计通过Android系统设置配置为USB主机模式,连接到Android上的USB设备会把Android类似的看作是一台PC机。膨胀节检测设备就相当于USB的配置端,使用安卓设备系统结构配置专用的OTG线用于连接外设,膨胀节检测设备便可以正常的和Android应用交互。
图1为数据线连接系统示意图,电路设计中采用STM32自带USB口,连接通用的安卓数据线,安卓数据线通过OTG接口连接安卓设备。电路板上的USB接口可以采用USB母座、mini USB母座或者micro USB母座,这样设计方便接入电脑,若确定不接入电脑,电路板上可采用Type USB母座设计,接线时就不需要OTG接口,方便直接使用手机数据线接入。STM32设计主要包括供电、时钟、复位和其他传感器的接入。
图1 数据线连接系统示意图
蓝牙在空旷地蓝牙传输有效距离为10米,具有一定的穿透性。蓝牙4.0将3种规格集一体,包括传统蓝牙技术、高速技术和低耗能技术,数据传输速率达到24 Mbit/s,并且具有低功耗、3毫秒低延迟、超长有效连接距离、AES-128加密等特点[7]。本设计采用蓝牙4.0技术,极大的满足了设计要求,保证了系统稳定性。
蓝牙系统采用灵活的无基站的组网方式,蓝牙的组网方式有3种,BR/EDR、Bluetooth Low Energy和Bluetooth mesh[8]。其中BR/EDR,也就是常说的经典蓝牙。蓝牙耳机和遥控器的按钮,这种方式是点对点,PAN,personal area network[8]。本系统使用的是控制器与安卓设备间的对称连接,采用BR/EDR连接方式正适合。
图2为蓝牙连接系统示意图,电路设计中STM32通过串口方式与蓝牙模块连接,蓝牙模块发出并检测蓝牙信号,安卓设备端开启蓝牙之后,就可以与膨胀节检测设备进行通讯。
图2 蓝牙连接系统示意图
通过上诉方案可见,膨胀节检测设备与安卓设备通过数据线或者无线蓝牙连接通讯简便可行,下面分别从硬件设计和软件设计两方面介绍的实现方法。
USB有主从之分,膨胀节检测设备在这是做为从机,相对应的安卓设备就是主机。膨胀节检测设备端USB部分的硬件设计主要是STM32和USB端子接口连接,图3是二者连接的硬件连接电路图。系统供电电压为3.3 V,系统设计直接采用STM32的USB口作为通讯接口。USB是一种差分总线,数据由正、负信号的差值所决定[9]。电路中USBDP为正,USBDM为负,STM32的USB模块遵循USB2.0全速设备标准,从机作为全速设备只需在USBDP线加上拉1.5 K电阻。Q1是一个三极管,做开关用,当开关开启时,USB主机设备开始枚举该USB设备;当不使用USB方式连接时,开关关闭,USB断开连接。本设计中的USB座采用mini USB母座,方便用户使用数据线连接。膨胀节检测设备设计电路中还应包含电源电路、时钟电路、复位电路和完成系统功能的测量控制电路。系统增加一块FLASH芯片,在设备运行期间用于记录和保护重要参数和故障信息等, 即使掉电也能保存下来,下次调试可以上传查看分析故障原因。现场使用环境恶劣,为了达到最好的使用效果,系统PCB布线需要划分合理,设备具有抗干扰的能力。
图3 USB从机电路设计
蓝牙通讯的硬件设计主要包括STM32和蓝牙模块,这里选用的蓝牙模块是CC2541低功率蓝牙模块板,CC2541蓝牙模块板支持蓝牙4.0版本,是蓝牙主从一体模块,具透传、远控、PIO采集3种功能,可以通过AT指令集进行切换和设置。连接设备支持安卓、苹果、PC、MAC。具有收发无字节限制,最高可达3K Bytes/s的特点[7]。图4给出了二者连接的硬件连接图。STM32与蓝牙模块通过串口连接,系统正常供电,蓝牙模块串口通讯引脚RX和TX,分别与STM32的串口引脚连接,使能端EN与STM32的IO口连接,作为开关控制蓝牙设备的开启与关闭。系统可以设置一个开关控制蓝牙设备的启停,在不使用蓝牙期间关闭蓝牙,可以节省不必要的能耗,同时保护数据安全。
图4 蓝牙模块电路设计
系统软件设计主要在于膨胀节检测设备端软件设计和安卓设备端软件设计。
2.2.1 膨胀节检测设备端软件设计
STM32 USB支持双向8个端点,即8个IN端点和8个OUT端点,硬件实现CRC自动生成/校验,NRZI编码/解码和bit-stuffing,支持控制传输,中断传输,大容量传输和同步传输4种传输类型,支持USB挂起和唤醒[4]。
本系统软件实现是需要将STM32的USB枚举为HID设备。STM32官方提供的固件库含 USB固件库,基于固件库做移植,充分利用可靠资源,可以极大的提高设计和调试效率[10]。USB固件库的移植:在移植程序中添加USB相关文件,修改设备配置描述符,调取USB的函数。本例程中,用到了3个USB端点,实现上位机与下位机间双向通信。EP0为控制端点(系统默认端点0作为控制传输端点),EP1为INTERRUPT OUT端点(数据输出端,即上位机向MCU发送数据段),EP2为INTERRUPT OUT端点(数据输入端,即MCU向上位机发送数据)。启用STM32设备需要对USB口进行初始化,需要配置USB中断、设置USB时钟,再开启USB端口。开启之后主设备会对接入的从设备开始枚举,枚举成功之后加载驱动就能在主机的硬件设备中看到接入的HID设备。HID设备用PID/VID唯一标识。软件设计时需开辟USB收发缓冲区,用于接收和发送数据。USB接收函数用于定时解析USB收缓冲区数据,USB发送函数用于发出一段数据。
蓝牙模块上电使能之后可以发出蓝牙信号。膨胀节检测设备与安卓设备通讯需要设置成从机模式,蓝牙模块与STM32采用串口通讯方式。通过AT指令集控制蓝牙模块,完成配置模式,搜索配对,收发数据的功能。使用蓝牙模块控制上的优点在对于MCU来说只需要操作简单的串口,就可以实现蓝牙通讯。使用STM32串口需要配置串口中断、设置通讯频率之后开启。
为保证数据通讯稳定性和数据准确性,主从机通讯使用的软件通讯协议的内容应该包含开始字符串,命令字符串,数据字符串,校验位。并规定由主设备发送命令请求,从设备相应命令请求。例如主设备发送获取历史记录命令请求,从设备收到之后,把系统中保存在FLASH上的历史数据依次发出,主设备接收后解析显示。
2.2.2 安卓调试软件设计
安卓软件开发平台采用Android Studio,由谷歌发布的一款非常好用的Android集成开发环境工具。安卓端软件设计需要有设置界面,可以设置通讯模式为OTG通讯或蓝牙通讯,并在调试界面显示接入方式;消息界面用户记录警告信息;调试界面显示调试数据,可以绘制曲线。另外一些附加功能,待办事件显示需要调试的设备信息,包括设备地点、安装位置、简介等;设备资料显示当前连接设备的详细设备信息和历史维修记录等。为了保护数据的安全性,系统需要建立用户数据库,配置用户权限,采用账户登录方式,方便管理整个系统。
OTG功能本为Android3.1及以上底层所支持,并提供了相应的API[4]。对于安卓设备,OTG属于系统功能,不需要另外开发驱动。使用安卓OTG功能需要设备打开系统设置中的OTG功能,并设置成USB调试模式[6]。调试软件设计流程图如图5所示,首先在安卓系统中使用USB设备,需要获取到明确的用户许可,之后在程序界面列举出已经接入的USB设备,用户选择设备之后获取该USB接口,并为它分配端点,打开并连接USB设备,连接正常之后就可以进行数据通讯。
图5 OTG通讯软件流程图
在蓝牙4.0之前为传统蓝牙,从蓝牙4.0开始我们称之为低功耗蓝牙也就是蓝牙BLE。需要android 4.3及以上版本才支持BLE API[11],低版本只支持传统蓝牙。低功耗蓝牙较传统蓝牙,传输速度更快,覆盖范围更广,安全性更高,延迟更短,耗电极低等等优点[7]。使用蓝牙必须要打开安卓设备蓝牙功能。软件流程图如图6所示,获取权限和本地蓝牙适配器之后就可以查找附近已配对或可用设备列表,再连接配对设备连接正常之后才能数据交互。
图6 蓝牙通讯软件流程图
将本设计的硬件和软件实现之后进行通讯调试,文中所诉的安卓设备在这里采用的安卓手机做测试对象,选用的手机支持OTG通讯,系统为android 4.4,图7为安卓手机调试界面图。在设置界面选择采用OTG通讯和蓝牙通讯分别测试与膨胀节检测设备通讯情况,都能正常得进行数据交互,膨胀节检测设备在实际项目使用中表现良好,系统测试结果满足系统设计要求。
图7 安卓设备界面图
本文实现了采用STM32控制的USB HID通讯和蓝牙模块与安卓设备通讯,达到方便、灵活调试和配置自动化设备的目的。系统采用USB HID OTG在安卓和Win7系统相当于免驱,大大得减轻了开发负担。针对设备需求开发安卓端软件可以方便操作人员操作和调试,使用账号登录方式可以大大提高数据的安全性。在整个系统稳定之后,膨胀节检测设备端USB接口可以直接换成type USB母座,这样只需要安卓设备充电线即可调试,系统简单便捷。采用蓝牙通讯弥补了设备安装位置不方便接线的缺陷。通过结果证明,本系统可以大大减轻设备安装、调试、检修时的困难,达到系统设计的目标。使用安卓设备调试还可以方便的将调试数据发往云端,方便数据分析和存储,还可以方便工程师远程指导现场调试等。