基于ARM设计的多生理参数嵌入式监护系统
扫描二维码
随时随地手机看文章
1、引言
多生理参数监护系统用来对病人的生理或生化参数进行连续、长时间、自动、实时监测,并经分析、处理后实现多类别自动报警、自动记录,并具有对结果的综合判断能力,便于医护人员及时发现病人的病情变化,随时采取必要的护理与急救措施,从而大幅度减少危重病人的死亡率。
国外的人体生理监护仪发展趋势是采用移动式监护技术。在欧洲,借助现在小巧、价低的嵌入式计算机和无线网络技术,开发各种能穿在身上的监护系统的研究工作已经开展得非常之好,爱立信、诺基亚和飞利浦等公司都在进行相应的研究开发工作。在国内,目前普遍采用的人体生理监护系统中,大致可分为三种:1)基于PC机平台的监护系统,功能强大且完善,但其体积庞大,不便于移动。2)微型和便携式监护仪,大多采用低档单片机实现,功能简单,只能进行信号的采集和显示,不便于医务人员监视。3)采用嵌入式系统的监护系统,其体积小、可靠性高、功耗低,但大多采用工业用PC104主板,普遍成本比较高。
本文研究的多生理参数监护系统包括心电(ECG)、呼吸(REST)、无创血压(NIBP)、血氧饱和度(SPO2)、体温五个参数的实时监护。由这些参数的二次数据还可提取心率、心律失常、呼吸率、收缩压、舒张压、平均压及脉率等参数;可以较全面地评估循环系统和呼吸系统的功能。由于ARM的嵌入式系统设备通常具有体积小、功耗低、功能集中、网络功能强大和稳定性好等优点,因此作者所在课题组利用ARM研制了一种生理参数监护系统,以满足多生理参数监护系统不断发展的要求。
2、嵌入式多生理参数监护系统的构建
为搭建更加理想的嵌入式控制系统,综合考虑了本监护系统的实际应用,采用嵌入式Linux控制系统作为主控系统,图1是系统整体结构图,系统在ARM9的硬件平台上搭建了一个嵌入式Linux系统,其中Linux内核采用的是2.4.18稳定内核。
2.1定制Linux系统
依据所选择的CPU类型即ARM9,以公开的嵌入式Linux源代码为基础,根据设计的嵌入式目标板情况编写相应的Bootloader程序(启动装载程序)。然后根据标准Linux裁剪出适合的内核和文件系统,采用的嵌入式Linux在其内核内部实现了TCP/IP和相应的驱动,并裁剪掉了不需要的模块,在Redhat9.0的宿主机上对Bootloader和2.4.18版本的Linux内核进行交叉编译[5]。再对其文件系统进行精简,将Bootloader程序、内核和文件系统固化到目标板的Flash(闪存)中,便定制好了合适的嵌入式Linux系统。
2.2嵌入式多生理参数监护系统的硬件构成
如图2所示为嵌入式多生理参数监护系统的硬件结构图,主控制模块采用的是ARM体系的处理器,即是Samsung公司的 S3C2410芯片,该芯片采用ARM920T微处理器作为控制器内核。硬件各种接口以及扩展,都是可定制的[1]。本系统是专用于人体生理参数的监护,故接口设计主要考虑各种人体生理参数的传感器。由于系统中的各生理参数监护模块,都采用了OEM模块,这些模块采用单一的串口通讯,通过串口/USB口转换模块,就可以通过USB接口接入主控系统中。
3、核心功能的实现
系统的核心功能是要实现对各心理参数的实时监护,同时能及时计算和分析数据,并能准确快速地发现超标的数据,实现超标报警功能。其中超标报警接口和可扩展的接口还需要编写相应的驱动程序。
3.1驱动程序的编写与调试
超标报警接口以及可扩展的接口,都应编写相应的驱动程序,其中超标报警接口的驱动程序的基本流程如下:
1)定义主设备号; 2)驱动初始化(或者是模块的初始化); 3)实现文件操作,定义file_operations结构; 4)实现中断服务(不是必须的);5)编译该驱动到内核(或用insmod命令加载);6)测试设备。
超标报警接口作为外接的一个设备,先定义以下设备号,
#difine DEVICE_NAME “alarms” /*定义alarm设备的名字*/
#difine ALARM_MAJOR 254 /*定义alarm设备的主设备号*/
在明确I/O方式,alarm设备对应的硬件资源之后,可以采用ioctl控制alarm设备。而编写Linux设备驱动程序的主要工作就是编写子函数填充file_operations的各个字段。下面就是填充之后的file_operations,
struct file_operations test_fops = {read: read_test,
write: write_test,
open: open_test,
release: release_test};
上述各个子函数的功能如下:
open_test函数实现请求I/O内存资源;映射寄存器地址并保存;读取寄存器初始值并重新设置控制寄存器。release_test函数实现 I/O内存资源的释放。read_test函数实现对寄存器当前状态的读取,并将读到的数据传递给应用程序。write_test函数实现将应用程序传来的数据输出。
PC机上调试完毕后,将此驱动程序编译进嵌入式Linux的内核前,需要进行一定的修改和设置。在交叉编译内核时,alarm.c文件会被自动编译并嵌入内核。然后将编译好的内核制作成映像文件以备下载。最后编写一个测试程序,交叉编译测试程序并将其添加到文件系统中去。将新的内核映像以及文件系统下载到开发板上。新的内核运行之后,在目录/dev下创建设备,然后执行测试程序即可。
3.2监护软件的实现
在嵌入式Linux中,采用功能强大而全面的GUI开发工具能够缩短开发周期和降低开发难度,本系统采用Qt/Embedded开发监护软件[6]。
3.2.1程序设计及功能模块结构
Qt编程的优点是Signal Slot机制,当一个组件发出Signal时,其他一个组件或多个组件可以通过Slot接收发来的Signal,组件本身也可以接收自己的Signal,这样处理一个事件将变得非常容易[6]。在通用计算机系统开发中普遍使用的模块化设计技术需要更好地应用于嵌入式系统[3]。从软件层次角度而言,应用软件的模块化相对容易实现。图3所示是应用软件的功能模块结构图,图4所示是主程序的流程图。
其中,数据的采集与控制是主控模块,参数设置模块通过获取人机界面上的输入的参数信息,对通信模块以及数据分析处理模块的各项参数进行设定。又由于本系统中的各个人体生理参数监护模块采集的数据格式不一致,所以还需要一个格式转换的过程,以方便显示和存储。
3.2.2通信模块
在主控系统中,与下位机各个模块的通信协议大致相同。在参数设置以后,下位机各模块根据指令信息进行生理参数监测并上传数据。这里以血压测量模块为例,简述如下:
采用RS232串口异步通信,1位起始位,8位数据位,1位停止位,无奇偶校验,波特率2400b/s。传输数据采用ASCII模式。上位机到模块的命令格式:<STX> ab;cd<ETX>,
其中<STX> (02) 是ASCII码的正文起始标志 ;“ab”是命令代码对应的ASCII码值;“cd”是两位16进制校验和对应的ASCII码值。校验和是此前各位数值之和的低8位,不包括<STX> (02);<ETX>(03)是ASCII码的正文结束标志。如“02 30 31 3B 3B 44 37 03”表示开始一次手动测量。模块到上位机的数据格式:<STX> abc; ghi; jki;mno;pqr <ETX>,其中“abc”,“ghi”,“jki”,“mno”,“pqr”分别代表当前袖带压力值,收缩压,舒张压,平均压,脉率的各 10进制位的数所对应的ASCII码值。
3.2.3数据显示模块
数据显示模块中,主要是能实现动态地显示波形,其中关键的函数就是paintEvent( QPaintEvent * ),函数的主要代码为:
#include <qpainter.h> //必须包含的头文件
void ConnectWidget::paintEvent( QPaintEvent * ){
QPainter paint( this );
for ( int i=0; i<count-1; i++ ) { // 连接所有的点
for ( int j=i+1; j<count; j++ ) {
paint.setPen( colors[rand()%MAXCOLORS] ); // 随机设画笔的颜色,也可确定颜色
paint.drawLine( points[i], points[j] ); }}}// 画线
通过这个函数,可以将每个点连起来,形成线,然后不断更新它,就能实现动态地显示波形。当更新时,调用以下函数:
void DrawView::paintEvent( QPaintEvent * ){
QPainter paint( this );
drawIt( &paint );}
3.2.4程序的界面
由于在嵌入式Linux系统下不便于截图,图5在REDHAT9.0下的测试界面。
4、结论
目前正在研制当中的监护系统是在基于ARM微处理器的硬件平台上实现的,采用了嵌入式Linux操作系统,具有多参数、易定制、可扩展、高稳定性等优点。实验表明,本监护系统能够准确实时地检测用户的心电(ECG)、呼吸(REST)、无创血压(NIBP)、血氧饱和度(SPO2)、体温等五个参数,并能对其进行一定的数据分析,能准确快速地发现超标的数据,实现超标报警功能。经实验证明,该系统运行可靠,已达到设计的要求,具有很好的应用前景。
5、本文作者创新点:
在ARM微处理器的硬件平台上,采用了嵌入式Linux操作系统作为主控系统作为生理参数监护仪的控制系统,使得监护系统具有多参数、易定制、可扩展、高稳定性等优点。系统的应用软件采用Qt/Embedded开发,缩短了开发周期和降低了开发难度,同时,监护系统还具有非常人性化的人机界面。
参考文献:
1. 陈赜。ARM9嵌入式技术及Linux高级实践教程[M].北京:北京航空航天大学出版社,2005.
2.周红波。基于嵌入式操作系统的开发方法[J].微计算机信息,2006,7-2:55-57
3.王田苗。嵌入式系统设计与实例开发[M].北京:清华大学出版社,2002.
4.唐建东,周鹏。基于Linux的嵌入式系统设计与实现[J].计算机工程,2002,28(6):254-256.
5.邹思轶。嵌入式Linux设计与应用[M].北京:清华大学出版社,2002.
6.http://www.qtcn.org/