目前,在遙控遙測(cè)、無(wú)線抄表、門(mén)禁系統(tǒng)、小區(qū)傳呼、工業(yè)數(shù)據(jù)采集、無(wú)線遙控系統(tǒng)、無(wú)線鼠標(biāo)鍵盤(pán)等許多應(yīng)用領(lǐng)域,都采用無(wú)線方式進(jìn)行遠(yuǎn)距離數(shù)據(jù)傳輸。本文介紹一種采用通用的低功耗單片機(jī)MSP430作為主控芯片、具有多信道的單片收發(fā)芯片nRF905作為無(wú)線收發(fā)模塊、利用SPI口實(shí)現(xiàn)雙向通訊的無(wú)線數(shù)據(jù)傳輸系統(tǒng)。系統(tǒng)集成了MSP430在低功耗應(yīng)用方面的優(yōu)勢(shì)和nRF905無(wú)線特有的多頻道支持及功耗低、易控制等優(yōu)點(diǎn),特別適合于低功耗、小數(shù)據(jù)量的無(wú)線數(shù)據(jù)傳輸系統(tǒng)。
1 系統(tǒng)的總體結(jié)構(gòu)
系統(tǒng)總體框圖如圖1所示。主控MCU使用TI公司MSP430系列中的 F1491型,射頻收發(fā)模塊使用Nordic公司的nRF905實(shí)現(xiàn)無(wú)線數(shù)據(jù)收發(fā)。除MSP430和nRF905外,系統(tǒng)還提供RS-232接口,可以實(shí)現(xiàn)與PC機(jī)的通訊,RS-485接口滿(mǎn)足一些通用儀器儀表的要求。根據(jù)不同的應(yīng)用需求,可選擇采用PCB天線或高增益的外置式天線以滿(mǎn)足遠(yuǎn)距離的需求。
2 系統(tǒng)主要芯片介紹
MSP430是TI公司推出的16位系列單片機(jī),在電池供電的低功耗應(yīng)用中具有獨(dú)特的優(yōu)勢(shì)。其工作電壓在1.8~3.6V之間,正常工作時(shí)功耗可控制在 200μA左右,低功耗模式時(shí)可實(shí)現(xiàn)2μA甚至0.1μA的低功耗。本系統(tǒng)所采用的MSP4301491系列在單個(gè)芯片上集成8通道12位的A/D轉(zhuǎn)換、 2個(gè)16位定時(shí)器、2個(gè)USART接口、16位看門(mén)狗、48個(gè)GPIO 端口及2 048KB RAM和60KB的flash,單片即可滿(mǎn)足大多數(shù)應(yīng)用需要。其高效率精簡(jiǎn)16 位指令結(jié)構(gòu)可以確保任何任務(wù)的快速執(zhí)行,大多數(shù)指令可以在一個(gè)時(shí)鐘周期內(nèi)完成;它還具有高級(jí)語(yǔ)言編程能力,使軟件開(kāi)發(fā)更為便利[1]。
射頻部分使用Nordic公司的多通道單片收發(fā)芯片nRF905[2]。它采用GFSK 調(diào)制解調(diào)技術(shù),工作電壓為1.9~3.6V,工作于433/868/915MHz 3個(gè)ISM頻道。nRF905由頻率合成器、接收解調(diào)器、功率放大器、晶體振蕩器和調(diào)制器組成,具有低功耗的Shock Burst工作模式,可以自動(dòng)完成前導(dǎo)碼和CRC的工作,可由片內(nèi)硬件自動(dòng)完成曼徹斯特編碼/解碼,使用SPI接口與MCU通信,配置非常方便。作為射頻發(fā)射芯片,其低功耗性能是極為突出。以-10dBm的輸出功率發(fā)射時(shí),電流只有11mA,在接收模式時(shí)電流為12.5mA。nRF905傳輸數(shù)據(jù)時(shí)為非實(shí)時(shí)方式,即發(fā)送端發(fā)出數(shù)據(jù),接收端收到后先暫存于芯片存儲(chǔ)器內(nèi),外部的MCU可以在需要時(shí)再到芯片中去取。nRF905一次發(fā)射最多可傳輸?shù)臄?shù)據(jù)量為 32B。天線接口設(shè)計(jì)為差分天線,便于使用低成本的PCB天線[3]。
3 點(diǎn)對(duì)點(diǎn)無(wú)線通信的實(shí)現(xiàn)
3.1 SPI接口
nRF905利用SPI口實(shí)現(xiàn)與MCU的雙向通訊。nRF905的SPI總線包括4個(gè)引腳:CSN(SPI使能)、SCK(SPI時(shí)鐘)、MISO (主入從出)和MOSI(主出從入)。其中CSN可以接到一個(gè)GPIO端口控制芯片工作,而其他三個(gè)腳則連接到主控MCU的SPI接口上。主控MCU可以使用GPIO端口控制nRF905的3根控制線,控制低功耗的PWR_UP、正常工作的TX_EN、選擇發(fā)送還是接收方式的TRX_CE。nRF905有兩種節(jié)能模式和兩種工作模式,分別為掉電模式、待機(jī)模式、Shock Burst 接收模式和Shock Burst發(fā)送模式。這幾種模式由主控MCU通過(guò)控制nRF905的3個(gè)引腳PWR_UP、TRX_CE和TX_ EN的高低電平來(lái)決定。nRF905有3個(gè)引腳用于狀態(tài)輸出,分別是:CD(載波檢測(cè))、AM(地址匹配)和DR(數(shù)據(jù)就緒),均為高電平有效。 nRF905在處于接收模式時(shí),若檢測(cè)到接收頻率段的載波,就置CD為高。接著檢測(cè)載波數(shù)據(jù)中的地址字節(jié),若與本身已配置的接收地址相同,則置AM為高;若檢測(cè)到接收數(shù)據(jù)中的CRC校驗(yàn)正確,則存儲(chǔ)有效數(shù)據(jù)字節(jié),置DR為高。
MCU通過(guò)SPI總線配置nRF905的內(nèi)部寄存器和收發(fā)數(shù)據(jù)。這里nRF905為從機(jī),其SPI的時(shí)鐘范圍很寬,可為1Hz~10MHz,因此 MCU在寫(xiě)控制程序時(shí)不必苛求時(shí)間的準(zhǔn)確度。SPI總線的每次操作都必須在使能引腳CSN的下降沿開(kāi)始,CSN 低電平有效,總線上的數(shù)據(jù)在時(shí)鐘的上升沿有效。MCU對(duì)SPI總線進(jìn)行讀操作時(shí),先把CSN置低,然后在MOSI 數(shù)據(jù)線上輸出一個(gè)表示讀命令的字節(jié),與此同時(shí),nRF905會(huì)在MISO數(shù)據(jù)線上輸出一個(gè)字節(jié)表示狀態(tài)信息的數(shù)據(jù),隨后輸出一個(gè)地址字節(jié),后面跟隨有效數(shù)據(jù)。在進(jìn)行寫(xiě)操作時(shí)比較簡(jiǎn)單,MCU先把CSN拉低,然后在MOSI線上輸出寫(xiě)命令字節(jié)和數(shù)據(jù)字節(jié)即可。
3.2 數(shù)據(jù)收發(fā)過(guò)程
在nRF905正常工作前,必須由MCU根據(jù)需要寫(xiě)好配置寄存器。發(fā)送數(shù)據(jù)時(shí),先通過(guò)MCU把nRF905置于待機(jī)模式(PWR_UP置為高、 TRX_CE置為低),然后通過(guò)SPI總線把發(fā)送地址和待發(fā)送的數(shù)據(jù)都寫(xiě)入相應(yīng)的寄存器中,之后把nRF905置于發(fā)送模式(PWR_UP、TRX_CE 和TX_EN全部置高),配置成功后數(shù)據(jù)就會(huì)自動(dòng)發(fā)送出去。若射頻配置寄存器中的自動(dòng)重發(fā)位(AUTO_RETRAN)設(shè)為有效,數(shù)據(jù)包就會(huì)被重復(fù)發(fā)出,直到MCU拉低TRX_CE退出發(fā)送模式為止。nRF905發(fā)送數(shù)據(jù)的流程圖如圖2所示。