基于STM32物联网开发板(6)--AD8232心电图监测模块

描述

1.概述

      AD8232是一款用于ECG及其他生物电测量应用的集成信号调理模块。该器件设计用于在具有运动或远程电极放置产生的噪声的情况下提取、放大及过滤微弱的生物电信号。该设计使得超低功耗模数转换器(ADC)或嵌入式微控制器能够轻松地采集输出信号。

      AD8232采用双极点高通滤波器来消除运动伪像和电极半电池电位。该滤波器与仪表放大器结构紧密耦合,可实现单级高增益及高通滤波,从而节约了空间和成本。AD8232采用一个无使用约束运算放大器来创建一个三极点低通滤波器,消除了额外的噪声。用户可以通过选择所有滤波器的截止频率来满足不同类型应用的需要。

      对于可穿戴式运动器械, AD8232通常置于心脏附近的容器中。两个检测电极置于胸肌下面;无需使用驱动电极。由于从心脏到AD8232的距离很短,因此心脏信号很强并且肌肉伪像干扰较小。

      应用

  • 健身及运动心率监护仪
  • 便携式ECG
  • 远程健康监护
  • 游戏外围设备
  • 生物电信号采集
开发板
  • 硬件接口:

引脚

说明

SIGNAL_OUT

PC0信号ADC采集硬件

LO-

PC1比较强输出端

LO+

PC2比较器输出端

SDN

PC3控制输出端(高电平启动)

开发板开发板
  • 连接方式

      OUT运放输出端,接到ADC的输入端,LOD-、LOD+接到身上的三个电极,导联脱落,这两个口某一个口会变为高电平,所以将这两个口接到输入口上。SDN开启和关闭模块功能,接到GPIO输出口,给它高电平则模块工作,给低电平则不工作。

2.工作原理

开发板

      AD8232是一款集成前端,适用于对心脏生物电信号进行信号调理来进行心率监护。它内置一个专用仪表放大器(IA)、一个运算放大器(A1)、一个右腿驱动放大器(A2)和一个中间电源电压基准电压缓冲器(A3)。此外,AD8232内置导联脱落检测电路和一个自动快速恢复电路,该电路可在导联重新连接后迅速恢复信号。

      AD8232集成专用仪表放大器,可放大ECG信号,同时抑制的电极半电池电位。这是通过间接电流反馈架构实现的,与传统方案相比,该架构还能减小尺寸和降低功耗。

  3.硬件配置

开发平台:STM32CubeMx +KEIL5

核心控制器:STM32F103RET6

数据采集方式:ADC

     AD8232数据采集通过ADC方式处理,ADC模式配置如下:

    1.时钟配置

     STM32本身自带ADC功能,是一个12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部
信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。 ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。
模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。

   ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。

开发板

   2.ADC模式配置

开发板

  4.数据处理

//ADC初始户此处略过
//读取ADC通道数据
u16 Get_Regular_Channelx(u16 ch)
{
	ADC_ChannelConfTypeDef sConfig = {0};
	sConfig.Channel=ch;//通道号

	sConfig.SamplingTime=ADC_SAMPLETIME_239CYCLES_5;//采样周期
	if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)//ADC通道初始化
   {
     Error_Handler();
   }	
	HAL_ADC_Start(&hadc1);//开启ADC
	HAL_ADC_PollForConversion(&hadc1,20);//等待规则通道转换完成
	return HAL_ADC_GetValue(&hadc1);
}
/*多次测量求平均值*/
u16 AD8232_GetVal(void)
{
  u16 data[10];
  u8 i=0,j=0;
  for(i=0;i<10;i++)
  {
    data[i]=Get_Regular_Channelx(10);
  }
  /*排序*/
  u32 count=0;
  u16 temp;
  for(i=0;i<9;i++)
  {
    for(j=0;j<9-i;j++)
    {
      if(data[j]>data[j+1])
      {
        temp=data[j];
        data[j]=data[j+1];
        data[j+1]=temp;
      }
    }
  }
  for(i=2;i<8;i++)
  {
    count+=data[i];
  }
  temp=count/6;
  return temp;
}

5.运行效果

开发板
  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
Bluesku 2023-06-03
0 回复 举报
你好,可以发一下源码吗,谢谢 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分