请选择 进入手机版 | 继续访问电脑版
搜索
热搜: ROHM 模拟 车载
查看: 2937|回复: 2

【传感器试用】代码详解心率传感器BH1790GLC使用

  [复制链接]

该用户从未签到

11

主题

401

帖子

0

精华

金牌会员

最后登录
2022-1-27
发表于 2020-1-19 11:01:05 | 显示全部楼层 |阅读模式
本帖最后由 freeelectron 于 2020-1-19 11:59 编辑

1、基本特征
VCC1 供电范围:2.5V to 3.6V
VCC2 供电范围:1.7V to 3.6V
运行模式功耗:200μA(Typ)
待机模式功耗:0.8μA(Typ)
运行温度: -20°C to +85°C
封装:WLGA010V28  2.80mm x 2.80mm x 1.00mm

2、引脚描述
图片1.png
VCC1VCC2都是电源引脚;LED1LED2都是输出引脚,用于驱动LED灯;TEST1TEST2TEST3都是测试引脚,应用的时候,TEST1接到GNDTEST2接到VCC2TEST3不接;SDASCL用于通讯。

3、寄存器描述
图片2.png

4、程序设计
4.1、寄存器以及参数设定定义
  1. #define  BH1790GLC_I2C_ADDR         0xB6

  2. #define  BH1790GLC_MANUFACTOR_ID        0x0F  //or 0x92 ,only read,default value 0xE0
  3. #define  BH1790GLC_PART_ID              0x10  //only read,default value 0x0D

  4. #define  BH1790GLC_RESET                0x40
  5.         //bit[7]:SWRESET
  6.         #define  BH1790GLC_RESET_SWRESET         0x80
  7.         //bit[6:0]:Reserved

  8. #define  BH1790GLC_MEAS_CONTROL1        0x41
  9.         //bit[7]:RDY
  10.         #define  BH1790GLC_CONTROL1_PRO          0x00
  11.         #define  BH1790GLC_CONTROL1_OSC          0x80
  12.         //bit[6-3]:reserve
  13.         //bit[2]:LED_LIGHTING_FREQ
  14.         #define  BH1790GLC_CONTROL1_FREQ_128     0x00
  15.         #define  BH1790GLC_CONTROL1_FREQ_64      0x04
  16.          //bit[1-0]:RCYCLE
  17.         #define  BH1790GLC_CONTROL1_RCYCLE_PRO1  0x00
  18.         #define  BH1790GLC_CONTROL1_RCYCLE_64    0x01
  19.         #define  BH1790GLC_CONTROL1_RCYCLE_32    0x02
  20.         #define  BH1790GLC_CONTROL1_RCYCLE_PRO2  0x03

  21. #define  BH1790GLC_MEAS_CONTROL2        0x42
  22.         //bit[7-6]:LED_EN
  23.         #define  BH1790GLC_LED_EN_N_N            0x00
  24.         #define  BH1790GLC_LED_EN_L_N            0x40
  25.         #define  BH1790GLC_LED_EN_N_L            0x80
  26.         #define  BH1790GLC_LED_EN_L_L            0xC0
  27.         //bit[5]:LED_ON_TIME
  28.         #define  BH1790GLC_LED_ON_TIME_0_3       0x00
  29.         #define  BH1790GLC_LED_ON_TIME_0_6       0x20
  30.         //bit[4]:Reserved
  31.         //bit[3-0]:LED_CURRENT
  32.         #define  BH1790GLC_LED_CURRENT_0         0x00
  33.         #define  BH1790GLC_LED_CURRENT_1         0x08
  34.         #define  BH1790GLC_LED_CURRENT_2         0x09
  35.         #define  BH1790GLC_LED_CURRENT_3         0x0A
  36.         #define  BH1790GLC_LED_CURRENT_6         0x0B
  37.         #define  BH1790GLC_LED_CURRENT_10        0x0C
  38.         #define  BH1790GLC_LED_CURRENT_20        0x0D
  39.         #define  BH1790GLC_LED_CURRENT_30        0x0E
  40.         #define  BH1790GLC_LED_CURRENT_60        0x0F

  41. #define  BH1790GLC_MEAS_START           0x43
  42.         //bit[7-1]:Reserved
  43.         //bit[0]:MEAS_ST
  44.         #define  BH1790GLC_START_PRO             0x00
  45.         #define  BH1790GLC_START_START           0x01

  46. #define  BH1790GLC_DATAOUT_LEDOFF_L     0x54
  47. #define  BH1790GLC_DATAOUT_LEDOFF_H     0x55
  48. #define  BH1790GLC_DATAOUT_LEDON_L      0x56
  49. #define  BH1790GLC_DATAOUT_LEDON_H      0x57
复制代码

4.2、读取设备ID
设备ID一般都是一个固定值,芯片出厂的时候已经固化在芯片里面了,只读,可用于检测I2C通信是否正常、检测芯片是否存在。
  1. bool BH1790GLCCheck(void)
  2. {
  3.   uint8 chip_id=0;
  4.   
  5.   chip_id=BH1790GLC_ReadRegU8(BH1790GLC_PART_ID);

  6.   if(chip_id==0x0D)
  7.   {
  8.     return true;
  9.   }
  10.   else
  11.   {
  12.     return false;
  13.   }
  14. }
复制代码

4.3、初始化、参数设定
图片4.png
图片5.png
图片6.png
图片7.png
  1. void BH1790GLCInit(void)
  2. {
  3.    BH1790GLC_WriteRegU8(BH1790GLC_RESET,BH1790GLC_RESET_SWRESET);  //软件复位
  4.    BH1790GLC_WriteRegU8(BH1790GLC_MEAS_CONTROL1,BH1790GLC_CONTROL1_OSC|
  5.                                                 BH1790GLC_CONTROL1_FREQ_128|
  6.                                                 BH1790GLC_CONTROL1_RCYCLE_64); //激活、LED发射频率为128Hz、数据读取周期64Hz
  7.    
  8.    BH1790GLC_WriteRegU8(BH1790GLC_MEAS_CONTROL2,BH1790GLC_LED_EN_L_L|
  9.                                                 BH1790GLC_LED_ON_TIME_0_3|
  10.                                                 BH1790GLC_LED_CURRENT_1);      //两个LED均为恒光发射、发射时间为0.3ms、驱动电流为1mA
  11.    
  12.    BH1790GLC_WriteRegU8(BH1790GLC_MEAS_START,BH1790GLC_START_START);   //启动测量
  13. }
复制代码

4.4、读取数据
图片8.png
  1. void BH1790GLCRead(void)
  2. {
  3.   uint16 ledoff_count , ledon_count;

  4.   ledoff_count=BH1790GLC_ReadRegU16(BH1790GLC_DATAOUT_LEDOFF_L);

  5.   ledon_count=BH1790GLC_ReadRegU16(BH1790GLC_DATAOUT_LEDON_L);
  6.   
  7.   printf("ledoff_count=%d  ledon_count=%d\r\n",ledoff_count,ledon_count);
  8. }
复制代码

图片9.png

手靠近,输出数据是有明显变化的。
转化为具体的心率值需要通过算法,可以参考官方提供的Arduino例程(http://www.rohm.com.cn/sensor-shield-support/heart-rate-sensor),里面用到了IIR滤波器。







回复

使用道具 举报

该用户从未签到

16

主题

2066

帖子

0

精华

金牌会员

最后登录
2024-3-29
发表于 2020-3-11 01:13:34 | 显示全部楼层
感谢分享
回复

使用道具 举报

该用户从未签到

1347

主题

6657

帖子

0

精华

论坛元老

最后登录
2020-7-26
发表于 2020-5-6 14:11:32 | 显示全部楼层
医疗用传感器
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-3-29 22:38 , Processed in 0.094429 second(s), 15 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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