本帖最后由 小马哥-1650185 于 2018-11-19 21:36 编辑
上贴讲到了脉搏传感器模块测量脉搏的方法,可根据波形单位分钟内周期数量确定脉搏次数。
此贴具体分析测量过程:
先来看几个比较重要的寄存器
首先需要往寄存器41h,42h, 43h写数据
代码:
- #define BH1790GLC_MEAS_CONTROL1_RDY (1 << 7)
- #define BH1790GLC_MEAS_CONTROL1_LED_LIGHTING_FREQ_128HZ (0 << 2)
- #define BH1790GLC_MEAS_CONTROL1_RCYCLE_32HZ (2 << 0)
- #define BH1790GLC_MEAS_CONTROL2_LED_EN_00 (0 << 6)
- #define BH1790GLC_MEAS_CONTROL2_LED_ON_TIME_0_3MS (0 << 5)
- #define BH1790GLC_MEAS_CONTROL2_LED_CURRENT_10MA (12 << 0)
- #define BH1790GLC_MEAS_START_MEAS_ST (1 << 0)
- #define BH1790GLC_MEAS_CONTROL1_VAL (BH1790GLC_MEAS_CONTROL1_RDY | BH1790GLC_MEAS_CONTROL1_LED_LIGHTING_FREQ_128HZ | BH1790GLC_MEAS_CONTROL1_RCYCLE_32HZ)
- #define BH1790GLC_MEAS_CONTROL2_VAL (BH1790GLC_MEAS_CONTROL2_LED_EN_00 | BH1790GLC_MEAS_CONTROL2_LED_ON_TIME_0_3MS | BH1790GLC_MEAS_CONTROL2_LED_CURRENT_10MA)
- #define BH1790GLC_MEAS_START_VAL (BH1790GLC_MEAS_START_MEAS_ST)
写入数据
val[0] = BH1790GLC_MEAS_CONTROL1_VAL;
val[1] = BH1790GLC_MEAS_CONTROL2_VAL;
val[2] = BH1790GLC_MEAS_START_VAL;
rc = write(BH1790GLC_MEAS_CONTROL1, val, sizeof(val));
然后来看下这几个寄存器是什么
MEAS_CONTROL1 ( 0x41h )
MEAS_CONTROL2 ( 0x42h )
MEAS_START ( 0x43h ) :bit0 写1,开始测量
然后等待测量完成后一次读取54h to 57h中的数据
代码:
- #define BH1790GLC_DATAOUT_LEDOFF (0x54)
读取数据
代码:
- rc = read(BH1790GLC_DATAOUT_LEDOFF, data, 4);
DATAOUT_LEDOFF = ((unsigned short)
data[1] << 8) | (
data[0]);
DATAOUT_LEDON = ((unsigned short)
data[3] << 8) | (val[2]);
然后就是数据处理了,看下这几个数据寄存器DATAOUT ( 0x54/0x55, 0x56/0x57h )
DATAOUT_LEDOFF 表示绿色led没有发光时的计数,16位数据,低8位54h, 高8位55h
DATAOUT_LEDON 表示绿色led发光时的计数,16位数据,低8位56h, 高8位57h
读完57h后重新开始读取。
最后得到的数据为灯灭计数和灯亮计数。
下图中第一个数据为灯亮的计数,后面的为灯灭计数,可以看到灯亮计数秤周期性变化,所以记录单位分钟内周期数量可算的脉搏次数
为了更加直观的看测量结果,我们分析输出波形,蓝色为灯亮计数波形,周期性变化,红色为灯灭计数,基本不怎么变化
具体数据处理参考例程的HR算法