搜索
热搜: ROHM 模拟 车载
查看: 3741|回复: 9

[传感器大派送]+ 10.基于BH1790GLC脉搏数据采集[含视频]

  [复制链接]

该用户从未签到

29

主题

668

帖子

0

精华

论坛元老

最后登录
2022-1-26
发表于 2018-11-29 23:54:45 | 显示全部楼层 |阅读模式
本帖最后由 xquery 于 2018-11-30 09:49 编辑

前言
    根据上一篇帖子的测试,链接如下:https://rohm.eefocus.com/module/f ... 7313&fromuid=413017
留给我的问题是,如何有效的去识别脉搏波形,并且统计出来脉搏数据,目前我个人没有太好的办法,不妨先看看ROHM提供的BH1790GLC_HeartRate例程。

硬件组成与连接
    1、ROHM的传感器底板Sensor Shield
    2、BH1790GLC传感器
    3、ArduinoNANO电路板。
    11.png     file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg

    连接关系如上图所示


程序解读
    ROHM官方提供的BH1790GLC_HeartRate例程是基于arduino写的,文件结构如下图:
    22.png
    这样的程序目录,显然很不合适使用arduino IDE去查阅,这里推荐大家使用Source Insight的软件去查看代码。需要注意的是,Source Insight不支持.ino文件,为了方便,将HeartRate.ino另存为一个.c的文件,方便Source Insight查看。
    将程序烧录到硬件中运行如下:
    33.png
    当前心率为70,反复测试几次,数值都在70-75,看来一致性还是不错。

    废话不多说,先看看ROHM怎么写的,下面开始直接上代码:
    44.png
    在setup()函数中,有两个比较关键的函数hr_bh1790_Init()和hr_bh1790_StartMeasure()函数
    其中hr_bh1790_Init()并没有对bh1790硬件进行初始化,只是简单的读取了传感器的两个ID寄存器,验证了一下传感器的身份,同时让硬件进行复位。
    55.png
    其主要的工作还是去初始化程序定义的结构体,给这些结构体赋上初值。
    其中pwCalc_Init(void)函数也很重要,程序中定义了两个IIR数字滤波器,这个函数是将这个数字滤波器进行初始化。
    两个IIR数字滤波器是3.5HZ的高通滤波器和0.5HZ的低通滤波器。
    小知识:
    在律规则的情况下,心率和脉搏是一致的。如果有心律不齐的人,会测到心率和脉率不一致,脉率少于心率。正常人心率在60—100次/分钟,在此范围有波动都是正常的
    所以将两个数字滤波器设置在这个这个范围是合适的。

    接下来就是在setup()函数中的另外一个函数hr_bh1790_StartMeasure (void)
    66.png
    在这个函数中程序对MEAS_CTRL1、MEAS_CTRL2、MEAS_START寄存器进行了操作

    接下来就是最关键的loop()函数,看看ROHM官方是怎么将波形数据进行处理的。
    77.png
    在loop函数中,timer_flg是一个32HZ的计时标志,每隔31.25MS,就读一次传感器的数据,并进行计算。
    其中hr_bh1790_Calc(s_cnt_freq)是本次分析的关键函数,在这个函数中,程序将传感器数据进行读取,滤波,判断,最后计算出心率值;而hr_bh1790_GetData()仅仅是将心率结果数据和判断读出来,方便串口打印而已。
    直接查看hr_bh1790_Calc()函数:
    88.png
    在这个函数中,程序通过pw_GetMeasureData(&s_pwData);将寄存器DATAOUT_LEDOFF和DATAOUT_LEDON的数据读出来保存到s_pwData结构体中。
    pwCalc(&s_pwData,&pw);及将s_pwData数据传入到IIR滤波器中,经过高通和低通滤波器之后,得到的数据保存到PW变量中。
    99.png
    ma_AverageF()滑动求平均,
    iir_Filter()即数字滤波器,先后经过s_iirPrm_hpf高通数字滤波器和s_iirPrm_lpf低通数字滤波器。

    我在BH1790GLC_HeartRate例程上插入自己的代码,将s_pwData(红色DATAOUT_LEDON,蓝色DATAOUT_LEDOFF)以及经过IIR滤波之后的数据 pw(绿色)绘制出来。
    A1.png
    将绿色图形放大:
    A2.png
    可以看到,经过IIR滤波之后,pw几乎呈现很规律的正弦波。
并且,这个波形与s_pwData的幅值大小没太大的关系。所以,最这样的波形进行统计和判断是就比之前要容易很多了。


详情参见视频:

也可以自行复制链接:https://v.youku.com/v_show/id_XMzk0MjQ1MTcwMA==.html?debug=flv
视频正在紧张的上传中,上传完成之后,我第一时间更新

微信截图_20181129235413.png

评分

参与人数 1ROHM金币 +100 收起 理由
管理-小R + 100

查看全部评分

回复

使用道具 举报

该用户从未签到

2

主题

412

帖子

0

精华

金牌会员

最后登录
2021-10-27
发表于 2018-11-30 09:08:33 | 显示全部楼层
学习了
回复

使用道具 举报

该用户从未签到

29

主题

668

帖子

0

精华

论坛元老

最后登录
2022-1-26
 楼主| 发表于 2018-12-5 09:52:22 | 显示全部楼层

多谢捧场~~~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

14

主题

173

帖子

1

精华

高级会员

最后登录
2019-6-5
发表于 2018-12-5 17:23:48 | 显示全部楼层
真不错
回复

使用道具 举报

该用户从未签到

29

主题

668

帖子

0

精华

论坛元老

最后登录
2022-1-26
 楼主| 发表于 2018-12-6 13:31:53 | 显示全部楼层
回复 支持 反对

使用道具 举报

该用户从未签到

12

主题

1805

帖子

0

精华

金牌会员

最后登录
2024-4-20
发表于 2018-12-7 17:35:15 | 显示全部楼层
CPU是板上自带的吗?
回复 支持 反对

使用道具 举报

该用户从未签到

1153

主题

5959

帖子

0

精华

论坛元老

最后登录
2021-2-19
发表于 2018-12-8 12:23:30 | 显示全部楼层
看看      
回复 支持 反对

使用道具 举报

该用户从未签到

29

主题

668

帖子

0

精华

论坛元老

最后登录
2022-1-26
 楼主| 发表于 2018-12-8 19:56:16 | 显示全部楼层
HXM9531 发表于 2018-12-7 17:35
CPU是板上自带的吗?

CPU是ST开发板的,STM32F723
回复 支持 反对

使用道具 举报

该用户从未签到

49

主题

2250

帖子

0

精华

论坛元老

最后登录
2020-12-15
发表于 2019-1-17 11:04:09 | 显示全部楼层
厉害了         
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

476

帖子

0

精华

高级会员

最后登录
2023-10-31
发表于 2019-3-20 18:02:09 | 显示全部楼层
学习了
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|罗姆半导体技术社区

GMT+8, 2024-4-20 21:57 , Processed in 0.119391 second(s), 23 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表