夏卓 王亞剛



摘 要:為對心臟疾病患者進行實時心率監測,提出一種心率檢測方法。采用STM32單片機作為控制芯片,傳感器采用SON1205心率傳感器。首先將心率信號輸出成對應的方波,將此方波輸入到單片機處理,然后通過設計的心率檢測算法得出心率,再經過濾波算法處理,得到準確的心率,最后通過LabVIEW軟件進行仿真實驗,得到心率波形。實驗結果表明,與高精度測量儀器相比,該方法誤差值最多不超過3,準確率達到96%以上。基于STM32的心率檢測方法性能穩定,數據可靠,可用于日常心率檢測。
關鍵詞:心率檢測;STM32;心率傳感器;檢測算法;LabVIEW
DOI:10. 11907/rjdk. 192576 開放科學(資源服務)標識碼(OSID):
中圖分類號:TP319文獻標識碼:A 文章編號:1672-7800(2020)007-0081-04
The Design of A Heart Rate Detection Method Based on STM32
XIA Zhuo,WANG Ya-gang
(School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology,Shanghai 200093,China)
Abstract: In order to achieve real-time heart rate monitoring for patients with heart disease, a heart rate detection method is proposed. The STM32 single-chip microcomputer is used as the control chip, and the sensor adopts the SON1205 heart rate sensor. Firstly, the heart rate signal is output into a corresponding square wave, and the square wave is input to the single-chip processing, then the heart rate is obtained through the designed heart rate detection algorithm and processed by the filtering algorithm to get accurate heart rate. Finally LabVIEW software is used to carry out simulation experiments to get heart rate waveform. The experimental results show that compared with high-precision measuring instruments, the error value of this method is no more than 3, and the accuracy is as high as 99%. The heart rate detection method based on STM32 has stable performance and reliable data, which can be used in daily heart rate detection.
Key Words: heart rate detection; STM32; heart rate sensor; detection algorithm; LabVIEW
0 引言
我國目前心臟疾病患者較多,心腦血管疾病死亡率和癌癥不差上下[1],有些心臟疾病可以遺傳,發病較快,有時因來不及預防造成無法挽回的結果[2]。正常人的心率為每分鐘60~100次,超過100次或者低于60次稱為心律不齊[3]。引起心率不齊的原因有很多,如有的人情緒緊張、過量吸煙飲酒以及其它一些心臟疾病等,都會導致心率不齊,甚至會影響心臟輸出血液,造成生命危險。因此,測量心率是日常生活中非常重要的環節。
現階段測量心率的方法有醫院和家用心率檢測儀,可以準確測量出心率,但是這些儀器都不方便隨身攜帶。目前比較成熟的智能手環也可以測心率,缺點是價格較昂貴。文獻[2]提出一種基于AT89C51單片機的心率檢測方法,實現了心率采集與顯示功能;文獻[3]提出一種基于AT89C52單片機的心率檢測方法,也實現了上述基本功能,但在系統穩定性和數據處理方面存在不足??刂菩酒捎?位51系列單片機,性能遠不如32位的STM32F4系列單片機,系統穩定性差,且在數據處理方面沒有給出具體方法及仿真實驗,數據可靠性差。
本文使用STM32單片機作為控制芯片,提供一種高性能、低成本的嵌入式應用解決方案。開展心率檢測算法研究,并給出算法具體介紹,將心率檢測模塊直接通過I/O口連接通信。經過算法計算之后,對數據進行濾波處理,得到準確的心率數據。為確保數據可靠性,利用LabVIEW軟件進行仿真實驗。STM32單片機是市場上公認的性能穩定、功能強大、高性價比的嵌入式解決方案,運行速度和穩定程度都遠強于8位單片機。STM32改進了系統的穩定性與運算能力,數據更加可靠,且對二次開發都可以輕松應對,處理能力強大。
1 系統總體設計
系統整體結構不復雜。首先由SON1205心率檢測模塊對被測人員進行心率檢測,檢測結果通過傳感器的OUT端口輸出方波,然后將此端口連接到STM32單片機的I/O口上,這樣就可利用程序代碼對收到的方波進行分析處理,從而得到心率數據[4];最后對這些數據進行程序運算,算出的心率在液晶屏上顯示,并通過串口發送到LabVIEW軟件,仿真出心率波形,通過圖像可更為直觀地了解心率情況。系統整體結構如圖1所示。
2 硬件設計
2.1 控制芯片
控制芯片采用STM32單片機F4系列中的STM32F407,相較于之前比較常見的F1系列,F4系列單片機在很多方面都得到明顯加強。F1系列采用Cortex M3內核,最高主頻為72MHz,并且沒有浮點運算單元和DSP指令集;而F4系列采用Cortex M4內核,最高主頻為168MHz[5],這讓F4系列單片機的運算能力和程序執行能力顯著提升,并且具有單精度浮點運算單元和增強的DSP指令集,在定時器、SRAM、GPIO、串口以及其它外設接口的數量和性能等方面都有所加強[6]。
2.2 心率檢測模塊
目前市場上的便攜式心率檢測裝置大多采用光電檢測法,即傳感器會往皮膚上發出一道光,由于血液會吸收特定波長的光[7],所以心臟每跳動一次就會吸收傳感器發出的光,傳感器再根據反射回來的光確定心率情況[8]。SON1205心率傳感器也是這種原理,通過反射回來的光確定心率,并在OUT端口輸出對應的方波信號,根據此方波信號編寫適當的程序算法,對其進行檢測、濾波、計算等[9],以此獲得被測人員的心率情況。
3 軟件設計
3.1 心率檢測算法
系統核心是心率檢測部分,而心率檢測部分的核心是該部分程序的編寫。心率已由心率傳感器測出并輸出方波,對此方波進行檢測,方法是利用STM32F407單片機的輸入捕獲功能。一旦單片機捕獲到上升沿或下降沿就進入中斷服務函數,再測量每個方波的高低電平持續時間,并對該數據進行計算得出心率。
具體程序流程為:首先配置好單片機的GPIO輸入輸出和定時器相關初始化[10],將單片機輸入捕獲設置為上升沿捕獲,這樣第一次進入中斷服務函數時就必定捕獲上升沿。
中斷服務函數分為兩部分:①上升沿函數;②下降沿函數。當第一次檢測到上升沿進入到上升沿函數時,由于第一次上升沿比較特別,需要定義一個flag,判斷是不是第一次檢測到上升沿。如果是第一次立即使能定時器,從0開始計數,并將單片機設置為下降沿捕獲[11],這樣下次進入中斷函數時,必定捕獲到下降沿。一旦捕獲到下降沿就進入下降沿函數,立即停止定時器計數,并將此時的定時器數據存儲下來,此即為高電平持續時間;再將單片機設置為上升沿捕獲,重新使能定時器開始計數,為下一次中斷做準備。
當下一次中斷來臨時必定捕獲到上升沿,此時進入到上升沿函數,立即停止計數并將數據保存下來,獲得低電平持續時間,再將單片機設置成下降沿捕獲,重新使能定時器[12]。如此反復,每一次心跳的方波高低電平持續時間都能得到,為進一步計算作好準備。
如圖4所示,通過控制定時器得到高低電平的持續時間,即可得到心率。高低電平時間相加即為一次心跳時間。定時器的計數頻率設置成1Mhz,即1us計一次數,則心率檢測公式為:
式中,X為心率,單位次/min,a為高電平持續時間,b為低電平持續時間,單位都是微秒,分子1000000us即為1s,1s除以高低電平相加時間即為1s內有多少次心跳周期,再乘以60為每分鐘有多少次心跳,此值即為心率。
3.2 濾波算法
上述方法采集到的數據為瞬時值,由于測量的不確定性,需要對測量數據進行簡單的濾波計算。首先在捕獲高低電平方面進行濾波,在捕獲到上升沿或下降沿時,在短時間內進行連續多次檢測,判斷是否一直持續高電平或者低電平。如果不是,則認為本次捕獲沒有成功[13],進行下一次捕獲,這樣可以避免由于一些外界因素造成的數據抖動,減少錯誤數據采集。
在數據處理方面采用限幅濾波法和算數平均濾波法[14],連續采集5次數據并設定最高值與最低值。如果有數據超過該范圍或者突變幅度特別大,則認為不是有效數據,剩下的數據再取平均值。或者連續采集5秒數據,同樣設置上下限和考慮突變情況,然后對數據取平均值 [15]。
4 仿真實驗
4.1 LabVIEW程序設計
LabVIEW是一款由美國國家儀器公司開發的虛擬儀器開發工具[16],采用圖形化編程,具有各類直觀易懂的虛擬器件,層次清晰、編程簡單[17]。
本實驗使用LabVIEW軟件對采集到的心率進行波形仿真。程序框架如圖7所示。
利用LabVIEW中的VISA架構[18],通過單片機串口獲得數據。首先進行串口配置,如波特率、停止位和校驗位等[19],不配置即為默認值;然后進入while循環,循環中對串口數據進行讀取[20],在單片機程序代碼中自定義串口發送數據的格式為“高電平時間L低電平時間”,這樣即可使用字符串函數中的匹配模式提取數據,得到高低電平時間后即可通過公式
求出占空比,并將其輸入到方波波形控件,進而得到測量波形。
前面板得到的波形如圖8所示。
4.2 實驗分析
為確保實驗結果準確,對3人進行實驗測試,將測量數據與蘋果公司的Apple Watch智能手表測量結果相比較,結果如表1所示。
由實驗結果可知,系統測量數據與Apple Watch智能手環存在一定的誤差,但是誤差較小,不會影響測量結果,表明系統可以穩定地測量心率。
通過與其它具有心率測量功能的智能手環相比較,可以看出該裝置的優勢與創新點。
(1)該裝置成本非常低,傳感器的市場價為10元左右,控制芯片的最小系統板市場價為30元左右,整套系統成本50元左右,而蘋果公司的Apple Watch市場價為3 200元左右,市場上其它公司的智能手環最低也要160元左右,而且測量結果幾乎一致。該裝置基于強大的STM32控制芯片,運算能力強,測量性能穩定,性價比更高。
(2)該設計既要準確測量心率,又要體現智能化和人性化。本文首先設計一套心率檢測算法,用于測量使用者的心率情況,相比于其它智能手環,該裝置的創新點在于二次開發能力較強。普通智能手環功能基本固定,較為單一。本裝置使用強大的STM32控制芯片,可以搭載各種模塊,實現多種功能。為體現人性化和智能化,可以加入通訊模塊,如4G模塊或者WiFi模塊,將測量結果實時傳入服務器端,通過數據庫技術對數據進行保存,這樣就可隨時查看歷史記錄。對心率異常情況設計報警機制,即一旦心率異常就可通過服務器廣播,傳到家人的手機上,避免危險發生。
5 結語
本文基于STM32單片機設計了一套心率檢測系統,利用單片機對傳感器輸出方波的上升沿和下降沿檢測,編寫程序算法對高低電平進行計算,進而求得占空比等波形數據。經過濾波,得到較為準確的心率數據,在液晶屏上顯示結果;再通過LabVIEW軟件中VISA架構與單片機串口通訊,得到心率相關數據并仿真出心率波形。整套系統運行穩定,可以滿足日常心率檢測需求。下一步工作可以加入數據傳輸模塊,將實時心率傳輸至數據庫,再設計一款App或者其它上位機軟件,實時顯示使用者的心率情況。即使家人不在身邊,也可以遠程監控測量者的心率情況,從而降低危險發生概率。
參考文獻:
[1] YENIKOMSHIAN M,JARVIS J,PATTON C,et al. Cardiac arrhythmia detection outcomes among patients monitored with the Zio patch system: a systematic literature review[J].? Current Medical Research and Opinion,2019,35(10):1208-1224.
[2] 呂峻達,王景泰. 基于單片機的人體心率監測系統的設計與實現[J]. 電子元器件與信息技術,2018(8):26-28.
[3] 羅通. 心率監測系統設計[J]. 無線互聯科技,2019,16(9):55-56.
[4] 劉澤玲,周智榮,張偉. 基于STM32F407的畜牧車配料稱重儀表的設計[J]. 自動化與儀表,2019,34(6):87-90.
[5] 牛妍燕,田子怡. 基于STM32的嵌入式智能家居系統[J]. 電腦知識與技術,2016,12(13):240-242.
[6] WANG R B. The design of motor precision positioning system based on stm32 single chip microcomputer[J]. Journal of Physics: Conference Series,2018,1087(6):764-778.
[7] JIN X,GU F,NIU J? W,et al. HRcal:an effective calibration system for heart rate detection during exercising[J]. Journal of Network And Computer Applications,2019,136(9):967-1006.
[8] 呂智鵬,石紫茹,王君瑞. 關于心率傳感器在可穿戴設備上的實際應用[J]. 中國新通信,2018,20(17):232-237.
[9] ARNALDO G,LEAL-JUNIOR,CAMILO R,et al. Polymer optical fiberbased sensor for simultaneous? measurement of breath and heart rate under dynam imovements[J].? Optics and Laser Technology, 2019(132):109-220.
[10] 張幼麟. 簡介51單片機的定時器/計數器[J]. 內江科技,2018,39(12):129-132.
[11] KRISTOFFER NYBORG GREGERTSEN,AMUND SKAVHAUG.Execution time timers for interrupt handling[J]. ACM SIGAda Ada Letters, 2013, 33(2):65-77.
[12] 馮康. 單片機定時器在計時器設計中的應用[J].? 福建電腦, 2019, 35(5): 103-105.
[13] 胡超然,徐楓,陳永勝. 常用數字濾波算法及其應用[J]. 科技風,2017(13):13-15.
[14] ROY S,CHANDRA A. Design of narrow transition band digital filter:an analytical approach[J]. Integration,2019(68):532-547.
[15] 王波. 淺析數字濾波的常用算法[J]. 礦業工程,2009,7(3):55-57.
[16] 徐慶坤,房齊. LABVIEW和單片機串口通信在半導體模塊測試設備中的應用[J]. 價值工程,2018,37(30):184-185.
[17] 李蒙蒙. 基于LabVIEW的數字信號調制識別[D]. 北京:北京郵電大學,2018.
[18] 王興宏,魏琳,周婷. 基于計算機技術的Labview系統仿真設計研究[J]. 白城師范學院學報,2019,33(4):15-17.
[19] 曾德康. 基于單片機的數據串口通信研究[J]. 通信電源技術,2019,36(3):194-195.
[20] 侯光輝. 串行通信的工作原理[J]. 電子技術與軟件工程,2019(6):44-68.
(責任編輯:杜能鋼)