IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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 方案流程设计

62e7567169274aa1b333fd9ae183b5a5.png

1.2 技术规格书设计

1.?脉搏信号由光电脉搏传感器模块进行采集;采集后的信号经过放大(滤除50HZ信号的干扰),进行整形后,得到幅值在0~5v的脉冲信号。

2.脉冲信号输入单片机,单片机处理相关数据并在LCD液晶显示。

3.有报警信息,报警信息通过GSM模块发送给指定手机。

4、按键可以设置报警值。

776243d1c7a044649a5cd3db1866a141.png

?

?

二、原理图和PCBA版图设计及解析2581c394a9e24bf49fc6742f403f83f6.png

?

?

2.1微处理控制电路

? ? ? 单片机是系统的核心,单片机电路一般有复位电路、晶振时钟电路等,本设计采用宏晶公司IAP15F2K61S2单片机芯片,其内部有上电复位电路和内部时钟电路,所以设计省去外部复位电路和外部晶振。设计采用LQFP32封装,电路图如图3.1所示:

?

?

e005e9e1c6f24724897b1324ccfe78a2.png

??????????????????????????????????????????????????????????????图3.1 微控制器电路

?

2.2脉搏传感器电路

? ? ? ?脉搏传感器以一体化模块方式,其模块自身有信号采集、放大和处理电路,所以和单片机接口比较简单。设计采用一个3脚插座形式连接传感器。1脚是脉搏模拟信号输出脚,连接单片机AD转换口,2脚是传感器供电脚,连接VCC5V电压,3脚接地。手指未接触传感器时,输出固定电压2.5V,当手指接触传感器时,由于脉搏跳动,手指血液浓度不同,光电传感器输出高低感应信号,经放大处理后,在传感器模块1脚输出类似三角波的波形。模块输出模拟信号,电路如图3-2:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

b4cf4c93d8e946319caac06bc8bf8368.png

???????????????????????????????????????????????????????????????图3.2 脉搏传感器电路????????

?

2.3 LCD显示电路

? ? ? ?液晶显示是LCD1602A模块,LCD1602A模块自身有LCD驱动集成电路(HD44780液晶芯片)电源电路等,与LCD模块接口是16脚插座,电路如图3.3:

1cc2f6ae833a428e89102bfbef18784c.png

?????????????????????????????????????????????????????????图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:

f5977b1b34784d459bddfc2cf83525b5.png

????????????????????????????????????????????????????????????????????图3.4按键电路图?

?

2.5 ?LED指示报警电路

? ? ? LED指示报警电路连接单片机P32,正常工作时,P32输出高电平,点亮LED。当报警时,P32输出1HZ方波,使单片机闪烁显示。电路如图3.5。

45e0734a54404cfa99daddc6ad00c268.png

?????????????????????????????????????????????????????????????????图3.5 LED灯电路图

?

2.6蜂鸣器驱动电路

? ? ? ?蜂鸣器连接单片机P33口,单片机IO口驱动能力有限,所以加三极管驱动电路,R3是限流电阻。采用无源蜂鸣器,蜂鸣器不响时,P33口输出低电平,Q1不导通,没有电流流过蜂鸣器,P33口输出4KHz方波时,Q1在P33高电平时导通,低电平时不导通。蜂鸣器流过电流也是4KHz,所以蜂鸣器响。R10可以调节流过蜂鸣器电流大小,即调节蜂鸣器声音大小。电路如图3.6。

bf5ac45ffb9a4ae291007de787e83640.png

????????????????????????????????????????????????????????????图3.6 蜂鸣器驱动电路图

?

2.7 GSM电路

? ? ? ? 设计采用GA6-B通信模块,模块已经集成了射频天线、SIM卡,GSM模块和单片机接口只是串口。由于GSM模块的IO口是3.3V,不能直接和单片机5V的IO口连接,需要电平转换电路。TXD2、RXD2连接单片机串口,U_RXD、U_TXD连接模块串口。接口电路如图3.7:

2f0e3af458334e93932d5d2c204811a0.png

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图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。

9041e76ab0114125bfabacac0e2152f8.png

???????????????????????????????????????????????????????????????图3.8 7805稳压电路

GSM模块接口电平是3.3V,所以需要3.3V电源。设计采用AMS1117稳压电路,电路如图3.9。

0c4fc7c4262f4be1bf5522151560e429.png

?????????????????????????????????????????????????????????图3.9 ?AMS1117稳压电路

?

三、软件编写及调试

?3.1 主程序设计

? ? ? ?脉搏测试和报警系统完成的功能有:1、脉搏传感器输入模拟信号进行AD转换,得到数字化的脉搏数据,对转换得到的数据进行分析和计算,得到脉搏值。2、脉搏值和设置的上下限比较,超过正常值就声光报警。3、液晶显示脉搏值和报警信息。4、报警时,GSM模块发送短信到指定的手机。5、按键设置报警上下限。

? ? ? ?软件设计就是编写计算机程序,常用的单片机编程语言有汇编语言和C语言,汇编语言是底层机器语言,适合于编写简单功能程序。目前已经很少使用汇编语言设计应用程序。本设计使用C语言,C语言是高级语言一种,它不但有高级语言的设计容易,易读懂,可移植性还有它能对底层寄存器操作,兼顾了汇编语言的功能,所以非常适合单片机编程。

? ? ? ? 系统上电后,首先关闭总中断,然后对芯片内部AD初始化,定时器初始化,LCD显示初始化,通信模块初始化,完成初始化后,打开总中断。后面循环执行LCD显示程序,AD转换程序,计算程序,按键扫描和处理程序,蜂鸣器报警程序,LED报警程序,GSM模块发送程序。图4-1主程序流程图。

cfd59d0580cd408b83e83f9aed26561e.png

?????????????????????????????????????????????????????????????????图4.1 ?主程序

?

3.2 脉搏AD转换程序和计算程序设计

? ? ? ?脉搏数就是一分钟心跳次数,脉搏一般是在60-120之间。也就是每分钟跳动60次到120次,脉搏传感器输出就是跳动周期的脉冲波,二个波峰之间的时间就是脉搏跳动时间,按1分钟60次计算,1秒钟一次,也就是每1秒会出现峰值,按20毫秒采样一次AD值,采样50个值进行比较,就可以得到脉搏峰值,计算2次峰值时间差,然后60000除以时间差,就计算出脉搏值。

? ? ? ?STC15F2K61S2内部集成了AD转换器,所以直接使用内部AD转换器。图4-2是AD转换内部框图。

ed19d0ffa51f4370a4445ca962cf37d9.png

?????????????????????????????????????????????????????????图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初始化流程图。

26496de4e98c41cd8895fd92e4e00740.png

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图4.3 ?AD转换初始化流程图

?

? ? ? ? 图4.4是AD转换和脉搏计算流程图。

95cc8397ebc94ad0a54813cbd7e1e6b9.png

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图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个字节,其地址和屏幕的对应关系如下表:

?

显示位置

1

2

3

4

5

6

40

DDRAM

地址

第一行

00H

01H

02H

03H

04H

05H

27H

第二行

40H

41H

42H

43H

44H

45H

67H

? ? ? ?1602A液晶第一行16个字符,地址使用了00H-0FH,第二行16个字符,地址是40H-4FH。如果要在第二行第三列显示1,就在42H写入ASKII字符‘1’就可以。

? ? ? ? 那么,怎么去控制在第二行第三列显示1?,HD44780是提供了11条指令集。

? ? ? ? 下面举一条清屏指令为例:

指令功能

RS

RW

D7

D6

D5

D4

D3

D2

D1

D0

清屏

0

0

0

0

0

0

0

0

0

1

? ? ? ?RS控制线是区分命令和数据,RS低电平时,是控制命令,RS高电平时,是显示数据。清屏是控制命令,所以RS低。

? ? ? ?RW是读写控制,RW低电平,是写入液晶模块,RW高电平时,是读液晶模块数据。清屏是写入液晶模块,所以RW低。

? ? ? ?D7-D0是数据线数据,清屏是0x01。

? ? ? ?常用的指令有控制显示模式指令0x06,显示开关0x04,功能设置0x38等。

? ? ? ?与LCD控制器通信,首先要实现写命令和写数据功能,图4-5是写LCD命令和数据流程图。

c6d99a25475f4060b9ea0aeef09903ee.png

????????????????????????????????????????图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初始化流程。

58d1ed5b072649f295e25498976f8028.png

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图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是串口初始化流程图。

26d00040543149c5abdce0291b727a38.png

?????????????????????????????????????????????????????????图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是蜂鸣器报警功能流程图。

a91231d7494d4012a0ebf2616054e1f0.png

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?图4.8 蜂鸣器报警流程图

?

四、系统调试测试与分析

4.1电路仿真

? ? ? ? 电路仿真使用Proteus软件,Proteus是一款电路设计和仿真软件。因为Proteus库里面没有脉搏传感器和GSM通讯模块,所以用脉冲发生器代替,GSM通讯模块用串口代替。

? ? ? ? 脉搏在正常范围内的仿真如图5-1,显示脉搏:60,报警:无。

654c4df751be4b64a29f8b478a81729b.png

?????????????????????????????????????????????????????????图5-1 ?脉搏正常时,仿真图

?

? ? ? ? 脉搏在低时的仿真如图5-3,显示脉搏:24,报警:Low。

c0fe731fbd324d7d96cce3b242a06077.png

?????????????????????????????????????????????????????????????????图5-3 ?脉搏低时,仿真图

?

? ? ? ? ? 脉搏在高时的仿真如图5-5,显示脉搏:133,报警:High。

67cc6ac1a61540d68dfffbfd611e192b.png

??????????????????????????????????????????????????????????图5-5 ?脉搏高时,仿真图

?

? ? ? ? ? ? ?脉搏高时的串口接收仿真如图5-6,接收脉搏:133,报警:High。

581eff32ea1d45e9bd7bc642fc0adc33.png

?????????????????????????????????????????????????图5-6 ?脉搏高时,串口接收仿真图

?

4.2硬件电路焊接

? ? ? ?先将单片机STC15F2K61S2、贴片电容、贴片电阻、贴片按键、贴片MOS管等元件焊接到线路板,在将直插电容、稳压集成电路、LED灯、插座、插针等直插元件焊接到线路板。实物如图所示。

a54ab7d40d13463c915581b3ef6f2d40.png

?

4.3系统调试

? ? ? ?连接电脑,用USB串口线连接程序下载口,将编译好的HEX文件下载到单片机。上电运行程序。显示如图。

4cb28608067d46b0a5000f90f537182e.png

? ? ? ? 手指贴住传感器,用固定带固定,注意不要太紧,进入脉搏测试。显示如图。

71e70ec64de94aeeac70493f6d9f01e9.png

1e0f0f42a3604c34ae30f406dded22f0.png

?

?

?

?

?

?

?

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:14:20  更:2022-10-31 12:14:36 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计