張峻豪 尹鑫 貢振琦 張文杰
摘 要 本次設(shè)計(jì)是基于Cortex-M3內(nèi)核的信號(hào)采集與數(shù)據(jù)處理的系統(tǒng)以實(shí)現(xiàn)人體生理信號(hào)的實(shí)時(shí)監(jiān)控。通過(guò)Agcl電極片采集到人體肢體導(dǎo)聯(lián)電壓波形,利用模擬預(yù)先抗混疊處理濾除奈奎斯特區(qū)間以外的頻率,再經(jīng)過(guò)模擬前端將信號(hào)放大1000倍,得到放大后的波形。利用STM32單片機(jī)實(shí)現(xiàn)IIR實(shí)時(shí)濾波消除50HZ的工頻干擾與基線漂移,通過(guò)LMT70和MPU6050測(cè)得人體實(shí)時(shí)的體溫和運(yùn)動(dòng)狀態(tài),再通過(guò)串口透?jìng)鲗?shù)據(jù)傳輸?shù)絇C端上位機(jī),PC端進(jìn)行數(shù)據(jù)分析與信息反饋到電腦中,實(shí)現(xiàn)醫(yī)生對(duì)病人的情況進(jìn)行實(shí)時(shí)監(jiān)控。
關(guān)鍵詞 心電圖 IIR濾波 健康監(jiān)測(cè) 運(yùn)動(dòng)檢測(cè)
中圖分類號(hào):R1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-0745(2020)02-0024-04
1 研究目的
本設(shè)計(jì)達(dá)成了對(duì)人體心率、體溫和運(yùn)動(dòng)狀態(tài)的實(shí)時(shí)監(jiān)控,通過(guò)無(wú)線傳輸將數(shù)據(jù)傳輸?shù)缴衔粰C(jī)加以處理和顯示。通過(guò)對(duì)單個(gè)方案的改進(jìn),來(lái)實(shí)現(xiàn)以下特點(diǎn):
(1)具有低功耗和便攜性,以方便長(zhǎng)時(shí)間的穿戴。
(2)達(dá)到高精度的心率和溫度測(cè)量,具有很好的抗干擾能力。
(3)實(shí)現(xiàn)低延時(shí)高功率的無(wú)線傳輸,已實(shí)現(xiàn)實(shí)時(shí)顯示的目的。
2 實(shí)施方案
2.1 總體流程圖(如圖1)
2.2 電源設(shè)計(jì)方案
方案所需的溫度采集芯片、心電信號(hào)采集芯片以及運(yùn)動(dòng)傳感監(jiān)測(cè)都需要3.3v的電壓保障其正常工作,所以我們通過(guò)LM2596穩(wěn)壓芯片將12v的電池輸入調(diào)節(jié)成穩(wěn)定的3.3v輸出電壓,用來(lái)供給整個(gè)系統(tǒng)。
同時(shí)注意到由于本設(shè)計(jì)采用的溫度采集芯片為TI公司的LMT70,其特點(diǎn)是高精度的16位AD采樣。為避免LM2596產(chǎn)生的電壓波動(dòng)影響溫度的精準(zhǔn)性,需使用3.3v的基準(zhǔn)電壓給LMT70以實(shí)現(xiàn)溫度補(bǔ)償,達(dá)到測(cè)量人體體溫高精度的目的。
2.3 模擬前端放大器
采用AgCl電極片,減小基線漂移。心電信號(hào)通過(guò)二級(jí)放大,放大倍數(shù)1000倍以上,第一級(jí)采用儀表放大器AD620進(jìn)行放大,二級(jí)電路用LM358和OP07構(gòu)成放大。通過(guò)ebyte串口透?jìng)?,用于STM32與電腦串口通信,附加MPU6050用于測(cè)步和測(cè)距以及跌倒檢測(cè)。心電部分采用右腿驅(qū)動(dòng),減小工頻干擾。通過(guò)RC與運(yùn)算放大器構(gòu)成有源帶通濾波器,0.3HZ-106Hz的頻率可以通過(guò)。電源部分采用AMS11175.0V和7660s構(gòu)成一對(duì)正負(fù)5的電壓為運(yùn)放供電。通過(guò)AMS11173.3V穩(wěn)壓到3.3V為STM32進(jìn)行供電。[1]
2.4 單片機(jī)部分
2.4.1 主控單元選取
由于心電采集芯片使用了TI公司的ADS1292芯片,具有24位的高精度AD采樣。STM32系列的單片機(jī)具有片內(nèi)的AD轉(zhuǎn)換器和多個(gè)外設(shè)接口,具有很好的擴(kuò)展和移植性,因此適合完成IIR實(shí)施濾波和應(yīng)用擴(kuò)展。
2.4.2 配置關(guān)鍵的ads1292芯片的寄存器
ADS1292_REG[CONFIG1] =0x00;//連續(xù)轉(zhuǎn)換模式
ADS1292_REG[CONFIG1] |=Ads1292_Config1.Data_Rate;// 設(shè)置采樣率125HZ
ADS1292_REG[CONFIG2] =0x00;//設(shè)置測(cè)試信號(hào)
ADS1292_REG[CONFIG2] |=Ads1292_Config2.Pdb_Loff_Comp<<6;//是否脫落
ADS1292_REG[CONFIG2] |=Ads1292_Config2.Pdb_Refbuf<<5;//緩沖器是否掉電ADS1292_REG[CONFIG2] |=Ads1292_Config2.Vref<<4;//參考電壓2.4v
ADS1292_REG[CONFIG2] |=Ads1292_Config2.Clk_EN<< 3;//時(shí)鐘脈沖
ADS1292_REG[CONFIG2] |=Ads1292_Config2.Int_Test<< 1;//是否打開(kāi)測(cè)試信號(hào)
ADS1292_REG[CONFIG2] |=0x81;//默認(rèn)位
2.4.3 配置關(guān)鍵的MPU6050寄存器
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80);//復(fù)位MPU6050
MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00);//喚醒MPU6050
MPU_Set_Gyro_Fsr(3);//陀螺儀傳感器,±2000dps
MPU_Set_Accel_Fsr(0);//加速度傳感器,±2g
MPU_Set_Rate(50);//設(shè)置采樣率50Hz
MPU_Write_Byte(MPU_INT_EN_REG,0X00);//關(guān)閉所有中斷
MPU_Write_Byte(MPU_USER_CTRL_REG,0X00);//I2C主模式關(guān)閉
MPU_Write_Byte(MPU_FIFO_EN_REG,0X00);//關(guān)閉FIFO
MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80);//INT引腳低電平有效
2.5 信號(hào)干擾
2.5.1 干擾來(lái)源
通常由于電源線產(chǎn)生的50hz的工頻干擾以及被測(cè)對(duì)象人體產(chǎn)生的熱噪聲干擾。[2]
工頻干擾多數(shù)是因?yàn)榭臻g輻射、電源、電路與外界的接觸所產(chǎn)生的50hz信號(hào),一般采用屏蔽、濾波、使用差分信號(hào)(提高共模抑制)來(lái)減低其對(duì)信號(hào)的影響。人體干擾常見(jiàn)的是肌肉震顫,其產(chǎn)生是因?yàn)槿梭w肌肉顫動(dòng)所造成的噪聲信號(hào)(寒冷導(dǎo)致的戰(zhàn)栗以及緊張引起的肌肉抽搐)。
2.5.2 基于MATLB的數(shù)字陷波
用陷波器來(lái)過(guò)濾50hz信號(hào),高通濾波器來(lái)過(guò)濾人體產(chǎn)生的0.5hz以下的頻率干擾。通常在設(shè)計(jì)中使用IIR或FIR濾波器,其中FIR雖然具有良好的線性相位,但是其運(yùn)算量和階數(shù)都比IIR更大,因此無(wú)論是陷波器還是高通濾波都采用IIR來(lái)設(shè)計(jì)。[3]
借助MATLAB可以幫助我們快速的生成相關(guān)的參數(shù)。再將其翻譯成c語(yǔ)音形式即可直接應(yīng)用于單片機(jī)平臺(tái)。
導(dǎo)出濾波系數(shù)得到轉(zhuǎn)移函數(shù):[4]
再根據(jù)濾波器直接II型實(shí)現(xiàn)框圖,翻譯成c語(yǔ)言代碼并燒錄到主控芯片中運(yùn)行。
c語(yǔ)言響應(yīng)代碼:
w4 = (float)p_Temp[1] - (-1.53589)*w2 - 0.898466*w3;
cannle[1]= (u32)(0.94923 * w4 + (-1.53589)*w2+0.949 23*w3);
w3 = w2;
w2 = w4;
2.5.3 基于MATLAB的高通濾波器
同樣采用MTLAB生成的IIR的II階高通濾波器來(lái)過(guò)濾掉人體產(chǎn)生的0.5hz以下的頻率干擾,我們配置好相應(yīng)參數(shù)后即可導(dǎo)出濾波系數(shù)。
得到響應(yīng)函數(shù):[5]
s32IIR_I_Filter(s32 InData,float *x,float *y,float *b,float nb, float *a,float na)
{
s32 z1,z2;
u8 i;
s32? OutData;
for (i=nb-1;i>0;i--)? {x[i]=x[i-1];}
x[0]=InData;
for (z1=0,i=0;i for (i=na-1;i>0;i--)? ? {y[i]=y[i-1];} for (z2=0,i=1;i y[0]=z1-z2; OutData=y[0]; return (s32)OutData; } 2.6 運(yùn)動(dòng)狀態(tài)監(jiān)測(cè) 2.6.1基于MPU6050六軸模塊設(shè)計(jì)運(yùn)動(dòng)狀態(tài)監(jiān)測(cè) 通過(guò)讀取MPU6050內(nèi)置的x、y、z軸上的加速度,通過(guò)高斯濾波將其3個(gè)方向的數(shù)值合一得到一個(gè)預(yù)算的峰值,一個(gè)峰值變換對(duì)應(yīng)一步數(shù),同時(shí)將所得加速度經(jīng)過(guò)積分得到速度,即可計(jì)算出運(yùn)動(dòng)步伐。 由于產(chǎn)品佩戴于胸前,所以選取X軸方筆直朝下,使用I2C通訊協(xié)議,提取MPU6050各軸數(shù)據(jù),消除零點(diǎn)漂移之后,對(duì)加速度計(jì)的數(shù)據(jù)進(jìn)行均值濾波,通過(guò)加速度計(jì)數(shù)據(jù)得到x軸與重力加速度方向的角度,然后通過(guò)卡爾曼濾波融合陀螺儀的加速度,得到修正之后X軸與重力加速度方向的傾角,實(shí)際實(shí)驗(yàn)測(cè)試出臨界閾值。 2.6.2加速度的C語(yǔ)言計(jì)算代碼 mpu6050_get_data(&gx,&gy,&gz,&ax,&ay,&az,&temperature); acc_filter(); ax-=AX_OFFSET; ay-=AY_OFFSET; az-=AZ_OFFSET; gx-=GX_OFFSET; gy-=GY_OFFSET; gz-=GZ_OFFSET; angle_dot = gz * GZRO_SCALE; angle =atan(sqrt(ax * ax + ay * ay )/az ); angle =angle * 57.295780; kalman_filter(angle, angle_dot, &f_angle, &f_angle_dot); 2.7 體溫監(jiān)測(cè) TI公司的LMT70是低功耗高精度的模擬溫度傳感器。其16位精度的AD采樣使其工作在20°C-42°C范圍時(shí),誤差為±0.05°C。由于人體溫度剛好囊括在這一范圍,因此在確保其基準(zhǔn)電壓的精準(zhǔn)時(shí),能準(zhǔn)確的返回所需的數(shù)據(jù)。 由于LMT70電壓傳遞函數(shù)不是標(biāo)準(zhǔn)的線性,所以采用三階傳遞函數(shù)方程來(lái)確保其工作在所需的最佳擬合中。 三階傳遞函數(shù)C語(yǔ)言如下: double a= -1.064200E-09; double f= -5.759725E-06; double c= -1.789883E-01; double m=? 2.048570E+02; temp=a*(temp)*(temp)*(temp)+f*(temp)*(temp)+c*(temp)+m; //temp初始溫度值 3 傳輸方式 3.1 方案選擇 方案一:使用藍(lán)牙3.0模塊搭建單片機(jī)--手機(jī)或者單片機(jī)---單片機(jī)通訊,完成數(shù)據(jù)傳輸。 方案二:使用nrf24L-01模塊搭建單片機(jī)--手機(jī)或者單片機(jī)---單片機(jī)通訊,完成數(shù)據(jù)傳輸。 方案三:使用串口無(wú)線透?jìng)魍瓿蓡纹瑱C(jī)---電腦的無(wú)線通訊,使用串口傳輸發(fā)送與接收數(shù)據(jù)。 由于藍(lán)牙模塊傳輸速率為24Mb/s,而ECG要求傳輸數(shù)據(jù)大,所以使用藍(lán)牙傳輸會(huì)有一定的延時(shí)接收,同時(shí)由于藍(lán)牙的傳輸距離有限,無(wú)法實(shí)現(xiàn)遠(yuǎn)距離的傳輸,因此不采用。Nrf模塊在傳輸速率上達(dá)到了1ms一包,一包大概32字節(jié),完全能滿足ECG龐大的數(shù)據(jù)量。但是Nrf需要與單片機(jī)搭配才能接收數(shù)據(jù),提高了成本和電路復(fù)雜性,不予考慮。 而ebyte公司的串口透?jìng)骶哂凶詣?dòng)調(diào)頻功能,抗干擾能力強(qiáng),傳輸效率高,傳輸距離遠(yuǎn)。且減少了接收端的電路復(fù)雜性(只需要將usb插上電腦即可)和發(fā)送端的操作難度(只需將數(shù)據(jù)通過(guò)printf傳輸即可)。 3.2 理論分析 設(shè)計(jì)通過(guò)NRF24L01無(wú)線串口透?jìng)鱽?lái)實(shí)現(xiàn)人機(jī)無(wú)線傳輸。搭建的系統(tǒng)由下位機(jī)與上位機(jī)人機(jī)界面2部分組成:先使下位機(jī)主機(jī)板STM32控制芯片將采集的人體信息發(fā)送給無(wú)線透?jìng)髂K,然后無(wú)線傳送到下位機(jī)從機(jī)板無(wú)線接收模塊,無(wú)線接收系統(tǒng)結(jié)合串行通信接口,把數(shù)據(jù)送往上位機(jī)PC端實(shí)現(xiàn)數(shù)據(jù)的顯示并在上位機(jī)界面上實(shí)現(xiàn)無(wú)線視屏監(jiān)控,并且不需要無(wú)線路由器構(gòu)建的局域網(wǎng)環(huán)境進(jìn)行通訊,擺脫了傳統(tǒng)有線傳輸?shù)氖`,實(shí)現(xiàn)了無(wú)線實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)和人機(jī)互動(dòng)功能。 系統(tǒng)流程圖:(如圖2) 4 上位機(jī) 采用QT對(duì)上位機(jī)進(jìn)行開(kāi)發(fā),通過(guò)串口讀取數(shù)據(jù)。由于使用的是串口透?jìng)髂K進(jìn)行單片機(jī)與PC端的通信,所以只需要區(qū)分每段數(shù)據(jù)的數(shù)據(jù)類型即可。 傳輸?shù)臄?shù)據(jù)格式如下:printf("<%d,%d,%d,%d,%d,%d,%d,%d>", nrfSendData.bytes.heartRate, nrfSendData.bytes.stepNum, nrfSendData.bytes.tempture, nrfSendData.bytes.adsData[0],nrfSendData.bytes.adsData[1], nrfSendData.bytes.adsData[2], nrfSendData.bytes.adsData[3], nrfSendData.bytes.adsData[4], nrfSendData.bytes.adsData[5]); 一個(gè)數(shù)據(jù)包有32Byte的大小,傳輸順序按照心率、步數(shù)、溫度、和ECG,大小分別為2Byte、2Byte、4Byte以及24Byte。當(dāng)數(shù)據(jù)傳輸?shù)缴衔粰C(jī)后,PC端上位機(jī)按照傳輸方式提取數(shù)據(jù),并把數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制顯示到QT編寫的頁(yè)面中。 5 測(cè)量結(jié)果 5.1 測(cè)試數(shù)據(jù) 距離顯示:(如表1) 溫度顯示:(如表2) 心率顯示:(如表3) 5.2 測(cè)試結(jié)論 (1)心率精度高,誤差不超過(guò)1%; (2)溫度精度受基準(zhǔn)電源影響,在±2℃內(nèi); (3)距離顯示受擺動(dòng)加速度影響,誤差不大于10%; 在完成簡(jiǎn)易穿戴和低功耗要求前提下,保證了低延遲的傳輸。同時(shí)完成了人體運(yùn)動(dòng)的監(jiān)測(cè)、體溫和心率的實(shí)時(shí)顯示,已達(dá)到測(cè)試要求。 參考文獻(xiàn): [1] 鄧海濤,張桂珊,鄒秋云, 等.基于STM32處理器的心電信號(hào)系統(tǒng)[C].//中國(guó)計(jì)算機(jī)學(xué)會(huì).第五屆全國(guó)可穿戴計(jì)算學(xué)術(shù)會(huì)議暨2015可穿戴與醫(yī)學(xué)變革研討會(huì)論文集.2015:1-10. [2] 同[1]. [3] 鄧海濤,張桂珊,鄒秋云, 等.基于STM32處理器的手機(jī)監(jiān)控心電的設(shè)計(jì)[J].集成技術(shù),2015(05):78-86. [4] 同[1]. [5] 孫迎,宋健.基于Android的遠(yuǎn)程心電檢測(cè)系統(tǒng)[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(04):326-329. 西華大學(xué),四川 成都