摘要:随着人们物质生活质量的不断提高,越来越多的人开始关注自身身心健康状况,在锻炼身体的过程中,希望可以借助一些便携式医学仪器来检测自身的身体状况,例如使用心率测试仪来测量心率,通过心律的测试,来确定适合于自己的运动强度,防止运动量不达标或运动过量,无论您是运动达人还是视运动为娱乐的人,心率测试仪都是一款必备的运动工具.它能让你能更好地掌握运动过程中运动强度.本文作者将利用单片机与红外传感器和精确定时/计数等技术融合嵌入式开发语言(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.