0 前言
現(xiàn)在,,越來(lái)越多的無(wú)線技術(shù)被應(yīng)用到自動(dòng)控制系統(tǒng)中,。nRf2401是挪威Nordic公司推出的單片2.4GHz無(wú)線收發(fā)一體芯片,,支持多點(diǎn)間通信,最高傳輸速率達(dá)到1Mbit/s,,可以用于無(wú)線網(wǎng)絡(luò)中,。
USB2.0口傳輸速率是480Mbps,有即插即用和熱插拔功能,。接口提供內(nèi)置電源,,可以向外設(shè)提供5V和最多500mA的電源。因此在以計(jì)算機(jī)為上位機(jī)的控制系統(tǒng)中,,USB口比較適合作為計(jì)算機(jī)與測(cè)控網(wǎng)絡(luò)的接口,。
USB接口器件的開發(fā)過(guò)程比較復(fù)雜,開發(fā)者需要知道USB協(xié)議,、USB設(shè)備驅(qū)動(dòng)程序開發(fā),、主機(jī)應(yīng)用程序開發(fā)等知識(shí),使用USB-UART橋接電路CP2102可以避免上述麻煩,。
1系統(tǒng)的設(shè)計(jì)思想及nRf2401和CP2102介紹
系統(tǒng)的設(shè)計(jì)思想如圖1所示,。系統(tǒng)是由 CP2102、nRF2401,、單片機(jī)等組成,。
圖1 系統(tǒng)設(shè)計(jì)思想
nRF2401是業(yè)界體積最小、功耗最低,、外圍元件最少的低成本射頻芯片,。有125個(gè)頻道,速率(0~1Mbps),、發(fā)射功率和工作頻率等所有工作參數(shù)可編程設(shè)置,。每個(gè)芯片可以通過(guò)軟件設(shè)置最多40bit地址,而且只有收到本機(jī)地址時(shí)才會(huì)輸出數(shù)據(jù),。內(nèi)置CRC糾檢錯(cuò)硬件電路和協(xié)議,。nRf2401內(nèi)置頻率合成器、功率放大器,、晶體振蕩器和調(diào)制器等功能模塊,。工作于2.4~2.5GHz ISM自由頻段,采用SoC方法設(shè)計(jì),,只需少量外圍元件便可組成射頻收發(fā)電路,。nRF2401沒有復(fù)雜的通信協(xié)議,它完全對(duì)用戶透明,,同種產(chǎn)品之間可以自由通信,。
CP2102是美國(guó)Silicon公司生產(chǎn)的高集成度USB-UART橋接電路。它們能夠用最簡(jiǎn)單的外部電路、最少的外部器件簡(jiǎn)便實(shí)現(xiàn)USB2.0到UART的轉(zhuǎn)換,。
使用CP2102作為USB接口器件最大的特點(diǎn)是開發(fā)方便:①?gòu)S商免費(fèi)提供適用于Windows(含Windows CE),、Linux等操作系統(tǒng)的驅(qū)動(dòng)程序,。驅(qū)動(dòng)程序?qū)⒂?jì)算機(jī)的USB口虛擬成一個(gè)COM口,,計(jì)算機(jī)使用普通操作串口的命令訪問(wèn)虛擬COM口。②內(nèi)置USB2.0全速功能控制器,、USB收發(fā)器,、48MHz內(nèi)部晶體振蕩器、1KB字節(jié) E2PROM及異步串行數(shù)據(jù)總線(UART),,電路無(wú)需任何外部的USB器件,。③CP2102的UART接口波特率為300bps~921.6kbps,可以滿足無(wú)線網(wǎng)絡(luò)的傳輸要求,。
2硬件電路的實(shí)現(xiàn)
上位機(jī)系統(tǒng)電路如圖2所示,。單片機(jī)選用ATmega16,是ATMEL公司生產(chǎn)的高性能,、低功耗的8 位AVR® 微處理器,,采用先進(jìn)的RISC 結(jié)構(gòu),數(shù)據(jù)吞吐率高達(dá)1 MIPS/MHz,。片內(nèi)集成有16K 字節(jié)可編程Flash,、512 字節(jié)的E2PROM、1K字節(jié)的SRAM,、兩個(gè)可編程 的串行UART和可工作于主機(jī)/從機(jī)模式的SPI 串行接口,。
圖2 上位機(jī)系統(tǒng)電路
CP2102無(wú)需外部電阻和晶體,VBus與REGIN引腳連到USB接口的Vbus端,,在REGIN端加1μF的去耦電容,。CP2102與單片機(jī)接口是標(biāo)準(zhǔn)UART電平,RTX,、TXD引腳分別是串口的接收,、輸出端,與單片機(jī)的對(duì)應(yīng)引腳相連,。CP2102的USB端與計(jì)算機(jī)的USB口連接,。CP2102的SUSPEND腳是USB口掛起信號(hào)端,接到單片機(jī)的PC4引腳,。
圖3 無(wú)線收發(fā)模塊
上位機(jī)所有器件均由計(jì)算機(jī)的USB口提供電源,。ATmega16L的電源電壓范圍為2.7~5.5V,nRF2401的電源電壓范圍為1.9~3.6V,,利用計(jì)算機(jī)USB口的+5V電源,,通過(guò)MIC2937A芯片將電壓轉(zhuǎn)換為3.3V。
無(wú)線收發(fā)模塊電路如圖3所示。nRf2401外圍元件很少,,可使用單鞭天線或環(huán)形天線,,電感需要采用高Q高精度的貼片繞線高頻電感,晶體需采用高穩(wěn)定晶體,,電容應(yīng)選用高穩(wěn)定貼片元件,。nRf2401通過(guò)SPI接口與單片機(jī)進(jìn)行通訊,ATmega16集成了SPI接口(CLK,、MISO,、MOSI引腳),與nRf2401的CLK1,、DATA相連接,。nRf2401的CS是片選端,CE是發(fā)送或接收控制端,,PWR_UP是電源控制端,,分別由單片機(jī)的PC5、PC6,、PC7引腳控制,。nRf2401的DR1為高時(shí)表明在接收緩沖區(qū)有數(shù)據(jù),接單片機(jī)的中斷引腳,。
3 單片機(jī)程序設(shè)計(jì)
3.1單片機(jī)對(duì)串口的編程
ATmega16集成有串口,,使用前需要先對(duì)它進(jìn)行初始化。具體過(guò)程如下:①UCSRA=0,,異步正常模式,;②UBRR=1,設(shè)置波特率為500Kbps;③UCR= 0x98,,使能接收中斷,,允許發(fā)送;④SREG=0x80;//開中斷,。
初始化后,,可以通過(guò)串口與CP2102進(jìn)行數(shù)據(jù)交換。采用中斷方式接收,,當(dāng)有串口數(shù)據(jù)到達(dá)時(shí)單片機(jī)產(chǎn)生中斷,,單片機(jī)響應(yīng)中斷從接收緩沖器讀入數(shù)據(jù)。串口接收中斷程序如下:
#pragma interrupt_handler uart_rec:8
unsigned char i;
void uart_rec()
{i=UDR;}
串口發(fā)送程序如下:①UDR=1,,發(fā)送數(shù)據(jù),;②while(!(USR&0x40)),等待發(fā)送結(jié)束,;③USR&=~0x40,,清發(fā)送完標(biāo)志。
3.2單片機(jī)對(duì)nRf2401的編程
單片機(jī)對(duì)nRf2401的編程包括對(duì)nRf2401進(jìn)行配置、發(fā)送數(shù)據(jù),、接收數(shù)據(jù)等程序,。
當(dāng)PWR_UP=1、CE=0,、CS=1時(shí)nRf2401進(jìn)入配置工作狀態(tài),。配置字最高可達(dá)18字節(jié),作用是使nRf2401子系統(tǒng)能夠處理RF協(xié)議,。配置字從最高位開始,,依次通過(guò)SPI接口(CS,、CLK1和DATA)送給配置寄存器,。本系統(tǒng)配置為ShockBurst方式,配置字分為如下四塊:有效數(shù)據(jù)寬度(DATA2_W和DATA1_W),、地址寬度(ADDR2和ADDR1),、接收頻道地址(ADDR_W)、CRC配置(CRC_L和CRC_EN),。其值從高到低分別為8EH, 08H, 1CH, 20H, 50H, 0AH, 0
BH, 0CH, 0DH, 0EH, 0AAH, 28H, 0AH, 0BH, 0CH, 0A3H, 6FH, 65H,。配置后nRf2401的通道1數(shù)據(jù)段長(zhǎng)度80bit(其中nRf2401的序列號(hào)8byte + 2byte溫度數(shù)據(jù)),地址段長(zhǎng)度40bit,,通道1硬件地址0AAH, 28H, 0AH, 0BH, 0CH,,啟用16位片上校驗(yàn)功能,單通道接收,,突發(fā)傳遞模式,,通信速率1Mbit/s,晶振頻率16MHz,,工作頻段2.450GHz,,開始處于接收狀態(tài)。
當(dāng)PWR_UP=1,、CE=1,、CS=0時(shí)為收發(fā)方式。ShockBurst發(fā)送過(guò)程如下:①CE=1,,nRf2401開始工作,;②將接收節(jié)點(diǎn)地址寫入nRf2401;將需要發(fā)射的數(shù)據(jù)寫入nRf2401,;③CE=0,,激活ShockBurst發(fā)送。
通過(guò)中斷方式接收數(shù)據(jù),。當(dāng)有數(shù)據(jù)需要接收時(shí),,nRf2401會(huì)將DR1置高產(chǎn)生中斷信號(hào),接收完畢后DR1又會(huì)被置低。首先配置中斷0為上升沿觸發(fā)方式(ISC01=1,, ISC00=1),,具體接收過(guò)程如下:①校驗(yàn)接收到的RF包的地址和欲接收的RF包中有效數(shù)據(jù)的長(zhǎng)度;②CE=1,,激活RX,;③經(jīng)過(guò)200μs處理,nRf2401子系統(tǒng)監(jiān)視啟動(dòng)并等待信號(hào)的到來(lái),;④當(dāng)收到一個(gè)有效的數(shù)據(jù)包(正確的地址和CRC),,nRf2401子系統(tǒng)移去前綴、地址和CRC位,;⑤nRf2401子系統(tǒng)通過(guò)把DR1置高,,產(chǎn)生中斷信號(hào);⑥CE=0,,RF設(shè)為低功耗方式,;⑦單片機(jī)取出有效數(shù)據(jù),需要注意的是,,每接收一個(gè)字節(jié)需要先寫0xff 到nRF2401,。
完整的射頻數(shù)據(jù)包由四部分組成:前綴、地址,、有效數(shù)據(jù)和CRC,。前綴一般是8位(也可以設(shè)置為4位,由地址的首位決定),。如果地址的首位是0,,前綴為01010101;如果地址的首位是1,,前綴為10101010,。ShockBurst方式下,CP2102接收到有效的數(shù)據(jù)包后,,自動(dòng)移去前綴,、地址和CRC,只留有效數(shù)據(jù),。
4 計(jì)算機(jī)控制軟件的編程
當(dāng)把CP2102與計(jì)算機(jī)連接時(shí),,系統(tǒng)會(huì)提示發(fā)現(xiàn)新硬件,并要求安裝驅(qū)動(dòng)程序,,執(zhí)行CP2102驅(qū)動(dòng)程序的安裝文件即可,。驅(qū)動(dòng)程序安裝后,在設(shè)備管理器中會(huì)有CP2102虛擬的COM口(一般是COM3),。
VB開發(fā)環(huán)境集成有串口控件MSComm,,該控件是將RS-232的初級(jí)操作予以封裝,,用高級(jí)的Basic語(yǔ)言即可實(shí)現(xiàn)串口數(shù)據(jù)的發(fā)送和接收[2]。
首先向工具箱添加MSComm控件,,并產(chǎn)生一個(gè)串口對(duì)象,,取對(duì)象名為“MSc”。然后編程對(duì)MSc進(jìn)行初始化,,步驟如下:①M(fèi)Sc.CommPort=3,, 選擇安裝驅(qū)動(dòng)程序后計(jì)算機(jī)虛擬的COM3口;②MSc.Settings = "500000,n,8,1",,設(shè)置通信波特率是500kbps,,無(wú)校驗(yàn),8位數(shù)據(jù),,1位停止位,;③MSc.InputMode=1,數(shù)據(jù)以二進(jìn)制形式存??;④MSc.RThreshold=1,每收到1個(gè)字符都觸發(fā)接收事件,;⑤MSc.PortOpen=True,打開串口,。
發(fā)送數(shù)據(jù)只是向控件的Output屬性寫數(shù)據(jù)即可,,既MSc.Output=輸出的數(shù)據(jù)。
接收數(shù)據(jù)采取事件驅(qū)動(dòng)方式,,程序代碼如下:
Public Sub msc_OnComm()
Select Case MSc1.CommEvent
Case comEvReceive
av = MSc.Input '接收數(shù)據(jù)
……'根據(jù)接收的數(shù)據(jù)進(jìn)行處理
End S
elect
End Sub
5 結(jié)束語(yǔ)
本系統(tǒng)通過(guò)CP2102實(shí)現(xiàn)USB2.0接口,,通過(guò)nRf2401通實(shí)現(xiàn)無(wú)線數(shù)據(jù)收發(fā),具有開發(fā)簡(jiǎn)單,、可靠性高等特點(diǎn),,傳輸速率可以達(dá)到900kbps,在工業(yè)控制,、消費(fèi)電子等各個(gè)領(lǐng)域都具有廣闊的應(yīng)用前景,。本文的創(chuàng)新點(diǎn):系統(tǒng)使用CP2102芯片實(shí)現(xiàn)USB2.0接口,芯片廠商免費(fèi)提供驅(qū)動(dòng)程序,,計(jì)算機(jī)端程序開發(fā)方便,。使用nRf2401實(shí)現(xiàn)無(wú)線數(shù)據(jù)收發(fā),有內(nèi)置地址設(shè)置,、CRC糾檢錯(cuò),、工作于自由頻段優(yōu)點(diǎn)。文章給出詳細(xì)的硬件電路和軟件程序,。
參考文獻(xiàn)
[1] Silicon Laboratories Inc.CP2102 Product Data Sheet, http:// www.silabs.com,,2006
[2] 范逸之等.Visual Basic與RS-232串行通信控制.北京:中國(guó)青年出版社,,2002.1
[3] nRF240x Configurator User Guide. Nordic VLSI document, Nordic Cooperation.
[4] 彭祖林,鄧羅根,劉細(xì)華.用于測(cè)量體溫的無(wú)線實(shí)時(shí)監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2005,1:59-61