基于MAX30100传感器心率检测实现的作品报告解答.docx
《基于MAX30100传感器心率检测实现的作品报告解答.docx》由会员分享,可在线阅读,更多相关《基于MAX30100传感器心率检测实现的作品报告解答.docx(14页珍藏版)》请在冰点文库上搜索。
基于MAX30100传感器心率检测实现的作品报告解答
__学年度实践学期学生实践报告
年月日—年月日
项目名称:
指导教师:
课题:
系别:
专业班级:
学号:
学生姓名:
摘要
本学期的小学期实践设计项目作品,为基于单片机MCU开发箱的心率传感器开发,该主体采用IAP15W4K58S4型号MCU单片机作为本项目的开发系统,以及基于MAX30100芯片的传感器。
电源供配采用MCU开发箱自带的恒压电源,数据显示采用由两片HC595动态驱动的8个数码管。
考虑到对本项目作品的使用与数据采样处理,本人采用最高具有16位精度的MAX30100芯片传感器作为主要的心率数据采集模块,MAX30100芯片内部集成ADC数据转换,以及多个可读写寄存器,本作品主要操作其中的FIFO寄存器进行数据采集。
同时MAX30100芯片传感器属于I2C接口器件,故在程序开发中,采用I2C接口协议进行。
关键词:
单片机MCU开发箱;MAX30100;传感器;HC595;FIFO寄存器;I2C;
免责申明:
本报告为本人作为学生所作报告,报告中个别部分(图片、伪代码、芯片介绍等)存在局部摘取他人成果,本人已做出作品后现发出本报告纯为分享学习,不做他途,故请大家善取善用。
1
一、项目目的……………………………………………………………………………3
1.1、项目目的………………………………………………………………………3
1.2、项目目标………………………………………………………………………3
二、项目内容及硬件设计………………………………………………………………4
2.1、系统器件介绍………………………………………………………………4
2.2、各电路模块……………………………………………………………………4
三、软件设计…………………………………………………………………………5
3.1、程序开发使用软件…………………………………………………………5
3.2、程序流程图…………………………………………………………………5
3.3、代码示例(main函数部分)…………………………………………………6
3.4、算法问题及分析……………………………………………………………8
3.4.1、关于整体代码框架中存在的问题……………………………………8
3.4.2、关于对MAX30100芯片的硬件驱动…………………………………8
3.4.3、关于在驱动FIFO时需要注意的细节………………………………9
3.4.4、关于对项目硬件调试………………………………………………9
四、总结与展望………………………………………………………………………10
五、附录………………………………………………………………………………11
作品图片…………………………………………………………………………11
2
一、项目目的及目标
1.1、项目目的:
随着人类的科技文明发展的进步,人们越发开始关注人们自身生活的质量及健康安全,而随可穿戴设备及物联网的发展,心率统计也从此开始全面进入人们的视野及生活。
为何人们关注心率统计?
事实上,心率数据可以反映人身的多项健康指标,诸如在睡眠情况、运动时所处状态,甚至也能根据对人身实时的心率数据来跟踪人的内心情绪的波动。
本项目的选题方向,紧扣时代及社会热点,在设计研究上,对算法的深入,也同时揭开了可穿戴设备的神秘面纱,让我们更接近实际学习应用的学习及实践。
1.2、项目目标:
在本项目的设计实践中,本小组成员都期待在硬件设计完备的基础上,通过对MAX30100芯片的深入,进而自主设计心率算法及软件框架来实现较为准确的心率检测。
3
二、项目内容及硬件设计
2.1、系统器件介绍:
本次项目作品,主体采用MAX30100传感器芯片模块,及MCU单片机开发箱,其中MAX30100是一款集成有脉搏血氧仪和心率监测传感器的模块。
该器件集成有两个LED、一个光电探测器,经过优化的光学器件和低噪声模拟信号处理器,可检测脉搏血氧及心率信号。
MAX30100采用1.8V和3.3V的电源电压。
可通过软件来关断电源,待机模式下的电流消耗量可忽略不计,因而可以始终保持电源连接。
典型应用有健身辅助设备、医疗监控设备和可穿戴设备。
其中,MAX30100电路整体视图如下:
MCU单片机开发箱,是具备IAP15W4K58S4型号MCU芯片的单片机开发箱,箱上具有由两片HC595动态驱动的8个数码管,及4*4物理按键,及两个中断物理按键。
以上两个都支持I2C接口。
数据显示
MCU
数据处理
MAX30100
数据采集
按键中断
4*4
按键控制
2.2、各电路模块:
4
三、软件设计
3.1、程序开发使用软件:
本项目程序开发所使用软件为KeilforC51的v4版本,及STC公司所提供的芯片烧写软件。
其中,本小组在此提出几点注意事项。
在本项目的程序开发过程中,本小组成员发现,在程序的功能扩展中,对所使用的程序开发软件有一定要求。
本程序代码基本超出未激活版本KeilforC51所给的空间,所以在程序开发中,既要求程序开发人员对程序空间要节约使用,对代码多进行优化,同时即使节约使用,在程序开发末期也可能出现空间溢出,所以也要求程序开发软件处于激活状态,如此才能得到更多的空间资源。
另外在程序烧写过程中,要求操作开发人员依据程序烧写流程进行,由此避免硬件不必要的损坏,及实验错误等。
开始
初始化
扫描键盘
扫描中断计时
采集处理数据
(读、写、转换)
扫描显示
结束
3.2、程序流程图:
5
3.3、软件设计(main函数部分):
intmain()
{
u8i;
P0M1=0;P0M0=0;//设置为准双向口
P1M1=0;P1M0=0;//设置为准双向口
P2M1=0;P2M0=0;//设置为准双向口
P3M1=0;P3M0=0;//设置为准双向口
P4M1=0;P4M0=0;//设置为准双向口
P5M1=0;P5M0=0;//设置为准双向口
P6M1=0;P6M0=0;//设置为准双向口
P7M1=0;P7M0=0;//设置为准双向口
display_index=0;
IE1=0;//外中断1标志位
IE0=0;//外中断0标志位
EX1=1;//INT1Enable
EX0=1;//INT0Enable
IT0=1;//INT0下降沿中断
IT1=1;//INT1下降沿中断
EA=1;//允许总中断
AUXR=0x80;//Timer0setas1T,16bitstimerauto-reload,
//使用Timer0的16位自动重装来产生1ms节拍,程序运行于这个节拍下,用户修改MCU主时钟频率时,自动定时于1ms.
TH0=(u8)(Timer0_Reload/256);//Timer0_ReloadTimer0中断频率,1000次/秒1ms
TL0=(u8)(Timer0_Reload%256);//通过%/分别获取高低位时钟值u8无符号8字节整型
ET0=1;//Timer0interruptenable//时钟中断使能
TR0=1;//Timer0run//时钟运行
EA=1;//允许总中断
for(i=0;i<8;i++)LED8[i]=0x21;//上电消隐
KeyHoldCnt=0;//键按下计时
KeyCode=0;//给用户使用的键码,1~16有效
IO_KeyState=0;
IO_KeyState1=0;
IO_KeyHoldCnt=0;
cnt50ms=0;
msecond=0;
ns=0;
n=0;
f=0;
K=2;
Hr_state=1;
6
while
(1)
{
if(++cnt50ms>=10)//20ms扫描一次行列键盘
{
cnt50ms=0;
IO_KeyScan();
}
if(KeyCode!
=0)//有键按下
{
if(KeyCode==17)
{
K=0;
}
if(KeyCode==21)
{
K=1;
}
if(KeyCode==25)
{
K=2;
}
KeyCode=0;
}
/*
if(++msecond==200&&K==0)
{
msecond=0;
ReadMAX30100_Temp();
DisplayMAX30100_Temp();
}
if(++msecond==200&&K==1)
{
msecond=0;
ReadMAX30100_SpO2();
DisplayMAX30100_SpO2();
}
*/
if(f&&Hr_state)
{
f=0;
ReadMAX30100_Hr();
DisplayMAX30100_Hr();
}
}
}
7
3.4、算法问题及分析:
在本项目中,由于在硬件的设计及准备上的完备,在项目进行的过程中,所遇见的问题基本集中于本项目的算法设计及软件程序的框架设计之上。
在以下的问题列举与分析中,主要提及重要部分。
3.4.1、关于整体代码框架中存在的问题:
在整体代码框架中,如3.2中的程序流程图所示,基本采用分段式的各部分模块执行而行进,再通过时钟及外设(诸如键盘,或心率采样行为)的中断来响应及作出反馈。
其中,在时钟中断中,由于MAX30100芯片的硬件设计,基本都存在对时钟延时的需要,一为确保采样准确,二为实现硬件的时钟响应兼容。
而正由于此,当时钟延时积累超出一定范围时,对时钟中断的设计要求则不得不通过补偿方式,不断调试修正。
另外,时钟延时也在一定程度上影响外设的响应。
所以,在整体代码框架中,非常需要注意在循环、中断、反馈及实际硬件影响。
3.4.2、关于对MAX30100芯片的硬件驱动:
通过查看MAX30100芯片手册,以下给出关于对MAX30100关键部分的FIFO读写的伪代码。
伪代码,示例如下:
Pseudo-CodeExampleofReadingDatafromFIFO//从FIFO中读取数据的伪代码示例
Firsttransaction:
GettheFIFO_WR_PTR:
//第一次交易:
获得fifo_wr_ptr:
START;
Senddeviceaddress+writemode
SendaddressofFIFO_WR_PTR;
REPEATED_START;
Senddeviceaddress+readmode
ReadFIFO_WR_PTR;
STOP;
8
ThecentralprocessorevaluatesthenumberofsamplestobereadfromtheFIFO:
//中央处理器评估从FIFO读取的样本数量:
NUM_AVAILABLE_SAMPLES=FIFO_WR_PTR-FIFO_RD_PTR
(Note:
pointerwraparoundshouldbetakenintoaccount)
NUM_SAMPLES_TO_READ=
Secondtransaction:
ReadNUM_SAMPLES_TO_READsamplesfromtheFIFO:
//第二次交易:
从FIFO读取num_samples_to_read样品:
START;
Senddeviceaddress+writemode
SendaddressofFIFO_DATA;
REPEATED_START;
Senddeviceaddress+readmode
for(i=0;i{
ReadFIFO_DATA;
SaveIR[15:
8];
ReadFIFO_DATA;
SaveIR[7:
0];
ReadFIFO_DATA;
SaveR[15:
8];
ReadFIFO_DATA;
SaveR[7:
0];
}
STOP;
Thirdtransaction:
WritetoFIFO_RD_PTRregister.Ifthesecondtransactionwassuccessful,//第三次交易:
写fifo_rd_ptr寄存器。
如果第二次交易成功,
FIFO_RD_PTRpointstothenextsampleintheFIFO,andthisthirdtransactionisnotnecessary.
//fifo_rd_ptr指向FIFO的下一个样品,这第三次交易不是必要的。
Otherwise,theprocessorupdatestheFIFO_RD_PTRappropriately,sothatthesamplesarereread.
//另外,处理器适当地更新fifo_rd_ptr,使得样品得以重读。
START;
Senddeviceaddress+writemode
SendaddressofFIFO_RD_PTR;
WriteFIFO_RD_PTR;
STOP;
8
3.4.3、关于在驱动FIFO时需要注意的细节:
在写MAX30100芯片硬件驱动时主要问题在于对FIFO的操作上,在此需要注意的细节主要体现在,在使用IIC协议对FIFO的寄存器进行操作时,首先根据项目需求,如采集样本数及精度等,配置config寄存器,接着需要对FIFO的各个寄存器进行清零(写0x00),其中包括写寄存器、读寄存器、计数寄存器和数据寄存器,最后才进行写操作或读操作。
3.4.4、关于对项目硬件调试:
在程序基本完成时,由于要在实际环境下完成心率数据的采集及处理,所以在硬件调试中,必然根据实际测得数据,计算出实际测量误差,再由此修改调节在中断、延时、反馈、采集数量、样本精度等过程中的数据参数。
硬件调试中,重点注意误差分析。
本项目的实验误差,一体现在实验操作,二体现在数据处理及算法优化上。
所以,在实验操作上,要求实验人员多次重复,控制操作流程;在数据处理及算法优化上,要求程序开发人员对数据误差进行分析并由此进行修正,另外,算法优化必须建立在实际硬件基础之上,诸如在中断、扫描、延时上,需要根据实际测量结果进行优化。
9
四、总结与展望
首先,这次小组成员一起参加本次实践确实是一次收获很大的经历,经过组内成员的团结协作,最终完成了题目的基本要求部分,本次实践也提高了我们分析问题、解决问题的实践能力,最重要的是增强了我们团队协作意识和创新能力以及和谐相处的能力,让我们真正体会到理论运用于实践,在实践中巩固理论知识。
特别是在实践过程中在遇到困难时大家一起鏖战几天几夜的经历也给了我们成长过程中一笔巨大的宝贵财富,我们都会好好珍惜。
10
五、附录
作品图片:
11