本帖最后由 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、引脚描述 VCC1、VCC2都是电源引脚;LED1、LED2都是输出引脚,用于驱动LED灯;TEST1、TEST2、TEST3都是测试引脚,应用的时候,TEST1接到GND,TEST2接到VCC2,TEST3不接;SDA、SCL用于通讯。
3、寄存器描述
4、程序设计
4.1、寄存器以及参数设定定义 - #define BH1790GLC_I2C_ADDR 0xB6
- #define BH1790GLC_MANUFACTOR_ID 0x0F //or 0x92 ,only read,default value 0xE0
- #define BH1790GLC_PART_ID 0x10 //only read,default value 0x0D
- #define BH1790GLC_RESET 0x40
- //bit[7]:SWRESET
- #define BH1790GLC_RESET_SWRESET 0x80
- //bit[6:0]:Reserved
- #define BH1790GLC_MEAS_CONTROL1 0x41
- //bit[7]:RDY
- #define BH1790GLC_CONTROL1_PRO 0x00
- #define BH1790GLC_CONTROL1_OSC 0x80
- //bit[6-3]:reserve
- //bit[2]:LED_LIGHTING_FREQ
- #define BH1790GLC_CONTROL1_FREQ_128 0x00
- #define BH1790GLC_CONTROL1_FREQ_64 0x04
- //bit[1-0]:RCYCLE
- #define BH1790GLC_CONTROL1_RCYCLE_PRO1 0x00
- #define BH1790GLC_CONTROL1_RCYCLE_64 0x01
- #define BH1790GLC_CONTROL1_RCYCLE_32 0x02
- #define BH1790GLC_CONTROL1_RCYCLE_PRO2 0x03
- #define BH1790GLC_MEAS_CONTROL2 0x42
- //bit[7-6]:LED_EN
- #define BH1790GLC_LED_EN_N_N 0x00
- #define BH1790GLC_LED_EN_L_N 0x40
- #define BH1790GLC_LED_EN_N_L 0x80
- #define BH1790GLC_LED_EN_L_L 0xC0
- //bit[5]:LED_ON_TIME
- #define BH1790GLC_LED_ON_TIME_0_3 0x00
- #define BH1790GLC_LED_ON_TIME_0_6 0x20
- //bit[4]:Reserved
- //bit[3-0]:LED_CURRENT
- #define BH1790GLC_LED_CURRENT_0 0x00
- #define BH1790GLC_LED_CURRENT_1 0x08
- #define BH1790GLC_LED_CURRENT_2 0x09
- #define BH1790GLC_LED_CURRENT_3 0x0A
- #define BH1790GLC_LED_CURRENT_6 0x0B
- #define BH1790GLC_LED_CURRENT_10 0x0C
- #define BH1790GLC_LED_CURRENT_20 0x0D
- #define BH1790GLC_LED_CURRENT_30 0x0E
- #define BH1790GLC_LED_CURRENT_60 0x0F
- #define BH1790GLC_MEAS_START 0x43
- //bit[7-1]:Reserved
- //bit[0]:MEAS_ST
- #define BH1790GLC_START_PRO 0x00
- #define BH1790GLC_START_START 0x01
- #define BH1790GLC_DATAOUT_LEDOFF_L 0x54
- #define BH1790GLC_DATAOUT_LEDOFF_H 0x55
- #define BH1790GLC_DATAOUT_LEDON_L 0x56
- #define BH1790GLC_DATAOUT_LEDON_H 0x57
复制代码
4.2、读取设备ID 设备ID一般都是一个固定值,芯片出厂的时候已经固化在芯片里面了,只读,可用于检测I2C通信是否正常、检测芯片是否存在。 - bool BH1790GLCCheck(void)
- {
- uint8 chip_id=0;
-
- chip_id=BH1790GLC_ReadRegU8(BH1790GLC_PART_ID);
- if(chip_id==0x0D)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
复制代码
4.3、初始化、参数设定
- void BH1790GLCInit(void)
- {
- BH1790GLC_WriteRegU8(BH1790GLC_RESET,BH1790GLC_RESET_SWRESET); //软件复位
- BH1790GLC_WriteRegU8(BH1790GLC_MEAS_CONTROL1,BH1790GLC_CONTROL1_OSC|
- BH1790GLC_CONTROL1_FREQ_128|
- BH1790GLC_CONTROL1_RCYCLE_64); //激活、LED发射频率为128Hz、数据读取周期64Hz
-
- BH1790GLC_WriteRegU8(BH1790GLC_MEAS_CONTROL2,BH1790GLC_LED_EN_L_L|
- BH1790GLC_LED_ON_TIME_0_3|
- BH1790GLC_LED_CURRENT_1); //两个LED均为恒光发射、发射时间为0.3ms、驱动电流为1mA
-
- BH1790GLC_WriteRegU8(BH1790GLC_MEAS_START,BH1790GLC_START_START); //启动测量
- }
复制代码
4.4、读取数据 - void BH1790GLCRead(void)
- {
- uint16 ledoff_count , ledon_count;
- ledoff_count=BH1790GLC_ReadRegU16(BH1790GLC_DATAOUT_LEDOFF_L);
-
- ledon_count=BH1790GLC_ReadRegU16(BH1790GLC_DATAOUT_LEDON_L);
-
- printf("ledoff_count=%d ledon_count=%d\r\n",ledoff_count,ledon_count);
- }
复制代码
手靠近,输出数据是有明显变化的。 转化为具体的心率值需要通过算法,可以参考官方提供的Arduino例程(http://www.rohm.com.cn/sensor-shield-support/heart-rate-sensor),里面用到了IIR滤波器。
|