嵌入式远程医疗监护系统_远程医疗监护系统

其他范文 时间:2020-02-28 22:38:14 收藏本文下载本文
【www.daodoc.com - 其他范文】

嵌入式远程医疗监护系统由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“远程医疗监护系统”。

嵌入式远程医疗监护系统

嵌入式医疗监护系统设计

一、整体设计

MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低耗(具有精简指令集的混合信号处理器(Mixed Signal Proceor)。称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,以提供“单片”解决方案。该系列单片机多应用于需要电池供电的便携式仪器仪表中。MSP430特点

MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7 种源操作数寻址、4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。这些特点保证了可编制出高效率的源程序。

MSP430 系列单片机能在25MHz晶体的驱动下,实现40ns的指令周期。16位的数据宽度、40ns的指令周期以及多功能的硬件乘法器(能实现乘加运算)相配合,能实现数字信号处理的某些算法(如 FFT 等)。

MSP430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压和灵活而可控的运行时钟方面都有其独到之处。

首先,MSP430 系列单片机的电源电压采用的是1.8-3.6V 电压。因而可使其在1MHz 的时钟条件下运行时,芯片的电流最低会在165μA左右,RAM 保持模式下的最低功耗只有0.1μA。

其次,独特的时钟系统设计。在 MSP430 系列中有两个不同的时钟系统:基本时钟系统、锁频环(FLL 和FLL+)时钟系统和DCO数字振荡器时钟系统。可以只使用一个晶体振荡器(32768Hz),也可以使用两个晶体振荡器。由系统时钟系统产生 CPU 和各功能所需的时钟。并且这些时钟可以在指令的控制下,打开和关闭,从而实现对总体功耗的控制。

由于系统运行时开启的功能模块不同,即采用不同的工作模式,芯片的功耗有着显著的不同。在系统中共有一种活动模式(AM)和五种低功耗模式(LPM0~LPM4)。在实时时钟模式下,可达2.5μA,在RAM 保持模式下,最低可达0.1μA。

MSP430 系列单片机的各系列都集成了较丰富的片内外设。它们分别是看门狗(WDT)、模拟比较器A、定时器A0(Timer_A0)、定时器A1(Timer_A1)、定时器B0(Timer_B0)、UART、SPI、I2C、硬件乘法器、液晶驱动器、10位/12位ADC、16位Σ-Δ ADC、DMA、I/O端口、基本定时器(Basic Timer)、实时时钟(RTC)和USB控制器等若干外围模块的不同组合。其中,看门狗可以使程序失控时迅速复位;模拟比较器进行模拟电压的比较,配合定时器,可设计出 A/D 转换器;16 位定时器(Timer_A 和 Timer_B)具有捕获/比较功能,大量的捕获/比较寄存器,可用于事件计数、时序发生、PWM 等;有的器件更具有可实现异步、同步及多址访问串行通信接口可方便的实现多机通信等应用;具有较多的 I/O 端口,P0、P1、P2 端口能够接收外部上升沿或下降沿的中断输入;10/12位硬件 A/D 转换器有较高的转换速率,嵌入式远程医疗监护系统

最高可达200kbps,能够满足大多数数据采集应用;能直接驱动液晶多达 160 段;实现两路的 12 位 D/A 转换;硬件I2C串行总线接口实现存储器串行扩展;以及为了增加数据传输速度,而采用的DMA模块。MSP430 系列单片机的这些片内外设为系统的单片解决方案提供了极大的方便。

另外,MSP430 系列单片机的中断源较多,并且可以任意嵌套,使用时灵活方便。当系统处于省电的低功耗状态时,中断唤醒只需5μs。

MSP430 系列有 OPT 型、FLASH 型和 ROM 型三种类型的器件,这些器件的开发手段不同。对于 OPT 型和 ROM 型的器件是使用仿真器开发成功之后烧写或掩膜芯片;对于 FLASH 型则有十分方便的开发调试环境,因为器件片内有 JTAG 调试接口,还有可电擦写的 FLASH 存储器,因此采用先下载程序到 FLASH 内,再在器件内通过软件控制程序的运行,由 JTAG 接口读取片内信息供设计者调试使用的方法进行开发。这种方式只需要一台 PC 机和一个 JTAG 调试器,而不需要仿真器和编程器。开发语言有汇编语言和 C 语言。

考虑以上原因,我们决定采用该型号单片机为本系统的微处理器。

二、温度采集芯片 18B20 DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

1、DS18B20产品的特点

(1)、只要求一个端口即可实现通信。

(2)、在DS18B20中的每个器件上都有独一无二的序列号。

(3)、实际应用中不需要外部任何元器件即可实现测温。

(4)、测量温度范围在-55。C到+125。C之间。

(5)、数字温度计的分辨率用户可以从9位到12位选择。(6)、内部有温度上、下限告警设置。2. DS18B20的使用方法

由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。

DS18B20的复位时序

DS18B20的读时序

对于DS18B20的读时序分为读0时序和读1时序两个过程。

对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。

嵌入式远程医疗监护系统

DS18B20的写时序

对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。

综合各方原因我们采用该芯片模拟所有医用传感器,来完成整个系统设计。

三、无线模块 NRF2401 nRF2401是单片射频收发芯片,工作于2.4~2.5GHz ISM频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。芯片能耗非常低,以-5dBm的功率发射时,工作电流只有10.5mA,接收时工作电流只有18mA,多种低功率工作模式,节能设计更方便。其DuoCeiverTM技术使nRF2401可以使用同一天线,同时接收两个不同频道的数据。nRF2401适用于多种无线通信的场合,如无线数据传输系统、无线鼠标、遥控开锁、遥控玩具等。nRF2401内置地址解码器、先入先出堆栈区、解调处理器、时钟处理器、GFSK滤波器、低噪声放大器、频率合成器,功率放大器等功能模块,需要很少的外围元件,因此使用起来非常方便。QFN24引脚封装,外形尺寸只有5×5mm。

nRF2401的收发模式有ShockBurstTM收发模式和直接收发模式两种,收发模式由器件配置字决定,具体配置将在器件配置部分详细介绍。

ShockBurstTM收发模式

ShockBurstTM收发模式下,使用片内的先入先出堆栈区,数据低速从微控制器送入,但高速(1Mbps)发射,这样可以尽量节能,因此,使用低速的微控制器也能得到很高的射频数据发射速率。与射频协议相关的所有高速信号处理都在片内进行,这种做法有三大好处:尽量节能;低的系统费用(低速微处理器也能进行高速射频发射);数据在空中停留时间短,抗干扰性高。nRF2401的ShockBurstTM技术同时也减小了整个系统的平均工作电流。

在ShockBurstTM收发模式下,nRF2401自动处理字头和CRC校验码。在接收数据时,自动把字头和CRC校验码移去。在发送数据时,自动加上字头和CRC校验码,当发送过程完成后,数据准备好引脚通知微处理器数据发射完毕。

ShockBurstTM发射流程

接口引脚为CE,CLK1,DATA

A.当微控制器有数据要发送时,其把CE置高,使nRF2401工作;

B.把接收机的地址和要发送的数据按时序送入nRF2401;

C.微控制器把CE置低,激发nRF2401进行ShockBurstTM发射;

D.nRF2401的ShockBurstTM发射

给射频前端供电;

射频数据打包(加字头、CRC校验码);

高速发射数据包;

发射完成,nRF2401进入空闲状态。

嵌入式远程医疗监护系统

ShockBurstTM接收流程

接口引脚CE、DR1、CLK1和DATA(接收通道1)

A.配置本机地址和要接收的数据包大小;

B.进入接收状态,把CE置高;

C.200us后,nRF2401进入监视状态,等待数据包的到来;

D.当接收到正确的数据包(正确的地址和CRC校验码),nRF2401自动把字头、地址和CRC校验位移去;

E.nRF2401通过把DR1(这个引脚一般引起微控制器中断)置高通知微控制器;

F.微控制器把数据从nRF2401移出;

G.所有数据移完,nRF2401把DR1置低,此时,如果CE为高,则等待下一个数据包,如果CE为低,开始其它工作流程。

直接收发模式

在直接收发模式下,nRF2401如传统的射频收发器一样工作。

直接发送模式

接口引脚为CE、DATA

A.当微控制器有数据要发送时,把CE置高;

B.nRF2401射频前端被激活;

C.所有的射频协议必须在微控制器程序中进行处理(包括字头、地址和CRC校验码)。

直接接收模式

接口引脚为CE、CLK1和DATA

A.一旦nRF2401被配置为直接接收模式,DATA引脚将根据天线接收到的信号开始高低变化(由于噪声的存在);

B.CLK1引脚也开始工作;

C.一旦接收到有效的字头,CLK1引脚和DATA引脚将协调工作,把射频数据包以其被发射时的数据从DATA引脚送给微控制器;

D.这头必须是8位;

E.DR引脚没用上,所有的地址和CRC校验必须在微控制器内部进行。

配置模式

在配置模式,15字节的配置字被送到nRF2401,这通过CS、CLK1和DATA三个引脚完成,具体的配置方法请参考本文的器件配置部分。

空闲模式

nRF2401的空闲模式是为了减小平均工作电流而设计,其最大的优点是,实现节能的同时,缩短芯片的起动时间。在空闲模式下,部分片内晶振仍在工作,此时的工

嵌入式远程医疗监护系统

作电流跟外部晶振的频率有关,如外部晶振为4MHz时工作电流为12uA,外部晶振为16MHz时工作电流为32uA。在空闲模式下,配置字的内容保持在nRF2401片内。

关机模式

在关机模式下,为了得到最小的工作电流,一般此时的工作电流小于1uA。关机模式下,配置字的内容也会被保持在nRF2401片内,这是该模式与断电状态最大的区别。

nRF2401的所有配置工作都是通过CS、CLK1和DATA三个引脚完成,把其配置为ShockBurstTM收发模式需要15字节的配置字,而如把其配置为直接收发模式只需要2字节的配置字。由上文对nRF2401工作模式的介绍,我们可以知道,nRF2401一般工作于ShockBurstTM收发模式,这样,系统的程序编制会更加简单,并且稳定性也会更高,因此,下文着重介绍把nRF2401配置为ShockBurstTM收发模式的器件配置方法。

ShockBurstTM的配置字使nRF2401能够处理射频协议,在配置完成后,在nRF2401工作的过程中,只需改变其最低一个字节中的内容,以实现接收模式和发送模式之间切换。ShockBurstTM的配置字可以分为以下四个部分:

数据宽度:声明射频数据包中数据占用的位数。这使得nRF2401能够区分接收数据包中的数据和CRC校验码;

地址宽度:声明射频数据包中地址占用的位数。这使得nRF2401能够区分地址和数据;

地址:接收数据的地址,有通道1的地址和通道2的地址;

CRC:使nRF2401能够生成CRC校验码和解码。

当使用nRF2401片内的CRC技术时,要确保在配置字中CRC校验被使能,并且发送和接收使用相同的协议。

在配置模式下,注意保证PWR_UP引脚为高电平,CE引脚为低电平。配置字从最高位开始,依次送入nRF2401。在CS引脚的下降沿,新送入的配置字开始工作。PCB设计

PCB设计对nRF2401的整体性能影响很大,所以PCB设计在nRF2401收发系统的开发过程中主要的工作之一,在PCB设计时,必须考虑到各种电磁干扰,注意调整电阻、电容和电感的位置,特别要注意电容的位置。

nRF2401的PCB一般都是双层板,底层一般不放置元件,为地层,顶层的空余地方一般都敷上铜,这些敷铜通过过孔与底层的地相连。直流电源及电源滤波电容尽量靠近VDD引脚。nRF2401的供电电源应通过电容隔开,这样有利于给nRF2401提供稳定的电源。在PCB中,尽量多打一些通孔,使顶层和底层的地能够充分接触。

nRF2401通过ShockBurstTM收发模式进行无线数据发送,收发可靠,其外形尺寸小,需要的外围元器件也少,因此,使用方便,在工业控制、消费电子等各个领域都具有广阔的应用前景。

由于2401的诸多优点,我们决定选用此芯片完成无线部分。至此我们已经完成整体设计。

嵌入式远程医疗监护系统

二、软件部分

接收程序:

#include “msp430.h” #include “cry1602.h” typedef unsigned char uchar;typedef unsigned intuint;

/**************宏定义***************/ #define DataDir P4DIR #define DataPort P4OUT

#define Busy 0x80 #define CtrlDir P3DIR #define CLR_RS P3OUT&=~BIT0;//RS = P3.0 #define SET_RS P3OUT|=BIT0;

#define CLR_RW P3OUT&=~BIT1;//RW = P3.1 #define SET_RW P3OUT|=BIT1;

#define CLR_EN P3OUT&=~BIT2;//EN = P3.2 #define SET_EN P3OUT|=BIT2;

/*********************************************** 函数名称:DispStr 功 能:让液晶从某个位置起连续显示一个字符串 参 数:x--位置的列坐标 y--位置的行坐标 ptr--指向字符串存放位置的指针 返回值 :无

***********************************************/ voidDispStr(ucharx,uchary,uchar *ptr){ uchar *temp;uchari,n = 0;

temp = ptr;while(*ptr++!= '')n++;//计算字符串有效字符的个数

for(i=0;i

嵌入式远程医疗监护系统

} /******************************************* 函数名称:DispNchar 功 能:让液晶从某个位置起连续显示N个字符 参 数:x--位置的列坐标 y--位置的行坐标 n--字符个数

ptr--指向字符存放位置的指针 返回值 :无

********************************************/ voidDispNChar(ucharx,uchar y, ucharn,uchar *ptr){ uchari;

for(i=0;i

********************************************/ voidLocateXY(ucharx,uchar y){ uchar temp;

temp = x&0x0f;y&= 0x01;if(y)temp |= 0x40;//如果在第2行 temp |= 0x80;

LcdWriteCommand(temp,1);} /******************************************* 函数名称:Disp1Char

嵌入式远程医疗监护系统

功 能:在某个位置显示一个字符 参 数:x--位置的列坐标 y--位置的行坐标

data--显示的字符数据 返回值 :无

********************************************/ void Disp1Char(ucharx,uchary,uchar data){ LocateXY(x, y);

LcdWriteData(data);

} /******************************************* 函数名称:LcdReset 功 能:对1602液晶模块进行复位操作 参 数:无 返回值 :无

********************************************/ voidLcdReset(void){ CtrlDir |= 0x07;//控制线端口设为输出状态 DataDir = 0xFF;//数据端口设为输出状态

LcdWriteCommand(0x38, 0);//规定的复位操作 Delay5ms();LcdWriteCommand(0x38, 0);

Delay5ms();LcdWriteCommand(0x38, 0);Delay5ms();

LcdWriteCommand(0x38, 1);//显示模式设置 LcdWriteCommand(0x08, 1);//显示关闭 LcdWriteCommand(0x01, 1);//显示清屏

LcdWriteCommand(0x06, 1);//写字符时整体不移动

LcdWriteCommand(0x0c, 1);//显示开,不开游标,不闪烁 } /******************************************* 函数名称:LcdWriteCommand 功 能:向液晶模块写入命令 参 数:cmd--命令,chk--是否判忙的标志,1:判忙,0:不判 返回值 :无

********************************************/ voidLcdWriteCommand(ucharcmd,ucharchk){

嵌入式远程医疗监护系统

if(chk)WaitForEnable();// 检测忙信号?

CLR_RS;CLR_RW;_NOP();

DataPort = cmd;//将命令字写入数据端口 _NOP();

SET_EN;//产生使能脉冲信号 _NOP();_NOP();CLR_EN;

}

/******************************************* 函数名称:LcdWriteData 功 能:向液晶显示的当前地址写入显示数据 参 数:data--显示字符数据 返回值 :无

********************************************/ voidLcdWriteData(uchar data){ WaitForEnable();//等待液晶不忙

SET_RS;CLR_RW;_NOP();

DataPort = data;//将显示数据写入数据端口 _NOP();

SET_EN;//产生使能脉冲信号 _NOP();_NOP();CLR_EN;

} /******************************************* 函数名称:WaitForEnable 功 能:等待1602液晶完成内部操作 参 数:无 返回值 :无

********************************************/

嵌入式远程医疗监护系统

voidWaitForEnable(void){ P4DIR &= 0x00;//将P4口切换为输入状态

CLR_RS;SET_RW;_NOP();SET_EN;_NOP();_NOP();

while((P4IN & Busy)!=0);//检测忙标志

CLR_EN;

P4DIR |= 0xFF;//将P4口切换为输出状态 }

/******************************************* 函数名称:Delay5ms 功 能:延时约5ms 参 数:无 返回值 :无

********************************************/ void Delay5ms(void){ uinti=40000;while(i!= 0){ i--;} } 发送程序:

#include typedef unsigned char uchar;typedef unsigned intuint;

#define DQ1 P2OUT |= BIT4 #define DQ0 P2OUT &= ~BIT4 #define DQ_in P2DIR &= ~BIT4 #define DQ_out P2DIR |= BIT4 #define DQ_val(P2IN & BIT4)

/*******************************************

嵌入式远程医疗监护系统

函数名称:DelayNus 功 能:实现N个微秒的延时 参 数:n--延时长度 返回值 :无

说明 :定时器A的计数时钟是1MHz,CPU主频8MHz 所以通过定时器延时能够得到极为精确的 us级延时

********************************************/ voidDelayNus(uint n){ CCR0 = n;TACTL |= MC_1;//增计数到CCR0 while(!(TACTL & BIT0));//等待

TACTL &= ~MC_1;//停止计数

TACTL &= ~BIT0;//清除中断标志 } /******************************************* 函数名称:Init_18B20 功 能:对DS18B20进行复位操作 参 数:无

返回值 :初始化状态标志:1--失败,0--成功 ********************************************/ uchar Init_18B20(void){ uchar Error;

DQ_out;_DINT();DQ0;DelayNus(500);DQ1;DelayNus(55);DQ_in;_NOP();if(DQ_val){ Error = 1;//初始化失败 } else { Error = 0;//初始化成功 } DQ_out;DQ1;

嵌入式远程医疗监护系统

_EINT();

DelayNus(400);

return Error;} /******************************************* 函数名称:Write_18B20 功 能:向DS18B20写入一个字节的数据 参 数:wdata--写入的数据 返回值 :无

********************************************/ void Write_18B20(ucharwdata){ uchari;

_DINT();for(i = 0;i>= 1;DelayNus(50);//延时50us DQ1;DelayNus(10);//延时10us } _EINT();} /******************************************* 函数名称:Read_18B20 功 能:从DS18B20读取一个字节的数据 参 数:无

返回值 :读出的一个字节数据

********************************************/ uchar Read_18B20(void){ uchari;uchar temp = 0;

_DINT();for(i = 0;i

嵌入式远程医疗监护系统

temp>>= 1;DQ0;DelayNus(6);//延时6us DQ1;DelayNus(8);//延时9us DQ_in;_NOP();if(DQ_val)temp |= 0x80;DelayNus(45);//延时45us DQ_out;DQ1;DelayNus(10);//延时10us } _EINT();

return temp;}

/******************************************* 函数名称:Skip 功 能:发送跳过读取产品ID号命令 参 数:无 返回值 :无

********************************************/ void Skip(void){ Write_18B20(0xcc);} /******************************************* 函数名称:Convert 功 能:发送温度转换命令 参 数:无 返回值 :无

********************************************/ void Convert(void){ Write_18B20(0x44);} /******************************************* 函数名称:Read_SP 功 能:发送读ScratchPad命令 参 数:无 返回值 :无

********************************************/

嵌入式远程医疗监护系统

voidRead_SP(void){ Write_18B20(0xbe);} /******************************************* 函数名称:ReadTemp 功 能:从DS18B20的ScratchPad读取温度转换结果 参 数:无

返回值 :读取的温度数值

********************************************/ uintReadTemp(void){ uchartemp_low;uint temp;

temp_low = Read_18B20();//读低位 temp = Read_18B20();//读高位 temp =(temp

return temp;} /******************************************* 函数名称:ReadTemp 功 能:控制DS18B20完成一次温度转换 参 数:无

返回值 :测量的温度数值

********************************************/ uint Do1Convert(void){ uchari;do { i = Init_18B20();} while(i);Skip();Convert();for(i = 20;i > 0;i--)DelayNus(60000);//延时800ms以上 do { i = Init_18B20();}

嵌入式远程医疗监护系统

while(i);Skip();Read_SP();returnReadTemp();} 附:为方便排版,故将硬件连接以照片形式上交。故此处略去该部分图片。

浙大远程 嵌入式系统第4次

《嵌入式系统》作业四一、判断题1.X86 CPU有8位、16位、32位通用寄存器各8个,共能存储448位数据。× 2.状态寄存器的SF标志位是进位标志。×3.超线程技术和多线程技术原理一......

浙大远程嵌入式系统第8次

《嵌入式系统》作业八一、判断题1.对于软实时系统来说,它的时间有求有一个确定的底线(deadline),超出底线的响应属于错误的结果,系统将会崩溃。×2.wind内核任务切换开销非常低,并......

浙大远程嵌入式系统第9次

《嵌入式系统》作业九一、判断题1.GUI是指用户图形接口,是计算机与其使用者之间的对话接口,是计算机系统的重要组成部分。√2.GUI系统涉及到的主要技术有事件驱动、输出显示和......

浙大远程嵌入式系统第1次

《嵌入式系统》作业一一、判断题1.Linux 内核稳定、功能强大并且可以裁减,因为非常适合嵌入式应用。√2.Linux 内核的中断服务程序运行于与所有进程都无关的中断上下文中。√......

浙大远程 嵌入式系统第2次

《嵌入式系统》作业二一、判断1.嵌入式系统由上到下主要分为3个层次:应用软件层,系统软件层,硬件层。× 2.嵌入式系统的软硬件是独立设计的。× 3.嵌入式系统设计需要建立交叉......

下载嵌入式远程医疗监护系统word格式文档
下载嵌入式远程医疗监护系统.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文