基于ARM的嵌入式心血管功能参数检测系统

2017-04-20 03:21彭文超,张永亮,金丹
中国医疗器械杂志 2017年2期
关键词:驱动程序内核触摸屏

基于ARM的嵌入式心血管功能参数检测系统

【作 者】彭文超1,2,张永亮1,金丹1,3,吴璋洋1,3,马祖长1,孙怡宁1

1 中国科学院合肥智能机械研究所,合肥市,230031

2 中国科学技术大学,合肥市,230026

3 安徽大学,合肥市,230039

基于ARM处理器和Linux操作系统搭建的开发平台,设计了一套心血管功能检测系统,实现了脉搏波信号采集、特征提取和指标计算等功能。该文主要介绍系统的硬件电路,具体描述触摸屏驱动、外部ADC驱动程序以及基于QT的可视化应用程序。该系统使用方便,具有实时性、低功耗等特点。通过与常规的心血管功能测试仪(IIM-2010A)的对比实验,表明该系统能够较好地评估心血管功能,在心内膜下心肌活力率和增长指数等几个关键性指标具有良好的相关性。

脉搏波;嵌入式系统;驱动;QT/Embedded

【 Writers 】PENG Wenchao1,2, ZHANG Yongliang1, JIN Dan1,3, WU Zhangyang1,3, MA Zuchang1, SUN Yining1

1 Institute of Intelligent Machines, Chinese Academy of Science, Hefei, 230031

2 University of Science and Technology of China, Hefei, 230026

3 AnHui University, Hefei, 230039

【 Abstract 】A cardiovascular function testing system was designed in platform which was built with ARM microprocessor s3c2440 and Linux system, to achieve pulse wave acquisition, feature extraction, index calculation and so on. This article mainly describes the hardware circuit, and describes the touchscreen driver, external ADC driver, and visualization QT-based applications in detail. The system is easy to use, with real-time, low power consumption. Compared with common cardiovascular function test instrument, the results shows that the system can better assess the cardiovascular function, expecially in several key indicators like subendocardial myocardial viability rate and augmentation index, the indicators show good correlations.

0 引言

嵌入式系统是一种数据处理速度快、控制精度高、集成度高的自动化控制系统,具有工作效率高、专用性强、实时性好、生命周期长、功耗低等特点[1]。嵌入式系统已经延伸到医疗器械的各个领域,如便携式血压计、生理检测设备、监护设备等。利用嵌入式系统进行医疗器械开发,推动器械向低成本化、智能化、便携化发展,诊断更加快速,结果更加可信[2-3]。

心血管功能参数是心血管疾病诊断的重要依据,而这些参数可以通过对实际采集的脉搏波波形特征分析得到[4-5]。现有的心血管测试仪器,种类繁多,但是大多数体积比较大,功耗高,不适合随身携带,因此设计一种低功耗、适合家用的便携式心血管测试仪很有必要。

本文设计的嵌入式心血管功能参数检测系统,直接使用微处理器的A/D模块,采用Linux操作系统,通过驱动程序实现硬件和内核的交互,并将驱动程序编译进内核,做到采集和处理一体化,不受时间和空间限制,解决了触摸屏和外部A/D不能同时使用的矛盾,将传感器采集到的脉搏波信号通过 LCD 实时动态显示出来,并计算相应的心血管功能参数。

1 硬件电路

系统的硬件电路主要包括触摸屏、LCD、传感器、网卡、存储器、串口通信等模块。系统结构框图如图1所示。

系统选用三星公司的S3C2440处理器,其采用ARM920T内核,集成LCD专用DMA的LCD控制器,3路UART,8路10位ADC和触摸屏接口,130个通用I/O口,24个外部中断源,带PLL片上时钟发生器[6],主频可以达到400 MHz,能够达到数据处理的实时性要求,对于复杂的运算也能满足,为后期硬件电路拓展预留了相当大的空间。芯片内部的内存管理单元(MMU)模块,提供虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查[7]。

图1 硬件框图Fig.1 Block diagram of hardware

脉搏传感器选用合肥华科电子技术研究所生产的HK-2000B型脉搏波传感器,其灵敏度高、抗干扰能力强、性能稳定、使用寿命长,具备信号调理功能,直接输出模拟脉搏波电压信号[8]。传感器使用3.5 mm的耳机接口与单板连接,随插即用。触摸屏作为输入模块,在使用之前需要校准。执行应用程序时,会将代码拷贝到同步动态随机存储器(SDRAM)空间执行。网卡模块主要作用是在调试阶段,支持从网络文件系统启动,缩短开发周期。串口模块输出内核启动、u-boot启动的一些基本信息,且可以通过串口发送命令,是u-boot移植时第一个需要移植的程序。

2 软件模块

软件开发环境总共有3个:主机,虚拟机上Linux操作系统(称为服务器)以及嵌入式系统(即S3C2440单板)。驱动程序采用C语言编写,应用程序采用C++语言开发。驱动程序在主机下的Sourceinsight环境中编写,然后上传到服务器进行交叉编译,调试阶段单板通过NFS挂载到服务器,装载驱动程序,调试通过后,将驱动编译进内核。上位机程序依赖于服务器上Qt-creator开发环境,之前需编译安装QT库。应用程序和驱动程序的关系如图2所示。

应用程序通过调用库函数,诸如:open、read、write等引发内核异常(swi),从而进入内核空间,内核根据传进来中断类型的不同调用不同的系统函数,然后根据打开设备文件描述符不同,调用不同的驱动程序,最终通过驱动程序操作硬件[7,9-10]。可见,驱动程序通过内核完成了应用程序和硬件的交互。

2.1 驱动程序

驱动程序相当于“硬件和系统之间的桥梁”,给操作系统提供了硬件接口,其屏蔽了硬件细节,应用程序可以像操作普通文件一样通过读写来控制底层硬件设备[11-12]。本文的两驱动程序按照Linux操作系统下的字符设备类型设计。

图2 应用程序和驱动程序关系Fig.2 The relationship between applications and drivers

由于触摸屏驱动程序和外部ADC驱动程序使用的是同一个A/D控制寄存器,但是在使用的时候寄存器的设置值不同,为了让触摸屏和外部ADC功能均能正常使用,故引入了原子操作。原子操作是以“原子”的方式执行一次单独的指令操作,该过程不会被其他的程序中断,直到程序执行结束[13]。原子操作包含3个基本步骤:定义互斥锁、获得互斥锁与解锁。图3所示为驱动程序的开发流程。2.1.1 触摸屏驱动程序

图3 驱动程序开发流程图Fig.3 The fl ow chart of driver development

S3C2440触摸屏支持4种工作模式,通过设置寄存器 ADCTSC来实现不同模式的转换。触摸屏驱动的入口函数主要完成的工作有:分配一个结构体,设置能够产生哪类事件以及该类事件里面的哪些事件,对结构体注册,获取ADC时钟信号,建立虚拟地址和物理地址之间的映射,设置控制寄存器,开启定时器,申请中断函数等。中断函数有3个:定时器中断函数,触摸屏抬起按下中断函数以及A/D转换完成中断函数。定时器中断函数和触摸屏抬起按下中断函数均是通过触摸屏抬起按下的状态上报事件。在A/D转换中断函数里面,首先进行获取互斥锁的操作,获取成功后再进行中断函数的处理。A/D转换完成中断函数进入的条件是数据转换完成,否则继续测量。在该中断函数里面,对数据采集进行了优化,主要的措施包括:① 设置延时寄存器为最大值,这样可以在电压稳定之后再上报事件;② 对于触摸屏按下事件,若A/D转换完成之后发现触摸屏已经松开,则丢弃此次结果;③ 连续测量4次,最后取平均值上报,相当于一次软件滤波过程。

退出函数是对之前注册的结构体进行注销,解除地址的映射关系,删除定时器,释放中断向量等。入口函数和出口函数需要修饰,并加上“GPL”协议。2.1.2 外部ADC 驱动程序

同触摸屏驱动开发流程类似,在ADC驱动程序中,为了尽量少占用处理器资源,加入了阻塞操作,即执行设备操作的时候,不能获取资源时将进程挂起直到满足可操作条件后再进行操作,被挂起的进程进入休眠状态,直到等待条件满足[13]。在该驱动程序中,唤醒进程的方式有两种,一种是休眠定时时间到达;一种是有事件发生产生中断。唤醒过程通过信号量来实现。同时加入了mdev机制,它是busybox自带的一个简化的udev,在系统启动、热插拔或动态加载驱动程序时,自动创建设备节点。下面按应用程序自上而下的调用过程来说明外部ADC驱动的实现过程。首先定义file_operation结构体,将应用层的实现函数同驱动层联系起来:

static struct fi le_operations adc_drv_fops =

{

.owner = THIS_MODULE,

.open = adc_drv_open,

.read = adc_drv_read,

.release = adc_drv_release,

};

驱动程序调用流程见图4。

从图4可以看出,在获取互斥锁之后,无论接下来的条件是否满足,均需要解锁,释放资源供其它程序使用。

2.2 基于QT的GUI

GUI程序开发环境的搭建主要包含QT库的移植和Qt-Creator的安装。QT是Troolltech公司开发的一套开源图形用户界面库,面向对象框架,封装了端到端应用程序开发所需的所有基础结构,有优良的跨平台特性[14-15]。其提供的信号和槽的对象通信机制,使各控件之间的协同工作变得十分简单。Qt-Creator是一个QT编程的跨平台开发环境,包括C++代码编辑器、集成的GUI外观和版式设计器、图像化调试器等等。应用程序运行的GUI如图5所示。

图5上部显示实时的脉搏波波形,下部是计算出的指标,血压值通过触摸屏手动输入。

图4 ADC驱动流程图Fig.4 Flowchart of ADC driver

图5 应用程序机界面Fig.5 Application interface

应用程序的功能是接收A/D值、进行波形的实时动态显示及参数的计算等。主程序流程如图6所示。

图6 主程序流程图Fig.6 Flowchart of main program

主程序流程中应用程序不断地读取内核空间驱动程序传过来的数值。采集完成2 400个数据之后,进行数据处理,包括滤波、求平均波形、寻找特征点、计算指标等[16-17]。

首先对采集的信号进行预处理,主要包含SG滤波,然后通过一阶导数找到差分信号极大值点,使用切线相交法找到起始点,消除基线漂移,相邻起始点间的距离即为一个心动周期,按周期对波形进行叠加求平均波形,如图7所示,此时可以得到平均周期T。

图7 平均脉搏波波形Fig.7 The average pulse wave form

特征提取的过程即为确定图中a,b,d,e,f几个点的位置。首先通过切线相交法寻找起始点a,然后向后寻找峰值点b,其为整个心动周期的最大值点;反射点d在A类和B、C类波形有不同的处理方法,对于A类波形,使用四阶导数的第一个由正到负的过零点来判断,对于B、C类波形,使用四阶导数的第二个由负到正的过零点来判断。e点和f点分别使用二阶导数的最大值点和过零点判断。然后用肱动脉压对上述波形进行标定,使之成为一个有量纲的数值。

在找到特征点之后,计算相应的指标。心率Hr= 60×T/fs(次/min),fs为采样频率,T为平均波形长度;左心负荷Spti和心肌灌注Dpti分别为e点左边和右边的面积,心肌活力率Sevr=Dpti/Spti;射血时间指数Ed为e点位置占整个周期的百分比;Pp为脉压,是肱动脉收缩压SBP和舒张压DBP的差值;中心动脉收缩压Sbp2为标定的d点血压值;增长指数AIx等于d点的脉压值除以脉压Pp。

3 实验结果

在程序的调试过程中,系统通过NFS挂载到网络文件系统启动。调试通过之后,将驱动程序编译进内核,将触摸屏和QT库的配置文件写进脚本,u-boot启动内核后直接启动NAND FLASH上的根文件系统,进行触摸屏校准后运行应用程序。

3.1 稳定性试验

为了评估系统的稳定性,选取一名健康成员(男性,25岁)作为受试者。测试在同一天8:30~11:30进行,以15 min为间隔,在脉搏波测量的同时,通过触摸屏输入血压值。每次测量之前休息10 min,测量过程大约持续5 min,得到12组数据,每组计算8个参数。对测量的结果进行统计学分析,Hr和AIx的散点图分布如图8所示,表1是稳定性结果,可以看出相对标准误差均在2%~8.5%之内,表明系统的稳定性良好。

图8 Hr和AIx散点图Fig.8 Scatterplot of Hrand AIx

表1 稳定性试验Tab.1 Stability test

表2 受试者的基本信息Tab. 2 Basic information of subjects

3.2 可靠性试验

为了评估系统的可靠性,选取14名受试者作为研究对象,受试者的基本信息如表2所示。对照仪器采用合肥智能机械研究所自主研制的心血管功能测试仪(IIM-2010A)。整个实验均在同一环境下进行。受试者静息10 min之后,首先使用IIM-2010A测量,然后静息10 min,在嵌入式系统中测试一次,测试过程中通过触摸屏输入IIM-2010A测得的血压值。测试完成之后,用SPSS软件对数据进行Spearman相关性分析,显著水平设置为0.01。得到该系统与IIM-2010A的对照结果如表3所示,可以看出,Sevr、AIx等几个关键性指标同对照仪器具有良好的相关性。对Sevr指标进行Bland-Altman分析结果如图9所示,一致性范围在-0.26~0.28。

表3 对照实验Tab.3 Control experiment

图9 Sevr一致性分析Fig.9 The agreement of Sevr

4 结论

本文基于ARM处理器和Linux操作平台,设计了一套心血管功能评估系统。结果表明,该系统稳定性好,可靠性高。与同类型的仪器比较,具有功耗低、方便携带、成本低等优点。在接下来的研究中,基于处理器强大的拓展能力,计划增加血压测量模块、无线传输模块和智能专家系统,这样在每次测量完成之后,系统能够自动分析心血管的状态,给出建议或处方,并能将数据通过无线模块上传到服务器存储。

[1] 张启凤, 尹婉. 嵌入式系统在医疗器械中的应用研究[J]. 信息通信, 2014(1): 88.

[2] 李震. 嵌入式系统在医疗器械中的应用[J]. 中国医疗器械信息, 2013(2): 16-21.

[3] 马琳. 嵌入式系统在医疗器械中的应用[J]. 山东工业技术, 2016(8): 224.

[4] 吕文杰, 王丽珍, 李淑宇, 等. 基于脉搏波的心血管检测方法及仪器综述[J]. 中国医疗器械信息, 2015(8): 51-54.

[5] 张永亮. 基于桡动脉波形分析的心血管功能评估方法研究[D].合肥: 中国科学技术大学, 2012.

[6] S3C2440A_UserManual_Rev13[EB/OL]. (2013-03-15)[2016-07-15]. http://www.docin.com/p-614920365. html.

[7] 韦东山. 嵌入式linux完全开发手册[M]. 北京: 人民邮电出版社, 2008.

[8] HK-2000脉搏波传感器使用说明书[EB/OL]. (2011-08-15)[2016-07-15]. http://wenku.baidu.com/view/8d2721da7f1922791688e845. html.

[9] Dong Z, Chen S Z , Wei Z H. The S3C2440's camera interface driver development based on embedded Linux[C]. AMSITI, 2014: 1975-1979.

[10] 赵炯. Linux内核完全注释[M]. 北京: 机械工业出版社, 2004.

[11] 朱兆祺, 李强, 袁晋蓉. 嵌入式Linux开发实用教程[M]. 北京: 人民邮电出版社, 2014.

[12] 冯国进. 嵌入式Linux 驱动程序设计从入门到精通[M]. 北京: 清华大学出版社, 2008.

[13] (美) BOVET D P, Cesati M. 深入理解Linux内核[M]. 陈莉君, 冯锐, 牛欣源, 译. 北京: 中国电力出版社, 2001.

[14] 吴迪. 零基础学QT4编程[M]. 北京: 北京航空航天大学出版社, 2010.

[15] 倪继利. QT及Linux操作系统设计[M]. 北京: 电子工业出版社, 2005.

[16] 郑莹莹. 基于桡动脉波形分析的动脉硬化评估指标研究[D]. 合肥: 中国科学技术大学, 2011.

[17] Nenova B, Iliev I. An automated algorithm for fast pulse wave detection[J]. Int J Bioantomat, 2010, 14(3): 203-216.

ARM-based Embedded Detection System of Cardiovascular Function Parameters

pulse wave, embedded system, driver, QT/Embedded

R318.6

A

10.3969/j.issn.1671-7104.2017.02.001

1671-7104(2017)02-0079-05

2016-08-08

国家自然科学基金(61301059);中国科学院科技服务网络计划(KFJ-SW-STS-161);安徽省科技重大专项计划项目(15czz02019)

彭文超,E-mail: pwench@mail.ustc.edu.cn

张永亮,副研究员,E-mail: ylzhang@iim.ac.cn

猜你喜欢
驱动程序内核触摸屏
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
PLC和触摸屏在卫生间控制系统的应用
阻止Windows Update更新驱动程序
微软发布新Edge浏览器预览版下载换装Chrome内核
浅析投射式多点触控电容触摸屏
计算机硬件设备驱动程序分析
皮肤“长”出触摸屏
妙用鼠标驱动