摘 要: 基于PIC低功耗單片機與MEMS加速度傳感器,設計了一種低成本的無線傳感器網絡節點。該設計采用性價比較高的PIC16系列單片機,軟件模擬PT2262遙控編碼器,配合I2C接口加速度傳感器、微型高頻發射器件,實現了通用MCU無線傳感器的節點方案,省去了昂貴的專用RF芯片,降低了系統成本。節點整體采用3.3 V單節鋰電池供電。實驗結果表明,該方案具有可靠、靈活、低功耗、低成本的特點,可廣泛應用于低速實時測量、監控防盜等場合。
關鍵詞: PIC單片機;加速度傳感器;無線網絡;EM310
目前有多種可供選擇的無線組網方案,如ZigBee,其具有功耗低、傳輸速率高、體積小、協議成熟、節點能夠協同工作等特點。但ZigBee由于采用國外技術,其芯片價格高,限制了它的普及應用。PT2262/PT2272系列編解碼芯片是一種采用CMOS工藝、低功耗、低價位芯片,在遙控門、防盜、玩具等產品中大量使用,但其在數據傳輸、安全性等方面有所不足。本文利用PIC16LF876單片機模仿PT2262編碼方式,并進行了改進,配合433 MHz高頻發射電路,實現了數據的無線傳輸組網。傳感器選用具有數字I2C接口的雙軸加速度傳感器MX6202,可以無線采集加速度、傾斜角數值,具有接口簡單、體積小、價格低的優點。無線節點部分均選用低電壓器件,實現了單節鋰電池供電。特別適合網點數量龐大、對成本敏感(如家居、防盜、物聯網等)場合的應用。
1 無線傳感器系統設計方案
無線傳感器系統包括傳感器節點與網關兩部分。傳感器節點負責實地數據采集,網關負責接收各節點數據,匯總處理后經GSM/GPRS網絡通知用戶。本文重點介紹傳感器節點,給出了軟硬件實現方法。無線傳感器系統組成如圖1所示。其中無線傳感器節點中的虛線框為擴展部分,F05V與J05U為微型433M發射接收模塊;無線網關部分負責匯總節點信息與外界通信,采用EM310模塊,GSM/GPRS傳輸。
傳感器網絡采用星形連接方式,由各無線節點與網關組成。在大部分場合下(如防盜、環境監測等)可以采用單向通信方式,即節點發射、網關接收,這樣,圖1中的虛線部中的節點的超外差接收電路、網關的RF發射電路即可以省去。當需要實時采集、強調同步性時,加上虛線框內部分,由網關集中控制各節點動作,通過發采集或變更工作模式指令,控制各節點,采用雙向通信方案。本文介紹的為單向通信方案。
傳感器節點是系統的重要部分,負責現場采集工作,其工作穩定與否對整個系統具有至關重要的作用。而當節點數量較多時,它的成本占系統的絕大部分。有許多節點需要獨立在室外工作并由電池供電,對能耗有較高的要求。為此,本設計通過PIC單片機模擬PT2262芯片編碼,對433 MHz高頻電路完成鍵控調制(ASK),省去了無線收發芯片,實現了通用MCU+傳感器的節點方案,大大降低了系統成本。采用的PIC超低功耗MCU,具有與MSP430相似的節能特性,選用低電壓RF模塊F05V,實現了系統的3.3 V供電。
2 無線傳感器節點設計
2.1 節點硬件電路設計
無線傳感器節點是本文的重點部分,需要滿足低成本、低功耗、小體積、適合電池供電等要求。無線節點方案比較如表1所示。
(1)本節點設計時所用器件及其性能:選用的PIC16LF876單片機,其性價比較高、外設豐富、工作穩定,具有針對電池供電的低功耗系列;最高速率為4 MIPS,工作電壓為2~5.5 V,22個I/O口,片上集成有WDT、CCP、PWM、A/D等外設,14 KB Flash,368 bit RAM、256 bit EEPROM,具有休眠省電模式。PIC16系列單片機不同型號之間大部分可兼容,可以根據需要,選用價格更低的PIC16F72或采用納瓦(nW)及超低功耗技術的PIC16F723,程序稍作改動,器件即可封裝兼容。
(2)加速度傳感器選用數字I2C接口的雙軸加速度傳感器MXC6202,其具有±2 g的測量范圍,可以測量重力加速度,小體積、低功耗、接口簡單,工作電壓范圍為2.7~3.6 V,有休眠模式,在保證低價格、小體積的同時,可以滿足防盜、人體姿態測量等應用的需求。
(3)RF電路采用F05V微型發射模塊,具有2.1~3.5 V的低電壓、低功耗(10 mA,連發)及1~10 kb/s的傳輸速率,可以滿足監控等場合數據采集的需要。小體積、低價位,只有正電源、地、數據輸入、天線(天線按照手冊由導線繞制而成)輸出4個接口,可以像一個三極管一樣使用它。
(4)網關配套的接收電路是J05U超外差接收模塊,具有與F05V類似的特點。使用PT2262/PT2272編解碼方案,開闊地接收距離在300 m左右。
(5)無線節點采用的是電池供電的方式,因此,電池的好壞對整個系統的工作持久性有重要影響。本設計采用的是非充電性18650高容量鋰電池,電壓為3.7 V,容量在1 700 mah以上,具有涓流放電、電壓恒定等特點。經肖特基二極管降壓后得到約3.3 V電壓為系統供電。
節點的硬件原理圖如圖2所示。
圖2中右上角是PT2262的管腳圖可以看出,PIC16F876單片機保留了PT2262的8 bit地址腳,4 bit數據腳。這樣做是為了增加系統靈活性,將節點模塊從一個網絡轉移到另一個網絡,只需變更三態編碼開關A0~A7,就可將其設置成與欲轉入網絡網關的地址(6 561種)。4 bit數據口D1~D4采用2 bit撥碼開關,為傳感器編號,這相當于節點在網絡內的ID(16種)。
圖2中右下角為加速度傳感器MXC6202、I2C接口。X、Y軸加速度值各為12精度??梢钥吹皆搨鞲衅鹘涌诤唵?,沒有地址編碼腳,因地址在出廠前已確定,一路I2C總線只能有一片MXC6202。PIC16單片機集成了一路I2C接口,但為了以后擴展多路加速度傳感器,采用軟件模擬的辦法,用RC4、RC5、RC6、RC7 4個I/O口模擬了兩路I2C接口電路。此外,I2C接口類傳感器還帶有溫濕度傳感器STH1X、雙軸磁場傳感器MMC212X等,只要稍微更改程序,就可以擴展到本系統上。
2.2 節點軟件設計
單片機主要有兩個任務:模擬PT2262波形對高頻電路進行ASK調制,模擬I2C總線讀寫MXC6202。
要想讓軟件模擬一個硬件電路,必須掌握硬件電路的工作原理:PT2262是紅外遙控編碼器,PT2272是其接收解碼器,兩者常常配對使用。發射端PT2262共有12個地址端,發射的每一組數據都由12 bit脈沖組成,順序是從A0~A11,每個地址端有三種接法[1]。常見的是用其中8 bit(A0~A7)作為地址編碼,其余4 bit(D1~D3)作為數據編碼,外加1 bit同步碼,每組至少發送4次。接收端PT2272舍棄第一組,當連續得到兩組與本身地址一樣的信號時,則解碼。參考文獻[1-2]分別介紹了單片機模仿PT2262的編碼方法和PT2272的解碼方法。
由于需要傳輸X、Y兩個軸各12 bit加速度值,因此,每幀36 bit數據,幀間加1 bit同步碼,傳輸4次。單片機編碼方案如圖3所示。必須注意的是,由于高頻發射具有隨機性,在不發射時表現為白噪聲,因此解碼時應舍棄第一幀數據,從第二幀開始解碼。
傳輸的數據位格式分為:高電平(11)、低電平(00)、高阻態(01)三種,0、1由高低電平的占空比決定。軟件中設200 μs、600 μs兩個延時函數。單片機調用這兩個延時函數,在RA1管腳上輸出相應的高低電平就能夠模擬出這三種狀態數值,從而完成單位數據的ASK調制。
單片機在發射前首先讀入預先設定的A0~A7 8 bit三態地址,D1~D4 4 bit節點網內ID,再加上加速度傳感器X、Y軸的各12 bit加速度值,共36 bit數據,按圖3的格式依次發送出去,就可以進行數據傳輸了。每幀數據傳輸4次,每幀之間由大約10 ms的幀間碼隔開,幀間碼由一個200 μs高電平與10 ms的低電平組成,發送一次數據的時間約為200 ms,這樣1 s內最多可傳送5次數據,在大多數場合是可以滿足要求的。為了節省能耗,可以根據需要選擇發射速率,在不發射時,應使單片機、F05V、加速度傳感器處于休眠狀態。處于休眠狀態的PIC單片機可以使用看門狗等方式喚醒。用超外差接收模塊J05U接收,可以在300 m的開闊地傳輸數據。當需要較高的數據傳輸速率時,應縮短寬窄脈沖時間長度。但需要注意的是,當脈沖寬度減少時,發射功率也同時減少。因距離與速度是矛盾的關系,當發射功率超過20 Hz時,建議使用專用RF芯片。
MXC6202在使用中作為從器件,PIC單片機只要按照標準I2C時序控制MXC6202即可。參考文獻[3]介紹了利用單片機的普通I/O口模擬I2C總線的方法。MXC6202的地址在出廠時已經確定了,共8種,在一路I2C總線上只能掛一個加速度傳感器。當需要兩個MXC6202測三軸加速度時,需要占兩路獨立的總線。為此,根據標準I2C時序,模擬了兩路I2C總線,以兩路循環采集。MXC6202示例驅動程序如下:
IICStart( );
//器件初始化,每次從休眠模式喚醒重新初始化
IICSendByte(0x20);
//寫器件地址,MEMS傳感器地址出廠時已固定
IICSendByte(0x00);
//器件內部寄存器地址,只有一個可寫寄存器0x00
IICSendByte(0xf0);
//最低位寫0,睡眠模式喚醒;寫1,進入睡眠模式
Delay_75ms();//睡眠喚醒時,需要75 ms的延時
//下面是依次接收: X高、X低、Y高、Y低4位數值
IICStart( );
IICSendByte(0x20); //寫MEMS傳感器
IICSendByte(0x01);
IICStart( );
IICSendByte(0x21); //讀MEMS傳感器
for(ii=0;ii<3;ii++)
{
s[ii]=IICReceiveByte();
IICAck(0);
}
s[3]=IICReceiveByte();
IICAck(1); //最后一位不應答
IICStop( );
測斜度時,采用查表與計算相結合的方法(器件手冊中給出了參考方法)。單片機模擬的波形如圖4所示。圖4(a)是單片機RA1口模擬PT2262發出的一串數列。圖4(b)是從MXC6202器件中讀出的一幀數據,為便于觀察,將兩組波形重疊在一起,高的為總線數據線信號,低的為總線時鐘信號。
3 無線網關設計
無線網關由主控單片機、GSM模塊和超外差接收模塊J05U等組成,負責傳感器網絡的管理與控制,接收節點傳來的數據并在必要時通過網絡等方式告知用戶。網關選用PIC18F6621單片機,GSM模塊選用的是EM310模塊。網關主要部分原理圖如圖5所示。
PIC18F6621單片機有:兩個串口,使用串口2與EM310通信,串口1用于外部接口,如作為GPRS DTU、連接上位機、串口攝像頭等;傳送速率最高為10 MIPS;4 KB RAM、64 KB Flash;內部集成有AD、WDT等外設。
EM310的1~6管腳與SIM卡電路連接。PIC18F6621有55個IO口,空余的I/O口可以接1602液晶進行顯示。DS12C887時鐘芯片作為整個無線網絡的時基。需要注意的是,EM310在接通網絡的瞬間會產生一個接近2 A的峰值電流,因此電源部分需有冗余,因此推薦使用開關電源。
網關的功能主要有三個:對接收到的節點數據進行解碼、判斷是哪個節點傳來的信號及是否需要報警、控制EM310向設定手機發送短信及撥打電話等。
解碼是編碼的逆過程,關鍵是將發射節點編碼的600 μs、200 μs寬窄脈沖正確識別。當單片機偵聽到開始碼(即連接J05U模塊的DATA引腳RD0產生第一個上升沿)時,開始分析數據,舍棄第一幀數據,對第二幀、第三幀、第四幀進行解碼。利用PIC單片機內部定時器0計時,當有電平高低變化時,記錄下TMR0數值,并清零,重新開始計數。這樣可以把每一個高低電平寬度記錄下來;然后比較解碼,180 μs~250 μs之間為窄脈沖,550 μs~650 μs之間為寬脈沖;并將數據幀中的前8個數據與EEPROM中預存的地址碼進行比對,當有兩次相同時即表明正確解碼,將節點ID 4 bit數值,X、Y軸各12 bit數據儲存起來并進行處理。
EM310是一款兼容型GSM/GPRS通信模塊,硬件兼容MC55,廣泛用于數據采集、遠程測試等;內嵌TCP/IP協議,具有低價位、使用方便的特點。選用該模塊是為了方便系統GPRS功能擴展(如加接串口攝像頭實現現場攝像、傳輸視頻等功能)。EM310進行信號傳輸時(尤其是進行GPRS傳輸時),會產生一個2 A左右的尖峰電流,因此網關供電需要采用2 A以上的電源(如開關電源等)。EM310的所有命令、數據傳輸均通過串口,支持最高波特率為115 200 b/s,數據包包長可以達到2 KB,可以傳輸圖像數據,便于系統以后擴展圖像監控功能。
EM310與PIC18F6621之間接口非常簡單,只占用RX、TX、GND三根線,采用AT指令進行通信,除個別指令外,每條指令均以回車符作為結束標志。本設計中用到了發送短信與撥打電話功能。發送短信AT指令為:at+cmgs=\"139XXXXXXXX\"\r,在EM310應答后,發送短信內容,并以“0x1A”結束短信內容。撥打電話AT指令如下:ATD139XXXXXXXX;\r,其中“139XXXXXXXX”為預先設定的用戶手機號碼。
本文提出了一種低成本的無線加速度傳感器方案,采用通用單片機模仿成熟的編解碼方案,降低了開發難度與風險,有明顯的價格優勢,適合對成本敏感、而對速度要求不高的場合,如工地器材防盜、智能家居網絡等。節點選用的芯片均為低功耗芯片,采用大容量鋰電池就可以使節點長期工作。I2C接口的傳感器種類有很多,更換傳感器就可以實現磁場強度分布檢測、糧食倉庫溫濕度檢測等,而且PIC單片機內集成有A/D,也可以與其他模擬輸出的傳感器結合,因此本方案有通用性。使用GPRS網關可以實現遠程監控測試。
參考文獻
[1] 安穎,張麗慧.PT2262遙控編碼功能的軟件實現[J].嵌入式與SOC,2005(5):111.
[2] 郝迎吉,劉義剛,樊潤麗.基于單片機實現遙控編碼器PT2262的軟件解碼[J].國外電子元器件,2008,5(5):36-39.
[3] 陳志輝.I2C總線在MCS51系列單片機數據采集系統中的實現[J].微計算機信息,2005,21(1):67-69.