叢 林,楊 凱,胡文東,徐文濤,黃 燁
(1.空軍工程大學 航空航天工程學院,陜西 西安710038;2.第四軍醫(yī)大學航 空航天醫(yī)學系,陜西 西安710032)
隨著科學技術水平的不斷提高,傳統(tǒng)的有線通信因自身的局限性已越來越不能滿足人們的需要,無線通信技術得到了快速發(fā)展。如今出現(xiàn)了種類眾多的無線通信技術,目前比較熱門的有WiFi、藍牙、UWB、ZigBee、Nordic nRF以及TI公司的SimpliciTI等。不同無線通信技術在成本、功耗、傳輸速率、使用頻段、功能方面有很大區(qū)別,針對不同的需求要選擇適合的無線技術。
針對便攜式設備的低成本、低功耗要求,藍牙和WiFi功耗相對較大,UWB規(guī)范尚不統(tǒng)一且芯片價格高,Zigbee的傳輸速率受限僅250 kbit/s,SimpliciTI則受TI公司硬件平臺限制。綜合考慮各個因素,本系統(tǒng)采用了Nordic Semiconductor公司2.4 GHz低成本高性能的nRF24L01無線射頻芯片,由低功耗ARM系列STM32L152RD微處理器控制,實現(xiàn)短距離無線數(shù)據(jù)通信。nRF24L01不僅可以提供一個真正的超低功耗解決方案,而且也擁有優(yōu)良的共存性,其載波監(jiān)測功能保證了在WLAN干擾下的可靠通信。高速的頻率切換時間減少了與藍牙等跳頻系統(tǒng)出現(xiàn)互相干擾的可能。
系統(tǒng)的設計思路是在滿足高速傳輸數(shù)據(jù)的同時盡可能的降低功耗,故在MCU與無線芯片的選型上側重于性能和功耗的平衡。系統(tǒng)硬件部分采用模塊化的設計思想,主要由供電模塊,nRF24L01射頻模塊和微控制器模塊組成。其中供電模塊根據(jù)實際需求方案很多,本文就不詳細敘述了。
nRF24L01是由Nordic Semiconductor公司出品的GFSK單片式收發(fā)芯片[1],工作于2.4~2.5 GHz的世界通用(ISM)頻段,傳輸速率可達2 Mbit/s。芯片包括頻率發(fā)生器、功率放大器、增強型SchockBurstTM模式控制器、晶振和調制解調器。發(fā)射功率和頻道選擇等工作參數(shù)可以通過SPI接口進行設置。增強型ShockBurstTM功能使軟件設計更為簡單,集成了雙向通信所需要的鏈路層,而通常這些功能需要一個高速的MCU和大空間的存儲器和高的電源消耗來實現(xiàn)。nRF24L01及外部接口如圖1所示。
圖1 nRF24L01及外部接口
STM32L152RD基于高品質的ARM Cortex-M3內核,融合了高性能和超低功耗的特性,內置高速存儲器,工作頻率為32 MHz。它采用了優(yōu)化的節(jié)能架構與0.13μm的STMicroelectronics超低漏電生產(chǎn)工藝,此外,為了實現(xiàn)超低功耗,STM32L152RD還劃分了6種工作模式,使其在任何設定時間內都能以最低的功耗完成任務。STM32控制器的SPI[2](串行外設接口)允許芯片與外部設備以全雙工或者半雙工、同步、串行方式通信,可用于多種用途,包括使用一條雙向數(shù)據(jù)線的雙線單工同步傳輸,還可使用CRC校驗的可靠通信。
通常SPI通過4個管腳與外部器件相連。MISO:主設備輸入/從設備輸出管腳,該管腳在從模式下發(fā)送數(shù)據(jù),在主模式下接收數(shù)據(jù);MOSI:主設備輸出/從設備輸入管腳,該管腳在主模式下發(fā)送數(shù)據(jù),在從模式下接收數(shù)據(jù);SCK:串口時鐘,作為主設備的輸出,從設備的輸入;NSS:從設備選擇。這是一個可選的管腳,用來選擇主/從設備[3]。
系統(tǒng)除了使用MCU這4個管腳與無線模塊相連,還通過PA0管腳控制nRF24L01的片選端CE,PB0管腳控制中斷響應。圖2是微控制器模塊STM32L152RD與nRF24L01的接口電路原理圖。
圖2 接口電路原理圖
nRF24L01無線射頻芯片內置的鏈路層使軟件設計更為簡單,系統(tǒng)進行無線通信無須配置復雜的通信協(xié)議,只需編程配置好射頻芯片與MCU的SPI通信接口,然后在發(fā)送時將有效數(shù)據(jù)放入TX緩沖區(qū),芯片將把地址信息和TX緩沖區(qū)的有效數(shù)據(jù)與內部自行產(chǎn)生的數(shù)據(jù)頭、標志位和CRC校驗碼等信息結合起來進行數(shù)據(jù)打包并發(fā)送出去。表1給出增強型的ShockBurstTM模式的數(shù)據(jù)包[4]。整個系統(tǒng)的軟件設計部分分為初始化操作、配置發(fā)送模式、配置接收模式、配置中斷4部分。
表1 增強型的ShockBurstTM模式的數(shù)據(jù)包 byte
無線射頻芯片nRF24L01要進行無線通信,首先要對MCU的時鐘,MCU的SPI通信口和nRF24L01進行初始化操作[5]。MCU時鐘和SPI接口初始化部分STM32L152RD的芯片資料[6]很詳細,在此就不詳細敘述了。nRF24L01的初始化主要包括地址、應答方式、工作頻率、數(shù)據(jù)長度、發(fā)射速率、中斷響應等參數(shù)的配置。nRF24L01初始化操作[7]的流程圖如圖3所示。
圖3 nRF24L01初始化操作流程圖
nRF24L01配置為增強型的ShockBurstTM發(fā)送模式[8],當MCU有數(shù)據(jù)要發(fā)送nRF24L01就會啟動Shock-BurstTM模式,自動生成數(shù)據(jù)頭、標志位和CRC校驗碼并發(fā)送數(shù)據(jù)。數(shù)據(jù)發(fā)送完畢后將轉到接收模式并等待接收端的ACK應答信號。如果沒有收到ACK應答信號,則認為數(shù)據(jù)丟失,nRF24L01將循環(huán)重發(fā)數(shù)據(jù)包,直到收到ACK或重發(fā)次數(shù)超過重發(fā)寄存器中設置的值為止。如果數(shù)據(jù)重發(fā)次數(shù)超過了初始設定值,則會產(chǎn)生數(shù)據(jù)溢出導致IRQ中斷。當收到ACK應答信號時,nRF24L01就認為最后一包數(shù)據(jù)已經(jīng)發(fā)送成功,TX_FIFO寄存器中的數(shù)據(jù)被清除并產(chǎn)生IRQ中斷通知MCU。MCU根據(jù)任務需求控制nRF24L01進入發(fā)送模式,接收模式或待機模式。發(fā)送模式流程如圖4所示。
配置發(fā)送模式代碼如下:
void nRF24L01_TxPacket(unsigned char*tx_buf)
{
NRF24L01_MODE_CE_0();
SPI_Write_Buf(WRITE_REG1+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//寫入接收地址
SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);//寫入//要發(fā)送的數(shù)據(jù)
SPI_RW_Reg(WRITE_REG1+CONFIG,0x0e);//IRQ中斷,16位CRC
NRF24L01_MODE_CE_1();//CE置1,激發(fā)增強型的ShockBurstTM發(fā)送模式
圖4 發(fā)送模式流程圖
Delay_us(20);//注意延遲值不能太低
}
在增強型的ShockBurstTM接收模式[9]下,nRF24L01可以接收6路不同地址相同頻率的數(shù)據(jù),每個數(shù)據(jù)通道擁有自己的地址,通過寄存器RX_ADDR_PX來配置。nRF24L01CE置高后130μs便自動檢測空中信息,當有通道接收到有效的地址和數(shù)據(jù)時,進行CRC校驗,正確則記錄地址并以此為目標地址發(fā)送應答信號ACK同時自動去除數(shù)據(jù)頭,標志位和校驗碼并將有效數(shù)據(jù)寫入RX_FIFO寄存器,芯片通過產(chǎn)生IRQ中斷通知MCU接收完畢,隨后MCU可從RX_FIFO寄存器讀出有效數(shù)據(jù)。如果CRC校驗錯誤則丟棄數(shù)據(jù)包重新檢測空中信息。當成功接收數(shù)據(jù)時,MCU可根據(jù)任務需求控制nRF24L01進入發(fā)送模式,接收模式或待機模式。接收模式流程如圖5所示。
配置接收模式代碼如下:
void nRF24L01_SetRX_Mode(void)
{
NRF24L01_MODE_CE_0();
SPI_RW_Reg(0xe2,0); //清接收FIFO
SPI_RW_Reg(WRITE_REG1+STATUS,0XFF);//清狀態(tài)寄存器
SPI_RW_Reg(WRITE_REG1+CONFIG,0x0F);//IRQ中斷,16位CRC
NRF24L01_MODE_CE_1();
}
圖5 接收模式流程圖
中斷機制是單片機的基礎設施之一,它起著通信網(wǎng)絡的作用,以協(xié)調系統(tǒng)對各種內外部時間的響應和處理。通過配置外部中斷,可以判斷數(shù)據(jù)發(fā)送和接收的情況,以便對相應事件做出處理。配置中斷代碼如下:
void NRF24L01_INT_IRQHandler(void)
{
uint8_t status;status=0;
if(EXTI_GetITStatus(NRF24L01_IRQ_EXTI_LINE)!=RESET)//判斷是否產(chǎn)生了EXTI2中斷
{
if(GPIO_ReadInputDataBit(NRF24L01_IRQ_GPIO_PORT,NRF24L01_IRQ_PIN)==0)//判斷是否是PA2線變低
status=SPI_Read(READ_REG1+STATUS);//讀狀態(tài)寄器
if(status &0x40) //如果接收到數(shù)據(jù)
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//將數(shù)據(jù)從RX緩沖區(qū)讀出
SPI_RW_Reg(0xe2,0); //清除發(fā)送緩沖區(qū)
}
else if((status &0x10)>0)//發(fā)射達到最大復發(fā)次數(shù)
SPI_RW_Reg(0xe1,0); //清除發(fā)送緩沖區(qū)
else if((status &0x20)>0)//發(fā)射后收到應答
SPI_RW_Reg(0xe1,0);
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);//將數(shù)據(jù)從RX緩沖區(qū)讀出
SPI_RW_Reg(WRITE_REG1+STATUS,0xFF);//清除寄存器標志
}
EXTI_ClearITPendingBit(NRF24L01_IRQ_EXTI_LINE);//清除EXTI2上的中斷標志
}}
為保證系統(tǒng)準確有效,現(xiàn)將本文方案與目前已有的幾種無線通信系統(tǒng)方案進行對比[9-10],其中系統(tǒng)綜合耗電的計算是通過無線芯片發(fā)射電流和接收電流的平均值與8 MHz工作時的MCU電流之和。對比分析如表2所示。
表2 幾種無線方案對比分析
表中系統(tǒng)綜合耗電的數(shù)據(jù)直觀地顯示出本文設計的系統(tǒng)功耗明顯低于其他的無線方案,更滿足便攜設備低功耗的需求。
提出了一種基于STM32L152RD微控制器和nRF24L01無線射頻芯片的超低功耗無線通信系統(tǒng)方案,并搭建了實際硬件系統(tǒng),實現(xiàn)了超低功耗下的高速近距離無線數(shù)據(jù)傳輸。無工作任務時nRF24L01可進入掉電模式,STM32L152RD可進入休眠模式,系統(tǒng)功耗更低,特別滿足便攜式設備功耗盡可能低的要求。系統(tǒng)硬件電路簡單、成本低、傳輸速率快、可靠性好、具有良好的可擴展性,適用于對功耗有較高要求的便攜設備無線通信。
[1]Nordic Semiconductor ASA.nRF24L01_Product_Specification_v2.0[EB/OL].[2013-01-01].http://www.nordicsemi.no.
[2]潘勇.短距離無線數(shù)據(jù)網(wǎng)絡的應用研究無線數(shù)據(jù)網(wǎng)絡[D].天津:天津大學,2010.
[3]徐廣偉.RFID在煤礦系統(tǒng)中的應用[D].成都:成都理工大學,2010.
[4]肖林榮,應時彥,馬躍坤,等.2.4 GHz射頻收發(fā)芯片nRF24LE1及其應用[J].信息技術,2009(12):13-16.
[5]徐愛鈞,彭秀華.單片機高級語言C51Windows環(huán)境編程與應用[M].北京:電子工業(yè)出版社,2008.
[6]STMicroelectronics.STM32L152RD Datasheet[EB/OL].[2013-01-01].http://www.st.com.
[7]隋紹勇,鄭維廣,張振邦.基于STM32F103和nRF24L01的近程無線數(shù)傳系統(tǒng)設計[J].電子元器件應用,2010(12):15-17.
[8]張金昌,李博,馮小琴.nRF24L01在智能電子導游系統(tǒng)中的應用[J].數(shù)字通信,2012(4):88-90.
[9]朱慧彥,林林.基于MCU和nRF24L01的無線通信系統(tǒng)設計[J].電子科技,2012(4):81-83.
[10]時志云,王代華,張志杰.基于nRF24L01和PICl6F877的無線數(shù)據(jù)傳輸系統(tǒng)設計[J].電子測量,2008(1):60-63.