新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一種低成本無線傳感器網絡節點的設計

        一種低成本無線傳感器網絡節點的設計

        作者: 時間:2012-04-14 來源:網絡 收藏

        (5)無線節點采用的是電池供電的方式,因此,電池的好壞對整個系統的工作持久性有重要影響。本設計采用的是非充電性18650高容量鋰電池,電壓為3.7V,容量在1700mah以上,具有涓流放電、電壓恒定等特點。經肖特基二極管降壓后得到約3.3V電壓為系統供電。節點的硬件原理圖如圖2所示。

        一種低成本無線傳感器網絡節點的設計
        圖2 原理圖

        圖2中右上角是PT2262的管腳圖可以看出,PIC16F876單片機保留了PT2262的8bit地址腳,4bit數據腳。這樣做是為了增加系統靈活性,將節點模塊從一個網絡轉移到另一個網絡,只需變更三態編碼開關A0~A7,就可將其設置成與欲轉入網絡網關的地址(6561種)。4bit數據口D1~D4采用2bit撥碼開關,為傳感器編號,這相當于節點在網絡內的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個地址端,發射的每一組數據都由12bit脈沖組成,順序是從A0~A11,每個地址端有三種接法。常見的是用其中8bit(A0 ~A7)作為地址編碼,其余4bit(D1 ~D3)作為數據編碼,外加1bit同步碼,每組至少發送4次。接收端PT2272舍棄第一組,當連續得到兩組與本身地址一樣的信號時,則解碼。參考文獻[1-2]分別介紹了單片機模仿PT2262的編碼方法和PT2272的解碼方法。由于需要傳輸X、Y兩個軸各12bit加速度值,因此,每幀36bit數據,幀間加1bit同步碼,傳輸4次。單片機編碼方案如圖3所示。必須注意的是,由于高頻發射具有隨機性,在不發射時表現為白噪聲,因此解碼時應舍棄第一幀數據,從第二幀開始解碼。

        一種低成本無線傳感器網絡節點的設計
        圖3 單片機編碼方案

        傳輸的數據位格式分為:高電平(11) 、低電平(00) 、高阻態(01)三種,0 、1由高低電平的占空比決定。軟件中設200μs、600μs兩個延時函數。單片機調用這兩個延時函數,在RA1管腳上輸出相應的高低電平就能夠模擬出這三種狀態數值,從而完成單位數據的ASK調制。

        單片機在發射前首先讀入預先設定的A0~A7 8bit三態地址,D1~D4 4bit節點網內ID,再加上加速度傳感器X、Y軸的各12bit加速度值,共36bit數據,按圖3的格式依次發送出去,就可以進行數據傳輸了。每幀數據傳輸4次,每幀之間由大約10ms的幀間碼隔開,幀間碼由一個200μs高電平與10ms的低電平組成,發送一次數據的時間約為200ms,這樣1s內最多可傳送5次數據,在大多數場合是可以滿足要求的。為了節省能耗,可以根據需要選擇發射速率,在不發射時,應使單片機、F05V、加速度傳感器處于休眠狀態。處于休眠狀態的PIC單片機可以使用看門狗等方式喚醒。用超外差接收模塊J05U接收,可以在300m的開闊地傳輸數據。當需要較高的數據傳輸速率時,應縮短寬窄脈沖時間長度。但需要注意的是,當脈沖寬度減少時,發射功率也同時減少。因距離與速度是矛盾的關系,當發射功率超過20Hz時,建議使用專用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();//睡眠喚醒時,需要75ms的延時//下面是依次接收:X高、X低、Y高、Y低4位數值
        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);//最后一位不應答
        IICStop( );



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 全州县| 斗六市| 沽源县| 霍林郭勒市| 淳安县| 德保县| 嘉禾县| 社会| 西平县| 城口县| 大城县| 卢氏县| 大方县| 达尔| 亳州市| 南康市| 崇义县| 舒兰市| 涟水县| 交城县| 兴和县| 景泰县| 独山县| 五华县| 新建县| 太保市| 郑州市| SHOW| 历史| 通山县| 互助| 奉贤区| 上林县| 阳原县| 罗田县| 安岳县| 三原县| 金秀| 怀安县| 双辽市| 东海县|