| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> 脉搏测试报警系统设计 -> 正文阅读 |
|
[嵌入式]脉搏测试报警系统设计 |
目录 一、方案流程及技术规格书设计 二、系统硬件电路设计 三、软件编写及调试 四、系统调试测试与分析 ? 前言 ? ? ? ?人体脉搏信号中包含丰富的生理信息,脉诊在我国已具有2600多年临床实践,是我国传统中医的精髓,但祖国传统医学采用“望、闻、问、切”的手段进行病情诊断,受人为的影响因素较大,测量精度不高。随着科技发展的不断提高,生命科学和信息科学的结合越来越紧密,出现了各种新颖的脉搏测量仪器,使脉搏测量变得非常方便和精确。 ? ? ? ?随着我国社会老龄化的到来,城市中大量独居老人的健康监护问题越来越突出。心血管疾病作为老年人疾病中比例较高的病症,许多病情较轻的病人由于未及时进行检查,错过了宝贵的诊治机会,导致病情加重,严重者可能引起中风甚至危及生命。通过分析官方报道出的数据,心血管疾病每年导致全世界1500万人死亡,成为导致死亡的主要原因。即使当前国内医疗设备已较为先进完善的前提下,心血管发病率仍然逐年提高,并且事实上,该病的发病人群也呈现年轻化的趋势。 ? ? ? ?脉搏远程监测报警系统的实现,可以避免患者的时间和金钱上的浪费,提高治疗效率;另一方面可以让患者在日常中更熟悉自身身体状况,即促进医务人员与患者之间的交流合作,提高病院服务水准的同时也降低了医患矛盾产生的概率。 ? 软件工具准备 软件: 电路设计:protel99 se(up主使用版本) 或者其他版本,或者其他电路设计软件; 单片机开发:Keil5; 调试测试:串口调试助手,逻辑分析仪等; ? 工具: 电路焊接:电烙铁,SMT(有条件的); 调试: 万用表、示波器(基础入门即可,可以白嫖学校或者公司)USB转串口工具、仿真器; ? 一、方案流程及技术规格书设计 1.1 方案流程设计 1.2 技术规格书设计 1.?脉搏信号由光电脉搏传感器模块进行采集;采集后的信号经过放大(滤除50HZ信号的干扰),进行整形后,得到幅值在0~5v的脉冲信号。 2.脉冲信号输入单片机,单片机处理相关数据并在LCD液晶显示。 3.有报警信息,报警信息通过GSM模块发送给指定手机。 4、按键可以设置报警值。 ? ? 二、原理图和PCBA版图设计及解析 ? ? 2.1微处理控制电路 ? ? ? 单片机是系统的核心,单片机电路一般有复位电路、晶振时钟电路等,本设计采用宏晶公司IAP15F2K61S2单片机芯片,其内部有上电复位电路和内部时钟电路,所以设计省去外部复位电路和外部晶振。设计采用LQFP32封装,电路图如图3.1所示: ? ? ??????????????????????????????????????????????????????????????图3.1 微控制器电路 ? 2.2脉搏传感器电路 ? ? ? ?脉搏传感器以一体化模块方式,其模块自身有信号采集、放大和处理电路,所以和单片机接口比较简单。设计采用一个3脚插座形式连接传感器。1脚是脉搏模拟信号输出脚,连接单片机AD转换口,2脚是传感器供电脚,连接VCC5V电压,3脚接地。手指未接触传感器时,输出固定电压2.5V,当手指接触传感器时,由于脉搏跳动,手指血液浓度不同,光电传感器输出高低感应信号,经放大处理后,在传感器模块1脚输出类似三角波的波形。模块输出模拟信号,电路如图3-2: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ???????????????????????????????????????????????????????????????图3.2 脉搏传感器电路???????? ? 2.3 LCD显示电路 ? ? ? ?液晶显示是LCD1602A模块,LCD1602A模块自身有LCD驱动集成电路(HD44780液晶芯片)电源电路等,与LCD模块接口是16脚插座,电路如图3.3: ?????????????????????????????????????????????????????????图3.3 LCD1602A显示电路图 ? ? ? ? R2电位器10K起分压作用,电位器采用3296多圈电位器,调节精度高,接口2脚是提供液晶显示偏压,电压大小调节显示对比度。C15是液晶供电滤波电容,接VCC和GND之间。15、16脚是背光源供电,15脚接正,R21是背光限流电阻,其大小可以调节背光亮度。其他是和单片机连接的数据和控制脚,RS脚是选择命令还是数据。RW是读写选择。E是片选信号。D0-D7是数据线。 ? 2.4按键电路 ???非自锁机械按键按下时2个脚导通,松开按键,2个脚断开。本设计4个按键,没有按下按键时,由于上拉电阻作用,对应IO口是高电平,按键按下,按键导通,对应IO口接地,是低电平。单片机检测各个按键IO口电平,判断按键状态。按键功能是设置脉搏报警高限和低限。电路如图3.4: ????????????????????????????????????????????????????????????????????图3.4按键电路图? ? 2.5 ?LED指示报警电路 ? ? ? LED指示报警电路连接单片机P32,正常工作时,P32输出高电平,点亮LED。当报警时,P32输出1HZ方波,使单片机闪烁显示。电路如图3.5。 ?????????????????????????????????????????????????????????????????图3.5 LED灯电路图 ? 2.6蜂鸣器驱动电路 ? ? ? ?蜂鸣器连接单片机P33口,单片机IO口驱动能力有限,所以加三极管驱动电路,R3是限流电阻。采用无源蜂鸣器,蜂鸣器不响时,P33口输出低电平,Q1不导通,没有电流流过蜂鸣器,P33口输出4KHz方波时,Q1在P33高电平时导通,低电平时不导通。蜂鸣器流过电流也是4KHz,所以蜂鸣器响。R10可以调节流过蜂鸣器电流大小,即调节蜂鸣器声音大小。电路如图3.6。 ????????????????????????????????????????????????????????????图3.6 蜂鸣器驱动电路图 ? 2.7 GSM电路 ? ? ? ? 设计采用GA6-B通信模块,模块已经集成了射频天线、SIM卡,GSM模块和单片机接口只是串口。由于GSM模块的IO口是3.3V,不能直接和单片机5V的IO口连接,需要电平转换电路。TXD2、RXD2连接单片机串口,U_RXD、U_TXD连接模块串口。接口电路如图3.7: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图3.7 GSM通讯模块和电平转换电路 ? 2.8电源电路 ? ? ? ? 系统采用外部9V电源适配器供电,单片机和液晶等需要5V稳定的电压供电,9V降压到5V采用常见的7805三端稳压集成电路。7805三端稳压电路的优点有:1、纹波抑制比高。2、内部有过热、短路保护。安全可靠。3、价格便宜。4、所需的外围元件极少,外部元件只需输入滤波电容和输出滤波电容。 ? ? ? ? 三端稳压集成电路7805只有3个脚,1脚输入、2脚接地、3脚输出。直流经过7805稳压输出5V,C3输入滤波电容、C6输出滤波电容。电路如图3.8。 ???????????????????????????????????????????????????????????????图3.8 7805稳压电路 GSM模块接口电平是3.3V,所以需要3.3V电源。设计采用AMS1117稳压电路,电路如图3.9。 ?????????????????????????????????????????????????????????图3.9 ?AMS1117稳压电路 ? 三、软件编写及调试 ?3.1 主程序设计 ? ? ? ?脉搏测试和报警系统完成的功能有:1、脉搏传感器输入模拟信号进行AD转换,得到数字化的脉搏数据,对转换得到的数据进行分析和计算,得到脉搏值。2、脉搏值和设置的上下限比较,超过正常值就声光报警。3、液晶显示脉搏值和报警信息。4、报警时,GSM模块发送短信到指定的手机。5、按键设置报警上下限。 ? ? ? ?软件设计就是编写计算机程序,常用的单片机编程语言有汇编语言和C语言,汇编语言是底层机器语言,适合于编写简单功能程序。目前已经很少使用汇编语言设计应用程序。本设计使用C语言,C语言是高级语言一种,它不但有高级语言的设计容易,易读懂,可移植性还有它能对底层寄存器操作,兼顾了汇编语言的功能,所以非常适合单片机编程。 ? ? ? ? 系统上电后,首先关闭总中断,然后对芯片内部AD初始化,定时器初始化,LCD显示初始化,通信模块初始化,完成初始化后,打开总中断。后面循环执行LCD显示程序,AD转换程序,计算程序,按键扫描和处理程序,蜂鸣器报警程序,LED报警程序,GSM模块发送程序。图4-1主程序流程图。 ?????????????????????????????????????????????????????????????????图4.1 ?主程序 ? 3.2 脉搏AD转换程序和计算程序设计 ? ? ? ?脉搏数就是一分钟心跳次数,脉搏一般是在60-120之间。也就是每分钟跳动60次到120次,脉搏传感器输出就是跳动周期的脉冲波,二个波峰之间的时间就是脉搏跳动时间,按1分钟60次计算,1秒钟一次,也就是每1秒会出现峰值,按20毫秒采样一次AD值,采样50个值进行比较,就可以得到脉搏峰值,计算2次峰值时间差,然后60000除以时间差,就计算出脉搏值。 ? ? ? ?STC15F2K61S2内部集成了AD转换器,所以直接使用内部AD转换器。图4-2是AD转换内部框图。 ?????????????????????????????????????????????????????????图4.2 ?AD转换内部框图 ? ? ? ? ? AD转换共有8个输入通道,模拟开关切换通道,配置ADC_CONTR寄存器的CHS2-CHS0选择通道,本设计采用通道3。STC15F2K61S2的ADC是逐次比较型ADC,逐次比较型ADC由比较器和DAC构成。置位ADC_START位启动AD转换,转换结束硬件置位ADC_FLAG,程序读取ADC_RES和ADC_RESL转换结果寄存器值。完成一次AD转换。ADC必须经过初始化才能使用。图4.3是ADC初始化流程图。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图4.3 ?AD转换初始化流程图 ? ? ? ? ? 图4.4是AD转换和脉搏计算流程图。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图4.4 ?AD转换脉搏计算流程图 ? 程序代码: /*************************** *AD初始化 ****************************/ void ADC_init(void) { ADC_CONTR = 0x00; ????P1ASF |= (1<<3); ADC_CONTR |= 0x80; //开启ADC电源 ADC_CONTR |= 0x40; //配置转换时间180时钟周期 ????ADC_CONTR |= 0x03; //选择ADC通道3 ????CLK_DIV = 0; ?????//配置ADC结果寄存器ADC_RES + ADC_RESL(2BIT) } /*************************** *AD转换和脉搏计算 ****************************/ void Task_Pulse(void) { ??????u8 adcFlag; u16 adcVal; EA = 0; ??????adcVal = 0; AdcCount = 0; ????while(AdcCount < 5) ????{ ????????ADC_CONTR = 0xcb; //启动 ????????adcFlag = ADC_CONTR; ????????adcFlag &= (1<<4); ????????while(adcFlag == 0) ????????{ ????????????adcFlag = ADC_CONTR; ????????????adcFlag &= (1<<4); ????????} ????????ADC_CONTR = 0xc3; //关闭AD ????????adcVal = ADC_RES; ????????adcVal <<= 2; ????????adcVal += (ADC_RES&0x03); ????????//AdcRes[AdcCount++] = adcVal; ????} EA = 1; ????SortSmallToBig(AdcRes, 5); ????AdcResOk = CalAvg(AdcRes, 5); ????Plus(adcVal); } ? 3.3 液晶显示驱动及显示程序设计 ? ? ? ?LCD1602A液晶模块使用HD44780液晶芯片。HD44780内置了DDRAM、CGROM 和CGRAM。DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:
? ? ? ?1602A液晶第一行16个字符,地址使用了00H-0FH,第二行16个字符,地址是40H-4FH。如果要在第二行第三列显示1,就在42H写入ASKII字符‘1’就可以。 ? ? ? ? 那么,怎么去控制在第二行第三列显示1?,HD44780是提供了11条指令集。 ? ? ? ? 下面举一条清屏指令为例:
? ? ? ?RS控制线是区分命令和数据,RS低电平时,是控制命令,RS高电平时,是显示数据。清屏是控制命令,所以RS低。 ? ? ? ?RW是读写控制,RW低电平,是写入液晶模块,RW高电平时,是读液晶模块数据。清屏是写入液晶模块,所以RW低。 ? ? ? ?D7-D0是数据线数据,清屏是0x01。 ? ? ? ?常用的指令有控制显示模式指令0x06,显示开关0x04,功能设置0x38等。 ? ? ? ?与LCD控制器通信,首先要实现写命令和写数据功能,图4-5是写LCD命令和数据流程图。 ????????????????????????????????????????图4.5 ?写命令(RS=0)和写数据(RS=1)流程图 ? 程序代码: /***写命令***/ void cmd_w(uchar cmd) { ??RW=0; ??RS=0; ??E=1; ??P2=cmd; ??delay(1); ??E=0; } /***写数据***/ void dat_w(uchar dat) { ??RW=0; ??RS=1; ??E=1; ??P2=dat; ??delay(1); ??E=0; } 1602A液晶模块显示前需要初始化,初始化主要是设置LCD的工作状态。图4-6是LCD初始化流程。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图4.6 ?LCD1602初始化流程图 LCD1602A初始化和其他程序代码: /***初始化**/ void Lcd1602_init(void) { ??cmd_w(0x38); ??cmd_w(0x0c); ??cmd_w(0x06); ??cmd_w(0x01); ??cmd_w(0x80); ??? } /***光标定位****/ void gotoxy(uchar x,uchar y) //x是行数,y是列数 { ?if(x==1) ?{cmd_w(0x80+y);} ?else ?{cmd_w(0xc0+y);} } ? void dsp_ch(uchar _ch)?//显示字符 { dat_w(_ch); } ? 3.4 串口通信和GSM发送程序设计 ? ? ? 单片机用串口AT指令控制GSM模块,所以GSM发送程序主要是串口通信程序设计。STC15F2K61S2有2个串口,UART1和UART2。串口1用于程序下载和仿真,所以本设计用串口2和GSM模块通信。 ? ? ? ?串口2和GSM模块通信首先需要初始化串口,串口初始化主要是配置工作模式、设置波特率等。图4-7是串口初始化流程图。 ?????????????????????????????????????????????????????????图4.7 ?串口初始化流程图 ? 串口初始化和通信代码: #define BAUD ?????9600 ?//波特率 #define SYSTEMCLOCK ?11059200L ?//系统时钟频率 static u8 ?*phone_num = "AT+CMGS=\"15815522222\""; //拨打电话,修改这里可以修改拨打的电话。 /************* ?本地变量声明 **************/ u8 Rx_Buf[32]; u8 RxCount = 0; u16 count_Delay; ? void Uart2Init(void) //9600bps@11.05926MHz { ????S2CON = 0x10; ????T2L = (65536 - (SYSTEMCLOCK/4/BAUD)); ??// ????T2H = (65536 - (SYSTEMCLOCK/4/BAUD))>>8; ????AUXR &= (1<<3);//timer ????AUXR |= (1<<2);//fosc ????AUXR |= (1<<4);//TR2 ????IE2 |= 1; //ES2 = 1 } ? /********************* UART2中断函数************************/ void UART2_ISR (void) interrupt 8 { if (S2CON&0x01) { RI = 0; ??????????????????????//清除RI位 Rx_Buf[RxCount] = SBUF; ? ??//将接收到的字符串存到缓存中 RxCount++; ??????????????? ??//缓存指针向后移动 if(RxCount >= 32) ?????? ??//如果缓存满,将缓存指针指向缓存的首地址 { RxCount = 0; } } if (S2CON&0x02) { TI = 0; ?????????????????????????//清除TI位 } } /*---------------------------- UART1 发送串口数据 -----------------------------*/ void UART1_SendData(u8 dat) { ES=0; //关串口中断 SBUF=dat; while(TI!=1); //等待发送成功 TI=0; //清除发送中断标志 ES=1; //开串口中断 } /*---------------------------- UART1 发送字符串 -----------------------------*/ void UART1_SendString(char *s) { while(*s)//检测字符串结束符 { UART1_SendData(*s++);//发送当前字符 } } /********************************************************************* * 函数名 : Second_AT_Command * 描述 ??: 发送AT指令函数 * 输入 ??: 发送数据的指针、希望收到的应答、发送等待时间(单位:interval_time*20 ms) *********************************************************************/ ? u8 UART1_Send_AT_Command(u8 *b,u8 *a,u8 wait_time,u16 interval_time) ???????? { u8 i; ? CLR_Buf(); i = 0; while(i < wait_time) ??????????????????? { UART1_Send_Command(b); delay_ms(interval_time); if(Find(a)) ???????????//查找需要应答的字符 { return 1; } i++; } return 0; } ? 3.5 蜂鸣器驱动及报警程序设计 ? ? ? ? 报警时,蜂鸣器鸣响,单片机P33脚输出4kHz方波。不报警时,P33脚输出低电平。有2种方式可以输出4KHz方波,1、采用单片机PWM输出功能。2、采用定时器定时翻转IO口电平。其效果是一样的。本设计采用定时器定时翻转方式。图4-8是蜂鸣器报警功能流程图。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图4.8 蜂鸣器报警流程图 ? 四、系统调试测试与分析 4.1电路仿真 ? ? ? ? 电路仿真使用Proteus软件,Proteus是一款电路设计和仿真软件。因为Proteus库里面没有脉搏传感器和GSM通讯模块,所以用脉冲发生器代替,GSM通讯模块用串口代替。 ? ? ? ? 脉搏在正常范围内的仿真如图5-1,显示脉搏:60,报警:无。 ?????????????????????????????????????????????????????????图5-1 ?脉搏正常时,仿真图 ? ? ? ? ? 脉搏在低时的仿真如图5-3,显示脉搏:24,报警:Low。 ?????????????????????????????????????????????????????????????????图5-3 ?脉搏低时,仿真图 ? ? ? ? ? ? 脉搏在高时的仿真如图5-5,显示脉搏:133,报警:High。 ??????????????????????????????????????????????????????????图5-5 ?脉搏高时,仿真图 ? ? ? ? ? ? ? ?脉搏高时的串口接收仿真如图5-6,接收脉搏:133,报警:High。 ?????????????????????????????????????????????????图5-6 ?脉搏高时,串口接收仿真图 ? 4.2硬件电路焊接 ? ? ? ?先将单片机STC15F2K61S2、贴片电容、贴片电阻、贴片按键、贴片MOS管等元件焊接到线路板,在将直插电容、稳压集成电路、LED灯、插座、插针等直插元件焊接到线路板。实物如图所示。 ? 4.3系统调试 ? ? ? ?连接电脑,用USB串口线连接程序下载口,将编译好的HEX文件下载到单片机。上电运行程序。显示如图。 ? ? ? ? 手指贴住传感器,用固定带固定,注意不要太紧,进入脉搏测试。显示如图。 ? ? ? ? ? ? ? ? |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 2:49:54- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |