一种短距离无线数据通信的病床呼叫系统*
2018-08-08
(大连科技学院 电气工程学院,大连 116052)
引 言
近年来,全国已经发生多起由于病人遇到突发情况,不能及时向医护人员寻求救助的严重事故,往往错过了最佳治疗的时间,小病变成大病,大病酿成无药可医。因此,一种新型临床无线呼叫仪器的研制成为近些年来的研究热点之一。
nRF24L01是一款由挪威(Nordic)公司生产的新型单片射频收发器件,其工作于2.4~2.5 GHz世界通用ISM频段,工作电压为1.9~3.6 V。可通过SPI写入数据,最高可达10 Mb,数据传输速率最快可达2 Mb,并且具有自动应答和自动再发射功能。芯片融进了增强式ShockBurst技术,其中输出功率和通信频道可通过程序进行配置。该芯片功耗低,在6 dBm功率发射时,工作电流为9 mA,接收时工作电流只有12.3 mA,可选择的掉电模式和空闲模式使其应用设计更为方便。因此将nRF24L01作为无线收发模块,实现病床呼叫系统的无线控制功能。
1 系统方案设计
基于nRF24L01的无线病床呼叫系统主要是由主机和从机组成。从机部分主要完成病床病号的数据采集和数据的传输功能;主机部分主要负责数据的接收、数据处理、显示以及报警。发射与接收电路传输距离可达100 m。当接收到从机发过来的信号时,主机控制蜂鸣器和发光二极管发出声光报警,提醒有病人呼叫,医护人员按下主机的呼应键,取消对应的呼叫。nRF24L01具有自动重发功能、数据包识别及CRC校验功能,增强型ShockBurstTM模式可同时控制应答及重发功能而无需增加MCU的工作量。
系统主要由7部分组成:主控制器、按键模块、无线发送模块、无线接收模块、LCD1602液晶显示模块、声光报警和电源电路。无线病房呼叫系统结构框图如图1所示。
图1 无线病床呼叫系统结构框图
2 硬件模块电路设计
2.1 单片机最小系统
单片机最小系统由单片机STC89C52、复位电路、时钟电路构成,如图2所示。
STC89C52单片机的工作电压范围为4~5.5 V,所以通常给单片机5 V直流电源。连接方式为单片机中的40引脚,VCC接正极5 V,而20引脚VSS接电源地端。复位电路负责确定单片机的工作起始状态,完成单片机的启动过程。时钟电路好比单片机的心脏,它控制着单片机的工作节奏,振荡电路是向单片机提供一个正弦波信号作为基准,其决定单片机的执行速度。XTAL1和XTAL2分别为反向放大器的输入和输出,该反向放大器可以配置为片内振荡器。如采用外部时钟源驱动器件,XTAL2应不接。因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为12 MHz,则一个振荡周期为1/12 μs。
图2 单片机最小系统模块
2.2 无线传输模块
图3 nRF24L01无线发射与接收模块接线图
无线病床呼叫系统的主从机都采用nRF24L01无线传输模块实现通信,电路接法如图3所示,一端作为电能的发射,一端作为电能的接收。
2.3 声光报警模块
图4 声光报警模块
无线病床呼叫系统主机中声光报警电路采用NPN型S8550三极管驱动,当单片机的P1.1~1.3口输出低电平时,三极管的VE>VB>VC>0。三极管的发射结正偏,集电结反偏,三极管饱和导通,此时发光二极管和蜂鸣器发出声光报警,当单片机的P1.1~1.3口输出高电平时,三极管截止,声光报警停止工作。具体电路如图4所示。
3 系统软件实现
3.1 无线发射模块软件设计
首先进行初始化操作,初始化包括设置单片机I/O和SPI相关寄存器,两部分都可以和nRF24L01通信。通过SPI总线配置射频芯片使其进入正确的工作模式,发射数据时,首先将nRF24L01配置为发射模式,接着把发送端待发射数据的目标地址TX-ADDR和数据TX-PLD写入nRF24L01缓冲区,延时后发射数据,其流程图如图5所示。
图5 无线发射模块软件流程图
病床无线呼叫系统从机无线发射模块的SPI写入数据代码如下:
reg为寄存器地址,pBuf为待写入数据地址,uchars写入数据的个数。
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars){
uchar status,i;
CSN=0;
status = SPI_RW(reg);
for(i=0; i SPI_RW(*pBuf++); CSN=1; return status; } uint SPI_RW_Reg(uchar reg, uchar value){ uint status; CSN = 0; // CSN low, init SPI transaction status = SPI_RW(reg); // select register SPI_RW(value); // ..and write value to it.. CSN = 1; // CSN high again return(status); // return nRF24L01 status uchar } void init_NRF24L01(void){ CE=0; // chip enable CSN=1; // Spi disable SCK=0; // Spi clock line init high SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);// 写本地地址 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址 SPI_RW_Reg(WRITE_REG + EN_AA, 0x3f); //频道0自动ACK应答允许 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x3f); //允许接收地址只有频道0 SPI_RW_Reg(WRITE_REG + RF_CH, 0); //设置信道工作为2.4 GHz,收发必须一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为20字节 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //设置发射速率为1 MHz,发射功率为最大值0dB SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送 } void nRF24L01_TxPacket(uchar * tx_buf){ CE=0;//StandBy I模式 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址 SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); //装载数据 CE=1; //置高CE,激发数据发送 Delay(10); SPI_RW_Reg(WRITE_REG+STATUS,0XFF); } 接收数据时,首先将nRF24L01配置为接收模式。接着延迟进入接收状态等待数据的到来。当接收方检测到有效地址和CRC时,就将数据包储存在接收堆栈中,同时状态寄存器中的中断标志位RX-DR置高,产生中断使IRQ引脚变为低电平,以便通知MCU去取数据,其流程图如图6所示。 图6 无线接收模块软件流程图 病床无线呼叫系统主机无线接收模块的SPI读数据代码如下: reg为寄存器地址,pBuf为待写入数据地址,uchars写入数据的个数。 uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars){ uchar status,i; CSN=0; status = SPI_RW(reg); for(i=0;i pBuf[i] = SPI_RW(0); CSN=1; return status; } 经实验,对系统进行了一些动态值的测量,具体结果如表1所列。 表1 数据测试表 从表1中看出接收端与发射端都维持在低功耗,基本达到了设计的初衷,另外收发距离测试精度也达到了设计的要求。3.2 无线接收模块软件设计
4 实验结果
结 语