基于ARM設(shè)計(jì)的多生理參數(shù)嵌入式監(jiān)護(hù)系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1、引言
多生理參數(shù)監(jiān)護(hù)系統(tǒng)用來(lái)對(duì)病人的生理或生化參數(shù)進(jìn)行連續(xù)、長(zhǎng)時(shí)間、自動(dòng)、實(shí)時(shí)監(jiān)測(cè),并經(jīng)分析、處理后實(shí)現(xiàn)多類(lèi)別自動(dòng)報(bào)警、自動(dòng)記錄,并具有對(duì)結(jié)果的綜合判斷能力,便于醫(yī)護(hù)人員及時(shí)發(fā)現(xiàn)病人的病情變化,隨時(shí)采取必要的護(hù)理與急救措施,從而大幅度減少危重病人的死亡率。
國(guó)外的人體生理監(jiān)護(hù)儀發(fā)展趨勢(shì)是采用移動(dòng)式監(jiān)護(hù)技術(shù)。在歐洲,借助現(xiàn)在小巧、價(jià)低的嵌入式計(jì)算機(jī)和無(wú)線網(wǎng)絡(luò)技術(shù),開(kāi)發(fā)各種能穿在身上的監(jiān)護(hù)系統(tǒng)的研究工作已經(jīng)開(kāi)展得非常之好,愛(ài)立信、諾基亞和飛利浦等公司都在進(jìn)行相應(yīng)的研究開(kāi)發(fā)工作。在國(guó)內(nèi),目前普遍采用的人體生理監(jiān)護(hù)系統(tǒng)中,大致可分為三種:1)基于PC機(jī)平臺(tái)的監(jiān)護(hù)系統(tǒng),功能強(qiáng)大且完善,但其體積龐大,不便于移動(dòng)。2)微型和便攜式監(jiān)護(hù)儀,大多采用低檔單片機(jī)實(shí)現(xiàn),功能簡(jiǎn)單,只能進(jìn)行信號(hào)的采集和顯示,不便于醫(yī)務(wù)人員監(jiān)視。3)采用嵌入式系統(tǒng)的監(jiān)護(hù)系統(tǒng),其體積小、可靠性高、功耗低,但大多采用工業(yè)用PC104主板,普遍成本比較高。
本文研究的多生理參數(shù)監(jiān)護(hù)系統(tǒng)包括心電(ECG)、呼吸(REST)、無(wú)創(chuàng)血壓(NIBP)、血氧飽和度(SPO2)、體溫五個(gè)參數(shù)的實(shí)時(shí)監(jiān)護(hù)。由這些參數(shù)的二次數(shù)據(jù)還可提取心率、心律失常、呼吸率、收縮壓、舒張壓、平均壓及脈率等參數(shù);可以較全面地評(píng)估循環(huán)系統(tǒng)和呼吸系統(tǒng)的功能。由于ARM的嵌入式系統(tǒng)設(shè)備通常具有體積小、功耗低、功能集中、網(wǎng)絡(luò)功能強(qiáng)大和穩(wěn)定性好等優(yōu)點(diǎn),因此作者所在課題組利用ARM研制了一種生理參數(shù)監(jiān)護(hù)系統(tǒng),以滿足多生理參數(shù)監(jiān)護(hù)系統(tǒng)不斷發(fā)展的要求。
2、嵌入式多生理參數(shù)監(jiān)護(hù)系統(tǒng)的構(gòu)建
為搭建更加理想的嵌入式控制系統(tǒng),綜合考慮了本監(jiān)護(hù)系統(tǒng)的實(shí)際應(yīng)用,采用嵌入式Linux控制系統(tǒng)作為主控系統(tǒng),圖1是系統(tǒng)整體結(jié)構(gòu)圖,系統(tǒng)在ARM9的硬件平臺(tái)上搭建了一個(gè)嵌入式Linux系統(tǒng),其中Linux內(nèi)核采用的是2.4.18穩(wěn)定內(nèi)核。
2.1定制Linux系統(tǒng)
依據(jù)所選擇的CPU類(lèi)型即ARM9,以公開(kāi)的嵌入式Linux源代碼為基礎(chǔ),根據(jù)設(shè)計(jì)的嵌入式目標(biāo)板情況編寫(xiě)相應(yīng)的Bootloader程序(啟動(dòng)裝載程序)。然后根據(jù)標(biāo)準(zhǔn)Linux裁剪出適合的內(nèi)核和文件系統(tǒng),采用的嵌入式Linux在其內(nèi)核內(nèi)部實(shí)現(xiàn)了TCP/IP和相應(yīng)的驅(qū)動(dòng),并裁剪掉了不需要的模塊,在Redhat9.0的宿主機(jī)上對(duì)Bootloader和2.4.18版本的Linux內(nèi)核進(jìn)行交叉編譯[5]。再對(duì)其文件系統(tǒng)進(jìn)行精簡(jiǎn),將Bootloader程序、內(nèi)核和文件系統(tǒng)固化到目標(biāo)板的Flash(閃存)中,便定制好了合適的嵌入式Linux系統(tǒng)。
2.2嵌入式多生理參數(shù)監(jiān)護(hù)系統(tǒng)的硬件構(gòu)成
如圖2所示為嵌入式多生理參數(shù)監(jiān)護(hù)系統(tǒng)的硬件結(jié)構(gòu)圖,主控制模塊采用的是ARM體系的處理器,即是Samsung公司的 S3C2410芯片,該芯片采用ARM920T微處理器作為控制器內(nèi)核。硬件各種接口以及擴(kuò)展,都是可定制的[1]。本系統(tǒng)是專(zhuān)用于人體生理參數(shù)的監(jiān)護(hù),故接口設(shè)計(jì)主要考慮各種人體生理參數(shù)的傳感器。由于系統(tǒng)中的各生理參數(shù)監(jiān)護(hù)模塊,都采用了OEM模塊,這些模塊采用單一的串口通訊,通過(guò)串口/USB口轉(zhuǎn)換模塊,就可以通過(guò)USB接口接入主控系統(tǒng)中。
3、核心功能的實(shí)現(xiàn)
系統(tǒng)的核心功能是要實(shí)現(xiàn)對(duì)各心理參數(shù)的實(shí)時(shí)監(jiān)護(hù),同時(shí)能及時(shí)計(jì)算和分析數(shù)據(jù),并能準(zhǔn)確快速地發(fā)現(xiàn)超標(biāo)的數(shù)據(jù),實(shí)現(xiàn)超標(biāo)報(bào)警功能。其中超標(biāo)報(bào)警接口和可擴(kuò)展的接口還需要編寫(xiě)相應(yīng)的驅(qū)動(dòng)程序。
3.1驅(qū)動(dòng)程序的編寫(xiě)與調(diào)試
超標(biāo)報(bào)警接口以及可擴(kuò)展的接口,都應(yīng)編寫(xiě)相應(yīng)的驅(qū)動(dòng)程序,其中超標(biāo)報(bào)警接口的驅(qū)動(dòng)程序的基本流程如下:
1)定義主設(shè)備號(hào); 2)驅(qū)動(dòng)初始化(或者是模塊的初始化); 3)實(shí)現(xiàn)文件操作,定義file_operations結(jié)構(gòu); 4)實(shí)現(xiàn)中斷服務(wù)(不是必須的);5)編譯該驅(qū)動(dòng)到內(nèi)核(或用insmod命令加載);6)測(cè)試設(shè)備。
超標(biāo)報(bào)警接口作為外接的一個(gè)設(shè)備,先定義以下設(shè)備號(hào),
#difine DEVICE_NAME “alarms” /*定義alarm設(shè)備的名字*/
#difine ALARM_MAJOR 254 /*定義alarm設(shè)備的主設(shè)備號(hào)*/
在明確I/O方式,alarm設(shè)備對(duì)應(yīng)的硬件資源之后,可以采用ioctl控制alarm設(shè)備。而編寫(xiě)Linux設(shè)備驅(qū)動(dòng)程序的主要工作就是編寫(xiě)子函數(shù)填充file_operations的各個(gè)字段。下面就是填充之后的file_operations,
struct file_operations test_fops = {read: read_test,
write: write_test,
open: open_test,
release: release_test};
上述各個(gè)子函數(shù)的功能如下:
open_test函數(shù)實(shí)現(xiàn)請(qǐng)求I/O內(nèi)存資源;映射寄存器地址并保存;讀取寄存器初始值并重新設(shè)置控制寄存器。release_test函數(shù)實(shí)現(xiàn) I/O內(nèi)存資源的釋放。read_test函數(shù)實(shí)現(xiàn)對(duì)寄存器當(dāng)前狀態(tài)的讀取,并將讀到的數(shù)據(jù)傳遞給應(yīng)用程序。write_test函數(shù)實(shí)現(xiàn)將應(yīng)用程序傳來(lái)的數(shù)據(jù)輸出。
PC機(jī)上調(diào)試完畢后,將此驅(qū)動(dòng)程序編譯進(jìn)嵌入式Linux的內(nèi)核前,需要進(jìn)行一定的修改和設(shè)置。在交叉編譯內(nèi)核時(shí),alarm.c文件會(huì)被自動(dòng)編譯并嵌入內(nèi)核。然后將編譯好的內(nèi)核制作成映像文件以備下載。最后編寫(xiě)一個(gè)測(cè)試程序,交叉編譯測(cè)試程序并將其添加到文件系統(tǒng)中去。將新的內(nèi)核映像以及文件系統(tǒng)下載到開(kāi)發(fā)板上。新的內(nèi)核運(yùn)行之后,在目錄/dev下創(chuàng)建設(shè)備,然后執(zhí)行測(cè)試程序即可。
3.2監(jiān)護(hù)軟件的實(shí)現(xiàn)
在嵌入式Linux中,采用功能強(qiáng)大而全面的GUI開(kāi)發(fā)工具能夠縮短開(kāi)發(fā)周期和降低開(kāi)發(fā)難度,本系統(tǒng)采用Qt/Embedded開(kāi)發(fā)監(jiān)護(hù)軟件[6]。
3.2.1程序設(shè)計(jì)及功能模塊結(jié)構(gòu)
Qt編程的優(yōu)點(diǎn)是Signal Slot機(jī)制,當(dāng)一個(gè)組件發(fā)出Signal時(shí),其他一個(gè)組件或多個(gè)組件可以通過(guò)Slot接收發(fā)來(lái)的Signal,組件本身也可以接收自己的Signal,這樣處理一個(gè)事件將變得非常容易[6]。在通用計(jì)算機(jī)系統(tǒng)開(kāi)發(fā)中普遍使用的模塊化設(shè)計(jì)技術(shù)需要更好地應(yīng)用于嵌入式系統(tǒng)[3]。從軟件層次角度而言,應(yīng)用軟件的模塊化相對(duì)容易實(shí)現(xiàn)。圖3所示是應(yīng)用軟件的功能模塊結(jié)構(gòu)圖,圖4所示是主程序的流程圖。
其中,數(shù)據(jù)的采集與控制是主控模塊,參數(shù)設(shè)置模塊通過(guò)獲取人機(jī)界面上的輸入的參數(shù)信息,對(duì)通信模塊以及數(shù)據(jù)分析處理模塊的各項(xiàng)參數(shù)進(jìn)行設(shè)定。又由于本系統(tǒng)中的各個(gè)人體生理參數(shù)監(jiān)護(hù)模塊采集的數(shù)據(jù)格式不一致,所以還需要一個(gè)格式轉(zhuǎn)換的過(guò)程,以方便顯示和存儲(chǔ)。
3.2.2通信模塊
在主控系統(tǒng)中,與下位機(jī)各個(gè)模塊的通信協(xié)議大致相同。在參數(shù)設(shè)置以后,下位機(jī)各模塊根據(jù)指令信息進(jìn)行生理參數(shù)監(jiān)測(cè)并上傳數(shù)據(jù)。這里以血壓測(cè)量模塊為例,簡(jiǎn)述如下:
采用RS232串口異步通信,1位起始位,8位數(shù)據(jù)位,1位停止位,無(wú)奇偶校驗(yàn),波特率2400b/s。傳輸數(shù)據(jù)采用ASCII模式。上位機(jī)到模塊的命令格式:<STX> ab;cd<ETX>,
其中<STX> (02) 是ASCII碼的正文起始標(biāo)志 ;“ab”是命令代碼對(duì)應(yīng)的ASCII碼值;“cd”是兩位16進(jìn)制校驗(yàn)和對(duì)應(yīng)的ASCII碼值。校驗(yàn)和是此前各位數(shù)值之和的低8位,不包括<STX> (02);<ETX>(03)是ASCII碼的正文結(jié)束標(biāo)志。如“02 30 31 3B 3B 44 37 03”表示開(kāi)始一次手動(dòng)測(cè)量。模塊到上位機(jī)的數(shù)據(jù)格式:<STX> abc; ghi; jki;mno;pqr <ETX>,其中“abc”,“ghi”,“jki”,“mno”,“pqr”分別代表當(dāng)前袖帶壓力值,收縮壓,舒張壓,平均壓,脈率的各 10進(jìn)制位的數(shù)所對(duì)應(yīng)的ASCII碼值。
3.2.3數(shù)據(jù)顯示模塊
數(shù)據(jù)顯示模塊中,主要是能實(shí)現(xiàn)動(dòng)態(tài)地顯示波形,其中關(guān)鍵的函數(shù)就是paintEvent( QPaintEvent * ),函數(shù)的主要代碼為:
#include <qpainter.h> //必須包含的頭文件
void ConnectWidget::paintEvent( QPaintEvent * ){
QPainter paint( this );
for ( int i=0; i<count-1; i++ ) { // 連接所有的點(diǎn)
for ( int j=i+1; j<count; j++ ) {
paint.setPen( colors[rand()%MAXCOLORS] ); // 隨機(jī)設(shè)畫(huà)筆的顏色,也可確定顏色
paint.drawLine( points[i], points[j] ); }}}// 畫(huà)線
通過(guò)這個(gè)函數(shù),可以將每個(gè)點(diǎn)連起來(lái),形成線,然后不斷更新它,就能實(shí)現(xiàn)動(dòng)態(tài)地顯示波形。當(dāng)更新時(shí),調(diào)用以下函數(shù):
void DrawView::paintEvent( QPaintEvent * ){
QPainter paint( this );
drawIt( &paint );}
3.2.4程序的界面
由于在嵌入式Linux系統(tǒng)下不便于截圖,圖5在REDHAT9.0下的測(cè)試界面。
4、結(jié)論
目前正在研制當(dāng)中的監(jiān)護(hù)系統(tǒng)是在基于ARM微處理器的硬件平臺(tái)上實(shí)現(xiàn)的,采用了嵌入式Linux操作系統(tǒng),具有多參數(shù)、易定制、可擴(kuò)展、高穩(wěn)定性等優(yōu)點(diǎn)。實(shí)驗(yàn)表明,本監(jiān)護(hù)系統(tǒng)能夠準(zhǔn)確實(shí)時(shí)地檢測(cè)用戶的心電(ECG)、呼吸(REST)、無(wú)創(chuàng)血壓(NIBP)、血氧飽和度(SPO2)、體溫等五個(gè)參數(shù),并能對(duì)其進(jìn)行一定的數(shù)據(jù)分析,能準(zhǔn)確快速地發(fā)現(xiàn)超標(biāo)的數(shù)據(jù),實(shí)現(xiàn)超標(biāo)報(bào)警功能。經(jīng)實(shí)驗(yàn)證明,該系統(tǒng)運(yùn)行可靠,已達(dá)到設(shè)計(jì)的要求,具有很好的應(yīng)用前景。
5、本文作者創(chuàng)新點(diǎn):
在ARM微處理器的硬件平臺(tái)上,采用了嵌入式Linux操作系統(tǒng)作為主控系統(tǒng)作為生理參數(shù)監(jiān)護(hù)儀的控制系統(tǒng),使得監(jiān)護(hù)系統(tǒng)具有多參數(shù)、易定制、可擴(kuò)展、高穩(wěn)定性等優(yōu)點(diǎn)。系統(tǒng)的應(yīng)用軟件采用Qt/Embedded開(kāi)發(fā),縮短了開(kāi)發(fā)周期和降低了開(kāi)發(fā)難度,同時(shí),監(jiān)護(hù)系統(tǒng)還具有非常人性化的人機(jī)界面。
參考文獻(xiàn):
1. 陳賾。ARM9嵌入式技術(shù)及Linux高級(jí)實(shí)踐教程[M].北京:北京航空航天大學(xué)出版社,2005.
2.周紅波?;谇度胧讲僮飨到y(tǒng)的開(kāi)發(fā)方法[J].微計(jì)算機(jī)信息,2006,7-2:55-57
3.王田苗。嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開(kāi)發(fā)[M].北京:清華大學(xué)出版社,2002.
4.唐建東,周鵬?;贚inux的嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2002,28(6):254-256.
5.鄒思軼。嵌入式Linux設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版社,2002.
6.http://www.qtcn.org/