《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于ARM9和CPLD的四導心音采集顯示系統(tǒng)的設計
基于ARM9和CPLD的四導心音采集顯示系統(tǒng)的設計
來源:電子技術應用2013年第12期
劉 洋,王海濱,,趙 紅,邵 丹,,張 凱
西華大學 電氣信息學院,,四川 成都610039
摘要: 介紹一個基于ARM920T內(nèi)核的S3C2440A微處理器和CPLD芯片EPM570T144C5N實現(xiàn)的四導心音采集顯示系統(tǒng)。系統(tǒng)的模擬電路部分對心音信號進行放大去噪,;數(shù)字部分通過CPLD控制高速A/D轉(zhuǎn)換并通過模擬SPI接口將數(shù)據(jù)傳給ARM9,。選用Linux2.6.30作為操作系統(tǒng),設計了ARM9的SPI驅(qū)動和基于Qt4.7以及Qwt的應用程序,。實際運行情況表明,,本系統(tǒng)運行流暢,,實現(xiàn)了實時采集心音信號、顯示波形,、儲存心音數(shù)據(jù),。
中圖分類號: TP393
文獻標識碼: A
文章編號: 0258-7998(2013)12-0018-04
The design of four-channel heart sound acquisition and display system based on ARM9 and CPLD
Liu Yang,Wang Haibing,,Zhao Hong,,Shao Dan,Zhang Kai
School of Electrical and Information Engineering,,Xihua University, Chengdu 610039,,China
Abstract: This paper introduces a four-channel heart sound acquisition and display system which is based on microprocessor S3C2440A whose core is ARM920T and CPLD chip EPM570T144C5N. In this system,the analog circuit amplifies heart sounds and filters the noise, and the digital part controls high-speed A/D converter and simulation SPI interface to transmit data to ARM9 through CPLD. Linux2.6.30 is used as operation system. SPI driver of ARM9 and application are designed based on Qt4.7 and Qwt. The practical application shows that the system runs smoothly and achieves real-time acquisition, waveform display and heart sound data storage.
Key words : heart sound,;acquisition and display,;CPLD; ARM9,;Qt4.7

    隨著我國人口老齡化的加快以及生活水平的提高,,預計在今后的20年內(nèi),心血管疾病發(fā)病率將超過50%,,如不加以控制,,到2030年我國心血管疾病患者將增加2 000萬人以上,與之有關的死亡人數(shù)將增加700多萬人[1],。心臟聽診往往作為心血管疾病早期診斷的主要手段,,但是采用傳統(tǒng)的聽診方式存在許多問題,比如難以捕捉和分辨微弱的生理信號,,長時間聽診易造成聽力疲勞,,診斷結(jié)果易受聽診者的主觀影響。近幾年來隨著科技的進步興起了一些電子聽診器,,比如美國BIOPAC公司生產(chǎn)的MP150型16通道生理信號記錄分析儀,、日本OLYMPUS公司生產(chǎn)的單道心音數(shù)字錄音筆等。前者可以采集多個聽診部位的信號,,數(shù)據(jù)更全面但是價格昂貴,,且體積較大;后者的價格便宜,,但波形顯示效果不好,,不能同時提供多瓣膜病例信息。因此,,如何通過工程技術手段實現(xiàn)設備的高效率,、低成本以及便于使用等成為研究的熱點。

    隨著嵌入式技術的不斷發(fā)展,,特別是處理器運算能力的不斷提升以及一些優(yōu)秀的圖形用戶界面軟件(如國產(chǎn)MiniGUI,、Trolltech公司出品的Qt等)的出現(xiàn),,使醫(yī)療設備更加小型化,使用也變得更加容易,。本文以三星公司生產(chǎn)的基于ARM920T內(nèi)核的S3C2440A作為主控制器,,以Linux為操作系統(tǒng),開發(fā)了四導心音采集顯示系統(tǒng),。
1 系統(tǒng)總體設計
    系統(tǒng)總體結(jié)構(gòu)如圖1所示,,包括以下幾個模塊:
    (1)信號采集調(diào)理模塊,完成對主動脈,、肺動脈,、二尖瓣、三尖瓣心音信號的采集以及放大與去噪,;(2)數(shù)字信號處理模塊,,選用高性能的A/D芯片再配合CPLD的控制進行模/數(shù)轉(zhuǎn)換,CPLD通過模擬SPI接口將數(shù)據(jù)傳給ARM9,;(3)ARM9核心處理模塊,,核心模塊主要由S3C2440A、64 MB SDRAM以及512 MB Nandflash 組成,,完成對數(shù)據(jù)的接收保存,,并通過10英寸液晶屏顯示心音波形,在Nandflash中單獨劃分出400 MB的空間來保存心音文件,,通過移植USB Gadget驅(qū)動實現(xiàn)當采集板通過USB接口插上電腦后能像U盤一樣讀取這400 MB空間中的內(nèi)容,。

2 系統(tǒng)硬件設計
2.1 信號調(diào)理模塊設計

 系統(tǒng)使用了美國3M公司生產(chǎn)的Littmann和ClassicIISE聽診頭,另外,,在聽診頭上加入了一種新型的貼膜,,不僅有利于粘住身體所測部位,而且能保證采集的音質(zhì)不變,。心音傳感器模塊能將心臟搏動信號轉(zhuǎn)化為低阻抗音頻信號[2],。針對心音信號具有的信號微弱、易受干擾等特點,,首先要進行初級放大以滿足后面濾波的需求,,在經(jīng)過帶通濾波電路濾去不屬于心音信號頻帶的部分后,再經(jīng)工頻陷波電路,,最后經(jīng)過主放大電路。
    (1)前置放大電路采用了TI公司生產(chǎn)的一款低功耗,、低噪聲,、高輸入阻抗的運算放大器TLC2252。電路如圖2所示,,C1和R2組成的電路起到兩個作用:(1)阻止C1左端的直流電流通過,;(2)允許心音傳感器輸出的交流小信號通過并傳遞給后面的放大器,,C2、R3,、R4,、R5構(gòu)成同相放大電路,其具有輸入阻抗很高,、輸出電阻很低的特點,,非常適合于前置放大電路。

    (2)前置放大電路輸出的信號并不是純粹的心音信號,,里面還含有一部分低頻信號,,比如傳感器與皮膚的摩擦、呼吸噪音等[3],。當采集時遇到咳嗽聲音,、器件掉落的聲音可能會引入高頻噪聲。為了不影響心音信號的分析,,必須將其濾除,。在此設計了帶通濾波器,前面為二階壓控電壓源低通濾波器,,低通濾波電路主要濾掉信號中高于心音信號頻率范圍的信號,,低通濾波器的上限設為800 Hz。由于心音頻率的下線為2~5 Hz,,為了不損失低頻分量,,后面高通濾波器的截止頻率設置為2 Hz[4]。采用二階壓控電壓源低通濾波器,,電路如圖3所示,。

    (3)系統(tǒng)采用電源適配器來供電,不可避免地引入了50 Hz的工頻干擾,,而它正好落在心音信號的頻帶范圍內(nèi),,因此需要采用50 Hz工頻陷波電路將其濾除。目前廣泛使用的對稱型雙T有源濾波陷波器,,但是對稱型雙T有源陷波器對電路元件的對稱性要求較高,,如不能滿足對稱性要求則會極大影響陷波器的中心頻率和Q值。因此,,本系統(tǒng)采用二階無限增益多級反饋有源陷波器[5],,如圖4所示,其中C7=C8=C,,中心頻率的計算可參考式(1),,Q值的計算可參考式(2)。

2.2 數(shù)字電路設計
    考慮到轉(zhuǎn)化精度和采樣頻率,,沒有采用S3C2440自帶的A/D,,而是選用了Maxim公司的四通道,、16位量化精度芯片MAX11044。它具有固定的轉(zhuǎn)換時間,,能同時對四個通道采樣,,采樣頻率最高可達250 kHz,可保證對心音信號進行無失真采集,。MAX11044輸入電壓范圍為-5 V~+5 V,,輸入阻抗高達1 GΩ,對于適當放大后的心音信號無需電平抬升及外圍阻抗匹配電路,,可直接進行采用量化,,從而簡化外圍電路。
    通過控制MAX11044的CONVST引腳拉低持續(xù)時間來達到對采樣頻率的設置,。當CONVST引腳為低時對模擬信號進行捕捉,;當CONVST引腳為高時進行轉(zhuǎn)換。由于心音信號的頻帶范圍在20~800 Hz以內(nèi),,并依據(jù)耐奎斯特采樣定理和實際的硬件處理能力,,A/D的采樣率設定為10 kHz。由于MAX11044數(shù)據(jù)輸出為并口,,而且還需要多根控制線,,在此選用Altera公司的CPLD芯片EPM570T144C5N作為數(shù)字電路控制核心,通過編寫Verilog程序來控制,,主要功能包括:(1)接收ARM9發(fā)來的命令控制A/D開啟與關閉,;(2)設置A/D的采樣頻率;(3)獲取A/D轉(zhuǎn)換的數(shù)據(jù),;(4)模擬SPI接口將數(shù)據(jù)通過SPI接口傳送給ARM9,。
3 系統(tǒng)軟件設計
3.1 驅(qū)動程序的設計

    驅(qū)動程序是操作系統(tǒng)與硬件的直接接口,驅(qū)動程序屏蔽了硬件的細節(jié),,使得應用程序可以像操作普通文件一樣對硬件進行操作,。在系統(tǒng)中S3C2440利用SPI接口來接收CPLD發(fā)來的數(shù)據(jù)。SPI是一種高速,、全雙工,、同步的通信總線,并且在芯片的管腳上只占用4根線,, S3C2440芯片上集成了兩個SPI控制器,,通過配置相關寄存器可以設置SPI的工作方式、主從關系,、接收數(shù)據(jù)模式等,。考慮到接收到的數(shù)據(jù)量大以及減少CPU的使用率,,在此采用了DMA的數(shù)據(jù)接收方式,,CPLD有數(shù)據(jù)就會自動發(fā)送過來,所以選擇讓ARM9做從設備,。
    驅(qū)動程序的接口用來描述驅(qū)動程序與設備的交互,,當應用程序操作設備文件時調(diào)用open、read,、write,、close等函數(shù),最終會調(diào)用對應的接口函數(shù),,這些接口函數(shù)封裝在file_operations結(jié)構(gòu)中,,其結(jié)構(gòu)如下:
    static const struct file_operations spi_fops =
    {    .owner= THIS_MODULE,//指向擁有該結(jié)構(gòu)的模塊
        .open= spi_open,//打開設備接口函數(shù)
        .read= spi_read,//讀接口函數(shù)
        .release=spi_release,//釋放設備接口函數(shù)
    };
    (1)spi_open函數(shù)主要完成硬件的初始化工作,使用s3c2410_gpio_cfgpin()函數(shù)將所用到的引腳設置為SPI功能,;開啟SPI時鐘,,并且配置SPI有關的寄存器,主要包括讀寫模式,、工作方式,、主從關系等;由于使用了DMA的讀寫模式,,因此需要配置相關的操作,,包括設置DMA源和目的物理地址以及所在總線、緩存大小,、傳輸模式,;最后開啟DMA。
    (2)當應用程序調(diào)用read時,,spi_read函數(shù)將被執(zhí)行,,在spi_read函數(shù)外,需要初始化等待隊列dma_waitq和全局變量ev_dma,在spi_read函數(shù)中首先調(diào)用wait_event_interruputible(dma_waitq, ev_dma)函數(shù),。ev_dma為等待條件,,當它為0時進程將休眠;當它為1時函數(shù)返回0,,不休眠,。當DMA的緩存達到了設定的值時,將產(chǎn)生DMA中斷進入中斷處理函數(shù)irqreturn_t DMA_irq(int irq,,void *devid),,在中斷函數(shù)中將全局變量ev_dma設置為1,并且調(diào)用wake_up_interruptible(&dma_waitq)函數(shù),,它將喚醒dma_waitq等待隊列上休眠的進程,,然后在 spi_read函數(shù)中調(diào)用copy_to_user()函數(shù)把DMA緩存的數(shù)據(jù)拷貝到用戶空間。
    (3)當應用程序調(diào)用close函數(shù)時,相當于調(diào)用驅(qū)動程序中的spi_release函數(shù),,主要是關閉DMA通道,。
3.2 Qt程序的設計
    Qt是一個跨平臺的C++圖形用戶界面程序開發(fā)框架,Qt開發(fā)的軟件移植性非常好,,編寫好的代碼只需使用不同平臺的編譯器編譯,,而不用修改代碼,即可運行在不同的平臺,。軟件使用了Qt/Embeded4.7以及擴展庫Qwt來開發(fā)的,,Qwt是一個基于Qt的擴展類庫,包含了大量用于工程開發(fā)編程的GUI部件和輔助工具,。除了二維繪圖控件類外,,它還提供了諸如刻度、滑塊,、轉(zhuǎn)盤等控件類供開發(fā)使用[6],。采用的Qwt版本是qwt-6.0.1。程序流程如圖6所示,。

    系統(tǒng)以Qt Creator為IDE,,首先將Qwt導入Qt Creator中,利用交叉編譯工具進行編譯生成ARM版本的動態(tài)鏈接庫,,將這些鏈接庫拷貝到采集板文件系統(tǒng)的“/lib”目錄下,。
3.2.1 界面布局及設置坐標軸及背景網(wǎng)格
    在布局界面中使用了Qt中的布局管理器生成一個.ui的文件,通過拖拉左邊的控件進行布局,,非常方便,。
    網(wǎng)格主要是描述畫布中X和Y軸的刻度劃分和網(wǎng)格線的顏色,用到了類庫中的QwtPlotGrid類,;坐標軸的設置主要是對橫軸,、縱軸的刻度及其所代表的意思進行設置。使用到的相關函數(shù)如下:
    void  QwtPlot::setAxisTitle(int axisTd, const QwtTex &);
    void  QwtPlot::setAxisScale(int axisId, double min,
double max, double step=0);
    void  QwtPlot::setBackgroundRole(QPalette::colorRole);
3.2.2 繪制波形
    首先使用類庫中的QwtPlotCurve類生成4個繪圖工具,,然后設置這4個繪圖工具的畫筆顏色以及依附的畫布,,相關函數(shù)如下:
    void QwtPlotCurve::setPen(const Qpen &);
    void QwtPlotCurve::attach(QwtPlot *plot);
    在點擊開始按鈕后就啟動了一個定時器,每過5 ms就會自動觸發(fā)一次timerEvent事件,,在事件中通過調(diào)用read函數(shù)接收CPLD傳來的數(shù)據(jù),。由于一次接收到的數(shù)據(jù)是4個通道的64位二進制數(shù),因此需要將它提取出來,,對應于每個通道轉(zhuǎn)換為十進制,,然后存放到y(tǒng)Data數(shù)組中。有了繪圖數(shù)據(jù),,就可以通過調(diào)用QwtPlotCurve類的繪圖函數(shù)實現(xiàn)繪圖,,關鍵函數(shù)是:void QwtPlotCurve::setRawSamples(const double *xData, const double *yData, int size);函數(shù)中xData和yData指針分別指向一個一維數(shù)組,,size表示要在畫布上畫多少個點。在沒有外部中斷的情況下將循環(huán)畫圖,,屏幕上會出現(xiàn)連續(xù)的波形,。
3.2.3 按鍵事件

 


    在本系統(tǒng)中有3個按鍵,分別是開始,、停止,、保存。當點擊開始按鈕時將通過open函數(shù)打開spi_slave設備文件代碼為:fd = ::open(“/dev/spi_slave”, O_RDWR); O_RDWR表示以只讀方式打開文件,,fd為open函數(shù)返回的文件描述符。點擊停止按鈕時將調(diào)用close函數(shù)停止接收數(shù)據(jù)并對屏幕清屏,。當點擊屏幕上的保存按鈕時將彈出一個軟件盤,,提示輸入要保存文件的名字,點擊確認之后文件將以txt格式被保存在“/mnt/udisk”目錄中,,最后將接收到的全部數(shù)據(jù)寫入剛才創(chuàng)建的文件中,。
    本文設計了四導心音采集顯示系統(tǒng),采用4個聽診頭同時檢測臨床4個聽診部位(主動脈瓣,、肺動脈瓣,、三尖瓣和二尖瓣)的心音信號。從硬軟兩方面詳細闡述了系統(tǒng)的設計流程,。通過觸摸屏來操作硬件非常方便,,性價比高。本設計為后續(xù)的心音分析提供了可靠的數(shù)據(jù),。
參考文獻
[1] 周婷玉,,施元雪.新華網(wǎng).我國成立“國家心血管病中心” [N/OL].(2010-08-13)[2013-4-20].http://news.xinhuanet. com/2010-08/13/c_13444113.htm.
[2] 周紅標,蔣鼎國,,柯永斌,,等.基于STC單片機和LabVIEW的心音信號檢測系統(tǒng)[J].電子技術應用,2012,,38(1):31-33.
[3] 王曉燕,,曾慶寧,栗秀尹.基于FPGA的心音信號采集[J].微型機與應用,,2012,,31(11):28-30.
[4] 邢素霞,陳天華.基于DSP的心音信號采集與分析[J].生物醫(yī)學工程學雜志,,2011,,28(2):273-276.
[5] 史志懷,萬遂人.腦電信號采集中工頻陷波電路的設計[J]. 醫(yī)療裝備,,2009,,22(11):12-13.
[6] 盧華偉.基于Qt/Qwt的操作監(jiān)控系統(tǒng)的設計與實現(xiàn)[J].微計算機信息,2010,26(1):72-74.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。