[光学传感器] max30102心率血氧传感器测量心率问题

1nnocent   2021-6-3 11:18 楼主

最近在使用max30102做心率血氧传感器,使用STM32F103进行控制,网络上有很多版本的代码。

找了几个STM32版本的,经过调试现在只能测量血氧,只能手表测的血氧值是100,自己做的传感器测也是能比较准确地测出来,就是心率测试基本测不准,浮动非常大,具体看下方的视频。大概看了下手册寄存器的配置,以及网络上的开发过程,没有发现问题所在。

有没有大佬遇到过类似的问题,调试了很久,还是只能测量血氧而已,芯片有一个中断引脚,低电平有效,之前有试过有中断和没有中断的情况,好像并没有什么差别,以下是有中断的部分代码:

中断配置部分:
//-----------------------------------------------------------------
// void GPIO_EXTInterrupt_Configuration(void)
//-----------------------------------------------------------------
//
// 函数功能: 外中断输入I/O配置
// 入口参数: 无
// 返 回 值: 无
// 注意事项:  PA.6----EXTI_IN
//-----------------------------------------------------------------
void GPIO_EXTInterrupt_Configuration(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	// 开启PA时钟和I/O复用时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);   //低速使用APB1高速为APB2
	// 使用PA.6上拉输入
	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6;																	 
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 	
	
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

//-----------------------------------------------------------------
// void EXTInterrupt_Mode_Configuration(void)
//-----------------------------------------------------------------
//
// 函数功能: 外中断的配置
// 入口参数: 无
// 返 回 值: 无
// 注意事项:
//-----------------------------------------------------------------
void EXTInterrupt_Mode_Configuration(void)
{
	EXTI_InitTypeDef EXTI_InitStructure;
	// PA.6与中断线6相映射
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource6);          
	// PA.6对应中断线6//外中断//下降沿触发中断
	EXTI_InitStructure.EXTI_Line=EXTI_Line6;                            
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;									
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;							
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);	 	
	
}

//-----------------------------------------------------------------
// void NVIC_Configuration(void)
//-----------------------------------------------------------------
//
// 函数功能: 配置外中断嵌套中断向量
// 入口参数: 无
// 返 回 值: 无
// 注意事项: 
//-----------------------------------------------------------------
void NVIC_Configuration(void)
{
	NVIC_InitTypeDef NVIC_InitStructure;
  // 设置NVIC中断分组2,其中2位抢占优先级,2位响应优先级
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);												
  // 选择外部中断通道//抢占优先级0//子优先级0
  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;							//外部中断线通道使能
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;				//先占优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;							//副优先级			
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                 //
  NVIC_Init(&NVIC_InitStructure);
}




 

 

等待中断产生低电平后读取数据

image.png

 

下面是调试效果:


最后在说一下问题,心率测不准(几乎就没侧准过那种),目前还不知道哪里出问题了,来这里收集一下思路。

回复评论 (6)

血氧和心率应该不能同时测量吧?

点赞  2021-6-3 11:33

可以同时测量。

چوآن شـين
点赞  2021-6-3 11:35

心率数据需要做个FFT运算,要采集一定长度的数据进行FFT变换吧

点赞  2021-6-3 11:38
引用: w494143467 发表于 2021-6-3 11:33 血氧和心率应该不能同时测量吧?

可以的,数据手册有说,主要我这个没有一次侧出来的数据是准确的就很奇怪

点赞  2021-6-3 12:37
引用: bqgup 发表于 2021-6-3 11:38 心率数据需要做个FFT运算,要采集一定长度的数据进行FFT变换吧

这个有算法文件的,那个类似运算的东西应该都在算法文件里面

点赞  2021-6-3 12:38
引用: 1nnocent 发表于 2021-6-3 12:37 可以的,数据手册有说,主要我这个没有一次侧出来的数据是准确的就很奇怪

你可以试着单独开一个测试,因为同时要测两个数据的话,需要交替的测量,因为血氧用的红灯,心率用的绿灯。

点赞  2021-6-3 13:20
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复