赞
踩
最近看到价格飞涨的血氧仪,又在采购中发现有血氧传感器(MAX30102)并且价格不贵,于是买下了一个打算自己做一个血氧仪。
在下载例程代码,在正点原子STM32F103ZET6上跑起来后,发现获得的数据并不理想,甚至数据就像随机生成的。重读数据手册后也没找到问题所在,我猜测是REG_LED1_PA、REG_LED2_PA、REG_PILOT_PA这三个寄存器赋值大小的问题。
把IIc相关代码改换成自己的IIc就行了。
algorithm.c里面包含了数据计算函数。myiic.c包含了模拟iic的函数对照着这个更改就行。MAX30102.c包含的是对传感器读写,初始化的函数不需要更改。
max30102_GPIO_Init();//初始化INT引脚 if(maxim_max30102_write_reg(REG_INTR_ENABLE_1,0xc0)) // 终端设置 return -1; if(maxim_max30102_write_reg(REG_INTR_ENABLE_2,0x00))//温度相关 return -1; if(maxim_max30102_write_reg(REG_FIFO_WR_PTR,0x00)) //FIFO_WR_PTR[4:0] //建议在试用前清零 return -1; if(maxim_max30102_write_reg(REG_OVF_COUNTER,0x00)) //OVF_COUNTER[4:0]//建议在试用前清零 return -1; if(maxim_max30102_write_reg(REG_FIFO_RD_PTR,0x00)) //FIFO_RD_PTR[4:0]//建议在试用前清零 return -1; if(maxim_max30102_write_reg(REG_FIFO_CONFIG,0x0f)) //sample avg = 1, fifo rollover=-1, fifo almost full = 17 return -1; if(maxim_max30102_write_reg(REG_MODE_CONFIG,0x03)) 选择不同的检测内容//0x02 for Red only, 0x03 for SpO2 mode 0x07 multimode LED return -1; if(maxim_max30102_write_reg(REG_SPO2_CONFIG,0x20)) // 设置adc精度检测速度在数据手册也有如何选择 return -1; if(maxim_max30102_write_reg(REG_LED1_PA,0x27)) //LED1RED的电流值越大电流越大数据手册有值对应的电流大小 return -1; if(maxim_max30102_write_reg(REG_LED2_PA,0x27)) // LED2IR的电流值越大电流越大数据手册有值对应的电流大小 return -1; if(maxim_max30102_write_reg(REG_PILOT_PA,0x7f)) // 也是设置电流但是我没搞懂这个的具体涵义以下是机翻:PILOT _ PA [7:0]的目的是在接近模式和多 LED 模式下设置 LED 电源。 return -1; return 0; //返回成功
如果有大佬做出来是好的希望能指点一下我。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。