FastBond智能可穿戴——便携式心率血氧测试仪
利用adi与美信芯片设计制造的一个小型的心率血氧测试仪,体积小巧,功能强大。
标签
嵌入式系统
星辰i
更新2021-11-29
1784

1.项目介绍

该项目是一个超级小型的心率血氧测试仪,计划装一个外壳做成那种指尖夹的形式,这样使用起来就更加的简洁。设计的时候想着能够尽可能的小巧。就把电路精简的十分厉害。供电部分原计划采用干电池进行供电,但是在购买器件的时候忘记买了,就飞出两根线用外部供电。

该项目主控我选用了美信家的MAX32660,心率血氧采集则使用了美信家的MAX30102,电源部分采用ADI家的ADP151AUJZ-3.3芯片。使用立创EDA绘制的这个PCB与原理图,不得不说立创EDA大量的元器件库真是大大缩减了开发时间。采样结果通过ole平面进行显示。

软件部分使用keil编写,总体上更偏向一个demo程序。最终计划加入的自动休眠,自动唤醒功能并没有完成,只是简单实现心率血氧采集的功能。

2.项目用到的板卡、芯片、模块、仪器、设备等介绍

该项目使用到了烙铁、风枪、万用表、jlink、示波器等工具。

前期使用了MAX32660-EVSYS开发板以及oled模块、MAX30102模块进行代码的开发。

MAX32660-EVSYS:MAX32660评估系统提供结构紧凑的开发平台,在微小、易于使用的电路板实现对MAX32660全部特性的访问。主板上已安装基于MAX32625PICO的调试适配器;完成编程后,可将其直接拆卸。调试模块支持可选的10引脚Arm® Cortex®调试连接器,用于实现DAPLink功能。

MAX32660:属于美信DARWIN产品系列,是一款超低功耗、性价比突出、集成度非常高的32位控制器。芯片封装非常小,4mm x 4mm 的TQFN已经是这个系列里最大封装,非常适合电池供电或是无线传感器的应用。MAX32660采用了带浮点运算功能的Cortex-M4内核,最大主频96MHz, 带256KB Flash和96KB SRAM,性能很强劲。

MAX30102:是一个集成的脉搏血氧仪和心率监测仪生物传感器的模块。它集成了多个LED、光电检测器、光器件,以及带环境光抑制的低噪声电子电路。使移动设备以极低功耗工作,具有可编程采样率和LED电流,节省功耗低功耗心率监测仪(< 1mW)、超低关断电流、快速数据输出、高采样率等特点。

ADP151:是一款超低噪声、低压差(LDO)线性稳压器,采用2.2 V至5.5 V电源供电,最大输出电流为200 mA。在200 mA负载下压差仅为135 mV,不仅可提高效率,而且能使器件在很宽的输入电压范围内工作。ADP151采用新颖的电路拓扑结构,实现了超低噪声性能,而无需旁路电容,使该器件非常适合对噪声敏感的模拟和RF应用。ADP151在提供超低噪声性能的同时,并不影响其电源电压抑制比(PSRR)或线路与负载瞬态响应性能。200 mA负载时工作电源电流低至265 μA,因此ADP151适合电池供电的便携式设备。

3.关键性代码及说明

MAX30102的初始化代码

IIC_Init();

max30102_reset();

max30102_Bus_Write(REG_INTR_ENABLE_1,0xc0);	// INTR setting   开启

max30102_Bus_Write(REG_INTR_ENABLE_2,0x00);  //原来是0x00
max30102_Bus_Write(REG_FIFO_WR_PTR,0x00);  	//FIFO_WR_PTR[4:0]
max30102_Bus_Write(REG_OVF_COUNTER,0x00);  	//OVF_COUNTER[4:0]
max30102_Bus_Write(REG_FIFO_RD_PTR,0x00);  	//FIFO_RD_PTR[4:0]
max30102_Bus_Write(REG_FIFO_CONFIG,0x0f);  	//sample avg = 1, fifo rollover=false, fifo almost full = 17
max30102_Bus_Write(REG_MODE_CONFIG,0x03);  	//0x02 for Red only, 0x03 for SpO2 mode 0x07 multimode LED
max30102_Bus_Write(REG_SPO2_CONFIG,0x27);  	// SPO2_ADC range = 4096nA, SPO2 sample rate (100 Hz), LED pulseWidth (400uS)  
max30102_Bus_Write(REG_LED1_PA,0x24);   	//Choose value for ~ 7mA for LED1
max30102_Bus_Write(REG_LED2_PA,0x24);   	// Choose value for ~ 7mA for LED2
max30102_Bus_Write(REG_PILOT_PA,0x7f);   	// Choose value for ~ 25mA for Pilot LED

OLED的初始化代码

	OLED_SCLK_Clr();
	OLED_SDIN_Clr();
	OLED_RST_Clr();
	OLED_DC_Clr();
	OLED_CS_Clr();
	
	OLED_RST_Set();
	delay_ms(100);
	OLED_RST_Clr();
	delay_ms(200);
	OLED_RST_Set(); 
					  
	OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panel
	OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
	OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
	OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
	OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control register
	OLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current Brightness
	OLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
	OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
	OLED_WR_Byte(0xA6,OLED_CMD);//--set normal display
	OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
	OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 duty
	OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset	Shift Mapping RAM Counter (0x00~0x3F)
	OLED_WR_Byte(0x00,OLED_CMD);//-not offset
	OLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequency
	OLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
	OLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge period
	OLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
	OLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configuration
	OLED_WR_Byte(0x12,OLED_CMD);
	OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomh
	OLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect Level
	OLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
	OLED_WR_Byte(0x02,OLED_CMD);//
	OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disable
	OLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disable
	OLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
	OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7) 
	OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
	
	OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/

4.功能演示结果及说明

FncBiOsz7h7TdH31BWmH-A3H3eIQ

设备开机为工作状态

FiKeadhGe8Ci4bWBXaWZcWL5tgwc

测量手指时的状态

测量结果稳定性比较差,稍微有一点干扰就跳动很严重,不知道怎么优化好一些。

5.对本活动的心得体会

很高兴能参加这一次FastBond活动,这一次也是我同事强力安利我来参加的。实现的时候也遇到了很多问题,最终的实现结果也不是特别满意,因为对心率血氧算法的研究不深入,最终得到的测试数据稳定性很差,不知道怎么去解决。希望有懂行的大佬多多指导一下。

建议:感觉群里交流太少了。可能大佬们都是各自做各自的不喜欢交流吧,希望下一次群里的气氛能够热闹一点,

软硬件
电路图
附件下载
demo-max.zip
程序
团队介绍
团队成员
星辰i
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号