一種低成本無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的設(shè)計(jì)
(5)無(wú)線節(jié)點(diǎn)采用的是電池供電的方式,因此,電池的好壞對(duì)整個(gè)系統(tǒng)的工作持久性有重要影響。本設(shè)計(jì)采用的是非充電性18650高容量鋰電池,電壓為3.7V,容量在1700mah以上,具有涓流放電、電壓恒定等特點(diǎn)。經(jīng)肖特基二極管降壓后得到約3.3V電壓為系統(tǒng)供電。節(jié)點(diǎn)的硬件原理圖如圖2所示。
圖2 無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)原理圖
圖2中右上角是PT2262的管腳圖可以看出,PIC16F876單片機(jī)保留了PT2262的8bit地址腳,4bit數(shù)據(jù)腳。這樣做是為了增加系統(tǒng)靈活性,將節(jié)點(diǎn)模塊從一個(gè)網(wǎng)絡(luò)轉(zhuǎn)移到另一個(gè)網(wǎng)絡(luò),只需變更三態(tài)編碼開(kāi)關(guān)A0~A7,就可將其設(shè)置成與欲轉(zhuǎn)入網(wǎng)絡(luò)網(wǎng)關(guān)的地址(6561種)。4bit數(shù)據(jù)口D1~D4采用2bit撥碼開(kāi)關(guān),為傳感器編號(hào),這相當(dāng)于節(jié)點(diǎn)在網(wǎng)絡(luò)內(nèi)的ID(16種)。
圖2中右下角為加速度傳感器MXC6202 、I2C接口。X、Y軸加速度值各為12精度??梢钥吹皆搨鞲衅鹘涌诤?jiǎn)單,沒(méi)有地址編碼腳,因地址在出廠前已確定,一路I2C總線只能有一片MXC6202 。PIC16單片機(jī)集成了一路I2C接口,但為了以后擴(kuò)展多路加速度傳感器,采用軟件模擬的辦法,用RC4 、RC5 、RC6 、RC7 4個(gè)I/O口模擬了兩路I2C接口電路。此外,I2C接口類傳感器還帶有溫濕度傳感器STH1X、雙軸磁場(chǎng)傳感器MMC212X等,只要稍微更改程序,就可以擴(kuò)展到本系統(tǒng)上。
2.2 節(jié)點(diǎn)軟件設(shè)計(jì)
單片機(jī)主要有兩個(gè)任務(wù):模擬PT2262波形對(duì)高頻電路進(jìn)行ASK調(diào)制,模擬I2C總線讀寫MXC6202 。要想讓軟件模擬一個(gè)硬件電路,必須掌握硬件電路的工作原理:PT2262是紅外遙控編碼器,PT2272是其接收解碼器,兩者常常配對(duì)使用。發(fā)射端PT2262共有12個(gè)地址端,發(fā)射的每一組數(shù)據(jù)都由12bit脈沖組成,順序是從A0~A11,每個(gè)地址端有三種接法。常見(jiàn)的是用其中8bit(A0 ~A7)作為地址編碼,其余4bit(D1 ~D3)作為數(shù)據(jù)編碼,外加1bit同步碼,每組至少發(fā)送4次。接收端PT2272舍棄第一組,當(dāng)連續(xù)得到兩組與本身地址一樣的信號(hào)時(shí),則解碼。參考文獻(xiàn)[1-2]分別介紹了單片機(jī)模仿PT2262的編碼方法和PT2272的解碼方法。由于需要傳輸X、Y兩個(gè)軸各12bit加速度值,因此,每幀36bit數(shù)據(jù),幀間加1bit同步碼,傳輸4次。單片機(jī)編碼方案如圖3所示。必須注意的是,由于高頻發(fā)射具有隨機(jī)性,在不發(fā)射時(shí)表現(xiàn)為白噪聲,因此解碼時(shí)應(yīng)舍棄第一幀數(shù)據(jù),從第二幀開(kāi)始解碼。
圖3 單片機(jī)編碼方案
傳輸?shù)臄?shù)據(jù)位格式分為:高電平(11) 、低電平(00) 、高阻態(tài)(01)三種,0 、1由高低電平的占空比決定。軟件中設(shè)200μs、600μs兩個(gè)延時(shí)函數(shù)。單片機(jī)調(diào)用這兩個(gè)延時(shí)函數(shù),在RA1管腳上輸出相應(yīng)的高低電平就能夠模擬出這三種狀態(tài)數(shù)值,從而完成單位數(shù)據(jù)的ASK調(diào)制。
單片機(jī)在發(fā)射前首先讀入預(yù)先設(shè)定的A0~A7 8bit三態(tài)地址,D1~D4 4bit節(jié)點(diǎn)網(wǎng)內(nèi)ID,再加上加速度傳感器X、Y軸的各12bit加速度值,共36bit數(shù)據(jù),按圖3的格式依次發(fā)送出去,就可以進(jìn)行數(shù)據(jù)傳輸了。每幀數(shù)據(jù)傳輸4次,每幀之間由大約10ms的幀間碼隔開(kāi),幀間碼由一個(gè)200μs高電平與10ms的低電平組成,發(fā)送一次數(shù)據(jù)的時(shí)間約為200ms,這樣1s內(nèi)最多可傳送5次數(shù)據(jù),在大多數(shù)場(chǎng)合是可以滿足要求的。為了節(jié)省能耗,可以根據(jù)需要選擇發(fā)射速率,在不發(fā)射時(shí),應(yīng)使單片機(jī)、F05V、加速度傳感器處于休眠狀態(tài)。處于休眠狀態(tài)的PIC單片機(jī)可以使用看門狗等方式喚醒。用超外差接收模塊J05U接收,可以在300m的開(kāi)闊地傳輸數(shù)據(jù)。當(dāng)需要較高的數(shù)據(jù)傳輸速率時(shí),應(yīng)縮短寬窄脈沖時(shí)間長(zhǎng)度。但需要注意的是,當(dāng)脈沖寬度減少時(shí),發(fā)射功率也同時(shí)減少。因距離與速度是矛盾的關(guān)系,當(dāng)發(fā)射功率超過(guò)20Hz時(shí),建議使用專用RF芯片。
MXC6202在使用中作為從器件,PIC單片機(jī)只要按照標(biāo)準(zhǔn)I2C時(shí)序控制MXC6202即可。參考文獻(xiàn)[3]介紹了利用單片機(jī)的普通I/O口模擬I2C總線的方法。MXC6202的地址在出廠時(shí)已經(jīng)確定了,共8種,在一路I2C總線上只能掛一個(gè)加速度傳感器。當(dāng)需要兩個(gè)MXC6202測(cè)三軸加速度時(shí),需要占兩路獨(dú)立的總線。為此,根據(jù)標(biāo)準(zhǔn)I2C時(shí)序,模擬了兩路I2C總線,以兩路循環(huán)采集。MXC6202示例驅(qū)動(dòng)程序如下:
IICStart( );//器件初始化,每次從休眠模式喚醒重新初始化
IICSendByte(0x20);//寫器件地址,MEMS傳感器地址出廠時(shí)已固定
IICSendByte(0x00);//器件內(nèi)部寄存器地址,只有一個(gè)可寫寄存器0x00
IICSendByte(0xf0);//最低位寫0,睡眠模式喚醒;寫1,進(jìn)入睡眠模式
Delay_75ms();//睡眠喚醒時(shí),需要75ms的延時(shí)//下面是依次接收:X高、X低、Y高、Y低4位數(shù)值
IICStart( );
IICSendByte(0x20);//寫MEMS傳感器
IICSendByte(0x01);
IICStart( );
IICSendByte(0x21);//讀MEMS傳感器
for(ii=0;ii3;ii++)
{
s[ii]=IICReceiveByte();
IICAck(0);
}
s[3]=IICReceiveByte();
IICAck(1);//最后一位不應(yīng)答
IICStop( );
評(píng)論