数字心率计Word文件下载.docx
《数字心率计Word文件下载.docx》由会员分享,可在线阅读,更多相关《数字心率计Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
能够有报警信号显示
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
if(cnt1>
d25000)
begin
=~clk_1K;
elsecnt1<
=cnt1+1;
endmodule
2、计数部分:
对经过一系列放大滤波整形过的矩形波信号进行计数,以便后来计算心率
modulejishu(heart,clk,counts);
inputheart,clk;
output[11:
0]counts;
reg[11:
regheart_pre;
always@(posedgeclk)
heart_pre<
=heart;
if((heart_pre==0)&
&
(heart==1))
counts<
=1;
elsecounts<
=counts+1'
b1;
3、计算部分
用除法运算计算出心率值,并且转换计算输出的个、十、百位的值。
modulejisuan(heart,count,SS_zhi);
input[11:
0]count;
inputheart;
output[8:
0]SS_zhi;
reg[8:
always@(posedgeheart)
begin
SS_zhi=60000/count;
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;
integeri=-1;
if(shineng_AVE)
if((heart_pre==0)&
(heart==1))
i=i+1;
if(i<
=16)
beginAVE_zhi<
=SS_zhi;
add<
=add+AVE_zhi;
AVE_zhi=add>
>
4;
5、判断输出平均心率还是瞬时心率
inputheart,shineng_AVE;
0]SS_zhi,AVE_zhi;
0]zhi;
if(shineng_AVE==0)
zhi<
if(shineng_AVE==1)
=AVE_zhi;
6、译码部分的实现代码
moduleyima(zhi,codeout_bai,codeout_shi,codeout_ge);
0]zhi;
output[6:
0]codeout_bai,codeout_shi,codeout_ge;
reg[6:
reg[3:
0]ge,shi,bai;
always@(zhi)
bai=zhi/100;
shi=zhi%100/10;
ge=zhi%100%10;
case(bai)
4'
d0:
codeout_bai=7'
b1111110;
d1:
b0110000;
default:
b0;
endcase
case(shi)
codeout_shi=7'
d2:
b1101101;
d3:
b1111001;
d4:
b0110011;
d5:
b1011011;
d6:
b1011111;
d7:
b1110000;
d8:
b1111111;
d9:
b1111011;