具有波特率自適應功能的無(wú)線(xiàn)數據傳輸模塊設計
1 模塊總體結構
基于nRF401無(wú)線(xiàn)數據傳輸器件的數傳模塊總體硬件結構如圖1所示,主要由微控制器和藍牙芯片及其相應的外圍電路組成,能自動(dòng)完成波特率識別,并進(jìn)行數據的編碼處理,給用戶(hù)提供了一個(gè)透明的數據接口。微控制器選用Atmel公司推出的可在線(xiàn)編程的單片機AT89S51,便于以后軟件的升級。通過(guò)對發(fā)送數據是否需要曼徹斯特編碼、所需外圍元件的數量、功耗及發(fā)射功率等方面的因素綜合比較,選用nRF40l作為無(wú)線(xiàn)數傳器件。
nRF401是單片無(wú)線(xiàn)收發(fā)器件,采用藍牙核心技術(shù)設計,內部集成高頻發(fā)射、高頻接收、PLL合成、FSK調制、FSK解調、多頻道切換等諸多功能和外圍部件協(xié)議,是目前集成度最高的無(wú)線(xiàn)數傳產(chǎn)品,也是唯一可以直接連接微控制器串口進(jìn)行異步數據傳輸且無(wú)需曼徹斯特編碼的無(wú)線(xiàn)收發(fā)器。nRF401發(fā)射功率最大為10 mW,工作電壓為2.7 V~5 V,發(fā)射電流為8 mA~30 mA,接收電流約10 mA,待機電流為8 μA,靈敏度為-105 dBm,采用20引腳8 mmx7 mm的SOIC封裝。所需外部元件很少,僅外接一個(gè)晶體和幾只阻容、電感元件,無(wú)需調試,傳輸速率最高達19.2 kb/s,工作頻段為433/434 MHz,有兩個(gè)信道,調制方式為FSK。
nRF401有5個(gè)端口與微控制器相關(guān):DIN和DOUT用于異步串行通信,DIN的數據方向為微控制器到nRF40l,DOUT相反;CS選擇工作頻段,CS=0時(shí)頻段為433.92 MHz,CS=1時(shí)為434.33 MHz,在該模塊中將CS引腳引出,方便用戶(hù)控制,在一個(gè)頻段無(wú)法工作時(shí),可以設置為另一個(gè)工作頻段,提高了系統的抗干擾能力;PWR_UP用于節電控制。PWR_UP=0時(shí)為掉電(節電)模式,PWR_UP=1時(shí)為上電(工作)模式,在該模塊中同樣將其引出,在不需要無(wú)線(xiàn)發(fā)射和接收時(shí),用戶(hù)可將器件設置為節電模式以降低系統的功耗;TXEN選擇發(fā)射或接收狀態(tài),TXEN=0時(shí)為接收,TXEN=1時(shí)為發(fā)送。
PCB布局和電源去耦設計對于RF射頻電路獲得較好的性能是必要的,電路板采用1.6mm厚FR4板材的兩層PCB,底層覆銅面,并在元件層空白區覆銅,多打通孔連接上下層,銅面與地線(xiàn)相連,天線(xiàn)下底層不覆銅,VSS直接與銅層連接,并保證關(guān)鍵元件充分接地。所有開(kāi)關(guān)數字信號和控制信號都不能經(jīng)過(guò)PLL環(huán)路濾波器元件和VCO電感附近。直流供電在離VDD引腳盡可能近的地方用高性能的電容去耦,去耦使用一只小電容(0.01μF)和一只大電容(2.2μF)并聯(lián),避免較長(cháng)的電源走線(xiàn)。

2 硬件設計及軟件實(shí)現
2.1 微控制器與nRF401接口設計
圖2為微控制器ATr89S51與nRF401的接口電

路,nRF401只需10個(gè)左右的元件即可實(shí)現數據收發(fā),應用極其方便。其PSEN為數據收發(fā)選擇端,當設定為發(fā)送模塊時(shí),PSEN接為高電平,同時(shí),DIN引腳與微控制器的TX端相連,微控制器的RXD端作為預留接口與外部主控單片機的TXD相連:若設計為接收模塊,則PSEN接低電平,同時(shí),DOUT引腳與微控制器的RX端相連,RXD引腳與外部微控制器的TXD引腳相連。模塊與外部單片機的通訊波特率為自動(dòng)檢測方式,受nRF401通訊速率的限制。該模塊可以工作在1 200 b/s~19.2 kb/s之間。模塊上預留ICSP接口,可以系統在線(xiàn)編程。方便程序升級。還同時(shí)具有良好的防竊密功能,不易破解。
2.2 串口模擬及波特率自適應的實(shí)現
對于模塊上的片上主控單片機AT89S51而言,既要控制nRF401完成與外界的數據交換。同時(shí)自身又必須受控于模塊外部的主控單片機,因此。AT89S51必須能同時(shí)與nRF401及片外主控單片機通訊,但AT89S51只有一個(gè)UART,無(wú)法滿(mǎn)足要求,為解決這一矛盾,通常的方法是擴展一片8251或8250通用同步/異步接收發(fā)器(USART),但需額外占用單片機I/O資源,增加了系統的成本,同時(shí)也增大了PCB板的布局面積。本系統則采用單片機普通I/O口模擬串行口,利用該方法還可擴展多個(gè)外部串行端口,實(shí)現多機通信。
利用普通I/O口模擬串口,必須首先確定串口的通信速率即波特率,在本系統中,該模塊設計是波特率為1 200 b/s~19.2 kb/s自適應式的通信模塊,使自身的波特率隨主控單元的 調整而自動(dòng)調整,系統適應性更強,更具智能化,因此首先必須解決好波特率自動(dòng)檢測與識別的問(wèn)題。
2.2.1 波特率自動(dòng)檢測識別的實(shí)現
常用的波特率自動(dòng)檢測方法主要有兩種:
(1)標準波特率窮舉法。
標準法特率窮舉法適用于主機側的波特率必須在有限的幾個(gè)固定數值之間變化。如300b/s~9.6 kb/s之間的標準值;且從機側的工作振蕩頻率已知且穩定。從機啟動(dòng)通信程序后,逐個(gè)嘗試以不同的波特率接收主機發(fā)出的特定字符,直到能正確接收為止。因此,該方法的運用具有一定的局限性。
(2) 碼元寬度實(shí)時(shí)檢測法。
該方法是先通過(guò)單片機的定時(shí)器測量RX引腳上輸人數據的碼元寬度,即機器周期的計數值,之后用軟件計算出波特率發(fā)生寄存器的值。該方法由于適用范圍廣、操作靈活,因而應用較為普遍。
本系統首先用碼元寬度實(shí)時(shí)檢測法確定主機的波特率,之后從機自身進(jìn)行相應設置。就理論而言,只要能夠測出一個(gè)碼元的寬度就能確定數據傳輸的波特率,但在實(shí)際測量過(guò)程中,為保證測量的準確性,通常采取測量連續8個(gè)碼元寬度的方法。這里采用了較為常用的異步串行通信數據格式,即1個(gè)起始位、8個(gè)數據位、無(wú)校驗、1個(gè)停止位。發(fā)送時(shí)低位數據在前,高位在后,因此連續8個(gè)碼元寬度的時(shí)間可以通過(guò)在主機側發(fā)0x80H的方式實(shí)現,其波形如圖3所示。起始位加7個(gè)碼元寬度的低電平,恰好構成8個(gè)脈寬的低電平。單片機采用串口中斷的方式接收數據,當有數據到達時(shí),打開(kāi)定時(shí)器,同時(shí)不斷查詢(xún)接收引腳的狀態(tài),當RXD變?yōu)楦唠娖胶笸V褂嫈?,這樣單片機就可以測量出低電平持續的寬度。

設主機側的波特率為BPS,其值未知,則此時(shí)連續8個(gè)碼元的寬度計算公式為:

設模塊內AT89S51單片機的工作頻率為fosc,用定時(shí)器1方式2常數自動(dòng)裝入方式產(chǎn)生波特率,串行口工作在方式1,此時(shí)串口的波特率由定時(shí)器T1的溢出率和SMOD位同時(shí)決定。即:

當T1用作波特率發(fā)生器時(shí),TL1用作計數器,而自動(dòng)重裝的值放在TH1內,設初始值為X,則每"256-X"個(gè)機器周期,定時(shí)器T1就會(huì )產(chǎn)生一次溢出。為了避免因溢出而產(chǎn)生不必要的中斷,此時(shí)禁止T1中斷。AT89S51內部機器周期為振蕩周期的12分頻,因此,定時(shí)器T1的溢出周期為:

將式(3)代入式(2)得出此時(shí)的波特率為:

設此時(shí)模塊的波特率與主機側的波特率相等,即:

設AT89S51內部定時(shí)器T1測連續8個(gè)碼元計數值為M,由于是對其內部的機器周期計數,且機器周期是內部振蕩周期的12分頻,所以,總數為M的機器周期代表的實(shí)際時(shí)間是:

很明顯,式(6)與式(7)應相等,因此有如下公式成立:

由上式則可得出,單片機定時(shí)器T1初值在波特率自適應情況下的計算公式:

由式(9)可以看出,其初值不依賴(lài)于單片機的工作頻率,因此,只要單片機的工作頻率相對穩定即可,對具體數值無(wú)要求。
另外,需要說(shuō)明的是,對于串行異步通信而言,通信雙方的波特率不必嚴格相等,只要雙方的差別在一定的范圍之內,就可實(shí)現準確通信。
2.2.2 軟件模擬串口的實(shí)現
當波特率確定以后,即可用軟件模擬實(shí)現串行口。對單片機而言,要實(shí)現模擬串口的關(guān)鍵是必須解決好時(shí)序問(wèn)題,不能造成通信過(guò)程中的數據丟失,為此,采用單片機的外部中斷0口的下降沿觸發(fā)功能,模擬串口數據接收線(xiàn)RXD,P1.2口模擬串口數據發(fā)送線(xiàn)TXD,定時(shí)器0以確定中斷方式對接收碼元采樣或發(fā)送數據流,實(shí)現一個(gè)軟件的串口。
對于軟件模擬串口而言,關(guān)鍵是必須解決好時(shí)序問(wèn)題。本系統充分利用了nRF40l器件半雙工通信的特點(diǎn),即數據發(fā)送和接收不同時(shí)進(jìn)行,成功實(shí)現了一個(gè)軟件串行口。串行數據發(fā)送的實(shí)現相對較為簡(jiǎn)單,只需利用定時(shí)器讓發(fā)送出去的碼元維持一定的時(shí)間寬度即可,實(shí)現異步串行接收的關(guān)鍵是起始位的檢測和信息位的準確提取。任何時(shí)候數據傳送都可能發(fā)生,故要求接收方必須能夠及時(shí)準確地接收數據,而通信過(guò)程中沒(méi)有同步信號,因此,串行數據的提取相對而言具有一定的難度。所以,文中采用AT89S51的外部中斷0口模擬RXD,并設置其中斷方式為邊沿觸發(fā),平常保持為高電平,起始位為低電平,因此,當有數據到達時(shí)產(chǎn)生中斷,根據波特率設置的定時(shí)時(shí)間間隔進(jìn)行數據采樣,即可實(shí)現串行數據的接收。
3 結束語(yǔ)
本文設計的無(wú)線(xiàn)數據傳輸模塊已成功運用于"磁柵式浮動(dòng)檢測儀"項目中,經(jīng)實(shí)踐檢驗,系統工作穩定可靠,具有一定的工程實(shí)用價(jià)值。
評論