数字心率计.docx

上传人:b****2 文档编号:534822 上传时间:2022-10-10 格式:DOCX 页数:9 大小:71.78KB
下载 相关 举报
数字心率计.docx_第1页
第1页 / 共9页
数字心率计.docx_第2页
第2页 / 共9页
数字心率计.docx_第3页
第3页 / 共9页
数字心率计.docx_第4页
第4页 / 共9页
数字心率计.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

数字心率计.docx

《数字心率计.docx》由会员分享,可在线阅读,更多相关《数字心率计.docx(9页珍藏版)》请在冰豆网上搜索。

数字心率计.docx

数字心率计

西南交通大学

年短学期

电子课程设计报告

课题:

数字心率计

指导老师:

 

 

 

 

 

 

 

 

目 录

一、课题要求

二、方案论证与设计

三、系统原理框图

四、主要电路以及参数计算

五、调试步骤

六、测试数据及实验结果

七、结论

八、学习心得

九、本作品使用说明

十、附录

一、课题要求

基本要求:

实时数字显示心率值(两位半)

能够有报警信号显示

1)正常

2)过快

3)过慢

提高要求:

可显示平均心率

心率不齐时有报警信号

二、方案论证与设计

(1)模拟部分

●采集信号

用红外反射ST188传感器采集血液流动信号,当血液流动时,由于血液的各项参数指标变化,那么传感器接收到的电流信号就会发生变化,从而从传感器输出的电信号也会发生不同的变化,由于接收到的信号很微弱,数量级在毫伏级别,且同时信号具有低频率,低幅值和干扰性非常强的特点,所以我们对采集到的信号进行放大才能被检测到,从而实现心率的测量与计算。

因此模拟部分电路分为三个模块,放大,滤波,整形。

●放大

据资料显示,ST188采集到的人体的心率信号所能转化的电流大概在0.05mV-5mV左右,由于采集到的信号是毫伏级别的,而后面要进行整形的输入信号要达到3V以上,所以对电路的放大倍数的设置是非常重要的。

那么在开始阶段我们借助模拟电子技术的一些资料来设计电路,然后通过软件进行仿真,但是由于实验室无法满足每个电路元件参数的要求,所以我们在实际电路中统一使用了老师给定的电路。

用两个放大电路来实现需要的放大,,每个子电路的放大倍数都约为

,采用的电子电路元件参数为:

①680K和2.7K;②680K和2.7K。

 滤波

电源供电时会对电路产生50HZ的工频,  且我们采用的是红外线传感器,易受外界影响,这些都会会影响模拟信号的采集和计算,所以需要把这50HZ的工频滤掉且尽量减小外界信号的干扰。

由于人的心率频率大概为3HZ左右,所以我们设置的滤波电路的截止频率为0.23-2.3Hz,由此计算得到高通滤波电路的设计为:

①10uF和68K(0.23Hz);低通滤波电路的设计为:

①0.1uF和680K(2.3Hz);。

其次我们选择一阶滤波电路与放大电路合并在一个电路中,高通滤波电路和低通滤波电路一起组成一个带通电路。

综合以上两点,我们得出电路的基本雏形,电路由两个相同的,且同时具有带通滤波和放大功能的子电路串联而成。

●整形

为了方便计算心率,我们将放大滤波之后的信号进行整形使其成为矩形波,用到的是施密特反向器74HC14芯片。

使用74HC14芯片,这个电路相较于迟滞比较电路来说,它的优点也是十分明显的,我们不需要复杂的计算,也不用推测我们所采集到的信号的波形来确定电路的门限阀值。

只需要将施密特反向电路这个子电路接在放大滤波电路后,来帮助我们确定放大倍数即可。

(2)数字部分

简要思路:

将模拟部分电路采集到的模拟信号作为外界输入,并测试一个脉冲周期所用的时间,而测试时间时就用标准周期的时间来进行计数。

通过已知的时钟频率来计算在一分钟内的心跳次数。

通过一系列的转换得到心率值,最终通过数码管译码显示出来。

因为板子自带的时钟频率为50MHZ,对其进行分频得到1KHz的时钟频率作为基准信号,以此来计算心率。

并且用三个发光二极管来代表不同的心率范围。

红色表示心率过高,绿色表示正常,而黄色表示心率过慢,另外放置一个发光二极管表示心率不及,当相邻两次心率值相差过大时,则该灯亮。

不管心率过慢还是过快蜂鸣器都会报警。

另外设置两个开关,一个当开关按下时复位,另外一个表示显示平均心率,本设计取16次的心率计算平均心率。

三、系统原理框图

a.方案原理介绍

因为脉搏输入信号比较弱,大约在0.05mV-5mV左右,首先经过同向比例放大电路放大一万多倍,得到3V左右的信号,又由于50赫兹的工频干扰,信号经过带通约为0.23Hz-2.3Hz、放大倍数约为256倍左右的滤波放大子电路串联而成。

然后将得到的信号经过74HC14的反向处理,并进行降压,就得到我们所需要的方波信号。

芯片自带50MHz的时钟信号,可以通过编写一个VerilogHDL程序模块将其中50MHz的频率分频得到1kHz的基准信号,每当脉搏信号到来一个上升沿时开始计数基准时钟的个数,再来一个上升沿时计数清零,如此循环。

在一个心跳周期内,对标准时钟信号进行计数,再通过转换得到心率值。

假定时钟信号的频率为f,在一个心跳周期内对时钟信号的高电平计数为N,那么一次脉搏的持续时间T=N/f,从而瞬时心率值为60/T=60*f/N。

并且将心率值与上下线值60和120进行比较,实现报警功能(慢、正常、快、心律不齐)。

同时由一开关控制平均值的测量,开关按下,通过使用中间16次变量求和,另外一个开关可以实现复位功能。

b.系统原理框图

 

心率不齐

 

 

译码显示

平均心率

瞬时心率率

 

四、主要电路设计与参数计算

(1)数字部分

基于FPGA设计,将整个系统分为若干个子模块,各子模块利用VerilogHDL语言准确描述,在Quartusii环境下对每个底层模块进行编译、仿真成功后,再将各个模块连接起来行程顶层,最终的整个数字系统顶层模块设计如下图所示。

1、分频器

对芯片自带的50Mhz的频率进行分频,分出来基准频率为1kHz。

既满足要求,又能达到较好的精度要求。

源代码:

modulefenpin(reset,clk_50M,clk_1K);

inputclk_50M,reset;

outputclk_1K;

regclk_1K;

reg[14:

0]cnt1;

reg[17:

0]cnt2;

always@(posedgeclk_50M)

if(reset)

begin

clk_1K<=0;cnt1<=15'd0;

end

else

begin

if(cnt1>=15'd25000)

begin   

clk_1K<=~clk_1K;cnt1<=15'd0;

end

elsecnt1<=cnt1+1;

end

endmodule

2、计数部分:

对经过一系列放大滤波整形过的矩形波信号进行计数,以便后来计算心率

源代码:

modulejishu(heart,clk,counts);

inputheart,clk;

output[11:

0]counts;

reg[11:

0]counts;

regheart_pre;

always@(posedgeclk)

heart_pre<=heart;

always@(posedgeclk)

begin

if((heart_pre==0)&&(heart==1))

counts<=1;

elsecounts<=counts+1'b1;

end

endmodule

3、计算部分

用除法运算计算出心率值,并且转换计算输出的个、十、百位的值。

源代码:

modulejisuan(heart,count,SS_zhi);

input[11:

0]count;

inputheart;

output[8:

0]SS_zhi;

reg[8:

0]SS_zhi;

always@(posedgeheart)

begin

SS_zhi=60000/count;

end

endmodule

4、平均心率的实现

源代码:

modulepingjun(SS_zhi,shineng_AVE,heart,clk,AVE_zhi);

inputheart,clk,shineng_AVE;

input[8:

0]SS_zhi;

output[8:

0]AVE_zhi;

reg[8:

0]AVE_zhi,add;

regheart_pre;

integeri=-1;

always@(posedgeclk)

heart_pre<=heart;

always@(posedgeclk)

begin

if(shineng_AVE)

if((heart_pre==0)&&(heart==1))

i=i+1;

if(i<=16)

beginAVE_zhi<=SS_zhi;add<=add+AVE_zhi;end

else

AVE_zhi=add>>4;  

end

endmodule

5、判断输出平均心率还是瞬时心率

源代码:

inputheart,shineng_AVE;

input[8:

0]SS_zhi,AVE_zhi;

output[8:

0]zhi;

reg[8:

0]zhi;

always@(posedgeheart)

begin

if(shineng_AVE==0)

zhi<=SS_zhi;

if(shineng_AVE==1)

zhi<=AVE_zhi;

end

endmodule

6、译码部分的实现代码

源代码:

moduleyima(zhi,codeout_bai,codeout_shi,codeout_ge);

input[8:

0]zhi;

output[6:

0]codeout_bai,codeout_shi,codeout_ge;

reg[6:

0]codeout_bai,codeout_shi,codeout_ge;

reg[3:

0]ge,shi,bai;

regheart_pre;  

always@(zhi)

begin

bai=zhi/100;

shi=zhi%100/10;

ge=zhi%100%10;

case(bai)

4'd0:

codeout_bai=7'b1111110;

4'd1:

codeout_bai=7'b0110000;

default:

codeout_bai=7'b0;

endcase

case(shi)

4'd0:

codeout_shi=7'b1111110;

4'd1:

codeout_shi=7'b0110000;

4'd2:

codeout_shi=7'b1101101;

4'd3:

codeout_shi=7'b1111001;

4'd4:

codeout_shi=7'b0110011;

4'd5:

codeout_shi=7'b1011011;

4'd6:

codeout_shi=7'b1011111;

4'd7:

codeout_shi=7'b1110000;

4'd8:

codeout_shi=7'b1111111;

4'd9:

codeout_shi=7'b1111011;

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1