1 模塊總體硬件結構
模塊總體硬件結構主要由微控制器和藍牙芯片及其相應的外圍電路組成,能自動完成波特率識別,并進行數據的編碼處理,給用戶提供了一個透明的數據接口。微控制器選用Atmel公司新推出的具有可在線編程(ICSP)功能的單片機AT89S51,便于以后軟件的升級。根據發送數據是否需要曼徹斯特編碼、所需外圍元件的數量、功耗及發射功率等方面因素的綜合比較,選用nRF401芯片作為無線數據傳輸芯片。
nRF401是單片無線收發芯片,采用藍牙核心技術設計,內部集成高頻發射、高頻接收、PLL合成、FSK調制、FSK解調、多頻道切換等諸多功能和外圍部件協議。它是目前集成度最高的無線數據傳輸產品,也是目前唯一一個可以直接連接微控制器串口進行異步數據傳輸、無需進行曼徹斯特編碼的無線收發芯片。nRF401發射功率最大為10 mw,工作電壓為2.7~5 V,發射電流為8~30 mA,接收電流約為10 mA,待機電流為8 μA,靈敏度為-105dBm,20腳8 mm×7 mm的SOIC封裝;所需外部元件很少,僅外接一個晶振和幾個阻容、電感元件;基本無需凋試,傳輸速率最高為19.2 kbps,工作頻段為433/434 MHz,有2個信道,調制方式FSK。
nRF401端口中與微控制器相關的有5個:DIN和DOUT用于異步串行通信,DIN的數據方向為微控制器到無線芯片,DOUT則相反;CS選擇芯片頻段,CS=0時為433.92 MHz,CS=1時為434.33 MHz,在本模塊中將該引腳引出,以方便用戶的控制,當一個頻段無法工作時,可以設置為另一個工作頻段,提高了系統的抗干擾能力;PWR_UP用于芯片節電控制,PWR_UP=0時為掉電(節電模式),PWR_UP=1時為上電(工作模式),在該模塊中同樣將其引出,當不需要無線發射和接收時,用戶可將芯片設置為節電模式以降低系統功耗;TXEN選擇芯片處于發射或接收狀態,TXEN=0時為接收狀態,TXEN=1時為發送狀態。
PCB板布局和電源去耦設計對于RF射頻電路獲得較好的性能是必要的,電路板采用1.6 mm厚FR4板材的兩層PCB,底層鋪銅面,并在元件層空白區鋪銅;多打通孔連接上下層,銅面與地線相連,天線下底層不鋪銅,VSS直接與銅層連接,并保證關鍵元件有充分的接地。所有開關數字信號和控制信號都不能經過PLL環路濾波器元件和VCO電感附近。直流供電在離VDD腳盡可能近的地方用高性能的電容去耦,去耦使用1個小電容(0.01μF)和1個大電容(2.2μF)并聯,并避免較長的電源走線。
2 硬件設計及軟件實現
2.1 微控制器與nRF401接口設計
微控制器AT89S51與藍牙芯片nRF401的接口電路如圖2所示。nRF401芯片只需10個左右的元件即實現了數據收發功能,應用極其方便。其TXEN端為數據收發選擇端,當設定為發送模塊時,將其置為高電平;同時,DIN引腳與微控制器的TXD端相連,微控制器的RXD端作為預留接口與外部主控單片機的TXD相連。若設計為接收模塊,則將TXEN端置為低電平;同時,DOUT引腳與微控制器的RXD端相連,微控制器的RXD引腳與外部主控單片機的TXD引腳相連。模塊與外部單片機的通信波特率為自動檢測方式,受nRF401芯片通信速率的限制,可以工作在1 200~19 200 bps。模塊上預留ICSP接口,可在系統編程,方便程序的升級;同時具有良好的防竊密功能,不易破解。
2.2 串口模擬及波特率自適應的實現
模塊上的微控制器AT89S51既要控制nRF401芯片實現與外界的數據交換功能,又必須受控于模塊外部的主控單片機,因此AT89S51必須能同時與nRF401芯片和片外主控單片機通信;但AT89S51只有一個UART,無法滿足要求。為解決這一予盾,通常的做法是擴展一片8251或8250通用同步/異步接收發送芯片(USART),但會額外占用單片機I/O資源,增加系統的成本,同時也增大了PCB板的布局面積。在本系統中用單片機普通I/O口模擬串行口,利用該方法還可擴展多個外部串行端口,實現多機通信。
要實現用普通的I/O口模擬串口,必須首先確定串行口的通信速率(即波特率)。本系統中,該模塊設計成波特率為1 200~19 200 bps自適應式的通信模塊,自身的波特率能隨主控單元的變化而自動調整,使系統適應性更強,更智能化,因此,必須首先解決好波特率自動檢測識別的問題。
2.2.1 波特率自動檢測識別的實現
波特率自動檢測識別的常用方法主要有兩種。
(1) 標準波特率窮舉法
標準波特率窮舉法要求主機側的波特率必須在有限的幾個固定數值之間變化,如300~9 600的標準值;同時從機側的工作振蕩頻率已知且穩定。從機啟動通信程序后,逐個嘗試以不同的波特率接收主機發出的特定字符,直到能正確接收為止。因此,該方法的運用有一定的局限性。
(2) 碼元寬度實時檢測法
碼元寬度實時檢測法是先通過單片機的定時器測量接收(RXD)引腳上輸入數據的碼元寬度,即機器周期的計數值,而后用軟件計算出波特率發生寄存器的值。該方法由于適用范圍廣、操作靈活,因而應用較為普遍。
在本系統中用碼元寬度實時檢測法確定出主機的波特率,而后從機自身進行相應的設置。理論上,只要能夠測出一個碼元的寬度就能確定出數據傳輸的波特率;但在實際測量過程中,為保證測量的準確性,通常采取測量連續8個碼元寬度的方法。這里,采用了較為常用的異步串行通信數據格式(即1個起始位、8個數據位、無校驗、1個停止位,發送時低位數據在前,高位在后),因此連續8個碼元寬度的時間可以通過在主機側發0x80H的方式實現,其波形如圖3所示。起始位加7個碼元寬度的低電平,剛好構成8個脈寬的低電平。單片機采用串口中斷的方式接收數據,當有數據到達時,打開定時器,同時不斷查詢接收引腳的狀態;當RXD變為高電平后停止計數,這樣單片機就可以測量出此低電平持續的寬度。
設主機側的波特率為BPS,其值未知,則此時連續8個碼元的寬度計算公式為:
設模塊內AT89S51單片機的工作頻率為fOSC,用定時器T1方式2(常數自動裝入方式)產生波特率,串行口工作在方式1,此時串口的波特率BAUD由定時器T1的溢出率和SMOD位同時決定。
當T1用作波特率發生器時,寄存器TL1用作計數器,而自動重裝的值放在TH1內,設初始值為X,則每過“256-X”個機器周期,定時器T1就會產生一次溢出。為了避免因溢出而產生不必要的中斷,此時禁止T1中斷。AT89S51內部機器周期為振蕩周期的12分頻,因此,T1的溢出周期為:
設AT89S51內部定時器T1測量連續8個碼元計數值為M,由于是對內部的機器周期計數,且機器周期是內部振蕩周期的12分頻,所以總數為M的機器周期代表的實際時間是:
由式(9)可以看出,其初值不依賴于單片機的工作頻率,因此,只要單片機的工作頻率相對穩定即可,對具體數值無要求。
另外,需要說明的是,對于串行異步通信,通信雙方的波特率不必嚴格相等,只要雙方的差別在一定的范圍之內,就可以實現準確的通信。
2.2.2 軟件模擬串口的實現
波特率確定以后,即可用軟件模擬實現串行口。就單片機而言,要實現模擬串口,必須解決好時序問題,不能造成通信過程中的數據丟失,為此,采用單片機的外部中斷0口的下降沿觸發功能模擬串口數據接收線RXD,P1.2口模擬串口數據發送線TXD,定時器T0以定時中斷方式對接收碼元采樣或發送數據流,實現了一個軟件的串口。
對于軟件模擬串口,關鍵在于解決好時序問題。本系統中,充分利用了nRF401芯片半雙工通信的特點(即數據發送和接收不能同時進行),成功地實現了一個軟件串行口。串行數據的發送實現相對較為簡單,只需利用定時器使發送出去的碼元維持一定的時間寬度;實現異步串行接收的關鍵是起始位的檢測和信息位的準確提取。任何時候數據傳送都可能發生,故要求接收方必須能夠及時準確地接收數據,而通信過程中沒有同步信號,因此串行數據的提取相對而言具有一定的難度。為此,采用AT89S51的外部中斷0口模擬RXD,并沒置其中斷方式為邊沿觸發,平常維持其為高電平。由于起始位為低電平,因此,當有數據到達后就會產生中斷,則根據波特率設置的定時時間間隔進行數據采樣,即可實現串行數據的接收。
結 語
基于本思想設計的無線數據傳輸模塊,已成功地運用于“磁柵式浮動檢測儀”項目中。經實踐檢驗,系統工作穩定可靠,具有一定的工程實用價值。
責任編輯:gt
-
微控制器
+關注
關注
48文章
7542瀏覽量
151316 -
芯片
+關注
關注
455文章
50714瀏覽量
423155 -
接口
+關注
關注
33文章
8575瀏覽量
151021
發布評論請先 登錄
相關推薦
評論