作者:朱波
一、设计要求
本设计利用红外光电传感器产生脉冲信号,经过放大整形后,输入单片机内进行相应的控制,从而测量出一分钟内的脉搏跳动次数,快捷方便。测量范围限可以用按键调节,并进行声音报警,测量结果以数字方式显示,测量精确到2次/分。同时还可以设定上限次数和下限次数,当测量的范围超过设定的范围则驱动蜂鸣器报警提醒,结果最终可以把采集到的脉搏信号显示在LCD1602上。
二、方案论证
系统框图如下:
2.1主控模块的选型和论证
方案一:
采用MSP430系列单片机,该单片机是TI公司1996年开始推向市场的一种16位超低功耗的混合信号处理器。其内部集成了很多模拟电路、数字电路和微处理器,提供强大的功能。不过该芯片昂贵不适合一般的设计开发[3]。
方案二:
采用51系列的单片机,该单片机是一个高可靠性,超低价,无法解密,高性能的8位单片机,32个IO口,且STC系列的单片机可以在线编程、调试,方便地实现程序的下载与整机的调试。
因此选用方案二中的51系列单片机作为主控芯片。
2.2显示模块的选型和论证
方案一:
采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用单片机口线少。但是由于数码管动态扫描需要借助74LS164移位寄存器进行移位,该芯片在电路调试时往往有很多障碍,所以不采用LED数码管作为显示。
方案二:
采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,对于本设计而言一个LCD1602的液晶屏即可,价格也还能接受,需要的接口线较多,但会给调试带来诸多方便。
所以本设计中方案二中的LCD1602液显示屏作为显示模块。
2.3脉搏检测传感器的选型和论证
方案一:压电式
压电式传感器的检测方法是利用压力传感器或振动传感器将人体脉搏振动转换成电信号。常见的压力传感器可用现有的压电陶瓷代替。压电式元件的内阻极高,通常采用两片相同的元件,使其极性反向相叠,由夹在中间的铜片作为一个电极。这样,中央电极处于全空状态,可以用具有良好绝缘性的导线引出。此种方法的优点是传感器种类多,一般的传感器输出信号也比较大,对后面的放大电路要求不高。压电陶瓷具有成本低、取材方便、易于提高敏感度等特点。
方案二:声电式
声电式传感器的作用是将气体、液体或固体中传播的机械振动转换成电信号。因此,它也属于力学量传感器。它的制作材料一般由不定性无烟煤颗粒或压电陶瓷构成。颗粒式声电传感器的优点是耐用、成本低和容易制作,缺点是颗粒的机械磨损和接触表面上的瞬间电弧会使颗粒逐渐老化,从而导致杂音大、性能不稳定和非线性;而压电陶瓷式的声电传感器在检测声音信号时却存在着一定的缺陷。
声电式检测方法是利用微音传感器将人体的振动的声音转换成电信号。此种方法的优点是作为传感器的微音传感器可利用现有的驻极体或电容式话筒,但其后面的电路要采取一定的措施将环境的声音干扰信号滤去。
方案三:光电式
光电系统通常是指能敏感由紫外光到红外光的光能量,并将光能量转换成电信号的器件。通常用的光电器件有光电二极管和光电三极管。光电式传感器测量微小的位移变化有明显的效果,但是光电传感器对材料、电路控制和光电管属性要求较高:1)吸收红外光的能力极强2)介电常数小,以便得到大的输出电压。3)介电损耗小。
光电式检测方法是利用光电传感器检测人体内血液流动时对光的透过率或反射率不同而将其转换成电信号的方法。此种方法有两种方式:一种是对射式,另一种是反射式。对射式是在一个大小合适的环的两侧各放一个发射管和一个接收管,测量时将人的手指伸到环中,由于手指中的血流量的变化而使光电接收管的光电流也随之变化,反射式是光电发射与光电接收都指向一个方向,当人体内的血流发生变化时其对光的反射率也随之变化,从而检测出心率。这种方法的优点是外界干扰信号小,但其最大的难点是传感器输出信号小,对后面的放大电路要求较高。此外,对于干扰变化强烈的信号,回路不宜调制,可视光电管的定向角不同,光轴也不宜把握。
综上所述,从传感器的制作工艺、材料的选取、受外界的干扰信号的干扰程度和制作过程中前级电路的处理难易程度上考虑,就选用一对红外对射二极管实现。
2.4温度传感器的选型
方案一:
由于本设计是测温电路,可以使用热敏电阻之类的器件,将随被测温度变化的电压或电流采样,进行A/D转换后就可以用单片机进行数据处理,实现温度显示。这种设计需要用到A/D转换电路,增大了电路的复杂性,而且要做到高精度也比较困难。
方案二
考虑到在单片机属于数字系统,容易想到数字温度传感器,可选用DS18B20数字温度传感器,此传感器为单总线数字温度传感器,起体积小、构成的系统结构简单,它可直接将温度转化成串行数字信号给单片机处理,即可实现温度显示。另外DS18B20具有3引脚的小体积封装,测温范围为-55~+125摄氏度,测温分辨率可达0.0625摄氏度,其测量范围与精度都能符合设计要求。
以上两种方案相比较,第二种方案的电路、软件设计更简单,此方案设计的系统在功耗、测量精度、范围等方面都能很好地达到要求,故本设计采用方案二。
2.5系统整体设计概述
系统总体设计由STC89C52、按键、LCD1602、光电传感器、时钟模块、运放等构成,系统设有四个按键,可以设置上下限脉搏数,当超过范围的时候单片机会驱动蜂鸣器发响,脉搏测量的时候需要人把手轻轻的按在光电传感器上面,由于人脉搏跳动的时候,血液的透光性不一样会导致接收器那边接收的信号强弱不一样,间接的把人脉搏信号传回,通过运放对其进行放大、整形后连接到单片机的IO口,单片机利用外部中断对其进行计数,最终换算成人一分钟脉搏的跳动次数,最终显示在液晶屏上。
由于仿真中没有红外,手指也模拟不了,其实就是单片机的IO口检测脉冲信号,那样用个方波信号模拟就行了
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
三、理论设计
硬件设计
1、硬件原理图
2、工作原理
本设计利用红外光电传感器产生脉冲信号,经过放大整形后,输入单片机内进行相应的控制,从而测量出一分钟内的脉搏跳动次数,当测量的范围超过设定的范围则驱动蜂鸣器报警提醒,当检测的体温超过设置的温度上下限也会蜂鸣器报警提醒,结果最终可以把采集到的脉搏信号显示在LCD1602上。
3.1.1单片机最小系统设计
图3.1 单片机最小系统电路图
图3.1为单片机最小系统电路图,单片机最小系统有单片机、时钟电路、复位电路组成,时钟电路选用了12MHZ的晶振提供时钟,作用为给单片机提供一个时间基准,其中执行一条基本指令需要的时间为一个机器周期,单片机的复位电路,按下复位按键之后可以使单片机进入刚上电的起始状态。图中10K排阻为P0口的上拉电阻,由于P0口跟其他IO结构不一样为漏极开路的结构,因此要加上拉电阻才能正常使用。
3.1.2 液晶原理介绍
液晶显示器(LCD)英文全称为Liquid Crystal Display,它一种是采用了液晶控制透光度技术来实现色彩的显示器。和CRT显示器相比,LCD的优点是很明显的。由于通过控制是否透光来控制亮和暗,当色彩不变时,液晶也保持不变,这样就无须考虑刷新率的问题。
显示接口用来显示系统的状态,命令或采集的电压数据。本系统显示部分用的是LCD液晶模块,采用一个16×2的字符型液晶显示模块。
LCD1602引脚图
液晶寄存器选择控制如表3.1。
表3.1寄存器选择控制
|
|
|
|
|
|
|
|
读busy flag(DB7),以及读取位址计数器(DB0~DB6)值
|
|
|
|
|
|
|
LCD1602与单片机接口电路如下:
3.1.3信号采集电路
信号采集电路如图3-2所示。5MM红外对管D1与D3组成红外传感器。因红外传感器输出的脉冲信号是非常微弱的信号,而且频率很低(如脉搏50次/分钟为0.78Hz,200次/分钟为3.33Hz),并且还伴有各种噪声干扰,故该信号要经过R7、C5低通滤波,去除高频干扰。当传感器检测到较强的干扰噪音时,其输出端的直流电压信号会有很大变化
图3.2 信号采集电路
3.1.4信号放大电路
如图3-3所示,R3与R8的电阻之比为放大器的放大倍数,经过计算所得该放大器的理论值为200倍,但由于8号接口上5V供压不足再加上材料限制和人为的因素,该放大倍数只有20倍左右。
图中C7为耦合电容,作用为隔直流通交流,之所以使用1uF的电容,是为了让所有的信号通过。
图3.3 信号放大电路
3.1.5信号比较电路
电压比较器是一种常用的集成电路。它可用于报警器电路、自动控制电路、测量技术,也可用于V/F 变换电路、A/D 变换电路、高速采样电路、电源电压监测电路、振荡器及压控振荡器电路、过零检测电路等。我们主要介绍其基本概念、工作原理及典型工作电路,电压比较器是对两个模拟电压比较其大小并判断出其中哪一个电压高,接到的信号电压小于该值时显示0V,当大于该值时显示5V,这就形成了0和5V的方波。如图3.4 所示。
图3.4 放大滤波电路
软件设计
3.2系统软件总体设计
图3.2系统流程图
主程序流程图如图3.2所示,单片机上电后先进行初始化,清楚一些参数的初值,然后等待用户按下对应的按键并进入对应的功能,当用户按下测量按键的时候流程如图3.2(c)所示,单片机通过定时15s测量人体的脉搏次数流程如图3.2(b)所示,然后再换算出对应的真实的脉搏次数再在液晶屏幕上显示流程如图3.2(a)所示,当用户按下设置脉搏范围设定按键后,单片机根据用户按下的按键进行增加或减少范围。
延时子程序:
四、测试方案、测试结果及分析
4.1软件调试
当模块设计完成并在ISIS 7 protues中仿真成功后,电路基本确定,但那只是理论值,需要对这些仿真电路进行试验,以确保这些电路是否适用与该设计。
4.2硬件调试
准备施焊;加热焊件;送入焊丝;焊接元件。在焊接过程中要注意假焊,虚焊,焊接不规则等等问题,尽量避免不必要的错误。器件安装焊接完后,就要焊接电线,一定要保证连接端口的正确连接,管脚的位置及所代表的含义不能搞错,这样才能避免电路板出现问题,将装置供电后,将已写好的程序下载到单片机里面,观察板子的现象。
测试结果:程序下载好并供电后,LCD显示屏上显示14.4°,手指放在红外灯管上,显示屏显示脉搏次数93,如果脉搏超过预先设定的范围,装置中的蜂鸣器报警,测量的脉搏在正常范围内,警报停止报警。按下功能键,可以修改设置的警告上下限。在测量时,红外传感器检测到的人体信号很微弱,手指的一点抖动都会引起测量心率值的大幅变化,手指尽量别乱动,以免测量数据不准确,导致蜂鸣器一直报警。
分析:设计要求全部实现。
五、作品功能和使用说明:
作品功能:实现温度的测量、脉搏测量。能测出即时的温度和脉搏,显示在LCD屏上。手指放到红外对管中,2秒内读出心率。同时还可以设定上限次数和下限次数,当测量的范围超过设定的范围则驱动蜂鸣器报警提醒,当检测的体温超过设置的温度上下限也会蜂鸣器报警提醒。
使用说明:显示每分钟脉搏次数和温度。
三个按键:一个设置,一个加,一个减。
按下设置的时候才可以加减。
手指放上去尽量别乱动。
六、心得体会
通过这次课程设计,学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。经过长时间的设计及调试,软件仿真基本能实现基于单片机的脉搏计的所有功能。但是硬件的稳定性有待进一步提高,无法发现错误在何处。
综合设计主要涉及硬件和软件两方面的内容,硬件和软件开发能力都获得了提高。首先硬件方面,基本了解了电子产品的开发流程和所要做的工作,焊完实物后,首先是硬件调试。电路的调试过程是检验、修正设计方案的实践过程,但也是对理论知识的实际应用,解决各种问题的关键环节,是电路设计人员必须掌握的基本技能。基本掌握了Protel99SE原理图的方法,通过开发板的设计和硬件搭建的过程,对51系单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LCD液晶,键盘等。并且学会了分析问题解决问题的能力,加深了对所学理论知识的理解和运用,动手能力得到了很大的提高,创新意识得到了锻炼。
七、资源下载说明
单片机部分源程序如下:
#include reg52.h
#include intrins.h
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long //宏定义
#define LCD_DATA P0 //定义P0口为LCD_DATA
sbit LCD_RS =P2^5;
sbit LCD_RW =P2^6;
sbit LCD_E =P2^7;
//定义LCD控制引脚
sbit Xintiao =P1^0 ;
//脉搏检测输入端定义
sbit speaker =P2^4;
//蜂鸣器引脚定义
sbit DQ=P3^7;
void delay5ms(void);
//误差 0us
void LCD_WriteData(uchar LCD_1602_DATA);
/********LCD1602数据写入***********/
void LCD_WriteCom(uchar LCD_1602_COM);
/********LCD1602命令写入***********/
void lcd_1602_word(uchar Adress_Com,uchar Num_Adat,uchar *Adress_Data);
/*1602字符显示函数,变量依次为字符显示首地址,显示字符长度,所显示的字符*/
void InitLcd();
//液晶初始化函数
void Tim_Init();
uchar Xintiao_Change=0;
//
uint Xintiao_Jishu;
uchar stop;
uchar View_Data[3];
uchar View_L[3];
uchar View_H[3];
uchar Xintiao_H=100;
//脉搏上限
uchar Xintiao_L=40;
//脉搏下限
uint wendu=0;
uchar Key_Change;
uchar Key_Value;
//按键键值
uchar View_Con;
//设置的位(0正常工作,1设置上限,2设置下限)
uchar View_Change;
/*****延时子程序*****/
void Delay_DS18B20(int num) {
while(num--) ;
}
/*****初始化DS18B20*****/
void Init_DS18B20(void) {
unsigned char x=0;
DQ = 1;
//DQ复位
Delay_DS18B20(8);
//稍做延时
DQ = 0;
//单片机将DQ拉低
Delay_DS18B20(80);
//精确延时,大于480us
DQ = 1;
//拉高总线
Delay_DS18B20(34);
}
/*****读一个字节*****/
unsigned char ReadOneChar(void) {
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--) {
DQ = 0;
// 给脉冲信号
dat>>=1;
DQ = 1;
// 给脉冲信号
if(DQ)
dat|=0x80;
Delay_DS18B20(4);
}
return(dat);
}
void WriteOneChar(unsigned char dat) {
unsigned char i=0;
for (i=8; i>0; i--) {
DQ = 0;
DQ = dat&0x01;
Delay_DS18B20(5);
DQ = 1;
dat>>=1;
}
}
/*****读取温度*****/
unsigned int ReadTemperature(void) {
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0x44);
//启动温度转换
Init_DS18B20();
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0xBE);
//读取温度寄存器
a=ReadOneChar();
//读低8位
b=ReadOneChar();
//读高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5;
//放大10倍输出并四舍五入
return(t);
}
资源标识:16脉搏体温检测仪的设计与制作
暂无评论