Arduino-1.8.5-windows.exe、HXDZ-30102-ACC
集成了LIS2DH12(ST的三轴加速传感器,用于记录运动数据)和MAX30102(血氧和心率检测记录)。
电路板尺寸:38*16mm
电路板厚度:2.5mm
LED峰值波长:660nm/880nm
LED供电电压:3.3v~5v
检测信号类型:光反射信号(PPG)
输出信号接口:I 2 C接口(数字接口)
通信接口电压:3~5v
工作电路:1.5mA(3.3v 输入)
心率精确度:+/- 5bpm,+/- 10bpm(动态)
分辨率: 1bpm
采样率:100Hz(STM32程序)/ 25Hz(arduino程序)
VCC:LED电源输入端,也是I 2 C总线上拉电平,可以接3.3v或者5v
GND:地线
SCL:I 2 C总线的时钟引脚
SDA:I 2 C总线的数据引脚
I_L:LIS2DH12芯片的中断引脚
I_M:MAX30102芯片的中断引脚
传统的脉搏测量方法主要有三种:
1、从心电信号中提取
2、从测量血压时压力传感器测到的波动来计算脉率
3、光电容积法
前两种会限制病人的活动,长时间使用会加重病患的心理和生理负担,而光电容积法在实际中时普遍使用的一种有效方法,其特点:方法简单、佩戴方便、可靠性高。
光电容积法基本原理:
利用人体组织在血管搏动时造成透光率不同来进行脉搏和血氧饱和度测量的。其使用的传感器由光源和早旦光电变换器两部分组成,通过绑带或夹子固定在病患的手指、手腕或耳垂上。光源一般采用对动脉血中氧合血红蛋白(Hb0 2 )和血红蛋白(Hb)有选择性的特定波长的发光二极管(一般使用660nm附近的红光和900nm附近的红外光)。当光束透过人体外周血管,由于动脉搏动充血容积变化导致这束光的透光率发生改变,此时由光电变换器接收经人体组织反射的光线,正衡转变为电信号并将其放大和输出。
由于脉搏是随举睁做心脏的搏动而周期性变化的信号,动脉血管容积也周期性变化,因此光电变换器的电信号变化周期就是脉搏率。同时根据血氧饱和度的定义,其表示为:
注意:
1、SaO 2 :广义上的氧饱和度,常指血液样品中的氧含量对该样品血液最大氧含量的百分比(SpO2是经皮血氧饱和度, 而SaO2是动脉血氧饱和度,二者不同,但是相关性好,绝对值十分接近)。
2、HbO 2 :氧合血红蛋白
3、Hb:还原血红蛋白
MAX30102本身集成了完整的发光LED及其驱动部分,光感应和AD转换部分,环境光干扰消除及数字滤波部分,只将数字接口留给用户,极大地减轻了用户的设计负担。用户只需要使用单片机通过硬件I 2 C或者模拟I 2 C接口来读取MAX30102本身的FIFO,就可以得到转换后的光强度数值,通过编写相应的算法就可以得到心率值和血氧饱和度。
心率和血氧饱和度算法流程图:
首先连接开发板串口,波特率需要进行必要设置,奇偶校验位无,上电后,复位MAX30102,并开始对MAX30102进行功能初始化,此时Red LED和 IR LED交替点亮来检测人体皮肤下血液的搏动和血氧含量(此时可以看到MAX30102有红光亮起,说明初始化成功)。开发板将一段时间内MAX30102采集的LED反射数据存储在内部RAM中,然后分别计算Red LED和 IR LED的直流成分(DC)和交流成分(AC),最后算出数值R并通过预先存储在两波峰之间的时间差T来确定,每分钟心跳数BPM=60/T。(具体算法原理可以参考AN6409芯片手册中29~31页说明)
red和ir是红色LED,红外LED的原始数据,HR表示心率值,HRvalid是心率是否有效标识,SPO2是血氧数值,SPO2valid是血氧首付有效标识
血氧模块与Arduino连接说明:
接口连接说明:
实际连接图:
原理图管脚说明:
初始化:
无采集状态:
数据采集状态:
ps:这里由于整体软件和硬件的标准没有像医疗设备的标准一样,所以只是验证性测试。
MAX30102是一个集成的薯孙脉搏血氧测量和心率监测模块。它包括内部led、光电探测器、光学元件和具有环境光排斥作用的低噪声电子器件。MAX30102提供了一个完整的系统解决方案,以简化移动和可穿戴设备的设计过程。MAX30102在单个1.8V电源和内部LED的单独的5.0V电源上工作。通信是通过一个标准的I2c兼容的接口。该模块可以通过具有零备用电流的软件关闭,允许电源导轨始终保持供电。二、优点和特性
●心率监测器和脉冲测氧器传感器在LED反射解决方案
●小5.6mmx3.3mmx1.55mm14针光学模块集成盖玻璃最佳性能
●超低功率 *** 作移动设备可编程采样率和LED电流节能低功率心率监测器(<1mW)超低关机电流(0.7µA,典型)
●快速数据输出能力高样本率
●鲁棒运动艺术家韧性高信噪比
●-40°C到85°C工作温度范围
三、系统框图
在这里插入图片描述
四、
与I2C 兼容的时序图
在这里插入图片描述
引脚图
在这里插入图片描述
在这里插入图片描述
五、从FIFO中读取数据的伪代码示例
1、首先: Get the FIFO_WR_PTR:
START
Send device address + write mode
Send address of FIFO_WR_PTR
REPEATED_START
Send device address + read mode
Read FIFO_WR_PTR
STOP
2、中央处理器计算要从FIFO中读取的样本的数量:
NUM_AVAILABLE_SAMPLES = FIFO_WR_PTR – FIFO_RD_PTR
(Note: pointer wrap around should be taken into account)
NUM_SAMPLES_TO_READ = <less than or equal to NUM_AVAILABLE_SAMPLES >
3、其次:从FIFO中读取NUM_SAMPLES_TO_READ示启银例:
START
Send device address + write mode
Send address of FIFO_DATA
REPEATED_START
Send device address + read mode
for (i = 0i <NUM_SAMPLES_TO_READi++) {
Read FIFO_DATA
Save LED1[23:16]
Read FIFO_DATA
Save LED1[15:8]
Read FIFO_DATA
Save LED1[7:0]
Read FIFO_DATA
Save LED2[23:16]
Read FIFO_DATA
Save LED2[15:8]
Read FIFO_DATA
Save LED2[7:0]
Read FIFO_DATA
}
STOP
START
Send device address + write mode
Send address of FIFO_RD_PTR
Write FIFO_RD_PTR
STOP
4、最后:写入FIFO_RD_PTR寄存器。如果第三步成功,则FIFO_RD_PTR将指向FIFO中的下一个示例,并且不需要此 。否则,处理器会适当地更新FIFO_RD_PTR,以便重读样本。
六、时序图
在这里插入图片描述
1、启停时序
当总线未使用时,启动和停止条件SDA和SCL怠速过高。主服务器通过发出启动条件来启动通信。启动条件是在SCL高的SDA上的高到低过渡。停止条件是SDA上的低到高过渡,而SCL较高。来自主设备的启动条件发出到设备的传输的开始信号。主服务器通过发出停止条件来终止传输,并释放总线。如果生成重复启动条件而不是停止条件,则总线将保持活动状态。
在这里插入图片描述
2、提前停止条件
MAX30102在数据传输期间的任何一点识别停止状态,除非停止状态发生在与启动条件相同的高脉冲下。为了正常 *** 作,不要在与启动条件相同的SCL高脉冲期间发送STOP状态。
3、从属服务器地址
从地址总线主服务器通过发出7位从设备I之后的启动条件来启动与从设备的通信D. 空闲时,MAX30102等待启动条件,然后是其从属设备ID. 串行接口逐位比较每个从属ID,如果检测到错误的从属ID,接口可以关闭电源,立悄手宴即断开SCL,识别开始条件后,对MAX30102进行编程,接收或发送数据,LSB为读/写位,表示主是从MAX30102写入或读取数据(收发=0选择写条件,收发=1选择读取条件)。在收到适当的从属ID后,MAX30102通过将SDA降低一个时钟循环来发出ACK。MAX30102从属ID包括7个固定位,B7-B1(设置为0b1010111)。首先传输最重要的从属ID位(B7),然后是剩余的位。表17显示了设备可能的从属ID。
4、ACK应答信号
确认位(ACK)是第9位,MAX30102在写入模式时用来握手接收每个字节的数据(图8)。如果已成功接收到前一个字节,则MAX30102将在整个主节点生成的第9个时钟脉冲期间拉下SDA。监视ACK允许检测到不成功的数据传输。如果接收设备忙或发生系统故障,则数据传输失败。如果数据传输失败,总线主服务器将重试通信。主机在第9个时钟周期中拉下SDA,以确认在MAX30102处于读取模式时接收到的数据。主机在每个读取字节后发送一个确认,以允许数据传输继续。当主服务器从MAX30102读取最后一个字节的数据,然后出现STOP条件时,将发送不确认。
在这里插入图片描述
5、写入数据格式
对于写入 *** 作,将从属ID作为第一个字节发送,然后是寄存器地址字节,然后是一个或多个数据字节。寄存器地址指针在收到每个字节的数据后自动递增,例如,整个寄存器库可以一次写入。以“停止”条件终止数据传输。写入 *** 作如图9所示。内部寄存器地址指针会自动递增,因此写入额外的数据字节会依次填充数据寄存器。
在这里插入图片描述
6、读取数据格式
对于读取 *** 作,必须执行两个I2C *** 作。首先,发送从属ID字节,然后是您希望读取的I2C寄存器。然后发送一个重复启动(Sr)条件,然后是读取的从属ID。然后,MAX30102开始从第一 *** 作中选择的寄存器开始发送数据。读取指针自动递增,因此设备继续按顺序从其他寄存器发送数据,直到接收到停止§条件为止。其中的例外是FIFO_DATA寄存器,在读取附加字节时,读取指针不再递增。要读取FIFO_DATA之后的下一个寄存器,需要使用I2C写入命令来更改读取指针的位置。图10和图11显示了读取一个字节和多个字节数据的过程。需要一个初始写入 *** 作才能发送读取寄存器地址。数据按顺序从寄存器发送,从初始I2C写入 *** 作中选择的寄存器开始。如果读取FIFO_DATA寄存器,读取指针将不会自动增加,随后的数据字节将包含FIFO的内容。
在这里插入图片描述
在这里插入图片描述
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)