(大連科技學(xué)院 電氣工程學(xué)院,大連 116052)
近年來(lái),全國(guó)已經(jīng)發(fā)生多起由于病人遇到突發(fā)情況,不能及時(shí)向醫(yī)護(hù)人員尋求救助的嚴(yán)重事故,往往錯(cuò)過(guò)了最佳治療的時(shí)間,小病變成大病,大病釀成無(wú)藥可醫(yī)。因此,一種新型臨床無(wú)線(xiàn)呼叫儀器的研制成為近些年來(lái)的研究熱點(diǎn)之一。
nRF24L01是一款由挪威(Nordic)公司生產(chǎn)的新型單片射頻收發(fā)器件,其工作于2.4~2.5 GHz世界通用ISM頻段,工作電壓為1.9~3.6 V??赏ㄟ^(guò)SPI寫(xiě)入數(shù)據(jù),最高可達(dá)10 Mb,數(shù)據(jù)傳輸速率最快可達(dá)2 Mb,并且具有自動(dòng)應(yīng)答和自動(dòng)再發(fā)射功能。芯片融進(jìn)了增強(qiáng)式ShockBurst技術(shù),其中輸出功率和通信頻道可通過(guò)程序進(jìn)行配置。該芯片功耗低,在6 dBm功率發(fā)射時(shí),工作電流為9 mA,接收時(shí)工作電流只有12.3 mA,可選擇的掉電模式和空閑模式使其應(yīng)用設(shè)計(jì)更為方便。因此將nRF24L01作為無(wú)線(xiàn)收發(fā)模塊,實(shí)現(xiàn)病床呼叫系統(tǒng)的無(wú)線(xiàn)控制功能。
基于nRF24L01的無(wú)線(xiàn)病床呼叫系統(tǒng)主要是由主機(jī)和從機(jī)組成。從機(jī)部分主要完成病床病號(hào)的數(shù)據(jù)采集和數(shù)據(jù)的傳輸功能;主機(jī)部分主要負(fù)責(zé)數(shù)據(jù)的接收、數(shù)據(jù)處理、顯示以及報(bào)警。發(fā)射與接收電路傳輸距離可達(dá)100 m。當(dāng)接收到從機(jī)發(fā)過(guò)來(lái)的信號(hào)時(shí),主機(jī)控制蜂鳴器和發(fā)光二極管發(fā)出聲光報(bào)警,提醒有病人呼叫,醫(yī)護(hù)人員按下主機(jī)的呼應(yīng)鍵,取消對(duì)應(yīng)的呼叫。nRF24L01具有自動(dòng)重發(fā)功能、數(shù)據(jù)包識(shí)別及CRC校驗(yàn)功能,增強(qiáng)型ShockBurstTM模式可同時(shí)控制應(yīng)答及重發(fā)功能而無(wú)需增加MCU的工作量。
系統(tǒng)主要由7部分組成:主控制器、按鍵模塊、無(wú)線(xiàn)發(fā)送模塊、無(wú)線(xiàn)接收模塊、LCD1602液晶顯示模塊、聲光報(bào)警和電源電路。無(wú)線(xiàn)病房呼叫系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 無(wú)線(xiàn)病床呼叫系統(tǒng)結(jié)構(gòu)框圖
單片機(jī)最小系統(tǒng)由單片機(jī)STC89C52、復(fù)位電路、時(shí)鐘電路構(gòu)成,如圖2所示。
STC89C52單片機(jī)的工作電壓范圍為4~5.5 V,所以通常給單片機(jī)5 V直流電源。連接方式為單片機(jī)中的40引腳,VCC接正極5 V,而20引腳VSS接電源地端。復(fù)位電路負(fù)責(zé)確定單片機(jī)的工作起始狀態(tài),完成單片機(jī)的啟動(dòng)過(guò)程。時(shí)鐘電路好比單片機(jī)的心臟,它控制著單片機(jī)的工作節(jié)奏,振蕩電路是向單片機(jī)提供一個(gè)正弦波信號(hào)作為基準(zhǔn),其決定單片機(jī)的執(zhí)行速度。XTAL1和XTAL2分別為反向放大器的輸入和輸出,該反向放大器可以配置為片內(nèi)振蕩器。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。因?yàn)橐粋€(gè)機(jī)器周期含有6個(gè)狀態(tài)周期,而每個(gè)狀態(tài)周期為2個(gè)振蕩周期,所以一個(gè)機(jī)器周期共有12個(gè)振蕩周期,如果外接石英晶體振蕩器的振蕩頻率為12 MHz,則一個(gè)振蕩周期為1/12 μs。
圖2 單片機(jī)最小系統(tǒng)模塊
圖3 nRF24L01無(wú)線(xiàn)發(fā)射與接收模塊接線(xiàn)圖
無(wú)線(xiàn)病床呼叫系統(tǒng)的主從機(jī)都采用nRF24L01無(wú)線(xiàn)傳輸模塊實(shí)現(xiàn)通信,電路接法如圖3所示,一端作為電能的發(fā)射,一端作為電能的接收。
圖4 聲光報(bào)警模塊
無(wú)線(xiàn)病床呼叫系統(tǒng)主機(jī)中聲光報(bào)警電路采用NPN型S8550三極管驅(qū)動(dòng),當(dāng)單片機(jī)的P1.1~1.3口輸出低電平時(shí),三極管的VE>VB>VC>0。三極管的發(fā)射結(jié)正偏,集電結(jié)反偏,三極管飽和導(dǎo)通,此時(shí)發(fā)光二極管和蜂鳴器發(fā)出聲光報(bào)警,當(dāng)單片機(jī)的P1.1~1.3口輸出高電平時(shí),三極管截止,聲光報(bào)警停止工作。具體電路如圖4所示。
首先進(jìn)行初始化操作,初始化包括設(shè)置單片機(jī)I/O和SPI相關(guān)寄存器,兩部分都可以和nRF24L01通信。通過(guò)SPI總線(xiàn)配置射頻芯片使其進(jìn)入正確的工作模式,發(fā)射數(shù)據(jù)時(shí),首先將nRF24L01配置為發(fā)射模式,接著把發(fā)送端待發(fā)射數(shù)據(jù)的目標(biāo)地址TX-ADDR和數(shù)據(jù)TX-PLD寫(xiě)入nRF24L01緩沖區(qū),延時(shí)后發(fā)射數(shù)據(jù),其流程圖如圖5所示。
圖5 無(wú)線(xiàn)發(fā)射模塊軟件流程圖
病床無(wú)線(xiàn)呼叫系統(tǒng)從機(jī)無(wú)線(xiàn)發(fā)射模塊的SPI寫(xiě)入數(shù)據(jù)代碼如下:
reg為寄存器地址,pBuf為待寫(xiě)入數(shù)據(jù)地址,uchars寫(xiě)入數(shù)據(jù)的個(gè)數(shù)。
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);// 寫(xiě)本地地址 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 寫(xiě)接收端地址 SPI_RW_Reg(WRITE_REG + EN_AA, 0x3f); //頻道0自動(dòng)ACK應(yīng)答允許 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x3f); //允許接收地址只有頻道0 SPI_RW_Reg(WRITE_REG + RF_CH, 0); //設(shè)置信道工作為2.4 GHz,收發(fā)必須一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //設(shè)置接收數(shù)據(jù)長(zhǎng)度,本次設(shè)置為20字節(jié) SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //設(shè)置發(fā)射速率為1 MHz,發(fā)射功率為最大值0dB SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收發(fā)完成中斷響應(yīng),16位CRC,主發(fā)送 } 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); //裝載數(shù)據(jù) CE=1; //置高CE,激發(fā)數(shù)據(jù)發(fā)送 Delay(10); SPI_RW_Reg(WRITE_REG+STATUS,0XFF); } 接收數(shù)據(jù)時(shí),首先將nRF24L01配置為接收模式。接著延遲進(jìn)入接收狀態(tài)等待數(shù)據(jù)的到來(lái)。當(dāng)接收方檢測(cè)到有效地址和CRC時(shí),就將數(shù)據(jù)包儲(chǔ)存在接收堆棧中,同時(shí)狀態(tài)寄存器中的中斷標(biāo)志位RX-DR置高,產(chǎn)生中斷使IRQ引腳變?yōu)榈碗娖?,以便通知MCU去取數(shù)據(jù),其流程圖如圖6所示。 圖6 無(wú)線(xiàn)接收模塊軟件流程圖 病床無(wú)線(xiàn)呼叫系統(tǒng)主機(jī)無(wú)線(xiàn)接收模塊的SPI讀數(shù)據(jù)代碼如下: reg為寄存器地址,pBuf為待寫(xiě)入數(shù)據(jù)地址,uchars寫(xiě)入數(shù)據(jù)的個(gè)數(shù)。 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; } 經(jīng)實(shí)驗(yàn),對(duì)系統(tǒng)進(jìn)行了一些動(dòng)態(tài)值的測(cè)量,具體結(jié)果如表1所列。 表1 數(shù)據(jù)測(cè)試表 從表1中看出接收端與發(fā)射端都維持在低功耗,基本達(dá)到了設(shè)計(jì)的初衷,另外收發(fā)距離測(cè)試精度也達(dá)到了設(shè)計(jì)的要求。3.2 無(wú)線(xiàn)接收模塊軟件設(shè)計(jì)
4 實(shí)驗(yàn)結(jié)果
結(jié) 語(yǔ)