黃 婷,施國梁,黃 坤
(蘇州大學電子信息學院,蘇州215006)
無線通信是當前發展最快的技術之一,已滲透到社會的各個角落,有著廣闊的市場和業務需要。目前主要的無線技術有:藍牙(Bluetooth),紅外數據傳輸(IrDA),無線局域網(Wi- Fi)等[1]。Bluetooth是一種無線數據與語音通信的開放性全球規范,其實質是為固定設備或移動設備之間的通信環境建立通用的近距無線接口,但由于芯片大小和價格難以下調,使得許多用戶不愿意花大價錢來購買這種無線設備;IrDA是一種利用紅外線進行點對點通信的技術,是第一個實現無線個人局域網(PAN)的技術,但它對于點對多點的通信顯得無能為力,且紅外技術只能在視線可以達到的范圍內定向傳輸,中間不能有任何阻擋,同時要求通信設備的位置相對固定,這樣就無法應用于移動設備;Wi-Fi是以太網的一種無線擴展,主要目的是提供WLAN接入,但由于其硬件實現需要很大的容納空間,且往往在商用計算機系統中實現,這就限制了其在工業領域,尤其是在某些不依賴通用計算機的特殊工業場合的應用。
針對這些問題提出了一種功耗低、成本低且利于在嵌入式系統中實現的通用無線通信系統,它基于無需申請就可使用的433MHz ISM頻段,可廣泛適用于消費類電子、無線遙控玩具、汽車用自動化、家庭自動化控制及建筑安全裝置等領域。
系統主要包括兩個分別具有收發功能的無線通信模塊,每個模塊均由單片機和無線收發芯片RF組成。系統的原理框圖如圖1所示,發送時,單片機通過SPI總線向RF寫入控制命令及所需發送的數據,RF通過天線發送出去;接收時,單片機通過SPI總線讀取RF的工作狀態,獲取芯片相關信息及接收到的數據。兩個收發模塊之間相互通信,從而實現數據的無線傳輸。

圖1 系統原理框圖
在本無線通信系統中,單片機作為系統核心主要完成數據處理和控制功能,保證系統工作在最佳狀態。選用宏晶科技生產的 STC12C5A60S2[2],它是高速、低功耗、超強抗干擾的新一代51系列單片機,指令代碼完全兼容傳統的8051,但速度快8-12倍,工作頻率范圍是0MHz~35MHz。該型單片機有一個顯著特點是使用時無需專用編程器/仿真器,而是通過串口(P3.0/P3.1)即可直接下載用戶程序,且同一串口還可用于調試。它還具有高速SPI串行通信端口和硬件看門狗功能(WDT),采用宏晶最新的第六代加密技術,有全球唯一ID號,無法解密,能完全滿足本系統低成本和相應的功能要求。
無線收發芯片用于在系統中實現高性能雙向無線通信,要求它同時能滿足低成本與低功耗的要求,本系統選用了Integration Associates公司的射頻芯片IA4421[3],這是款全集成的低功耗、多頻道的 FSK收發器,應用時具有高度靈活性且無需統調。該收發器內部集成包括高頻功率放大器(PA)、低噪聲放大器(LNA)、I/Q轉換混頻器、基帶濾波器、放大器、I/Q解調器,可見它已集成全部的射頻功能,使用時僅需要附加晶振與去耦電容。
在硬件接口方面主要考慮系統部件之間的兼容性和效率。而 SPI(Serial Peripheral Interface)[2]總線是Motorola公司提出的一種同步串行接口技術,允許MCU之間及MCU與各種外圍設備以串行方式進行通信與數據交換。本系統中的MCU與射頻芯片同時支持SPI接口,因此在設計時SPI將被用于系統內部控制與數據通信接口。SPI使用的是四線制,分別是:SS(從器件選擇線)、MISO(主機輸入/從機輸出數據線)、MOSI(主機輸出/從機輸入數據線)和SCK(串行時鐘信號)。SPI傳輸數據時,在主機輸出時鐘SCK的控制下,主機與從機的兩個雙向移位寄存器進行循環數據交換,實現全雙工數據傳輸。
本無線通信系統硬件電路主要由三個部分組成:STC12C5A60S2單片機、IA4421收發器、MAX232芯片。具體電路實現如圖2所示,其中STC12C5A60S2通過SPI總線讀寫IA4421的工作狀態與控制字,獲取并處理相關信息,系統中設置了RS232串行接口,主要用于實現程序下載和調試功能。

圖2 STC12C5A60S2與IA4421的SPI接口電路
STC12C5A60S2單片機的從選擇線(SS)、主輸出線(MOSI)、主輸入線(MISO)和時鐘信號(SCLK)分別連接到 IA4421的相應功能引腳 nSEL、SDI、SDO和SCK。IA4421支持天線直接驅動,這使得天線部分實現起來相當簡單,僅需使用一個50Ω的外接螺旋天線加上對應的差分電路就可以了[4]。為了節省成本,對于不需要遠距傳輸的情形,可以在模塊中使用螺旋導線制作的簡易天線來滿足數據通信要求,本系統正是這樣實現的,并且經過實驗驗證,使用適當形狀的螺旋導線制作的簡易天線實際有效的通信距離能達到100m左右,對于一般實時控制系統的應用要求是足夠了。若用戶需要更遠的傳輸距離則應設計433MHz的外接 PCB諧振天線[3]。STC12C5A60S2單片機、IA4421和MAX232的其它外圍電路,如電源、時鐘、復位電路等有許多標準的實現方案,不再贅述,讀者可參照相關的文獻[2-3]。
系統軟件設計首先需完成對各個芯片的初始化設計,接下來其主要工作是數據發送和接收程序。發送數據時單片機直接通過MOSI端口控制射頻器件發送數據,而接收時則要掃描單片機的MISO口,判斷是否有待接收的數據,下面具體說明單片機如何實現SPI與IA4421的初始化程序,及發送、接收子程序的功能與實現。
本無線通信系統幾乎所有的數據傳輸與芯片控制都是通過SPI實現的,SPI讀寫程序是軟件控制的基礎。為了使單片機的SPI控制器正常工作,需要先對其進行初始化設置,這可通過向SPI控制寄存器SPCTL和狀態寄存器SPSTAT寫入適當的控制字實現。它們是二個8位的寄存器,其中SPCTL的第2位時鐘相位CPHA允許用戶設置采樣和改變數據的時鐘邊沿,第3位時鐘極性位CPOL允許用戶設置時鐘極性。SPI接口有四種不同的數據傳輸時序,取決于CPOL和CPHL這兩位的組合。本系統中,STC12C5A60S2為 SPI主設備,IA4421為從設備,且要求SPICLK的極性在空閑時為低電平,用到SPI CPOL=0、CPHA=0的這種時序模式,數據在SCK的上升沿時移入到IA4421,并且器件會在SS生效之后的第一個上升沿時等待數據;如果時鐘的起始狀態是高電平,它在開始傳輸數據之前將下降以產生第一個上升沿。故初始化時我們首先對SPI控制寄存器SPCTL賦值0xD0,從高位到低位對每一位的功能描述如下:
SSIG=1:忽略SS腳,MSTR(位4)確定器件為主機還是從機;
SPEN=1:SPI使能;
DORD=0:數據字的MSB(最高位)先發送;
MSTR=1:STC12C5A60S2的SPI接口設置為主機模式;
CPOL=0,CPHA=0:SPICLK空閑時為低電平;
SPR1=0,SPR0=0:對應工作頻率為 CLK/4,CLK指的是CPU晶振的工作頻率。
同時需對SPI狀態寄存器SPSTAT賦值0xC0以完成其初始化過程,其中第7位SPIF為SPI傳輸完成標志位,當一次串行傳輸完成時,SPIF置位,當SPI處于主模式且SSIG=0時,如果當SS為輸入并被驅動為低電平,SPIF也將置位,通過軟件向其寫入“1”清零;第6位WCOL為SPI寫沖突標志,在數據傳輸過程中,如果對SPI數據寄存器SPDAT執行寫操作,WCOL將置位,通過軟件向其寫入“1”清零;其他六位保留。
STC12C5A60S2控制器需要對IA4421各個寄存器進行設置,保證其工作在規定的頻段和模式下。初始化時通過SPI總線對IA4421寫入控制命令[5],主要包括配置設定命令、電源管理命令、頻率設定命令、接收控制命令、數據濾波命令、FIFO和復位模式命令、自動頻率控制(AFC)命令,發射配置控制命令、喚醒定時器命令、低任務周期命令和電池低壓檢測以及微控制器時鐘分頻命令等,且每個命令字長度均為16位。
配置設定命令的高8位固定為0x80(若未說明,下面每個控制命令的高8位都固定,不再重復),對其賦值0x80dd使位7-6分別置“1”使能內部數據寄存器和FIFO模式,位5-4取值“01”使本系統工作頻段為433MHz,位3-0取值“1101”決定晶振負載電容大小為15pF。
電源管理命令對位5和位3置“1”使能整個接收鏈并打開晶振振蕩,故其賦值為0x820c。
頻率設定命令高4位固定為0xa,低12位F參數(位f11-f0)的范圍應在96~3903,由公式

可以計算出合成器的中心頻率F0,其中C1和C2的取值由工作頻率433MHz決定,故頻率設定命令賦值為0xa080。
接收控制命令的高5位固定,位10置“1”決定第16引腳功能是VDI(有效數據指示)輸出,第9-8位取值“00”決定VDI信號響應時間為快速,位7-5取值“100”選擇接收基帶帶寬(BW)為200kHz,位4-3取值“00”選擇LNA增益相關最大值為0dB,位2-0決定RSSI(接收的信號強度指示)檢測器門限,故接收控制命令賦值為0x9483。
數據濾波命令高8位、第5位和第3位固定,位7置“1”使時鐘獲取電路自動鎖定控制,且由位6決定其為快速模式,位4置“0”選擇數據濾波類型為數字濾波,位2-0決定DQD(數據質量檢測)門限參數,故數據濾波命令賦值為0xc2ec。
FIFO和復位模式命令位7-4決定FIFO的中斷級別,位3選擇同步格式長度為0x2DD4,位2設置FIFO輸入填充的啟動條件為同步格式,其開始和停止由位1決定,位0置“1”禁止高靈敏度的復位模式,故FIFO和復位模式命令賦值為0xca81。
AFC命令中位7-6選擇自動工作模式,以VDI信號的狀態獨立保持foffset的值,位5-0根據系統工作頻率對頻率偏移的相關值進行設置,故AFC命令賦值為0xc4e7。
發射配置控制命令的高7位固定,位8-4決定FSK解調參數輸出的頻率結果,位2-0取值“000”決定輸出功率為0dB,故發射配置控制命令賦值為0x9840。
喚醒定時器命令的高3位固定,通過公式

由位12-8M(m7到m4)和位7-0R(r4到r0)計算喚醒時間周期,本系統對其賦值為0xffff。
低任務周期命令設定后可以減少接收模式的平均功率,其任務周期占空比可通過公式

由位7-1D(d6到d0)和M計算,位0使能低任務周期模式,本系統未用到該模式,故低任務周期命令賦值為0xc80e。
電池低壓檢測和微控制器時鐘分頻命令的高8位和第4位固定,位7-5取值為“011”配置時鐘分頻為2MHz,位3-0(v3-v0)由公式

計算檢測器的Vlb定義的門限電壓V的值,故電池低壓檢測和微控制器時鐘分頻命令賦值為0xc060。
IA4421成功初始化后,就可以開始數據的發送和接收了。系統先通過SPI寫入電源管理命令字0x8228打開發送寄存器并開始數據的傳送,發送完畢后要寫入電源管理命令字0x8288關閉發送寄存器,同時打開接收寄存器。
為了實現數據的有效發送和接收,將待發送數據打包為幀的形式。下面主要介紹一下發送一幀數據的情形,其從幀頭開始依次為:同步格式的長度0x2DD4,設置的傳輸開始標志位,待傳數據的長度和實際發送的數據。這里有一點要注意的是,由于發送寄存器寫命令的高八位已固定為0xb8,故單片機寫發送寄存器命令時要對數據幀中的每組數據進行處理。當電源管理命令的第5位et和第3位ex被置1,同時IA4421片選被激活,發送器開始以設置的碼率向外發送數據幀,最后應讀入2字節的狀態字表示發送完畢。
IA4421的接收方式采用FIFO模式,在相應的控制字都設置好后,引入的數據通過時鐘串入16位FIFO緩沖器內,當VDI和同步格式識別電路指示潛在的真實數據接入,接收器開始填充FIFO,接收開始。
接收一幀數據時,因采用FIFO模式,狀態寄存器的前二個字節分別是中斷位輸出和狀態位輸出,接下來才是需要的數據,故在接收一幀數據時,應先將前二字節讀取后拋棄,且每次讀取時都要重復此過程;接下來需判斷接收到的第三字節是否為開始標志位,若是則繼續拋棄前二字節后再開始數據的接收,接收完畢后讀入二字節的狀態字表示接收完畢。
為了仿真實際的應用情形,將本無線通信系統在一個布滿桌椅和電子設備,如電腦、打印機、示波器等的室內環境中進行數據通信實驗,以確認所述方案的實際應用效能。實驗時,將2個無線通信模塊分別在相距30m、10m、1m、0.1m 條件下進行通信,并利用串口監視收發的數據,以十六進制顯示出來。實驗方式包括單字節的發送和接收及多字節的發送和接收,分別做了5組實驗,現介紹其中一組實驗如下:
實驗距離為30m,方式為多字節的發送和接收。根據程序設定的發送格式:發送的字節數+待發送的數據,假定串口一發送數據為:0x18 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x20 0x21 0x22 0x23 0x24,串口二發送的數據為:0x17 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x20 0x21 0x22 0x23,2個串口分別發送10幀數據,其中0x17、0x18為發送數據的長度,超出范圍的數據將被作為無效處理。串口打印時將同步格式的長度等標志位省略,其實際打印效果如圖3、4所示。

每組實驗對串口的發送端和接收端測試數據進行比對,內容、格式均一致,即系統能夠正確、穩定的進行收發通信,符合設計要求。
設計了一個單片機控制的無線數據傳輸系統,該系統使用了超低功耗的STC12C5A60S2單片機和同樣是低功耗的無線收發芯片IA4421,它們之間的控制與數據連接則是借助SPI接口來實現。SPI接口具有很高的數據傳輸速率,且器件操作遵循統一的規范,使系統軟硬件具有良好的通用性。以無線方式傳輸數據在實際應用中由于其方便靈活,可望在嵌入式系統中得到廣泛應用。本實現方案無需復雜的協議與價格較為昂貴的協議支持芯片,可作為嵌入式系統無線數據傳輸的一種低成本、低功耗選擇方案。經過實驗驗證,本系統能在實際應用環境中可靠運行,且在設計時不局限于特定的嵌入式系統,具有較高的通用性,能方便地移植到其他的系統中去,滿足無接觸數據傳輸的要求。
[1]李斌.基于藍牙的車間環境下無線通信技術研究與應用[D].西安:西安理工大學,2008:3-4.
[2]宏晶科技.STC12C5A60S2系列單片機器件手冊[DB/OL].(2009 -11).www.STCMCU.com.
[3]Silicon labs.IA4421 DATASHEET[DB/OL].(2007 -08).www.integration.com.
[4]石瓊,江秀臣,曾奕.無線通信在輸電線路絕緣子檢測中的應用[J].微計算機信息,2008(24):9-11.
[5]鄒其洪,柳蘭,趙俊.基于LPC2131和IA4421的無線數據采集系統設計[J].信息與電子工程,2009(2):90-93.