三峽電力職業(yè)學(xué)院 張 強(qiáng)
農(nóng)田中數(shù)據(jù)采集量很大,利用網(wǎng)絡(luò)可以比較方便地實(shí)現(xiàn)大量數(shù)據(jù)的遠(yuǎn)距離傳輸;但如果在農(nóng)田中鋪設(shè)有線網(wǎng)絡(luò),一方面不便于農(nóng)田的耕作,另一方面成本較高。近幾年發(fā)展起來(lái)的無(wú)線傳感網(wǎng)絡(luò)由于應(yīng)用成本低、網(wǎng)絡(luò)結(jié)構(gòu)靈活、數(shù)據(jù)傳輸距離遠(yuǎn),已經(jīng)在很多領(lǐng)域得到了應(yīng)用。并且,傳感器網(wǎng)絡(luò)所要求的無(wú)線技術(shù)不同于現(xiàn)在已有的一些無(wú)線網(wǎng)絡(luò)技術(shù),這種網(wǎng)絡(luò)并不需要太高的傳輸速率,而是在成本和功耗方面有比較苛刻的要求。為了滿(mǎn)足類(lèi)似于溫度、濕度傳感器這樣小型、低成本設(shè)備無(wú)線聯(lián)網(wǎng)的要求,ZigBee技術(shù)正是為適應(yīng)這種需求而產(chǎn)生的。
CC2430芯片為Chipcon公司生產(chǎn)的2.4GHz射頻系統(tǒng)單芯片,是一顆真正的系統(tǒng)芯片(SoC)CMOS解決方案,這種解決方案能夠提高性能并滿(mǎn)足以ZigBee為基礎(chǔ)的2.4GHzISM波段應(yīng)用對(duì)低成本、低功耗的要求。
CC2430 SoC家族包括3個(gè)產(chǎn)品:CC2430-F32、CC2430-F64和CC2430-F128。它們的區(qū)別在于內(nèi)置閃存的容量不同,分別為32KB、64KB和128KB,并具有8K的RAM和其他強(qiáng)大的支持特性。CC2430基于Chipcon公司的SmartRF技術(shù)平臺(tái),采用0.18μmCMOS工藝生產(chǎn),尺寸是7mm×7mm,封裝為48PIN;在接收和發(fā)射模式下,電流損耗分別小于27mA或25mA。CC2430適用于那些要求電池壽命非常長(zhǎng)的應(yīng)用,CC2430具有休眠模式和可短時(shí)間轉(zhuǎn)換到主動(dòng)模式的能力,使之成為解決問(wèn)題的理想方案。這個(gè)配置可以被應(yīng)用于所有ZigBeeTM的無(wú)線網(wǎng)絡(luò)節(jié)點(diǎn),包括協(xié)調(diào)器、路由器、設(shè)備終端。
CC2430芯片的主要特點(diǎn)如下:高性能和低功耗的8051微控制器內(nèi)核;集成符合IEEE802.15.4標(biāo)準(zhǔn)的2.4GHz的RF無(wú)線電收發(fā)機(jī);優(yōu)良的無(wú)線接收靈敏度和強(qiáng)大的抗干擾性;在休眠模式時(shí)僅0.9μA的流耗,外部的中斷或RTC能喚醒系統(tǒng);在待機(jī)模式時(shí)少于0.6μA的流耗,外部的中斷能喚醒系統(tǒng);硬件支持CSMA/CA功能;較寬的電壓范圍(2.O~3.6V);數(shù)字化的RSSI/LQI支持和強(qiáng)大的DMA功能;具有電池監(jiān)測(cè)和溫度感測(cè)功能;集成了14位模數(shù)轉(zhuǎn)換的ADC;集成AES安全協(xié)處理器;帶有2個(gè)強(qiáng)大的支持幾組協(xié)議的USART,以及1個(gè)符合IEEE 802.15.4規(guī)范的MAC計(jì)時(shí)器,1個(gè)常規(guī)的16位計(jì)時(shí)器和2個(gè)8位計(jì)時(shí)器;強(qiáng)大和靈活的開(kāi)發(fā)工具。
無(wú)線傳感器網(wǎng)絡(luò)的節(jié)點(diǎn)通常由傳感器模塊、處理器模塊、無(wú)線通信模塊和電源模塊構(gòu)成。處理器模塊和無(wú)線通信模塊采用CC2430芯片,大大簡(jiǎn)化了射頻電路的設(shè)計(jì)。傳感器模塊采用數(shù)字溫度傳感器DS18B20。電源模塊采用2節(jié)干電池。節(jié)點(diǎn)的硬件原理框圖如圖1。
圖1 節(jié)點(diǎn)硬件框圖Fig.1 Hardware diagram of the node
DS18B20是“單總線”數(shù)字溫度傳感器,其測(cè)量溫度范圍為-55℃~125℃,在-10℃~85℃范圍內(nèi),精度為0.5℃,可編程設(shè)定9~12位的分辨率,默認(rèn)值為12位,轉(zhuǎn)換12位溫度信號(hào)所需時(shí)間為750ms(最大)。檢測(cè)溫度由2字節(jié)組成,高字節(jié)MSB的高5位S代表符號(hào)位,如果溫度為負(fù)則S為1,否則為0。低字節(jié)LSB的低4位是小數(shù)部分,中間7位是整數(shù)部分,如圖2所示。
圖2 DS18B20測(cè)溫字節(jié)Fig.2 Temperature measurement bytes of DS18B20
DS18B20與CC2430的通信電路如圖3所示,VDD引腳直接連接外部電源,CC2430的P0.0腳與18B20的數(shù)字輸入/輸出腳DQ相連,DS18B20在空閑時(shí),其DQ腳由上拉電阻置為高電平。
圖3 18B20與CC2430連接電路圖Fig.3 The interface circuit between 18B20 and CC2430
軟件部分需要解決的問(wèn)題包括:溫度信號(hào)采集、ZigBee協(xié)議棧(Z-Stack)、ZigBee通信等。
溫度信號(hào)的采集可由CC2430芯片內(nèi)部的MCU完成,溫度傳感器DS18B20采用單總線方式和處理器通信,根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過(guò)三個(gè)步驟:每一次讀寫(xiě)之前都要對(duì)DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號(hào)后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。
ZigBee協(xié)議棧的體系結(jié)構(gòu)如圖4所示。介質(zhì)接入控制子層(Medium Access Control Layer,MAC)和物理層(Physical Layer,PHY)是由IEEE 802.15.4標(biāo)準(zhǔn)中定義的兩層。網(wǎng)絡(luò)層(Network Layer,NWK)是由ZigBee聯(lián)盟所定義,主要完成從應(yīng)用層接受數(shù)據(jù)并向其發(fā)送數(shù)據(jù);應(yīng)用層(Application Layer APL)是ZigBee協(xié)議棧的最高層。應(yīng)用層的框架包括了應(yīng)用支持子層(APS)、ZigBee設(shè)備對(duì)象(ZDO)和由制造商制定的應(yīng)用對(duì)象。應(yīng)用層主要負(fù)責(zé)把不同的應(yīng)用映射到ZigBee網(wǎng)絡(luò)上。
圖4 ZigBee體系結(jié)構(gòu)Fig.4 ZigBee system structure diagram
ZigBee協(xié)議棧運(yùn)行在一個(gè)OSAL(操作系統(tǒng)抽象層)操作系統(tǒng)上。該操作系統(tǒng)基于任務(wù)調(diào)度機(jī)制,通過(guò)對(duì)任務(wù)的事件觸發(fā)來(lái)實(shí)現(xiàn)任務(wù)調(diào)度。每個(gè)任務(wù)都包含若干個(gè)事件,每個(gè)事件都對(duì)應(yīng)一個(gè)事件號(hào)。當(dāng)一個(gè)事件產(chǎn)生時(shí),對(duì)應(yīng)任務(wù)的事件就被設(shè)置為相應(yīng)的事件號(hào),這樣,事件調(diào)度就會(huì)調(diào)用相應(yīng)的任務(wù)處理程序。OSAL中的任務(wù)可以通過(guò)任務(wù)API將其添加到系統(tǒng)中,這樣就可以實(shí)現(xiàn)多任務(wù)機(jī)制。OSAL任務(wù)調(diào)度流程如圖5所示。NextActiveTask( )是一個(gè)任務(wù)事件查詢(xún)函數(shù),返回任務(wù)的事件狀態(tài)ActiveTask。軟件設(shè)計(jì)時(shí),可通過(guò)ActiveTask的值來(lái)決定是否需執(zhí)行對(duì)應(yīng)的任務(wù)函數(shù)ActiveTask( )。
圖5 OSAL任務(wù)調(diào)度機(jī)制Fig.5 OSAL task scheduling mechanism
本小節(jié)以?xún)蓚€(gè)節(jié)點(diǎn)之間的通信為例,介紹了點(diǎn)對(duì)點(diǎn)通信的過(guò)程和實(shí)現(xiàn)方法。完成一次數(shù)據(jù)傳送的程序流程圖如圖6。系統(tǒng)初始化主要是將系統(tǒng)的工作頻率設(shè)為32MHz的晶振頻率,這樣RF才能正常工作。RF初始化時(shí),先設(shè)置通信頻率,再通過(guò)設(shè)置RFPWR.RREG_RADIO_PD位為1給RF供電。RF初始化的過(guò)程還包括執(zhí)行下面的代碼來(lái)開(kāi)啟Rx,清空Rx、Tx的FiFo緩沖區(qū)以及校準(zhǔn)Radio。
圖6 數(shù)據(jù)發(fā)送程序流程圖Fig.6 The flow chart of Data distribution procedures
DMA的初始化階段要為T(mén)x分配1個(gè)空閑的DMA通道。首先要為通道0和通道1~4分別設(shè)置好通道描述數(shù)據(jù)結(jié)構(gòu)的存放地址,并將首地址分別寫(xiě)入DMA0CFGH:DMA0CFGL和DMA1CFGH:DMA1CFGL。再為這個(gè)分配好的DMA通道設(shè)置其描述數(shù)據(jù)結(jié)構(gòu)。
當(dāng)設(shè)置為T(mén)x準(zhǔn)備的DMA通道時(shí),需將數(shù)據(jù)的源地址SRCADDRH:SRCADDRL設(shè)為所要發(fā)送數(shù)據(jù)的起始地址,目標(biāo)地址DESTADDRH:DESTADDRL設(shè)為寄存器RFD的地址0xDFD9。然后,在LENH:LENL中設(shè)置所要發(fā)送數(shù)據(jù)的長(zhǎng)度,并將VLEN設(shè)為0。將WORDSIZE位設(shè)為0,表示DMA數(shù)據(jù)按字節(jié)進(jìn)行傳輸(設(shè)為1表示按字傳輸)。DMA的數(shù)據(jù)傳送模式按照一次觸發(fā)傳輸?shù)臄?shù)據(jù)量可分成四種,由TMODE設(shè)置選擇。本例中采用Block模式,即一次DMA觸發(fā)可進(jìn)行一個(gè)完整數(shù)據(jù)塊的傳輸。CC2430定義的DMA觸發(fā)信號(hào)有31種之多,由TRIG位設(shè)置。將TRIG設(shè)置為0,表示采用無(wú)觸發(fā)模式,這樣DMA在每次接收到DMAREQ信號(hào)后才啟動(dòng)一次數(shù)據(jù)傳輸。SRCINC和DESTINC分別用于設(shè)置數(shù)據(jù)源地址和目標(biāo)地址的變化方式,可設(shè)為不變、增1、增2或減1。由于采用按字節(jié)的Block模式向Radio發(fā)送數(shù)據(jù),因此數(shù)據(jù)源地址選擇增1變化,而數(shù)據(jù)目標(biāo)地址則一直為寄存器RFD的地址0xDFD9,故設(shè)為不變。IRQMASK位用于設(shè)置是否在DMA數(shù)據(jù)傳輸完后發(fā)中斷信號(hào)。本例中設(shè)為0,即禁止DMA中斷。M8是按字節(jié)傳輸時(shí)的數(shù)據(jù)寬度,設(shè)為0表示8位傳輸,為1時(shí)表示只傳輸字節(jié)的低7位。本例中設(shè)為0。PRIORITY用于優(yōu)先級(jí)設(shè)置,本例中設(shè)為2,即中等優(yōu)先級(jí)。
DMA描述設(shè)置好后,通過(guò)設(shè)置寄存器DMAARM和RMREQ的位來(lái)準(zhǔn)備相應(yīng)的DMA通道以及啟動(dòng)這個(gè)通道上數(shù)據(jù)塊的傳輸。在啟動(dòng)DMA數(shù)據(jù)傳輸之前,將當(dāng)前數(shù)據(jù)幀的長(zhǎng)度、目標(biāo)節(jié)點(diǎn)地址、源節(jié)點(diǎn)地址、標(biāo)志字節(jié)通過(guò)直接寫(xiě)寄存器RFD的方式寫(xiě)入TXFIFO。這樣在啟動(dòng)DMA傳輸后,完整的數(shù)據(jù)幀將被傳輸至TXFIFO。通過(guò)給CSP發(fā)送指令I(lǐng)STXONCCA啟動(dòng)TX傳輸。這就完成了一幀數(shù)據(jù)的發(fā)送。
數(shù)據(jù)接收的過(guò)程同樣需要設(shè)置系統(tǒng)工作頻率為32MHz,且應(yīng)確保Rx工作在Tx相同的頻道上,并設(shè)置DMA通道。其中DMA的數(shù)據(jù)源為寄存器RFD,并將DMA觸發(fā)信號(hào)設(shè)為RADIO,即Radio接收到數(shù)據(jù)時(shí)觸發(fā)DMA。數(shù)據(jù)接收的程序流程如圖7所示。
圖7 數(shù)據(jù)接收程序流程圖Fig.7 The flow chart of Data reception
通過(guò)利用CC2430芯片對(duì)測(cè)溫系統(tǒng)的設(shè)計(jì),我體會(huì)到ZigBee無(wú)線溫度傳感網(wǎng)絡(luò)的優(yōu)越性及其廣闊的應(yīng)用前景,CC2430芯片是真正意義上的SOC芯片,使得我們開(kāi)發(fā)ZigBee無(wú)線傳感網(wǎng)絡(luò)會(huì)更加方便,產(chǎn)品開(kāi)發(fā)周期會(huì)大大縮短。
[1] 李文仲,段朝玉.ZigBee無(wú)線網(wǎng)絡(luò)技術(shù)入門(mén)與實(shí)戰(zhàn)[M].北京:北京航空航天大學(xué)出版社,2007.
[2] 李文仲,段朝玉.ZigBee2006無(wú)線網(wǎng)絡(luò)與無(wú)線定位實(shí)戰(zhàn)[M].北京:北京航空航天大學(xué)出版社,2007.
[3] 馬永強(qiáng),李靜強(qiáng),馮立營(yíng).基于ZigBee技術(shù)的射頻芯片CC2430[J].單片機(jī)與嵌入式系統(tǒng),2006(3):45-47.
[4] 王瑋,樊則賓.基于CC2430的無(wú)線溫度檢測(cè)終端的設(shè)計(jì)[J].電子工程師,2007(8):78-79.
[5] 夏恒星,馬維華.基于CC2430的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)計(jì)[J].集成電路應(yīng)用,2007(5):47-48.