基于ARM的浅层气检测仪*

2015-03-02 06:25茅奇辉
机电工程 2015年7期
关键词:驱动程序内核浅层

黄 斌 ,王 英* ,王 强 ,卢 群 ,茅奇辉

(1.浙江理工大学机械与自动控制学院,浙江杭州310018;2.浙江省地矿勘察院,浙江杭州310013)

0 引 言

在地质勘察与地下建筑工程领域,浅层气给施工过程带来极大的困扰[1-2]。浅层气的泄露和喷发会造成勘查设备损害和人员伤亡。浅层气的主要成分还是地球温室效应来源之一,其泄露和喷发造成环境损坏。因此研究浅层气的高精度探测方法,已成为我国地质勘察、地下工程建设与环境保护的迫切需求[3]。浅层气主要成分为甲烷,含量为90%以上,其余为二氧化碳、及少量氮气和一氧化碳[4]。本研究通过检测浅层气勘探和施工现场空气中的甲烷与二氧化碳浓度为勘探和施工过程提供保证。目前工程勘探部门在用的浅层气检测的方法是现场采集到气体后再到实验室中通过气体组分测定分析试验来获取浅层气中各种气体的浓度信息,这种方法检测周期长,实验环境与方法复杂,无法在工程勘探现场对浅层气进行方便、快捷地检测[5]。

本研究采用SAMSUNG 公司的S3C2440 微处理器,结合嵌入式Linux 操作系统作为仪器的主要平台,使用非色散红外吸收法(NDIR)气体传感器MH-410D和MH-440D 分别用于检测浅层气中CO2与CH4的浓度[6],通过嵌入式SQLite 数据库来存储浅层气检测的浓度数据,运用Qt Creator 设计数据访问的图形用户界面(GUI)来显示实时浓度、历史数据以及数据曲线。

1 硬件设计

1.1 系统平台硬件设计

根据仪器功能的需求,本研究设计了仪器的硬件电路。它主要包括以微处理器为中心的核心板模块、电源模块、串口调试模块,数据显示模块,SD 存储模块,传感器模块。硬件资源包括64 MB SDRAM、128M字节的NAND Flash。LCD 显示屏用于气体数据的显示,SD 卡用于存储气体浓度数据,RS-232 接口用于开发过程中输出系统调试信息,JTAG 接口用于烧写UBoot,Linux 内核以及文件系统的镜像文件。硬件框图如图1 所示。

图1 硬件框图

1.2 甲烷传感器

甲烷传感器选用MH-440D 型红外气体传感器,该传感器采用非色散红外(NDIR)技术[7-8]对空气中存在的CH4进行探测,检测原理为CH4对特定波长的红外光具有一定的吸收作用,浓度越大,吸收越强烈,传感器内部带有温度传感器,可进行温度补偿。广泛应用于存在可燃性、爆炸性气体的各种场合。将传感器VCC 端接5 V,GND 端接电源地,Vout端接微处理器ADC 模块的输入端AIN0。经过预热时间后从Vout端输出电压值0.4 V~2.0 V 代表气体浓度值0~100%VOL。当自检发现故障时,传感器输出电压为0 V。MH-440D 型甲烷传感器的技术参数如表1 所示。

表1 MH-440D 型甲烷传感器技术参数表

设A/D 转换值为ADCCH4,ADC 参考电压值为VVDDA,转换精度为S,ADC 输出最小值为VMIN,测量范围为L,信号输出范围为VL。则甲烷浓度值VALCH4为:

1.3 二氧化碳传感器

二氧化碳传感器采用MH-410D 型红外传感器,MH-410D 传感器同样基于NDIR 原理对空气中存在的CO2进行探测,其内置温度传感器,可进行温度补偿。MH-410D 是一款小巧精密的二氧化碳传感器。将传感器VCC 端接5 V,GND 端接电源地,Vout端接微处理器ADC 模块的输入端AIN1。传感器的预热时间为3 min,经过预热时间后从Vout端输出表征气体浓度的电压值,正常输出电压信号范围是0.4 V~2.0 V 代表气体浓度值0~5% VOL。当自检发现故障时,传感器输出电压为0 V。MH-410D 型传感器的技术参数如表2 所示。

表2 MH-410D 型二氧化碳传感器技术参数表

设A/D 转换值为ADCCO2,ADC 参考电压值为VVDDA,转换精度为S,ADC 输出最小值为VMIN,测量范围L,信号输出范围VL。则二氧化碳浓度值VALCO2为:

2 ADC 驱动程序设计

2.1 ADC 模块介绍

S3C2440 微处理器内部集成一个八通道模拟输入转换器,ADC 单元在工作时的供电电压为3.3 V,输入的模拟信号幅值为0~3.3 V 的电压信号,由此可知该模数转换的最大量程为3.3 V。ADC 单元的分辨率为10 位,那么电压信号经过转换后的输出值应该在0~210之间的一个值,这样就可以通过转换后的数字量来表示输入的模拟电压值的大小并以数值的形式保存在ADC 模块的数据寄存器中,然后通过ADC 驱动程序读取数值并提交给应用程序进行处理。

2.2 A/D 采样频率

S3C2440 微处理器ADC 单元最大的转换速率是在2.5 MHz 转换时钟下达到500 KSPS。S3C2440 有3个时钟FCLK、HCLK 和PLCK。FLCK 是芯片内核时钟,HCLK 是高速总线时钟,PCLK 是低速I/O 接口时钟。S3C2440 的ADC 采样频率与PCLK 有关,PCLK一般配置为50 MHz。因为时钟频率过高,需要通过对预分频器进行适当的设置,才能获取ADC 正常工作的频率。设定PCLK 的频率为50 MHz,预分频值在ADCCON 寄存器中设定。ADC 转换频率fA/D可以通过式(3)求得:

2.3 ADC 驱动程序初始化函数

ADC 驱动程序初始化函数主要完成以下5 部分工作:

(1)使用register_chrdev_region(devno,adc_nr_devs,"adc_device")函数获取驱动程序设备号,如果申请失败则使用alloc_chrdev_region(&devno,adc_minor,adc_nr_devs,"adc_device")函数请求内核动态分配一个未被占用的设备号,本次使用的主设备号设为240,次设备分别为0 和1;

(2)映射虚拟内存地址:使用ioremap(58000000,0x6)函数将A/D 转换器的物理地址映射为Linux 内核能够访问的虚拟内存地址;

(3)使能ADC 转换时钟:clk_get()从时钟list 链表中以字符id 名称来查找ADC 时钟clk 结构体并且返回,最后调用clk_enable()使能对应的ADC 模块的时钟源;

(4)设置ADC 预分频值:设置预分频值时先要使能A/D 预分频器,然后在ADCCON 寄存器中设置其预分频值;

(5)创建设备文件:设备文件是Linux 内核给用户空间的访问接口,应用程序通过操作设备文件来访问硬件,创建设备文件使用class_create()和device_create()函数来实现。

2.4 ADC 驱动程序读函数

当用户空间调用read 函数时,最终驱动程序中的read 函数被执行,这个函数主要用来读取硬件的数据并和用户空间交换数据。宏定义GET_DATA 用来实现两路ADC 数据的读取,宏定义SET_ADC_CHANNEL(ch)可以实现两路ADC 转换通道的切换,参数ch是次设备号,通过iminor()函数在内部调用MINOR宏,从inode 中提取次设备号。内核空间与用户空间交换数据使用copy_to_user(buf,&data,sizeof(data))函数,参数buf 来自于用户空间,参数&data 是内核空间中存放A/D 转换数据的地址,参数sizeof(data)表示从内核空间复制到用户空间数据的长度。

2.5 ADC 驱动程序加载

本研究将双通道ADC 驱动程序编译进内核采用驱动静态加载的方式:①将ADC 驱动程序复制到Linux 内核的/drivers/char/目录下;②修改/drivers/char/目录下的内核配置文件Kconfig;③修改/drivers/char/目录下的Makefile 文件将ADC 驱动以静态方式编译;④使用make menuconfig 命令将双通道ADC 驱动配置到Linux内核中;⑤编译生成Linux 内核镜像文件;⑥将内核镜像文件通过以NFS 的方式下载到目标板上启动即可。

3 应用程序设计

3.1 防脉冲干扰设计

该设计中采用了软件抗干扰设计,针对由于脉冲干扰所引起的气体采样偏差,笔者采用防脉冲干扰平均滤波法降低随机干扰。防脉冲干扰平均滤波法又可称为中位值平均滤波法,它是平均滤波法与中位值滤波法结合体。平均滤波法只能对周期性的脉动采样值进行平滑处理,但是对于随机的脉冲干扰却无法消除,而采用中位值平均滤波法就可以解决这个问题,故将两种滤波方法结合在一起形成中位值平均滤波法。采样序列的滤波结果Y 可用过公式求得:

若X(1)≤X(2)≤X(3)…X(N),(3 ≤N ≤14)

在实际应用中,防脉冲干扰平均滤波法对信号的平滑度取决于连续采样次数N,N 值越大滤波平滑度越好,但灵敏度变差;反之,N 值越小滤波灵敏度越好而平滑度变差,通常N 的取值在区间[3~14]中[9]。连续采样次数N 取为10,每采集到10 个采样值后进行一次中位值平均滤波,记录所得到的滤波结果。每次滤波运算完成后接着进行下一组采样值的滤波运算并保存结果。防脉冲滤波法程序流程图如图2 所示。

图2 防脉冲滤波法流程图

3.2 气体浓度数据的存储

由于Linux 内核的内存管理机制,应用程序不能直接读/写硬件的物理地址,必须借助驱动程序在内核空间实现对硬件地址的访问。设备驱动程序是操作系统内核和系统硬件之间的接口,它为应用程序屏蔽了硬件的细节。这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以和操作普通文件一样,只需要进行文件的打开、读写和关闭等操作,就能控制底层的具体硬件设备。Linux 系统与所有硬件设备的交互都如同操作普通文件一样简单。双通道ADC 驱动程序加载后,在/dev/目录下会产生两个设备文件/dev/adc0 和/dev/adc1,应用程序通过读设备文件来获取两个传感器数据。系统每间隔10 s 读取一次气体浓度数据,读取的数据都保存在嵌入式数据库中。当嵌入式系统中移植了SQLite 数据库后,应用程序可以利用SQLite 提供的API 来进行对数据的存储操作。本次设计中建立了一张用于存储气体浓度数据表,在打开数据库文件后,主要使用sqlite3_exec()函数执行SQL 语句来实现气体浓度数据的插入、删除,读取等操作。程序流程如图3 所示。

3.3 Qt 界面设计

Qt 是一个跨平台图形用户界面库,它提供给应用程序开发者建立图形用户界面所需的所用功能。Qt的开发语言是C + +,它可以向开发人员提供各种主要功能的统一的编程接口。由于Qt 的出现,使得UNIX、Linux 这些操作系统能为用户展现精美的人机界面,Qt 是Linux 系统中主流的GUI 工具。Qt/Embedded 是一种面向嵌入式平台的Qt 版本[10]。

图3 程序流程图

在嵌入式Linux 系统中搭建好Qt/Embedded 环境后,就可以将在上位机设计完成的Qt 界面程序拷贝到下位机上运行。该设计的浅层气检测仪的GUI 界面由3 部分组成:①实时数据显示;②历史记录显示;③数据曲线显示。仪器界面框图如图4 所示。

图4 检测仪界面

4 实验及结果分析

浅层气检测试验平台由压力容器、抽真空装置、加气增压装置和气体收集四大部分组成。压力容器用于混合气体;抽真空装置用于将压力容器抽至真空状态;加气增压装置用于向压力容器中充气,以获得不同不同浓度的混合气体;气体收集部分主要用于收集从浅层气物理模型中放出的气体,以便后续检测与分析,浅层气检测实验平台简图如图5 所示。本研究在进行测量实验时采用稀释配气的方法获取标准气源,根据流量比混合法将两种高纯度气体进行混合,通过控制瞬时流量比的方式来获取满足要求的不同浓度标准气。

在配制标准气时,流量计处的温度为钢瓶气温度tstdm,压力为pstdm,流量Fstdm;稀释气温度tNm,压力为pNm,流量为FNm,则配制的标准气浓度为:

图5 浅层气检测实验平台简图

式中:C—稀释后的标准气浓度,%VOL;Cstd—瓶装标准气浓度,%VOL。且有:

故只需要调整标准气与稀释气输出口的两个流量计之比FNm/Fstdm,就可以获得高浓度标准气稀释后的各种标准浓度的气体[11]。

浅层气检测试验平台上的甲烷气瓶与二氧化碳气瓶装有浓度为99.9%的高纯度标准气体。笔者采用高精度的D07-7 型气体质量流量控制器控制配合D08-8C型流量积算仪设定瞬时流量实现流量计之比的调整。在实验平台上测得的一组数据如表3、表4 所示。

表3 甲烷测量结果

表4 二氧化碳测量数据

对测量实验结果进行分析可得:CH4与CO2的示值相对误差为小于10%;通过重复测量值与贝塞尔公式求得CH4与CO2的标准偏差分别为1.16%和0.78%;通过对实验过程分析可知仪器不确定度影响显著的因素有:测量重复性引起的标准不确定度与浅层气测量实验平台配置标准浓度气体的不确定度,检测仪测量CH4与CO2合成不确定度分别为1.26%和1.08%。

5 结束语

本研究通过在实验室建立浅层气测量实验平台,采用NDIR 气体传感器检测浅层气中的主要成分甲烷与二氧化碳,设计了仪器的硬件电路,设计了Linux 系统中针对传感器模块的双通道驱动程序,采样Qt Creator 设计了显示数据的仪器界面。笔者通过使用ARMLinux 作为仪器平台有利于实现测控仪器的智能化与网络化,可进一步实现浅层气的远程检测功能。该仪器在地质勘察与地下建筑施工现场可帮助施工人员进行方便快捷的获取浅层气浓度信息,具有较好的实用性。

[1]陶灵法,潘永坚,蔡国成.沿海平原海相沉积土中浅层气的探查[J].铁道勘察,2014(4):47-49.

[2]郭爱国,孔令伟,沈林冲,等.地铁建设中浅层气危害防治对策研究[J].岩土力学,2013,34(3):769-775.

[3]孔令伟,郭爱国,陈守义,等.浅层天然气井喷对地层的损伤影响与桩基工程危害分析[J]. 防灾减灾工程学报,2004,24(4):375-400.

[4]曾洪贤,周传斌,黄燕庆.杭州湾大桥含生物气层工程特性研究[J].土工基础,2008,22(3):53-55.

[5]王江涛. 天然气水合物气体组成分析方法研究与应用[D].青岛:中国海洋大学化学工程学院,2012.

[6]付 华,刘 娜,周 坤,等. 基于ATMEGA16 的便携式瓦斯检测仪[J].传感技术学报,2012,25(9):1323-1325.

[7]PARK J S,YI S H. Temperature compensated NDIR CH4gas sensor with focused beam structure[J].Procedia Engineering,2010(5):1248-1251.

[8]WCNG J Y,TSE C W. Recalibration technique for NDIR gas sensors without the need for gas standards[J]. Sensor Review,2012,32(3):217-221.

[9]陈 燕.基于ARM 的矿用便携式多气体检测仪的研制[D].西安:西安科技大学电气与控制工程学院,2013.

[10]BLANCHETTE J,SUMMERFIELD M. C + + GUI programming with Qt 4[M]. Upper Saddle River:Prentice Hall Professional,2006.

[11]傅忠诚,艾效逸,王天飞.天然气燃烧与节能环保新技术[M].北京:中国建筑工业出版社,2007.

猜你喜欢
驱动程序内核浅层
强化『高新』内核 打造农业『硅谷』
浅层换填技术在深厚软土路基中的应用
基于浅层曝气原理的好氧颗粒污泥的快速培养
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
计算机硬件设备驱动程序分析
浅层地下水超采区划分探究
微生物内核 生态型农资
包气带浅层地热容量计算方法商榷
基于MPC8280的CPU单元与内部总线驱动程序设计