第 1 章 概述 1
第 2 章 心率監測系統結構 3
第 3 章 硬件系統設計 5
3.1.1 AT89C51 簡介
- 心率信號取樣 7
- 光電傳感器的原理 7
- 光電傳感器的結構 8
- 光電傳感器檢測原理 8
- 信號取樣電路 9
3.3.1 LM324 放大器 10 3.3.2 低通放大電路 10
- 單片機控制電路 14
- LED 顯示電路 14
- LED 的結構及工作原理 15
- LED 數碼管的顯示方式 16
- 報警電路 16
- 硬件系統原理 17
第 4 章 軟件系統設計 18
- 主程序流程 18
- 中斷程序流程 18
- 顯示程序流程 19
第 5 章 系統干擾分析及處理措施 20
- 環境光干擾及處理措施 20
- 電磁干擾及處理措施 20
- 測量過程中運動噪聲干擾及處理措施 21
第 6 章 系統測試結果 22 
第 7 章 總結與展望 25 參考文獻 26 附 錄 28 致 謝 34 
第1章 概述 心率(Heart Rate)是用來描述心跳周期的專業術語,是指心臟每分鐘跳動的次數, 它不僅是反映心臟功能強弱的重要標志,也是反映人體運動強度的生理指標。 心率攜帶有豐富的人體健康狀況信息。自我國最早的脈學專著《脈經》問世以來,脈學理論得到不斷發展和提高。在中醫四診(望、聞、問、切)中,脈診具有非常重要的位置。它是我國傳統醫學中最具特色的一項診斷方法,歷史悠久,內容豐富,是中醫“整體觀念”、“辨證論證”基本精神的體現與應用。脈診作為“綠色無創”診斷的手法,得到了中外人士的關注。但由于中醫是靠手指獲取心率信息,雖然脈診具有簡便、無創、無痛的特點易為患者接受,然而在長期的醫療實踐中也暴露出一些缺陷[1]。 進入 21 世紀以來,科技不斷的發展,電子產品越來越多,系統的價格越來越便宜;產品的科技含量比例也越來越大,性能越來越可靠。人們日常的生產、生活都在慢慢走向高度自動化和智能化。 醫院的護士每天都要給住院的病人把脈記錄病人每分鐘心跳數,方法是用聽診器放在胸口處,根據心臟的跳動進行計數。為了節省時間,一般不會作 1 分鐘 的測量,通常是測量 10 秒內的心跳數,再把結果乘以6 得到每分鐘的心跳數,這樣做還是比較費時,而且精度也不高。為了提高心率測量的精確性與速度,多種心率監測儀被運用到醫學上來,從而開辟了一條全新的醫學診斷方法。 隨著國民經濟的不斷發展,人們生活水平不斷提高,健康已成了人們關注的 焦點和追求的目標。參加鍛煉無疑是保持健康的最佳方法,但很多人急于求成, 往往適得其反,達不到鍛煉的效果,甚至可能對身體造成一定程度的傷害。目前 市場上單純的跑步計步器不能同時監測人體生理參數并實時顯示,反饋給鍛煉者。心率監測儀是一種可對跑步者跑步等各種身體運動心率參數進行實時監測的儀 器,并能將實時監測的心率參數顯示出來。目前心率監測儀[2]在多個領域被廣泛應用,除了應用于醫學領域,如無創心血管功能檢測、妊高癥檢測、中醫脈象、 
脈率檢測等等,商業應用也不斷拓展,如運動、健身器材中的心率測試都用到了技術先進的心率監控儀。 隨著科學技術的發展,心率監測技術也越來越先進,對心率的測量精度也越來越高,國內外先后研制了不同類型的心率監測系統,其關鍵在于對心率傳感器的研究。起初用于體育測量的心率測試儀主要集中在對接觸式傳感器的研究,利用此類傳感器所研制的指脈、耳脈等測量儀各有其優缺點。指脈測量比較方便、簡單,但因為手指上汗腺較多,指夾常年使用,污漬會使測量靈敏度下降;耳脈測量比較干凈,傳感器使用環境污染少,易維護,但耳脈較弱,尤其是當季節變化時,所測信號易受環境溫度影響,造成測量結果不準確[3]。過去在醫院臨床監護和中老年保健中出現的日常監護儀器,如便攜式電子血壓計,可以完成心率的測量,但是這種便攜式電子血壓計利用微型氣泵加壓橡膠氣囊,每次測量都需要一個加壓和減壓的過程,存在體積龐大、加減壓過程造成不適、心率檢測的精確度低等缺點。 近年來國內外致力于開發無創非接觸式傳感器,這類傳感器的重要特征是測量探測部分不侵入機體,不會造成機體創傷,能夠自動消除系統誤差,測量精度高,通常在體表間接測量人體的生理和生化參數。 人體心室周期性的收縮和舒張引起主動脈的收縮和舒張,是血壓以波的形式 從主動脈根部開始沿著整個動脈系統傳播,這種波成為心率波[4]。從心率波中提取人體的病理信息作為臨床診斷和治療的依據,歷來都受到了中外醫學界的重視。心率波所呈現出的形態(波形)、強度(波幅)、速率(波速)和節律(周期)等方面的綜合信息,在很大程度上反映出人體心血管系統中許多病理的血流特征,因此對心率波采集和處理具有很高的醫學價值和應用前景[5]。但人體的生物信號多屬于強噪聲背景下的低頻弱信號,心率波信號更是低頻微弱的非電生理信號,因此必需經 過放大和濾波以滿足采集的要求。 
第2章 心率監測系統結構 心率監測系統的設計,必須是通過采集人體心率變化引起的一些生物信號, 然后把生物信號轉化為物理信號,使得這些變化的物理信號能夠表達人體的心率變化,最后要得出每分鐘的心跳次數,就需要通過相應的硬件電路及芯片來處理物理變化并存儲心跳次數。 光電式心率監測系統是利用光電傳感器作為變換原件,把采集到的用于檢測心臟跳動的紅外光轉換成電信號,用電子儀表進行測量和顯示的裝置。本系統的組成包括光電傳感器、信號處理電路、單片機電路、數碼顯示、電源等部分。光電傳感器是將非電量(紅外光)轉換成電量的轉換元件,由紅外發射二極管和接收三極管組成,可以將接收到的紅外光按一定的函數關系(通常是線性關系)轉換成便于測量的物理量(如電壓、電流或頻率等)輸出。信號處理電路主要處理光電傳感器采集到的低頻信號的模擬電路(包括放大、濾波、整形等)。單片機電路利用單片機自身的定時中斷計數功能對輸入的脈沖電平進行運算得出心率(包括AT89C51、外部晶振、外部中斷等)。電源電路向光電傳感器、信號處理、單片機提供的電源,可以是5V-9V的交流或直流的穩壓電源。 本設計采用單片機AT89C51為控制核心,實現心率監測系統的基本測量功能。該系統的硬件框圖如下圖2.1 所示: 
圖2.1 心率監測系統的工作原理 當手指放在紅外發射二極管和接收三極管中間,隨著心臟的跳動,血管中血液的流量將發生變換。由于手指放在光的傳遞路徑中,血管中血液飽和度的變化會引起光的強度發生變化,因此和心跳的節拍相對應,紅外接收三極管的電流也跟著改變,這就使紅外接收三極管輸出脈沖信號。該信號經放大、濾波、整形后輸出,輸出的脈沖信號作為單片機外部中斷信號。單片機電路對輸入的脈沖信號進行計算處理之后把結果送到數碼管顯示。 
第3章 硬件系統設計 本系統基于51系列單片機來實現功能,因為系統沒有其它高標準的要求,我們最終選擇了比較普遍的AT89C51單片機來實現系統設計。 AT89C5l 是美國 ATMEL公司生產的低電壓、高性能CMOS 8 位單片機,片內含 4k bytes 可反復擦寫的只讀程序存儲器(PEROM)和128 bytes 隨機存取數據存儲器(RAM),器件采用 ATMEL公司高密度、非易失性存儲技術生產,兼容 MCS-51 指令系統,片內置通用 8 位中央處理器(CPU)和 Flash 存儲單元,功能強大。 ·與 MCS-51 產品指令系統完全兼容 ·1000 次擦寫周期 ·全靜態操作:OHz--24MHz ·三級加密程序存儲器 ·128*8 字節的內部RAM ·32 個可編程 I/O 口線 ·2 個 16 位定時/計數器 ·6 個中斷源 ·可編程串行 UART 通道 此次設計所使用的AT89C51 的封裝形式是DIP40。如圖3.1 所示。 
圖3.1 AT89C51的封裝形式 引腳功能: ·Vcc:電源電壓 ·GND:接地 ·P0 口:P0 口是一組 8 位漏極開路型雙向 I/0 口,也是地址/數據總線復用口。作為輸出口用時,每位能吸收電流方式驅動 8 個TTL 邏輯門電路,對端口寫“1” 可作為高阻抗轉入端用。 ·Pl 口:P1 是—個帶內部上拉電阻的 8 位雙向 I/O 口,P1 的輸出緩沖級可驅動 4 個 TTL 邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平,此時可作輸入口。作輸入口使用時,因內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。 ·P2 口:P2 是一個帶有內部上拉電阻的 8 位雙向 I/O 口,P2 的輸出緩沖級可驅動 - 個TTL 邏輯門電路。對端口寫“1”,通過內部的上拉電阻把端口拉到高電平, 此時可作輸入口,作輸入口使用時,因為內部存在上拉電阻,某個引腳被外部信號拉低時會輸出一個電流。
·P3口:①可以作為輸入/輸出口,外接輸入/輸出設備;②作為第二功能使用。 
·RST:復位輸入。當振蕩器工作時,RST 引腳會出現兩個機器周期以上高電平將使單片機復位。 ·ALE/PROG:當訪問外部程序存儲器或數據存儲器時, ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低 8 位字節。即使不訪問外部存儲器,ALE 仍能以時鐘振器頻率的 1/6 輸出固定的正脈沖信號,因此它可對外輸出時鐘或用于定時目的。 ·PSEN:程序存儲允許(PSEN)輸出是外部程序存儲器的讀選通信號,當 AT89C51 由外部程序存儲器取指令(或數據)時.每個機器周期兩次PSEN 有效,即輸出兩個脈沖。在此期間,當訪問外部數據存儲器,這兩次有效的 PSEN 信號不出現。 ·EA/VPP:EA =0,單片機只訪問外部程序存儲器。EA =1,單片機訪問內部程序存儲器。 .XTAL1:振蕩器反相放大器及內部時鐘發生器的輸入端。 .XTAL2:振蕩器反相放大器的輸出端。 目前心率監測系統有以下幾種檢測方法:光電容積脈搏波法、液體耦合腔心率傳感器、壓阻式心率傳感器以及應變式心率傳感器。近年來,光電檢測技術在臨床醫學應用中發展很快 ,主要由于光能避開強烈的電磁干擾 , 具有很高的絕緣性,可非侵入地檢測病人各種癥狀信息,具有結構簡單、無損傷、精度高、可重復等優點[6]。用光電法提取指尖脈搏光信息受到了從事生物醫學儀器工作專家和學者的重視。 根據朗伯一比爾(Lamber—Beer)定律,物質在一定波長處的吸光度和其濃度成正比。當恒定波長的光照射到人體組織上時,通過人體組織的吸收、反射衰減后, 測量到的光強將在一定程度上反映了被照射部位組織的結構特征。 心率主要由人體動脈舒張和收縮產生的,在人體指尖組織中的動脈成分含量高,而且指尖厚度相對其他人體組織而言比較薄,透過手指后檢測到的光強相對較大,因此光電式脈搏傳感器的測量部位通常在人體指尖。 手指組織可以分成皮膚、肌肉、骨骼等非血液組織和血液組織,其中非血液 
組織光的吸收量是恒定的。在血液中,靜脈血的搏動相對于動脈血來說十分微弱, 可以忽略。因此可以認為光透過手指后的變化僅由動脈血的搏動引起,那么在恒 定波長的光照下,通過檢測透過手指的光強將可以間接測量到人體的心率信號[7]。 傳感器由紅外發光二級管和接收三極管組成。采用 GaAs 紅外發光二極管作為光源時,可基本抑制由呼吸運動造成的心率波曲線的漂移。紅外接收三極管在紅外光照射下能產生電能,它的特性是將光信號轉換為電信號。在本設計中,紅外接收三極管和紅外發射二極管相對擺放以獲得最佳的指向特性。 
從光源發出的光除了被手指組織吸收以外,一部分由血液漫反射返回,其余部分透射出來。光電式心率傳感器[8]按照光的接收方式可分為透射式和反射式兩種。其中透射式的發射光源與光敏接收器件的距離相等并且對稱布置,這種方法可較好地反映出心律的時間關系。因此本系統采用了指套式的透射型光電傳感器 , 實現了光電隔離,減少了對后級模擬電路的干擾。結構如圖 3.2 所示。
圖 3.2 透射式光電傳感器 隨著心臟的跳動,人體組織半透明度隨之改變:當血液送到人體組織時,組織的半透明度減小,當血液流回心臟,組織半透明度則增大;這種現象在人體組織較薄的手指尖、耳垂等部位最明顯[9]。因此本設計將紅外發光二極管產生的紅外線照射到人體手指部位,經過手指組織的反射和衰減由裝在該部位旁邊的光敏三管來接收其透射光并轉換成電信號。由于手指動脈血在血液循環過程中呈周期性的脈動變化,所以它對光的反射和衰減也是周期性脈動 , 于是紅外接收三極管輸出信號的變化也就反映了動脈血的脈動變化。只要把此電信號轉換成脈沖并進行整形、計數和顯示[10],即可實時的測出心臟跳動的次數。 
硬件電路中,關鍵部分在于心率信號的檢測。系統采用紅色發光二極管和硫化鎘光敏電阻組成透射遮光指套式光電傳感器。紅色發光二極管穩定性好,遮光指套式的裝置減少了外界光的干擾,只需將待測手指插入,便可進行測量.測試時,被測手指正好處在發光二極管和光敏電阻之間,這樣一來,光敏電阻的阻值便將隨著手指的血容量的變化而變化。 心率信號取樣電路如圖 3.3 所示,U4 是紅外發射和接收裝置,由于紅外發射二極管中的電流越大,發射角度越小,產生的發射強度就越大,所以對 R17 阻值的選取要求較高。R17 選擇 270Ω 同時也是基于紅外接收三極管感應紅外光靈敏度考慮的。R17 過大,通過紅外發射二極管的電流偏小,紅外接收三極管無法區別有心跳和無心跳時的信號。反之,R17 過小,通過的電流偏大,紅外接收三極管也不能準確地辨別有心跳和無心跳時的信號。 硬件系統是通過檢測指尖來采取脈搏信號,從而得到心率信號。當手指離開傳感器或檢測到較強的干擾光線時,輸入端的直流電壓會出現很大變化,為了使它不致泄露到 U3A 輸入端而造成錯誤指示,用 C8、C10 串聯組成的雙極性耦合電容把它隔斷[11]。 圖 3.3 信號采集電路 
LM324 是四運放集成電路,它采用14 腳雙列直插塑料封裝.它的內部包含四組形式完全相同的運算放大器,除電源共用外,四組運放相互獨立。 

每一組運算放大器可用圖3.4所示符號來表示,它有5個引出腳,其中“+”、“-”為兩個信號輸入端,“V+”、“V-”為正、負電源端,“Vo”為輸出端。兩個信號輸入端中, Vi-(-)為反相輸入端,表示運放輸出端Vo 的信號與該輸入端的相位相反;Vi+(+)為同相輸入端,表示運放輸出端Vo 的信號與該輸入端的相位相同。LM324 的引腳排列見圖3.5。
圖3.4 運算放大器 圖3.5 引腳排列 由于LM324 四運放電路具有電源電壓范圍寬,靜態功耗小,價格低廉等優點, 被廣泛應用在各種電路中。 由于通過光電傳感器接收到的信號極其微弱,容易被其外圍電路所干擾, 因此系統必須為信號處理電路提供電源。檢測到的信號經過 LM324放大器放大后仍存在較大的偏置電壓,因此必須在信號輸入端加濾波電容,將電路中的直流成份濾掉并保證不影響交流信號的傳遞。 該系統按人體心率在運動后跳動次數達 200 次/分鐘的計算來設計低通放大器,如圖3.6 所示。R24、C6 組成低通濾波器以進一步濾除殘留的干擾,截止頻率由 R24、C6 決定,運放 U3A 將信號放大,放大倍數由 R22 和 R24 的比值決定。經過低通放大后輸出的信號是疊加有噪聲的脈動正弦波[12]。 
圖 3.6 信號低通放大電路 根據一階有源濾波電路的傳遞函數,可得: 按人體心率跳動為 200 次/分鐘時的頻率是 3.3 Hz 考慮,低頻特性是令人滿意 的。經過低通放大后輸出的信號是疊加有噪聲的脈動正弦波。波形如圖 3.7 所示。 圖 3.7 脈動正弦波
本電路的功能是將模擬電壓信號轉化為高低電平信號輸出到單片機系統,可以采用反向滯回電壓比較器進一步提高電路抗干擾能力。經過對強弱心率信號的測試和統計分析可以將其閾值確定。整形電路如圖 3.8 所示,U3B 是一個電壓比較器,C7、R27 構成一個微分器,U3C 和 C15、R31 組成單穩態多諧振蕩器,其脈寬由 C15、R31 決定。U3B 的輸出信號(波形如圖 3.9)經 C7、R27 的微分后總是將正、負相間的尖脈沖(波形如圖 3.10)加到單穩態多諧振蕩器 U3C 的反向輸入端, 不會造成很大的觸發誤差,因此稍微調節下 R28 即可將該比較器的閥值電壓控制在正弦波的幅值范圍內。 
當檢測到輸入信號時,U3B 在比較器輸入信號的每個后沿到來時輸出高電平, 使 C15 通過 R31 充電。大約持續20ms 之后,因C15 充電電流減小而使 U3B 同相輸入端的電位降低到低于反相輸入端的電位,于是 U3B 改變狀態并再次輸出低電平。脈沖高電平與心跳同步,并由紅色發光二極管 DS3 的閃亮指示出來,即發光二極管作心跳狀態顯示,心臟每跳動一次發光二極管就亮一次。同時,該脈沖電平通過R29 送到單片機/INTO 腳,進行對心率的計算和顯示。輸出波形如圖 3.11 所示。
圖 3.8 波形整形電路 經過比較器 U3C 產生的輸出波形:
圖 3.9 輸出波形 經過微分器產生的輸出波形: 圖 3.10 比較后的輸出波形 單片機接收到的信號: 圖 3.11 接收信號

本設計采用單片機最小系統作為信號的處理電路,如圖 3.12 所示,來自取樣和整形輸出電路的脈沖電平輸入單片機 AT89C51 的/INTO腳,單片機設為負跳變中斷觸發模式,每次脈沖下降沿到達時觸發單片機產生中斷并進行計時,來一個脈沖心跳次數就加一;定時器中斷主要完成一分鐘的定時功能 [13]。
圖 3.12 單片機處理電路 本設計采用LED數碼管動態掃描來顯示數據。兩個4位的共陽極LED數碼管組成8位顯示,其中0、1兩位顯示測量中的時間,3、4兩位顯示測量中的心跳次數, 6、7兩位用來顯示上次測量的數據,如圖3.13所示。單片機P0口控制顯示字型,P2 口控制顯示字位。 
圖 3.13 單片機處理電路 LED 數碼管是由發光二極管顯示字段組成的。在單片機應用系統中使用最多的就是七段 LED 數碼管,有共陰極和共陽極兩種。共陰極LED 數碼管顯示器的公共端為發光二極管陰極,通常接地,當發光二極管的陽極為高電平時,發光二極管點亮。共陽極的 LED 數碼管顯示器的公共端為發光二極管的陽極,通常接+5V 電源,當發光二極管的陰極為低電平時,發光二極管點亮。 
本設計中采用的是 4 位七段共陽極數碼管顯示器,一共具有 12 個引腳,4 個位選端,8 個字選端。圖 3.14 中所示,1、2、3、4 是位選端;a~g、Dp 是字選端。內部結構如圖 3.15 所示。
圖 3.14 4 位數碼管引腳分布圖 
圖 3.15 4 位共陽極數碼管結構圖 LED 數碼管要正常顯示,就要用驅動電路來驅動數碼管的各個段碼,從而顯示出數據,根據數碼管的顯示方式可以分為靜態顯示和動態顯示兩類。 靜態顯示方式是指當顯示器顯示某一字符時,發光二極管的位選始終被選中。在這種顯示方式下,每一個 LED 數碼管顯示器都需要一個 8 位的輸出口進行控制。靜態顯示主要的優點是顯示穩定,缺點在于占用硬件資源較多,每個 LED 數碼管需要獨占 8 條輸出線。 動態顯示方式是指一位一位地輪流點亮每位顯示器(稱為掃描),即每個數碼管的位選被輪流選中,多個數碼管公用一組段選,段選數據僅對位選選中的數碼管有效。對于每一位顯示器來說,每隔一段時間點亮一次。顯示器的亮度既與導通電流有關,也與點亮時間和間隔時間的比例有關。通過調整電流和時間參數,可以既保證亮度,又保證顯示。若顯示器的位數不大于 8 位,則顯示器的公共端只需一個 8 位 I/O 口進行動態掃描(稱為掃描口),控制每位顯示器所顯示的字形也需一個 8 位口(稱為段碼輸出)。 通過比較,我們可以發現 LED 動態顯示更加適合本設計,所以就采用此方法。 報警電路部分如圖3.16所示,它使用的是一個蜂鳴器,其一端接P1.1,另外一端接地。當P1.1為高電平是就發出嘟的聲音,為報警提示音。在系統初始化完成時會“嘟、嘟、嘟”連響三聲,系統正常運行后在出現生理參數超出正常閾值時, 報警電路會嘟嘟嘟的報警到生理參數回到正常閾值內或重啟監測儀才會解除報 
警。 圖3.16 報警電路 
該硬件系統由信號取樣,信號放大,波形整流,數碼管顯示以及報警等以上所述幾部分電路組成,心率信號通過取樣電路的傳感器檢測,經過信號放大,濾波,整流后,由單片機內部進行處理,最后將檢測到的信號通過顯示電路顯示出來,其硬件原理圖如圖 3.17 所示。
圖 3.17 電路原理圖
第4章 軟件系統設計 系統主程序控制單片機系統按預定的操作方式運行 , 它是單片機系統程序的框架。系統上電后,對系統進行初始化。初始化程序主要完成對單片機內專用寄存器、定時器工作方式及各端口的工作狀態的設定。系統初始化之后, 進行定時器中斷、外部中斷、顯示數據等工作,不同的外部硬件控制不同的子程序[15]。流程如圖4.1所示。
圖4.1 主程序流程圖 定時器中斷服務程序由一分鐘計時、有無測試信號判斷等部分組成。當定時 器中斷開始執行后,對一分鐘開始計時,到 60s 到了再停止并保存測得的心跳次數。同時可以對按鍵進行檢測,只要復位測試值就可以重新開始測試。主要完成一分 鐘的定時功能和保存測得的心跳次數。外部中斷服務程序完成對外部信號的測量 和計算。外部中斷采用邊沿觸發的方式,當處于測量狀態的時候,來一個脈沖心 跳次數就加一,由單片機內部定時器控制一分鐘,累加得出一分鐘內的心跳次數。流程如圖 4.2 所示。
圖4.2 中斷程序流程圖 顯示程序包括顯示上次的心跳次數、本次測量中的時間和心跳次數。從中斷程序中取得結果后,先顯示上次的心跳次數,經過 10ms的延時后再顯示測試中的心跳次數,再經過10ms的延時顯示測試中的時間。流程如圖4.3所示。
圖4.3 顯示程序流程圖
第5章 系統干擾分析及處理措施 為了提高該監測系統的精確度,系統首先要解決的是硬件方面的干擾問題。在光電式心率監測系統的測量過程中,前端測量到的心率信號十分微弱,容易受到外界環境干擾,其中主要的干擾源有測量環境光干擾、電磁干擾、測量運動噪聲。 在光電心率傳感器中,光敏器件接收到的光信號不僅包含心跳信息的透射光信號,還包含測量環境下的背景光信號,由于動脈波動引起的光強變化比背景光變化微弱得多,因此在測量過程當中要保持測量背景光恒定,減少背景光干擾[16]。 測量環境下的背景光包含環境光和在測量過程中引起的二次反射光。為了減少環境光對心率信號測量的影響,同時考慮到傳感器使用的方便性,采用密封的指套式包裝方式,整個外殼采用不透光的介質和顏色,盡量減小外界環境光的影響。為了避免測量過程中的二次反射光影響,在指套式傳感器的內層表面涂一層吸光材料,能有效減少二次反射光的干擾。 加上指套式外殼后的心率傳感器測量到的心率波形比較平滑。這是因為加指套式的心率傳感器中環境光在測量過程中基本不受外界環境光的影響,而且能夠有效減少二次反射光,使照射到手指上的光波長單一,所以得到的心率信號較為穩定,沒有明顯的重疊雜波信號,能夠很好的體現出心率波形的特征。 通過光電轉換得到的包含心率信息的電信號一般比較微弱,容易受到外界電磁信號的干擾,在傳統的光電式心率傳感器電路中,由于光敏器件和放大電路是
分開的,在信號的傳遞過程就很容易受到外界電磁干擾,通常在一級放大電路采用電磁屏蔽的方式來消除電磁干擾[17]。本系統采用新型光敏器件,在芯片內部集成光敏器和一級放大電路,有效抑制了外界電磁信號對原始心率信號的干擾。 工頻干擾是電路中最常見的干擾,心率信號變化緩慢,特別容易受到工頻信 號的干擾,因此對工頻信號干擾的抑制是保證心率信號測量精度的主要措施之一。通常心率信號的頻率范圍在 0.3-30Hz 之間,小于工頻50Hz,因此通過低通濾波器可以有效濾除工頻干擾,這在信號調理電路中容易實現;同時可以在控制電路中 對光源進行脈沖調制,這樣不但能夠降低系統的功耗,而且能夠在一定程度上減 小外界的電磁干擾,在心率信號數據采集后,可以通過數據處理法方法進一步濾 除工頻信號的干擾。 測量過程當中,通常情況下手指和光電心率傳感器可能產生相對的運動,這樣對心率測量產生誤差,可以通過兩個方面減少運動噪聲誤差:一是改善指套式傳感器的機械抗運動性,比如說使指套能夠更緊的套在手指上,不易松動;二是從心率信號處理的角度,通過算法來減小誤差。對于傳感器的設計,現在采用的第一個途徑。
第6章 系統測試結果 根據系統設計方案,本系統調試分為兩大部分:模擬部分和MCU部分。系統設計采用模塊化設計,方便各電路功能模塊的逐級測試。斷開兩部分連接點,先 調試MCU部分,試著輸入一系列脈沖,觀察MCU部分能是否能顯示;模擬部分用不透明的筆在紅外發射二極管和接收三級管之間搖擺,用示波器觀察波形效果如 何。單片機軟件先在最小系統板上調試,確保工作正常之后,再與硬件系統聯調。最后將各模塊組合后進行整體測試,使系統的功能得以實現。以下是硬件系統調 試過程。 系統上電后等待測試狀態,如圖6.1所示: 圖6.1 等待測試 測量中顯示的數據,如圖 6.2 所示:
圖 6.2 測量中顯示數據 測量結束后顯示的心跳次數,如圖 6.3 所示: 圖 6.3 測量結束顯示數據 調試過程中的問題及解決辦法: (1)傳感器輸出的正弦波幅度很小,經整形輸出后檢測到的脈沖還是很弱,在確定電路沒有問題的情況下,加強信號的放大倍數,調整電阻R22和R24的阻值。(2)測量顯示正常但經適當運動后測量,心跳次數沒有增加,經檢查是前置放大級有問題,更換之后系統運行正常。 (3)進人測量狀態后,測量值不穩定,主要是光電傳感器受到手機等電磁波干擾,其次是指尖汗液影響測量,將手機關機且測量前擦干指尖汗液即可。
系統于 2011 年 5 月 25 日 10:00 在石麟大樓 707 進行測試,標準的心跳次數是以型號 T006 的富林多功能聽診器測出的心跳次數,結果如下。  表 6.1 測量結果 標準 | 第一次測量 | 第二次測量 | 第三次測量 | 第四次測量 | 第五次測量 | 68 | 64 | 67 | 66 | 67 | 63 | 72 | 70 | 71 | 69 | 69 | 70 | 76 | 76 | 75 | 75 | 74 | 73 | 82 | 80 | 80 | 79 | 81 | 80 | 85 | 83 | 83 | 85 | 82 | 84 |
根據均方差公式對以上表格數據進行計算得:
誤差分析結果,均方差越小,結果就越接近平均值,該處平均值即為實際測量的標準值。 由于冬季和夏季的心率值不同,本實驗的數據使用夏季測量的值。實驗結 果產生的誤差主要來自硬件方面,實驗室的背景光、電磁波等以及手指汗液都會 影響傳感器的信號采集,最終導致測量數據的偏差。由于傳感器和其他器件本身 并非理想線性,因此實測數據進行了線性補償,使得誤差值能保持在合理范圍內。經校準,非線性補償后,誤差在合理范圍內。
第7章 總結與展望 隨著現代經濟的快速發展,人們對健康的重視程度越來越高,對健康監護產品的需求量也穩步提升,心率監測系統已從危重病人監護,發展到如今普通病房的監護,其應用范圍越來越廣泛,市場對心率監測系統的需求也越來越大,具有很大的發展前景。 本次所設計的監測系統實現簡單、功能穩定、使用方便,應用廣泛,具有實 際意義。由于時間比較短,同時本人掌握的知識有限,本次設計還存在很多不足, 如程序不夠簡練,電路板不夠美觀,光電傳感器靈敏度不夠高,數碼管顯示部分 不夠完美等,同時此次設計的測量儀功能比較單一,沒有如語音系統實現自動讀 出心跳次數等人性化功能,且在設計過程中使用的運放數量也較多,加大了電源 管理的復雜度。但我相信科技的進步勢必會使監測儀的功能日益強大和完善,應 用領域會不斷擴大,會給我們的生活帶來更多的方便和精彩。 為了更好的進行心率監測系統的設計,在近一個學期的時間里,認真收集有 關資料,并做相關的整理和閱讀,為這次的設計做好充分的準備。經過此次畢設, 我受益良多:(1)無論做什么事都應該事先做好充分的準備,不應該為了完成任務而被動盲目的學習;(2)了解了心率監測系統在國內外發展之迅速、應用領域之廣、市場前景之大;(3)對硬件設計和各模塊的功能有了更深的了解,同時提高了動手能力;(4)體會到堅持不懈的毅力對完成一件事情起著巨大的作用;(5)體會到團隊合作精神的重要性及相互討論過程中的樂趣。
致 謝 四年大學生活即將結束,這四年中,我收獲了知識,收獲了友誼,更收獲了為人處事的道理。感謝學校為我提供這個自我發揮的舞臺,讓我在這里盡情展現了自己的才能。在這個大家庭里,我和同學們共同生活,共同學習。 生活的道路不會一直這么平坦,在前進的道路上,我遇到了很多困難和挫折, 但是憑借著自己的毅力和周圍老師、同學的幫助,我最終都努力地克服了。 感謝學院、分院的各級領導,為我們創造的良好的學習氛圍,感謝各位老師和我的朋友,以及通信 073 班的各位同學們,你們的關心與幫助使我能夠更好地成長。 感謝各位專業課老師,正是你們的辛勤工作,使我對本專業產生了濃厚的興趣,學到了很多的知識,掌握了很多方法。你們的諄諄教誨使我有志于在本專業繼續深造。 感謝畢業設計指導老師應蓓華老師,您的指導和教誨將我領進了單片機這一扇大門。您耐心的教學態度、樂觀的生活態度深深地影響著我,是您細心認真地指導我的畢業設計,指出我的不足之處,以使我及時修改更正。 父母是我生命中最重要的人,我今天取得的成績與他們為我的付出是分不開的。他們一如既往的支持,是我前進的最大動力,是我成功的基石,感謝你們多年來為我的付出。
- 心率監控智能系統的信號采集、處理、顯示的程序
- #include
- #define uint8 unsigned char
- #define uint16 unsigned int
- #define TIMER0_HIGHT 0xDC //設置定時器 0 工作方式 1 自動裝載初值,定時
- 10ms,Fosc=11.059200MHZ
- #define TIMER0_LOW 0x00 sbit keyin = P3^1; //按鍵輸入 bit starttest; //啟動測心率標志uint16 cnt10ms; //10ms 計數器uint8 cnt1s; //1 秒計數器
- uint8 Pulsecnt; //心跳次數,計數器 uint8 Pulsenum; //上次測試的心跳次數
- uint8 codeDispCode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};// 共陽數碼管段碼表
- void Init_Extint(void); void TimerInitProc(); void initvar();
- void Init_System(void);
- void Display(uint8 chose_dat, uint8 dat);
- void ShowDisp(uint8 tPulsenum, uint8 tPulsecnt, uint8 tcnt1s); void DelayMs(uint8 Ms);
- void main()
- {
- Init_System(); //初始化 while(1)
- {
- ShowDisp(Pulsenum, Pulsecnt, cnt1s); //顯示
- }
- }
- /**********************************************************************
- *********
- 函 數 名: Exti0_interrupt
- 函數功能: /INT0 引腳下降沿進入中斷
- 入口參數: 無
- 返 回: 無
- **********************************************************************
- *********/
- void Ext0_interrupt(void) interrupt 0
- {
- if(starttest == 1) //處在測試狀態
- {
- Pulsecnt++; //來一次中斷心跳計數器加 1
- }
- }
- /********************************************************************
- 函數功能:定時器/計數器 0 中斷處理入口參數:null
- 返 回:null
- 備 注:null
- ********************************************************************/ void Timer0IntProc() interrupt 1
- {
- TH0 = TIMER0_HIGHT; //設置定時器 0 高字節初值TL0 = TIMER0_LOW; //設置定時器 0 低字節初值if(++cnt10ms == 100) //1s 計 時 到
- {
- cnt10ms = 0;
- if(starttest == 1) //處在測試狀態
- {
- if(++cnt1s == 60) //一分鐘時間到
- {
- starttest = 0; //一次檢測完畢,等待下一次檢測Pulsenum = Pulsecnt;//保存測得心跳值
- }
- }
- }
- if(keyin == 0) //檢測按鍵
- {
- if(starttest == 1) //處在測試狀態
- {
- cnt10ms = 0; //復位測試值,重新開始測試 cnt1s = 0;
- Pulsecnt = 0;
- }
- else //不在測試狀態,開始新的一次測試
- {
- starttest = 1;
- cnt10ms = 0;
- }
- }
- }
- /////////////////////////End of Timer0IntProc//////////////////////// void Init_Extint(void)
- {
- IT0 = 1; //外部中斷 1 設置為下降沿觸發
- IE0 = 0; //標志位清 0
- EX0 = 1; //允許外部中斷 1
- }
- /********************************************************************
- 函數功能:定時器/計數器初始化
- 入口參數:null 返 回:null
- 備 注:null
- ********************************************************************/ void TimerInitProc()
- {
- TMOD &= 0xF0;
- TMOD |= 0x01; //設置定時器 0,方式 1:16 位定時器
- TH0 = TIMER0_HIGHT; //設置定時器 0 高字節初值TL0 = TIMER0_LOW; //設置定時器 0 低字節初值TR0 = 1; //啟動定時器 0
- ET0 = 1; //開定時器 0 中斷
- EA = 1; //開總中斷
- }
- /////////////////////////End of TimerInitProc//////////////////////// void initvar()
- {
- starttest = 0;
- cnt10ms = 0;
- cnt1s = 0;
- Pulsecnt = 0;
- Pulsenum = 0;
- }
- void Init_System(void)
- {
- Init_Extint(); TimerInitProc(); initvar();
- }
- /**********************************************************************
- ********
- 函 數 名:Display(uchar chose_dat,uchar dat)
- 函數功能:數碼管顯示
- 入口參數:chose_dat 數碼管顯示字位,dat 顯示字型
- 返 回:無
- **********************************************************************
- *********/
- void Display(uint8 chose_dat, uint8 dat)
- {
- P0 = dat; //送顯示字型
- P2 = ~(0x01< 送顯示字位
- DelayMs(1); //延時 1MS
- P2 = 0xFF; //關閉顯示
- }
- void ShowDisp(uint8 tPulsenum, uint8 tPulsecnt, uint8 tcnt1s)
- {
- Display(6, DispCode[tPulsenum%10]); //顯示上次測量的心跳數 tPulsenum = tPulsenum/10;
- Display(7, DispCode[tPulsenum%10]);
- Display(3, DispCode[tPulsecnt%10]); //顯示測試中的心跳 tPulsecnt = tPulsecnt/10;
- Display(4, DispCode[tPulsecnt%10]);
- Display(0, DispCode[tcnt1s%10]); //顯示測試中的時間 tcnt1s = tcnt1s/10;
- Display(1, DispCode[tcnt1s%10]);
- }
- /********************************************************************
- 函數功能:延時 ms
- 入口參數:MS 返 回:null
- 備 注:null
- ********************************************************************/ void DelayMs(uint8 Ms)
- {
- unsigned char i,j; do
- {
- for(i=5;i>0;i--)
- for(j=98;j>0;j--);
- }while(--Ms);
- //Test for 12M
- }
- ///////////////////////////End of DelayMs////////////////////////////
復制代碼
完整的Word格式文檔51黑下載地址:
基于單片機的心率檢測報警器設計開題報告加進度表 陳峰2014011323.doc
(36.5 KB, 下載次數: 24)
|