(大連科技學院 電氣工程學院,大連 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作為無線收發模塊,實現病床呼叫系統的無線控制功能。
基于nRF24L01的無線病床呼叫系統主要是由主機和從機組成。從機部分主要完成病床病號的數據采集和數據的傳輸功能;主機部分主要負責數據的接收、數據處理、顯示以及報警。發射與接收電路傳輸距離可達100 m。當接收到從機發過來的信號時,主機控制蜂鳴器和發光二極管發出聲光報警,提醒有病人呼叫,醫護人員按下主機的呼應鍵,取消對應的呼叫。nRF24L01具有自動重發功能、數據包識別及CRC校驗功能,增強型ShockBurstTM模式可同時控制應答及重發功能而無需增加MCU的工作量。
系統主要由7部分組成:主控制器、按鍵模塊、無線發送模塊、無線接收模塊、LCD1602液晶顯示模塊、聲光報警和電源電路。無線病房呼叫系統結構框圖如圖1所示。

圖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 單片機最小系統模塊

圖3 nRF24L01無線發射與接收模塊接線圖
無線病床呼叫系統的主從機都采用nRF24L01無線傳輸模塊實現通信,電路接法如圖3所示,一端作為電能的發射,一端作為電能的接收。

圖4 聲光報警模塊
無線病床呼叫系統主機中聲光報警電路采用NPN型S8550三極管驅動,當單片機的P1.1~1.3口輸出低電平時,三極管的VE>VB>VC>0。三極管的發射結正偏,集電結反偏,三極管飽和導通,此時發光二極管和蜂鳴器發出聲光報警,當單片機的P1.1~1.3口輸出高電平時,三極管截止,聲光報警停止工作。具體電路如圖4所示。
首先進行初始化操作,初始化包括設置單片機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 實驗結果

結 語
