测试器械

玩转stm32,来完成一个简易心率计软

发布时间:2023/11/20 14:19:20   
白癜风袪白 http://disease.39.net/bjzkbdfyy/180907/6511103.html
前言自公元三世纪我国最早的脉学专著《脉经》问世,脉学理论就得到不断的发展,“望、闻、问、切”是中国传统医学中最具有特色的一种诊断方式之一,“把脉”也成为了医者诊断患者身体状况的重要途径,其中蕴含的丰富的信息为患者的诊断提供了重要依据。但是由于中医靠的是手指获取脉搏心率,虽然简单无创但是也暴露出一些缺陷,由于存在许多主观臆断因素,影响了对脉象判断的规范化;其次这种手法也很难把握,大大影响了其精度和可行性。在年Vierordt创建了第一台杠杆式脉搏描记仪器,距今已经有一百多年的历史,脉搏波所呈现出的形态(波形)、强度(波幅)、速率(波速)和节律(周期)等方面的综合信息,在很大程度上反映出人体心血管系统中许多生理病理的血流特征,因此对脉搏波采集和处理具有很高的医学价值和应用前景,而国内20世纪50年代初期,心率相关仪器也被朱颜引用到中医脉诊的客观化研究中,并且取得了重大发展,为中国心率仪器的研究与发展方面奠定了扎实的基础。此后随着医疗器械的创新,电子科学技术的不断发展,国内外在研制中医心率检测仪方面取得了重要成果。尤其是在70年代中期,国内许多地方相继成立了跨学科的心率研究协作研究组,通过多学科共同合作,大大促进了中医心率研究的发展。目前,心率检测仪除了在医学领域被广泛应用之外,商业应用方面也都用到了比如运动、健身器材中的心率测试。而现在临床上使用的心电检测仪虽然功能强大,测量精度高,但是其价格昂贵携带不便,不利于家庭的普及。为了将传统的中医药学发扬光大,促进脉诊的应用和发展,必须与现代科技相结合,实现更科学、客观的诊断。在先进科学技术的推动下,医疗仪器的相关技术日新月异,全球医疗仪器的发展朝微小化迈进。便携式、低功耗的心率计会越来越受到人们的青睐。在医学、电子学、工程技术领域科研中,心率计的研究一直是当中涉及的焦点,在人们不断的努力创新中,各种静态的、动态的心率计已经相继问世,并且随身携带和远程遥控,极大方便了人们的生活。在国外到06年底,已经开始研究可佩戴式心率计。植入人体式心率计。国内的心率计产品由于受相关科学水平及生产设备的限制,功能和集成度不及国外。随着电子技术的发展与创新,我国必定能迎难而上,实现技术上的突破,为人们创造出便携、精确的心率检测仪。系统的软件总体设计stm32fzet6控制器本系统采用32位的单片机stm32fzet6来实现,系统要采用一个ADC,一个定时器,一个串口以及部分普通IO口,因为系统要采集脉搏信号,为了更加准确的得到心率值,本款单片机AD采集最高可达到14M,所以是最好的选择。在中断定时器中,通过一系列的计算、除噪、判断就可以得到最终的心率值。这里最主要介绍本系统要用到的电路模块。stm32fzet6资源简介STM32FZET6该芯片具有Cortex_M3内核、管脚、64KBSRAM、KBFLASH、2个基本定时器、4个通用定时器、2个高级定时器、3个SPI、2个IIC、5个串口、1个USB、1个CAN、3个12位ADC、1个12位DAC、1个SDIO接口、1个FSMC接口以及个通用IO口。该芯片的配置十分强悍,并且还带外部总线(FSMC)可以用来外扩SRAM和连接LCD等,通过FSMC驱动LCD,可以显著提高LCD的刷屏速度。本设计使用到了一个ADC,通过DMA传输方式,可以解放CPU进行更好的处理,而每当一次DMA过程结束后,触发DMA完成中断,从而采集计算得到心率值。MCU的原理图如图所示。系统的软件实现程序的功能:可以通过对ADC口的检测其数据和心电信号的采集,转换和处理,最后用显示屏显示心率值,还可以通过蓝牙把心率值发送到上位机APP。同时一旦心率不在设定范围之内,可以通过报警模块来提示,提醒用户注意自己身体。程序流程分析过程中最基本的工具就是主程序流程图,它是程序分析中最基本、最重要的分析技术,也是整个设计的关键一步,是我们设计思路的具体体现。有了主程序流程图,我们就可以有根据把一个复杂的软件设计分解为若干个功能模块,然后逐一设计各个模块的功能。系统初始化之后,进行定时器中断、显示等工作,不同的外部硬件控制不同的子程序。主程序流程图如图所示。定时器中断程序程序的功能:初始化IO口、UART口,并设定波特兰为,初始化定时器中断,如果检测到心跳,就把心率值发送到上位机APP中,并且把检测是否有心跳标志位清零,否则继续把心率值发送到上位机APP中,一直循环下去。定时器中断程序如图4-2所示。上位机APP程序程序的功能:此程序要求android4.3及以上系统,手机要求内置4.0蓝牙芯片,配置本机的蓝牙模块,搜索蓝牙设备,并且进行蓝牙socket通信,最后显示出串口发送来的心率值。系统调试程序设计在软件设计中,一般采用模块化的程序设计方法,软件构造活动中的重要组成部分是给出解决特定问题程序的过程,把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块,包括分析、设计、编码、测试、排错等等不同阶段。同时模块化编程也有利于程序的优化和分工,提高了程序的阅读性。各个程序模块都要完成一个明确的任务,实现某个具体的功能或者初始化某个系统,在具体需要时调用相应的模块即可。心率值准确、脉搏波形完好都与传感器和手指的接触有很大关系,为了获得良好准确的实验效果,有以下注意事项:1)保持指尖与传感器接触良好,不要太用力按,否则血液循环不畅会影响测量效果。2)保持镇静,测量时身体不要过多移动,这个会影响测量效果。3)不要用冰凉的手指进行检测,因为血液循环不好会影响测量结果。4)测量过程中要保持测量背景光的恒定,减少背光的干扰。各模块调试根据本系统设计方案,可以分为模拟信号调试部分、单片机控制电路部分、上位机APP调试部分。由于系统采用模块化设计,所以方便了对各个电路模块的逐级测试,能够清晰的发现其中的错误并且改进。传感器部分的调试使用示波器测量,按照引脚顺序接好电源和地引脚。将示波器探头接到输出引脚(S),同时将示波器的时间扫描档放置到ms左右,电压扫描档放置在2V左右,示波器探头设置为直流耦合(DC)。如图5-1所示,测得的波形如下,传感器是好的。串口的调试程序主要通过USART串口输出数据,输出格式均为ASCII码,波特率为。以“S”为前缀的表示心率图的数值化表示;“B”为前缀的表示心率值;“Q”为前缀的表示IBI数值即相邻两个心跳之间的时间。“S”数据20ms发送一次数据量较大。“B”、“Q”数据只有在检测到有效心率的时候,在每一次心跳后发送一次,如图所示上位机APP的调试打开软件会出现如下界面,询问是否打开蓝牙,点击确定之后再扫描设备,当扫描到设备之后,连接到蓝牙。此时,蓝牙的提示红灯会停止闪烁。其开启界面以及数据接收界面如图所示。系统检测系统上电后等待测试状态系统在测试状态下的数据如下,其中Signal表示采集到的信号值,BPM为检查到心率值。左侧LED灯表示模拟心跳状态,测量中显示的数据,如图5所示心率传感器部分程序#includeled.h#includedelay.h#includesys.h#includeusart.h#includelcd.h#includeadc.h#includetimer.h#includedma.h#includebeep.h#definetrue1#definefalse0intBPM=0;//存储心率值intSignal;//保存即将采集到的数据intIBI=;//脉搏跳动的时间差unsignedcharPulse=false;//脉冲高为真,低就falseunsignedcharQS=false;//发现有脉冲就true.intrate[10];//用数组来保存过去10次的IBI值unsignedlongsampleCounter=0;//用于确定脉冲定时unsignedlonglastBeatTime=0;//intP=;//用于保存脉冲波峰intT=;//用于查找脉冲波槽intthresh=;//用于查找心跳的瞬间时刻intamp=;//用于保存脉冲波形的振幅intNum;unsignedcharfirstBeat=true;//放心率数组,我们可以开始在合理的心率值开始采集unsignedcharsecondBeat=false;//放心率数组,我们可以开始在合理的心率值开始采集第二次voidsendDataToTFTLED(charsymbol,intdat);voidDMA_Configuration(void);voidAdc_Init(void);u8t;u16times=0;#defineADC1_DR_Address((u32)0xC)//就是ADC1的外设基地址(0x)加上ADC数据寄存器(ADC_DR)的偏移地址(0x4c)u16ADC_ConvertedValue=0xff;intfadeRate=0;//usedtofadeLEDonwithPWMonfadePin/

************************************************************************FunctionName:main*Description:主函数*Input:None*Output:None*Return:None***********************************************************************/intmain(void){delay_init();//延时函数初始化uart_init();//串口初始化为LED_Init();//初始化与LED连接的硬件接口LCD_Init();BEEP_Init();//PB8,BEEP高低控制TIM3_Int_Init(,71);Adc_Init();DMA_Configuration();ADC_SoftwareStartConvCmd(ADC1,ENABLE);POINT_COLOR=RED;//设置字体为红色LCD_ShowString(30,30,,16,16,Wel

转载请注明:http://www.aideyishus.com/lkzp/5647.html
------分隔线----------------------------