陈建明,张亚军,沈媛雪
(华北水利水电大学,河南 郑州 450045)
对于当今越来越复杂的水环境问题,尤其是突发性污染事件和非常态条件下的应急监测和现场监测,实时、原位、快速获取分析测试数据和相关信息显得尤其重要[1].从目前应用较为广泛的比色分析法来看,无论是光电比色法还是分光光度法,从取样固定、样品前处理、试剂配制、反应条件控制、干扰的消除等到水样测试的完成,存在一条繁琐复杂的操作流程.将这一流程分解为显色和检测两大子系统进一步分析发现:显色系统中各种因素相互交错,环境温度、人员操作等变量较多.因此温度作为显色系统中的根本制约因素,仅靠提高测量人员的操作水平的方法,并不能有效地减少系统中容易产生干扰、造成偏差的缺点,更不能显著提升测试工作的效率.
针对这一需求,文中设计开发了基于Cortex-A8处理器和Android 平台与数字式温度传感器DS18B20 的环境温度检测系统.
系统以ARM 公司的CortexTM-A8 系列的微处理器S5PV210 为核心,在Android 4.0.3 操作系统环境下完成了应用软件的开发及交叉编译[2]. 工作主要分为3 个部分:系统硬件平台的构建;基于Linux 3.0.8 内核的测温元件DS18B20 驱动程序的设计;Android 应用层温度监测软件的设计.
系统硬件设计的主控制器采用SAMSUNG 公司S5PV210 处理器,它采用了ARM CortexTM-A8 内核,是ARM 公司第一款基于ARMv7 架构的应用处理器[3].该处理器采用32 位RISC(精简指令集),内部架构采用64/32 位总线结构,最大处理速度可达到1 GHz,CPU 内部具有16/32 kb 可配置的一级数据/指令缓存,512 kb 的二级缓存,可实现2 000 DMIPS(每秒运算2 亿条指令集)的高性能运算能力,且有一套完整的通用系统外设,功耗低于300 mW,具有低功耗、高性能等优点,减少了系统的整体成本.
DS18B20 是常用的1-wire 单总线数字温度传感器,它的温度测量范围为-55 ~+125 ℃,在-10 ~+85 ℃范围内精确度为0.5 ℃.可编程分辨率9 ~12 位,在9 位分辨率时最多在93.75 ms 内把温度转换为数字,能分辨的最小温度值为0.5 ℃.完全可以满足该温度检测系统在正常环境下的测量要求[4].
DS18B20 既可以采用外部电源供电方式,也可以采用内部电源供电方式. 外部电源供电时,VDD接+ 5 V,GND 接地,数据接口(DQ)与ARM 的GPIO 相连.其电路如图1 所示;内部电源供电(寄生电源供电)时,VDD、GND 都要接地,数据接口(DQ)接ARM 的GPIO[5].
图1 外部供电模式
由于内部供电模式可以节省一根电源线,大大降低了布线成本,从而使系统结构更趋于简单,可靠性更高,而且在测量正常环境温度的需求下,内部供电可以采集到足够准确的温度,这里采用内部电源供电.从S5PV210 芯片上引出一条具有双向传输功能的I/O 口GPH0_2,与DS18B20 的数据接口(DQ)相连.系统连接如图2 所示.
图2 系统连接示意图
系统软件设计包括操作系统、传感器驱动程序、温度检测程序.
目前较为流行的嵌入式操作系统主要有:微软公司的Windows CE,风河公司(WindRive)的Vx-Works,Palm 公司的Palm OS,由Micrium 公司提供的uC/OS-II、嵌入式Linux 操作系统等[6].基于嵌入式Linux 的Android 系统凭借其安全性高、人机交互强和代码开源等优点,在嵌入式移动设备领域内具有很好的应用前景,正在慢慢成为众多嵌入式操作系统的另外一种选择.目前,在Android 系统中也提供了对多种传感器的支持,但要想使得Android 系统支持新添加的传感器设备并且使得开发人员可以通过调用系统API 来直接编写传感器的应用程序,不仅需要在Linux 内核中添加相应的硬件驱动,还必须在硬件抽样层(Hardware Abstract Layer,HAL)中实现相应的接口. 在应用程序中,Android 系统强大的人机交互界面也可以使检测人员的操作更加准确、简便、快捷,结合温度传感器对环境温度进行实时的采集和存储,是移动平台与工业化结合的一次良好尝试[7].
3.2.1 1-wire 总线的时序及编程
硬件驱动程序对DS18B20 的主要操作:初始化,跳过ROM 命令,匹配ROM,发送匹配ROM 指令,读取温度值等. 对DS18B20 的操作必须严格按照时序进行,访问DS18B20 的顺序如下.
初始化:由总线控制器发出的复位脉冲和之后由从机发出的存在脉冲组成,存在脉冲告诉总线控制器DS18B20 在总线上,且已准备好操作.
ROM 操作指令:该ROM 操作指令采用0xCC,这条指令允许总线控制器不用提供64 位ROM 编码就可以使用功能指令.
功能命令:允许总线控制器读写DS18B20 的暂存器发起温度转换和识别电源模式.
使用ARM 实现DS18B20 数字式温度传感器采集温度并转换读取温度数值的驱动程序设计流程如图3 所示.值得注意的是,每次DS18B20 被访问时,都必须严格按照这个顺序进行操作,否则DS18B20就不响应.
图3 DS18B20 驱动程序流程
3.2.2 驱动程序的加载
Android 系统下的Linux 设备驱动程序属于内核的一部分,Linux 内核的一个模块可以以2 种方式被编译和加载.静态加载指直接编译进Linux 内核,随同Linux 启动时加载. 动态加载指利用Linux 的module 特性,在系统启动后使用insmod 命令对驱动模块进行加载,在不需要的时候通过rmmod 命令来卸载.
采用静态加载方式如果要修改驱动程序将需重新编译、烧写内核,效率较低,不利于驱动的开发调试[8].动态加载的模块本身并没有被编译进内核映像,控制了内核的大小;同时,模块一旦被插入内核,它就和内核中的其他部分完全一样,使用灵活,调试方便.故采用动态加载方式来加载驱动程序.
3.2.3 驱动程序的测试
这里基于Android 系统实现一个可以在shell 中执行的驱动测试工具,代码位置在Android 源码的external 目录,在external 中建立DS18B20 目录,目录下主要包括Android. mk 和DS18B20. c 两个文件,其中.mk 文件是Android 系统的编译文件,主要目的是将.c 文件编译生成为系统可执行命令;重新启动系统后,启动Android 系统在ADB shell 中执行. /DS18B20 命令.可以读取到一直在变化的温度值,说明驱动程序已经生效.
在实现了一个带有温度传感器功能的Android系统后,以温度传感器能够获取实时温度数据的特性,在Eclipse 中设计并实现了一个环境温度检测程序,安装到Android 系统中,赋予访问驱动程序提供的节点权限,运行操作系统并启动环境温度检测程序可以采集到实时的温度数据.
通过反复试验表明,该温度检测系统运行稳定,能够实现对环境温度的实时显示与监控功能,且测量精度高.该温度检测系统具有操作界面人性化、控制方便、实时性好等优点,具有较好的应用前景. 由于Android 应用程序是用易懂的面向对象语言JAVA 编写的,对于开发人员的要求相对较低. 因此把Android 作为水质检测仪的系统是一次积极的尝试,对未来产品设计与开发有很强的借鉴意义.
[1]陆桂明,李钊,王起龙.基于GPRS 的水质监测系统设计[J].华北水利水电学院学报,2013,34(4):117 -120.
[2]宋宝华.Linux 设备驱动开发详解[M].2 版.北京:人民邮电出版社,2010.
[3]周立功,王祖麟,陈明计,等.ARM 嵌入式系统基础教程[M].2 版.北京:北京航空航天大学出版社,2008.
[4]王丽娟,王艳.基于DS18B20 的多通道温度测试仪[J].制造业自动化,2013,35(2):123 -127.
[5]仲进安.基于半导体制冷式热泵的幼蚕共育温湿度监控系统[J].农业工程学报,2012,28(11):183 -188.
[6]韩迪,潘志宏. 基于Android 移动设备传感器的体感应用[J].华南理工大学学报:自然科学版,2012,40(9):75 -80.
[7]怯肇乾,吴金垒.基于Cortex-Ax 的Android 硬体操作软件设计[J].单片机与嵌入式系统应用,2012,12(5):36-39.
[8]宋凯,严丽平,甘岚. ARM Linux 在S3C2410 上的移植[J].计算机工程与设计,2008,29(16):4138 -4139.