鄭海鵬 王立友 馮川放
摘要:隨著人們物質生活質量的不斷提高,越來越多的人開始關注自身身心健康狀況,在鍛煉身體的過程中,希望可以借助一些便攜式醫學儀器來檢測自身的身體狀況,例如使用心率測試儀來測量心率,通過心律的測試,來確定適合于自己的運動強度,防止運動量不達標或運動過量,無論您是運動達人還是視運動為娛樂的人,心率測試儀都是一款必備的運動工具.它能讓你能更好地掌握運動過程中運動強度.本文作者將利用單片機與紅外傳感器和精確定時/計數等技術融合嵌入式開發語言(C語言)為您設計一款能顯示每分鐘心跳次數的心率測試儀.
關鍵詞:嵌入式系統開發;IAP15F2K61S2微控制器;紅外線傳感器St188;C語言
中圖分類號:TH72 文獻標識碼:A 文章編號:1673-260X(2019)03-0068-03
1 緒論
隨著現代醫學技術的不斷發展和進步,人們工作之余開始注重自身身心健康,許多便攜式醫學儀器得到了廣泛的應用,越來越多的人體醫學信號測試儀被受眾人群使用,通過醫學儀器對人體體內相關的生理信號的監測,來識別人體的生命健康狀態和特征.
該系統基于STC的IAP15F2K61S2微控制器,外圍由運算放大器,濾波電路、整形電路以及LCD12864液晶屏,反射紅外傳感器ST188等組成.電路設計部分主要采取仿真電路的設計形式,使用Keil C軟件將對應C語言程序生成HEX文件,并使用stc-isp編程燒錄軟件將對應的HEX控制程序嵌入在IAP15F2K61S2微控制器系統中,以便于實現人體的心率測試.使用時,手指需要壓迫在ST188紅外傳感器上,使其感知人體的生理信號.可以通過IAP15F2K61S2微控制器對改變的信號進行濾波,放大等處理來統計心跳次數,以便于計算一分鐘內的心跳次數即心率.
2 心率測試儀的仿真電路設計
本系統設計使用STC公司的IAP15F2K61S2單片機作為核心部件,在Keil C調試環境下,完成軟件調試與設計.使用Proteus仿真軟件完成仿真電路的設計.電路仿真系統主要有:檢測電路、放大濾波電路、單穩態電路和顯示電路組成[1].其中系統檢測部分主要由反射紅外傳感器ST188完成.電路設計如圖1所示:
2.1 檢測電路
2.1.1 使用數字萬用表測量二極管
首先,使用數字萬用表的二極管齒輪測試控制端子發射(淺藍色)正極和負極,并將紅色和黑色測試引線連接到發射管的兩個引腳.對于每次測量,儀表一次顯示“1.0 V”,一旦顯示溢出“1”,表明1.0 V是正確的.紅筆連接到正極,黑筆連接到負極.如果“1”顯示兩次,則表示發射管內部打開,如果顯示兩次均為“0”則表示發射管中短路.然后判斷接收管的c和e極,數字萬用表的2M齒輪以及紅色和黑色測試引線的短路.判斷接收管的c和e極,數字萬用表電阻2M檔,紅色和黑色電表筆連接到e極;如果標題顯示“1”,則黑色筆連接到c極,紅色筆連接到e極.
2.1.2 檢測電路工作原理
首先,我們了解一下人體心跳的過程,心臟在機械收縮之前,先發生電激動而產生微小電流,這一電流可以經人體組織傳到體表,竇房結產生的動作電位,經結內的過渡細胞傳至心房內的結間束、房間束和心房肌[2].這時心房肌會跳動.然后動作電位下傳至房室結(心房心室交界區)短暫的時間差之后下傳至結希區、房室束.心室肌接收興奮,產生搏動,也就是人體的心跳.
由于血容量本身是跟隨心臟的跳動而顯示其心率波形的變化的,而光電信號對于人體的其余組織的感應是不隨時間的變化而變化的,所以反射式紅外線傳感器ST188接收到的波形信號可以用來表示心率的變化特征.
心率本身的波動信號隸屬于低頻率的電信號,頻率在0.5~10Hz之間[3],使用放大器、濾波器以便于提取有效信號,避免外圍信號的干擾,提高低頻率信號的上下限.反射紅外傳感器ST188通過電容耦合器將血液中的波分量分析到放大器的輸入端.
2.2 放大、整形、濾波電路
該電路的主要功能是放大整形和濾波傳感器檢測到的微弱的信號,并且由光電耦合器檢測血液濃度自身發生的變化,把微弱信號變化為電信號.經整形電路整形(優化液晶屏心率的顯示效果),形成所需脈沖,經LM358芯片對信號進行放大,驅動發光管按照脈搏頻率工作,以模擬心臟跳動的動作.最后輸出反映心跳頻率的電壓.
2.3 比較電路與單態穩電路
比較電路使用LM358芯片,放大電路的輸出信號通過比較輸出方波.
在單穩態電路中,比較器輸出的矩形波輸入到74HC123觸發器的B引腳,因此不同頻率(不同心率)的輸入信號輸出具有不同占空比的方波.通過濾波電路進行濾波后,輸出電壓不同.
3 心率測試儀系統硬件組成
3.1 紅外反射式傳感器ST188
3.1.1 ST188紅外反射式傳感器簡介
由一個光敏三極管和一個發光二極管組成,其中發光二極管作為傳感器的反射模塊,光敏三極管作為傳感器的接收模塊[4](二者在電路中均正接,但需要串聯相關阻值的定值電阻),ST188系列傳感器有諸多優點:比如體積很小,價格便宜[5],使用起來非常劃算,具有很高的性價比.ST188紅外傳感器位于A、K之間是發光二極管,位于C、E之間是光敏三極管.
3.1.2 工作原理
通過用手指按壓紅外反射傳感器ST188,并顯示在1602液晶屏上來測量心率.系統以IAP15 F2K61S2微控制器為核心,紅外反射傳感器ST188用作檢測元件.時間的計算由IAP15F2K61S2系統的內部定時器完成.在系統操作期間可以顯示心臟跳動次數和時間.
3.1.3 信號采集
紅外反射傳感器A、K分別接入高電平和低電平,電位器連在R4旁邊用于調節傳感器靈敏度[5].信號采集過程中,紅外反射傳感器ST188與手指接觸,被手指按壓.脈沖信號由紅外反射傳感器ST188感知.IAP15F2K61S2微控制器系統負責統計心臟跳動次數和時間.
3.1.4 信號放大
本文采用LM358芯片用于放大電路的設計.由于人的心跳產生的信號非常弱,導致紅外反射傳感器ST188輸出的信號同樣很微弱,較易受到周邊環境的影響,因此需要對當前得到的微弱信號進行放大處理,放大電路使用兩級反向放大將信號放大到約2-5V的幅度值.輸出波形相對于比較輸入波形而言為同相并被放大的波形.放大后的波形是一個交流信號.在電源旁邊連接一個電容器,以濾除干擾信號和抗電磁干擾.整流后的電壓波形(D2二極管)是正弦半波.放大電路的輸出信號由比較器輸出為方波(2個引腳的比較電壓根據3個引腳的實際輸出電壓設定,通常大致是0.8V).
3.2 IAP15F2K61S2單片機
IAP15F2K61S2單片機是STC公司推出的新一代支持在應用編程的單片機.具有2KB RAM空間,61K Flash空間,IO具備4種工作模式,8路ADC通道.帶仿真接口,可以在Keil C51中調試程序,適合于嵌入式開發.
3.3 LCD12864液晶屏
一種點陣圖形液晶顯示模塊,具有2線或3線串行,4位/8位并行接口模式,以及簡化的漢字庫; 它可以形成一個完整的中文人機交互圖形界面.它可以顯示8×4行16×16點陣漢字.
4 心率測試儀系統軟件的實現
4.1 系統軟件介紹
4.1.1 keil C51軟件簡介
Keil C51軟件系統的特點是兼容單芯片C語言軟件開發.鑒于C語言擁有出色的移植性,可以在各種體系結構的軟硬件平臺上運行;語法機制靈活,可直接訪問硬件;運行效率高,運行速度較快.在可讀性,功能,結構等方面優勢明顯.Keil提供完整的開發解決方案,包括C編譯器,宏匯編,鏈接器,庫管理以及強大的仿真器調試.通過集成開發環境將它們統一組合起來.因此,運行C語言編程, Keil C51幾乎是不二之選.
本文中Keil C51軟件的主要功能是負責將C語言編譯成可重定位的目標HEX文件,實現C語言程序對單片機的控制.
4.1.2 Proteus電路仿真軟件
Proteus是由英國Labcenter Electronics開發的多功能EDA軟件.是一款可以提供電路仿真、PCB設計和虛擬模型仿真的設計平臺.本文中PROTEUS軟件的主要功能是提供心率測試儀的仿真電路.
4.2 心率測試儀C語言程序實現
4.2.1 心率測試儀計數代碼
#include ”stc15.h”
#include [intrins.h]
#define uchar unsigned char
#define uint unsigned
sbit LCD_RS = P3^5; //寄存器選擇輸入
sbit LCD_RW = P3^6; //液晶讀/寫控制
sbit LCD_EN = P3^7; //液晶使能控制
sbit LCD_PSB = P0^2; //串/并方式控制
sbit LCD_RST = P0^0; //液晶復位端口
unsigned char i=0,timecount=0,displayOK=0,rate=0,aa=0;
unsignedint time[6]={0};
#define delayNOP(); {_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); }
uchar code DIS1[] = {” 心率計 ”};
uchar code DIS2[] = {” 次 /每分”};
uchar code DIS3[] = {” 你的心率正\xfd常 ”};
uchar code DIS4[] = {” ”};
uchar code DIS5[] = {” 保持平穩的心情”};
4.2.2 系統延時代碼
void delay(intms)
{while(ms--)
{uchari; for(i=0; i[150; i++)
{_nop_(); _nop_(); _nop_(); _nop_();
}}}
4.2.3 檢查LCD忙狀態代碼
bitlcd_busy()
{ bit result;
LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP();
result = (bit)(P2 0x80); LCD_EN = 0; return(result);
}
4.2.4 寫指令數據到LCD代碼
voidlcd_wcmd(ucharcmd)
{ while(lcd_busy());
LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; delayNOP();
P2 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0;
}}
4.2.5 寫顯示數據到LCD代碼
voidlcd_wdat(uchardat)
{ while(lcd_busy());LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;
P2 = dat;delayNOP(); LCD_EN = 1;delayNOP(); LCD_EN = 0; }
4.2.6 LCD初始化代碼
voidlcd_init()
{
LCD_PSB = 1; //并口方式
LCD_RST = 0; //液晶復位
delay(12);
LCD_RST = 1;
delay(12);
lcd_wcmd(0x34); //打開擴展功能,繪圖顯示關
delay(22);
lcd_wcmd(0x30); //回到基本指令集
delay(23);
lcd_wcmd(0x0C); //退出睡眠模式
delay(23);
lcd_wcmd(0x01); //進入待命模式
delay(23);
}
5 小結
上述程序由Keil C51軟件在最小系統板上成功調試,可以實現人體的心率測試.IAP15F2K61S2微控制器的P32用于連接LED陰極在檢測到信號時顯示帶有LED的心跳.讓被測人很直觀的感受心跳.系統通過IAP15F2K61S2微控制器的INT0中斷處理ST188傳感器的信號,并用T0中斷時序.在時間轉為心率數據的處理上,采用5次取平均值的方法,增加了數據的精確度.最終由LCD12864液晶進行顯示,顯示結果為:系統名稱、心率、健康指數.
參考文獻:
〔1〕錢浩宇,汪鵬君,等.基于單穩態定時偏差的高識別性PUF電路設計[J].浙江大學學報(理學版),2017(1):64-69.
〔2〕王紅衛,張穎,等.包公藤甲素衍生物(S)-OTS?HCl的心臟電生理效應[J]上海交通大學學報(醫學版),2017(2):177-183.
〔3〕武靈芝.基于安卓和藍牙通信的智能生理監護儀的設計[J].北京生物醫學工程,2017(4):415-419.
〔4〕郭金建、雷鳴意.風光互補發電的節能LED燈控制系統設計[J].單片機與嵌入式系統應用,2015(1):46-48.
〔5〕蘭羽.基才紅外傳感器ST188的自動循跡小車設計[J].電子設計工程,2013(3):64-66.
〔6〕馮祺婷,彭保進.一種簡易光譜實驗儀的設計與實現[J].光學儀器,2013(5):80-84.