基于nRF24L01和PIC16F877無(wú)線數(shù)據(jù)傳輸系統(tǒng)設(shè)計(jì)
引言
本文引用地址:http://m.butianyuan.cn/article/172663.htm在工業(yè)控制現(xiàn)場(chǎng), 常常需要采集大量的現(xiàn)場(chǎng)數(shù)據(jù), 如溫度、濕度、氣壓等, 并將這些數(shù)據(jù)傳輸?shù)街鳈C(jī)進(jìn)行處理,由主機(jī)根據(jù)處理的結(jié)果, 將控制信號(hào)傳輸給現(xiàn)場(chǎng)執(zhí)行模塊進(jìn)行各種操作。可以看出數(shù)據(jù)從采集設(shè)備到處理終端,監(jiān)測(cè)控制指令從處理終端到采集設(shè)備,均需經(jīng)過(guò)傳輸過(guò)程這一重要環(huán)節(jié)。當(dāng)數(shù)據(jù)采集點(diǎn)處于運(yùn)動(dòng)狀態(tài),或者所處的環(huán)境不允許鋪設(shè)電纜,采集設(shè)備必須與終端設(shè)備分離,此時(shí)只能通過(guò)無(wú)線方式進(jìn)行數(shù)據(jù)傳輸。基于此,本文設(shè)計(jì)了一個(gè)無(wú)線數(shù)據(jù)傳輸系統(tǒng),它應(yīng)用Microchip公司的PIC16F877單片機(jī)控制Nordic公司的無(wú)線數(shù)字傳輸芯片nRF24L01 ,通過(guò)無(wú)線方式進(jìn)行數(shù)據(jù)雙向傳輸。實(shí)驗(yàn)結(jié)果證明:該系統(tǒng)使用靈活、成本低廉,可方便地嵌入到無(wú)線監(jiān)測(cè)系統(tǒng)中。
1.系統(tǒng)總體結(jié)構(gòu)設(shè)計(jì)
圖1為系統(tǒng)設(shè)計(jì)總體框圖。此無(wú)線數(shù)據(jù)傳輸系統(tǒng)主控制芯片采用Microchip公司的PIC16F877微處理器,它負(fù)責(zé)控制無(wú)線芯片L01,實(shí)現(xiàn)數(shù)據(jù)的無(wú)線傳輸。為了進(jìn)行多通道的數(shù)據(jù)采集,這里采用10片A/D進(jìn)行分時(shí)采樣,它們的工作時(shí)序則由CPLD來(lái)控制,每路采集的數(shù)據(jù)經(jīng)單片機(jī)處理后無(wú)線發(fā)射,至于何時(shí)采樣,則由單片機(jī)發(fā)的Trigger信號(hào)決定。 在與計(jì)算機(jī)的通訊方面,系統(tǒng)采用USB芯片通過(guò)USB口將無(wú)線接收數(shù)據(jù)送入計(jì)算機(jī),并存儲(chǔ)在一個(gè)二進(jìn)制文件內(nèi),當(dāng)傳輸完畢后,運(yùn)行VB讀數(shù)軟件,可將采集的信號(hào)讀出以供分析。
2.系統(tǒng)硬件設(shè)計(jì)
2.1 數(shù)據(jù)采集部分
數(shù)據(jù)采集部分主要由傳感器、低通濾波放大器、A/D以及CPLD組成,電源管理則主要為各個(gè)芯片提供合適工作電壓,并為CPLD提供1MHZ主時(shí)鐘輸入。此系統(tǒng)采用10片AD7492,可進(jìn)行10路模擬信號(hào)的采樣。CPLD主要控制10片A/D的采樣和讀數(shù)時(shí)序,采樣率由CPLD內(nèi)部分頻器和無(wú)線傳輸率大小決定。為了配合無(wú)線傳輸模塊的工作,這里采用觸發(fā)采樣。即在CPLD內(nèi)部設(shè)計(jì)D觸發(fā)器,并用VCC連接D輸入端,Trigger信號(hào)作為時(shí)鐘輸入,如圖2所示。系統(tǒng)上電后,CPLD便檢測(cè)其引腳Trigger端,當(dāng)出現(xiàn)上升沿時(shí), D觸發(fā)器輸出高電平,打開與非門,Convast就會(huì)輸出1KHz信號(hào),A/D采樣開始。
2.2 無(wú)線傳輸部分
數(shù)據(jù)傳輸主要利用PIC16F877單片機(jī)對(duì)無(wú)線射頻芯片L01的控制實(shí)現(xiàn)的。nRF24L01是單片射頻收發(fā)芯片,工作于2.4~2.5GHzISM頻段,工作電壓為1.9V~3.6V,工作溫度為- 40℃~+ 85℃,有多達(dá)125個(gè)頻道可供選擇,最高通信速率2Mbit/s ,具有自動(dòng)應(yīng)答和重發(fā)功能,其工作參數(shù)全部通過(guò)芯片狀態(tài)字配置,而這些配置字是由PIC16F877通過(guò)SPI[1]訪問(wèn)L01的。L01主要技術(shù)為:
工作模式 :CE,CSN,SCK,MOSI,MISO,IRQ這6個(gè)管腳為該芯片的控制引腳。微處理器通過(guò)對(duì)這6個(gè)引腳的控制就可以決定該芯片的工作模式。當(dāng)PWR_UP、PRIM_RX和CE為“111”時(shí),L01處于接收模式;為“101”時(shí)處于發(fā)射模式;為“1X0”時(shí)處于空閑模式1;為“0XX”時(shí)處于掉電模式。
增強(qiáng)型ShockBurst技術(shù):L01融進(jìn)了增強(qiáng)型ShockBurst技術(shù),該項(xiàng)技術(shù)使得雙向通信協(xié)議變得簡(jiǎn)單。在一個(gè)典型的雙向通信中,接收方在收到發(fā)射方的數(shù)據(jù)時(shí),將會(huì)向發(fā)射方回傳一個(gè)應(yīng)答信號(hào),若接收方未收到該數(shù)據(jù),發(fā)射方在等待一定延遲時(shí)間后將自動(dòng)重發(fā)此包數(shù)據(jù)(在自動(dòng)重發(fā)功能開啟的情況下),這都不需要CPU的參與。
數(shù)據(jù)通道:當(dāng)L01處于接收狀態(tài)時(shí),它可以接收來(lái)自6個(gè)不同通道的數(shù)據(jù)。每個(gè)通道都有一個(gè)屬于自己的通道地址,但共享同一頻道。也就是說(shuō),一個(gè)配置為接收模式的L01可以和6個(gè)配置為發(fā)射模式下的L01進(jìn)行通信,接收機(jī)可以根據(jù)它們的通道地址進(jìn)行區(qū)分。通道0有一個(gè)40位的地址,通道1—5則共享高32位地址,只是低8位不同。每個(gè)通道都能開啟自動(dòng)重發(fā)射和自動(dòng)應(yīng)答功能。處于接收狀態(tài)下的L01在回傳應(yīng)答信號(hào)時(shí),將利用該接收通道的地址作為發(fā)射應(yīng)答信號(hào)的發(fā)射地址。在發(fā)射設(shè)備中,通道0常用于接收應(yīng)答信號(hào)。發(fā)射數(shù)據(jù)的地址必須和接收通道0的地址一致 ,這樣才能有效地接收應(yīng)答信號(hào)。
數(shù)據(jù)包描述:“1字節(jié)字頭 + 3~5字節(jié)地址 + 9Bit標(biāo)志位 + 1~2字節(jié)CRC”。 當(dāng)L01要發(fā)送數(shù)據(jù)時(shí),微控制器要先把地址和有效數(shù)據(jù)寫入L01緩存區(qū),然后由L01自動(dòng)產(chǎn)生字頭和CRC校驗(yàn)碼,之后再發(fā)射出去。
2.3 USB接口設(shè)計(jì)
系統(tǒng)采用USB芯片F(xiàn)T245,由單片機(jī)控制讀寫操作。FT245提供了一些狀態(tài)標(biāo)志位(RXF,TXE)供單片機(jī)查詢,以便讓單片機(jī)發(fā)讀寫脈沖執(zhí)行讀寫操作,控制非常簡(jiǎn)單。
3.軟件設(shè)計(jì)
要設(shè)計(jì)好系統(tǒng)的軟件,必須清楚其工作原理:首先給發(fā)射機(jī)上電,配置其L01為PRX,使其進(jìn)入接收模式等待主機(jī)的握手指令,此時(shí)采集裝置并未開始工作。然后將接收機(jī)通過(guò)USB接口連接計(jì)算機(jī),運(yùn)行VB程序,點(diǎn)擊開始試驗(yàn)按鈕,握手指令(H’33’)便通過(guò)接收機(jī)的L01 (上電配置為PTX)發(fā)射出去,發(fā)射機(jī)在接收到握手指令后,還要做出判斷,若不是H’33’,則繼續(xù)等待握手指令;若是,表示雙方建立連接成功,此時(shí)發(fā)射機(jī)的L01便配置為PTX,同時(shí)單片機(jī)向采集裝置發(fā)送一脈寬為3.6us的高電平脈沖以激活A(yù)/D,使其開始采樣,采樣率為1KHz。由于每路傳感器信號(hào)都要被A/D采樣,并轉(zhuǎn)換為12bit數(shù)字量(認(rèn)為是2 Byte),那么10通道則為20 Byte,經(jīng)過(guò)單片機(jī)處理后再送入L01打包發(fā)射。350us之后,接收機(jī)收到該數(shù)據(jù),并通過(guò)單片機(jī)和USB芯片實(shí)時(shí)寫入計(jì)算機(jī)緩存區(qū)內(nèi),這樣雙方數(shù)據(jù)傳輸10000次,每次20Byte,傳輸完畢后數(shù)據(jù)曲線會(huì)在VB界面上實(shí)時(shí)顯示。
基于以上分析,該系統(tǒng)軟件分為兩部分:單片機(jī)控制程序和計(jì)算機(jī)界面程序。前者主要完成以nRF24L01為核心的多通道信號(hào)的采集和無(wú)線傳輸,后者則完成信號(hào)的顯示,以供研究人員分析。本文只介紹控制程序,它采用模塊化程序設(shè)計(jì)方法, 分為發(fā)射機(jī)程序和接收機(jī)程序兩部分。其流程圖如圖3所示。
由于采集系統(tǒng)以1KHz進(jìn)行采樣,即每1ms送20Byte數(shù)據(jù),因此無(wú)線部分進(jìn)行一次傳輸需1ms。若接收機(jī)執(zhí)行接收子程序不夠1ms,則必須通過(guò)延遲補(bǔ)夠,以和發(fā)射同步。另外,在接收機(jī)程序中特設(shè)置800us定時(shí)器中斷,以防接收機(jī)因接收不到數(shù)據(jù)而長(zhǎng)時(shí)間等待,影響數(shù)據(jù)的傳輸效率。
4.問(wèn)題分析
本系統(tǒng)在運(yùn)行時(shí)出現(xiàn)了一些問(wèn)題,使其不能正常工作,現(xiàn)說(shuō)明如下:
?、?L01在收發(fā)轉(zhuǎn)換時(shí)出現(xiàn)問(wèn)題;
原因:配置字并未寫入L01內(nèi)。
?、?數(shù)據(jù)傳輸時(shí)發(fā)現(xiàn)其低八位為零,但高四位有數(shù);
原因:開啟了單片機(jī)的PSP功能,導(dǎo)致D口不能用了。
?、?數(shù)據(jù)傳輸波形圖嚴(yán)重失真;
原因:無(wú)線模塊在收發(fā)同步上存在問(wèn)題,數(shù)據(jù)包之間沒(méi)有一一對(duì)應(yīng)。
5.實(shí)驗(yàn)結(jié)果
本系統(tǒng)需進(jìn)行10000次數(shù)據(jù)傳輸,每次傳輸20字節(jié)。傳輸數(shù)據(jù)時(shí)務(wù)必保證發(fā)射機(jī)和接收機(jī)的同步性,否則數(shù)據(jù)包之間將會(huì)出現(xiàn)錯(cuò)位,得到的數(shù)據(jù)曲線會(huì)嚴(yán)重失真,影響分析,所以同步問(wèn)題在無(wú)線數(shù)據(jù)傳輸系統(tǒng)占重要地位?,F(xiàn)附上本系統(tǒng)在同步良好情況下的無(wú)線數(shù)據(jù)傳輸波形圖,見圖4。圖中的10條曲線是傳感器信號(hào)被10片A/D采樣后經(jīng)無(wú)線傳輸至計(jì)算機(jī)后通過(guò)VB界面顯示出的,中間幅值較高的曲線是兩路正弦波,其余為基線。
6.結(jié)論
本系統(tǒng)控制方便、工作穩(wěn)定,能實(shí)現(xiàn)可靠的無(wú)線數(shù)據(jù)傳輸。經(jīng)大量實(shí)驗(yàn)測(cè)得:該系統(tǒng)的平均傳輸率可以達(dá)到256Kbps,平均誤碼率只有0.2%,可滿足絕大部分無(wú)線數(shù)據(jù)傳輸?shù)男枰?/p>
評(píng)論