万创平台

智能心率检测仪方案
来源:深圳市赛亿科技开发有限公司作者:日期:2020-08-21 11:03:49点击:534次

 

  前言:心率是指人体心脏每分钟搏动的次数。它是反映心脏是否正常工作的一个重要参数,同时心率值也是衡量体力劳动强度和脑力劳动强度的重要指标。因此心率的测量是一种评价病人生理状况很好的方法。

  心率计是用于测量心率值的的医疗设备,它的应用在心血管疾病的研究和诊断方面也发挥出显著的作用,它们所记录的心脏活动时的生物电信号,已成为临床诊断的重要依据。随着现代医学的不断发展和进步, 人们对各种测量仪器的要求必然越来越高,因此在前人研究的基础上我们开发并设计了一款性价比较高的电子心率计, 它有利于解决了传统测量方法的不准确性和随机性, 而且能够准确的测量出人体的心率, 并随时以数字的方式显示测量结果。这样可以使人体心率值直观化

  第一章 方案设计

  光电容积法的基本原理是利用人体组织在血管搏动时造成的透光率不同来进行脉搏测量的,其使用的传感器由光源和光电变感器两部分组成,通过绑带或者夹子固定在病人的手指或者耳垂上。光源一般采用对动脉血中氧和血红蛋白有选择性的一定波长(500nm~700nm) 的发光二极管。当光束透过人体外周血管,由于动脉搏动充血容积变化导致这光束的透光率发生变化,此时由广电变换器接收经人体组织反射的光线,转变为电信号并将其放大和输出,由于脉搏是随心脏的搏动而周期性变化的信号,动脉血管容积也周期性变化,因此光电变化器的电信号变化周期就是脉搏率。

  整个心率传感器的结构如下:
心率传感器结构

  第二章 硬件电路的简单概述

  心率计设计的原理

  根据设计要求,该设计采用stm32f103zet6作为控制CPU,外围器件包括数字温度传感器DS18820,光电对管,语音模块,译码器,锁存器,放大器等等。本作品采用总线控制方式,显示采用三位静态数码显示.

  3.2 Pulse Sensor 心率传感器的原理

  PulseSensor 是一款用于心率测量的光电反射式模拟传感器,将其佩戴在手指或者耳垂等处,通过导线连接可将采集到的模拟信号传输给stm32f103zet6单片机用来转换为数字信号,再通过stm32的简单计算后就可以得到心率数值,此外还可以将脉搏波形通过串口传输到电脑显示波形。

  原理图如下:


心率传感器原理

  由于脉搏的信号极弱,振动幅度非常有限,不易进行采集和获取,会给收集脉搏信号者带来不小的麻烦。在脉搏信号本身极弱的同时,它还很容易受到信号的干扰,对于每一个生物体来说,其各个部分的生理信号都是相互干扰相互影响的。再者,每个生物体的情绪的不同,喜怒哀乐的变化,也会造成生理信号的变化。在这种情况下,脉搏信号就会受到噪声的干扰,只要选择一个恰当的脉搏测量传感器才能够获得准确、高效、可靠的脉搏信号。脉搏信号的频率是很低的,一分钟的次数大致如下,且对不同个体也是有差别的:男性的是60到100次,女性的是70到90次,小孩大概是90次。

  引脚功能如下:

  S ——— 脉搏信号输出(接单片机AD接口)

  ——— 5v(或)电源输入

  ———- GND地

  3.3 ISD1820语音模块

  应用原理图如下:



心率传感器芯片

  引脚功能介绍

  电源(VCC):芯片内部的模拟和数字电路使用的不同电源总线在此引脚汇合,这样使得噪声最小。去耦合电容应尽量靠近芯片。

  地线(VSSA,VSSD):芯片内部的模拟和数字电路的不同地线汇合在这个引脚。

  录音(REC):高电平有效,只要REC变高(不管芯片处在节电状态还是正在放音),芯片即开始录音。录音期间,REC必须保持为高。REC变低或内存录满后,录音周期结束,芯片自动写入一个信息结束标志(EOM),使以后的重放操作可以及时停止。然后芯片自动进入节电状态。

  边沿触发放音(PLAYE):此端出现上升沿时,芯片开始放音。放音持续到EOM标志或内存结束,芯片自动进入节电状态。放音后,可以释放PLAYE.

  电平触发放音(PLAYL):此端从低变高时,芯片开始放音。持续至此端回到低电平或遇到EOM标志,或内存结束。放音结束后自动进入节电状态。

  录音指示(/RECLED):处于录音状态时,此端为低,可驱动LED.此外,放音遇到EOM标志时,此端输出一个低电平脉冲。此脉冲可用来触发PLAYE,实现循环放音。

  话筒输入(MIC):此端连至片内前置放大器。片内自动增益控制电路(AGC)控制前置放大器的增益。外接话筒应通过串联电容耦合到此端。耦合电容值和此端的10KΩ输入阻抗决定了芯片频带的低频截止点。

  话筒参考(MIC REF):此端是前置放大器的反向输入。当以差分形式连接话筒时,可减小噪声,提高共模抑制比。

  喇叭输出(SP+,SP-):输出端可直接驱动8Ω以上的喇叭。单端使用必须在输出端和喇叭之间接耦合电容,而双端输出既不用电容又能将功率提高至4倍。SP+和SP-之间通过内部的50KΩ的电阻连接,不放音时为悬空状态。

  振荡电阻(ROSC):此端接振荡电阻至VSS,由振荡电阻的阻值决定录放音的时间。

  直通模式(FT):此端允许接在MIC输入端的外部语音信号经过芯片内部的AGC电路、滤波器和喇叭驱动器而直接到达喇叭输出端。平时FT端为低,要实现直通功能,需将FT端接高电平,同时REC、PLAYE和PLAYL保持低。

  第三章 程序设计

  主程序设计

  程序的功能:可以通过对口的检测其高低电平实现温度数据和心电信号的采集,转换和处理,最后用数码管显示心率值和温度值;同时还可以调用语音播报子程序对温度值和心率值进行语音播报。同时一旦心率不在设定范围之内,可以通过报警模块来提示,提醒用户注意自己身体。

  主程序流程图的设计是整个设计的关键一步,它是我们设计思路的具体体现。有了主程序流程图,我们就可以根据把一个复杂的软件设计分解为若干个功能模块,然后逐一设计各个模块的功能。

  在主程序设计中我们先初始化,包括显示模块初始化等,然后通过判断是高电平还是低电平来实现是测量体温还是测量人体的心率值。

  .1 主程序流程图

  /@@***************************************************************************

  下位机编程软件:keil

  程序实现功能:

  1、 单片机采集脉搏信号,AD转换并计算心率值;

  2、 将脉搏波形数据和心率值通过串口传送到上位机;

  3、 使用LED模拟心脏跳动;

  4、 使用数码管和ISD1820模块实现数字显示和语音播报

  5、 使用蜂鸣器模块对心率不正常时进行报警

  **************************************************************************/

  其主程序如下:

  int main(void)

  {

  HAL_Init();

  /@@* Configure the system clock */

  SystemClock_Config();

  /@@* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_ADC1_Init();

  MX_TIM3_Init();

  HAL_TIM_Base_Start_IT(&htim3);

  while (1)

  {

  sendDataToProcessing('S', Signal); // send Processing the raw Pulse Sensor data

  if (QS == true)

  {

  sendDataToProcessing('B',BPM); // send heart rate with a 'B' prefix

  sendDataToProcessing('Q',IBI); // send time between beats with a 'Q' prefix

  QS = false; // reset the Quantified Self flag for next time

  }

  HAL_Delay(20); //delay for 20ms

  }

  .2 语音模块ISD1820功能简介

  ISD1820主要有三个功能:录音、电平控制放音和脉冲触发放音。

  录音子程序

  控制录音主要有两个数据:1 、录音的开始地址;2 、录音的时间。把这两个数据都控制了就可以控制录音时把声音录到哪几段里头。注意:REC 信号将被延迟50ms 防止开关抖动引起重复触发。在调用录音子程序时只要给出录音的开始地址和需要录音的时间就可以了。

  电平控制放音子程序

  电平控制放音中,开始地址和播放时间也是必不可少的,只要控制了这两个参数就可以确定播出内容。不过需要注意的是播放的时候总是从一段的开头开始播放的。当需要分段播放控制时,录音时每一个内容的开头必须从一个段的开头开始。在调用电平控制放音子程序时只要给出放音的开始地址和放音的时间就可以了

  脉冲触发放音子程序

  脉冲触发放音与电平控制放音有些不同 ,脉冲触发放音不能够由单片机来控制放音的时间,只能够控制放音的开始地址。脉冲触发放音开始后就一直播放到遇到结束符或语音芯片的尽头,所以一般在分段语音控制里头不常用脉冲触发。 在调用脉冲触发放音子程序时只要给出放音的开始地址就可以了。

  心率测量的程序设计

  .1 心率测量程序设计

  心率测量程序设计由两部分构成,前半段实现初始化,包括定时器/计数器的初始化、设置堆栈指针以及开中断等。程序的后半段则是启动两个定时器/计数器以及调用显示子程序和语音播报子程序来完成心率值的显示和语音播报以及报警模块。

  .2 中断服务子程序设计

  void MX_TIM3_Init(void)

  {

  TIM_ClockConfigTypeDef sClockSourceConfig;

  TIM_MasterConfigTypeDef sMasterConfig;

  htim3.Instance = TIM3;

  htim3.Init.Prescaler = 7;

  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;

  htim3.Init.Period = 1999;

  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

  HAL_TIM_Base_Init(&htim3);

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

  HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig);

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

  HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig);

  }