当前位置:文档之家› 便携式心率测试仪电子系统设计报告

便携式心率测试仪电子系统设计报告

五邑大学电子系统设计结题报告题目:便携式心率测试仪院系信息工程学院专业电子信息工程学号学生姓名指导教师报告日期2012.12.18目录1、摘要 (2)2、课题研究意义 (2)2.1.背景 (2)2.2 设计任务与要求 (2)3、方案设计说明 (2)3.1硬件电路原理分析说明 (2)3.1.1信号放大电路 (2)3.1.2滤波电路 (3)3.1.3整形电路 (4)3.1.4单片机信号处理电路 (4)3.1.5数码管显示电路 (5)3.2软件设计 (6)3.2.1编程环境与开发工具 (6)3.2.2源程序及注解 (7)4、调试过程遇到的问题与解决的方法 (9)5、5、设计总结及体会 (9)6、参考文献 (9)7、附录 (10)1、摘要本文设计了一种基于STC89C51单片机实现的便携式心率测试仪.接受心率测试检测模块发送的信号并对信号进行检测分析并显示,从而实现心率测试功能。

该系统的硬件单元包括信号放大电路、滤波电路、整形电路、单片机控制电路和数码管显示电路。

采用了放大电路后,使得采集的脉搏信号放大到整形电路要求的电压幅度。

滤波电路消除了干扰,得到特定频率的低频信号。

整形电路把模拟信号转换成单片机能够处理的数字信号。

单片机内的处理程序将接收到的信号进行监测分析,得出心率值,经单片机I/O口发送给由数码管组成的显示模块显示。

2、课题研究意义2.1背景1)健康的重要性不言而喻,越来越多的研究表明心率是健康极其重要的指标。

一般人们为了知道自己的运动或者劳动强度是否超负荷,尤其是老年人、运动员等,他们都得赶到医院而不能实时测量和预知。

为了贯彻党和国家“预防为主”的医疗方针,满足人们能享受基本医疗保健的愿望,便携式心率测试仪应运而生,也极具市场潜力。

2)心脏病人往往需要经常去医院定期心脏检测,此仪器可以随时将病人的心脏情况记录和保存,并发送给医生,从而给病人带来便捷也有助于治疗;当心脏类疾病突发时,也可以提前将心脏情况发送给医生,从而缩短救援时间,提高救援成功率。

2.2设计任务与要求2.2.1设计任务:设计基于C51单片机的便携式心率测试仪。

2.2.2要求:(1)设计脉搏波放大、滤波、整形电路,实现所采集的脉搏信号的放大、滤波、整形。

(2)设计单片机电路及处理程序与数码管显示电路,实现心率信号的处理与正确显示。

3、方案设计说明3.1硬件电路原理分析说明3.1.1信号放大电路作用:将采集的幅度值过小的心率信号放大到足够大的幅值。

原理:电路如图所示:利用运算放大器实现反向比例放大电路。

运算放大器在深度负反馈的条件下工作于线性区,根据“虚短”和“虚断”的概念对以上电路进行分析,可得:放大器增益Ua=-R17/R16=20 电路采用LM324双极型线性集成放大器,有直流电压增益高(约100dB) 单位增益频带宽等特点,同理再接一级放大器后放大增益为400,电路图如下:3.1.2滤波电路作用:由于心律值为低频周期信号,需要滤除高频杂波信号得到特定频率的低频信号。

原理:电路如图所示。

由于一阶低通滤波器的滤波特性和理想低通滤波器的特性相差较大,为了使实际低通滤波器特性更接近理想特性,电路采用了由一阶滤波器基础上外加RC网络组成的二阶压控有源低通滤波电路,是高频段的衰减斜率更大,滤波效果更好。

二阶滤波器截止频率f H=1/2πRC 通带电压增益A up=1+Rf/R1,R=R24=R22=100k,Rf=R19=10k得截止频率为f H=15HZ,放大增益为23.1.3整形电路作用:把模拟信号转换成单片机能够处理的数字信号。

原理:电路图如图所示,555定时器是一种模拟和数字功能相结合的中规模集成器件。

设计采用555定时器构成施密特触发器,各引脚功能分别为:1脚:外接电源负端VSS或接地,一般情况下接地。

2脚:低触发端,接经放大、滤波后的心率信号3脚:输出端Vo ,与单片机输入端相连4脚:是直接清零端。

当此端接低电平,则时基电路不工作,此时不论TR、TH处于何电平,时基电路输出为“0”,该端不用所以接高电平。

5脚:VC为控制电压端。

若此端外接电压,则可改变内部两个比较器的基准电压,该端不用,故将该端串入一只10nF电容接地,以防引入干扰。

6脚:TH高触发端7脚:放电端。

该端与放电管集电极相连,用做定时器时电容的放电。

在此电路不用8脚:外接电源VCC,一般用5V。

当输入信号V1从零逐渐升高时当V1<1/3Vcc时,Vo输出高电平;当1/3Vcc<V1<Vcc时,Vo保持不变,输出高电平;当V1>2/3Vcc时,Vo输出低电平;当输入信号V1从V1>2/3Vcc逐渐下降时当V1>2/3Vcc时,Vo输出低电平;当1/3Vcc<V1<Vcc时,Vo保持不变,输出低电平;当V1<1/3Vcc时,Vo输出高电平;3.1.4单片机信号处理电路作用:对方波信号进行处理并输出心率信号到显示模块。

原理:电路图如图所示,AT89C51芯片的40个引脚图及其功能为:VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在本设计中做输出端口,分别接数码管的a,b,c,d,e,f,g,dp.P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

P1口在本设计中不用。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口在本设计中分别通过PNP三极管接共阳数码管的1,2,3,4脚。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

电路中由11.0592MHZ晶振Y1、电容C2、C3组成单片机的时钟振荡电路,开关S2、电容C1、R13组成单片机的复位电路。

3.1.5数码管显示电路作用:通过数码管显示将心率信号直观地显示。

原理:本设计采用四位七段共阳数码管,从正面看,数码管管脚从左到右,上面管脚分别为:1,a,f,2,3,b,下面管脚分别为:e,d,dp,c,g,41,2,3,4是4个数码管的位选,为位选通管脚,由于是共阳数码管,所以位选要接三极管驱动,分别通过三极管与单片机的P2口连接,a,b,c,d,e,f,g,dp是段码,低电平有效。

各管脚与单片机间连接一个1k电阻,起限流作用。

数码管的动态扫描单片机通过运算得出心率,并通过P0管脚输出显示。

由于四位数码管的段选并联,所以每次只能有一位数码管处于接通状态,在编程时,需要输出段选和位选,位选信号选中一个其中一个数码管,然后输出段码,使数码管显示所需要的内容,延时1~2ms后,再显示下一个数码管,数码管的动态扫描利用了人眼的暂留效应,通过短时间内的交替显示而使人看到数码管同时显示。

3.2软件设计3.2.1编程环境与开发工具由Visual C++编写源程序,并通过uvision软件检测无错误后,烧录到单片机内。

程序运行无错误。

3.2.2源程序及注解#include<reg52.h> //包含C51头文件#define uchar unsigned char#define uint unsigned intbit flag=0;uchar num,t,shu,bai,shi,ge; //定义变量sbit ZD=P3^2;sbit d1=P2^7;sbit d2=P2^6;sbit d3=P2^5;uint xintiao;uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80f}; uchar code table1[]={001,010,100}; //定义的数据要放在ROM里面void delay(uchar z) //延时函数延时时间=z*j个机器时间{u char i,j;f or(i=z;i>0;i--)for(j=110;j>0;j--);}void XS(uchar bai,uchar shi,uchar ge) //显示函数{d3=table1[2];P0=table[bai];d elay(5); //输出显示一位后延时5个机器周期d2=table1[1];P0=table[shi];d elay(5);d1=table1[0];P0=table[ge];d elay(5);}void main(){T MOD=0x01; //设置定时器0为定时模式在工作方式1T H0=(65536-50000)/256;T L0=(65536-50000)%256;E A=1; //开总中断E T0=1; //允许定时器0开中断E X0=1; //允许外部中断0中断I T0=1; //外部中断0选择电平触发方式t=20;X S(0,0,0); //数码管显示000初值w hile(!flag);xintiao=shu*3;b ai=xintiao/100;s hi=(xintiao-bai*100)/10;g e=xintiao%10;w hile(1){XS(bai,shi,ge); //输出显示分别为百、十、个位}}void T0_time() interrupt 1 //定时器0中断{T H0=(65536-50000)/256;T L0=(65536-50000)%256;n um++;i f(num==20){num=0;t--;if(t==0){TR0=0; //定时器0关闭EX0=0;flag=1; //外部中断0关闭}}}void INT0_ZD() interrupt 0{T R0=1; //定时器0开始工作s hu++;}4、调试过程遇到的问题与解决的方法1)在做设计的过程中发现自己对一些专业软件和知识还不够熟悉,比如:设计开始事还没有很多地接触单片机、没用过Proteus软件、仿真软件不熟悉,C++程序设计知识遗忘等等。

相关主题