無線傳感器網絡、嵌入式處理技術、無線網絡技術和無線控制技術的發展, 給智能家居領域的發展帶來了實際可行的應用成果。同時, M2M 技術的應用使智能家居系統的設計更加人性化。
目前, 國內外很多公司的智能家居系統已經實現穩定可靠的室內電氣設備的控制和各種計量設備(煤氣、水和電) 的無線抄表, 但許多公司的智能家居系統還缺乏一種可以迅捷地進行室內電氣設備工作狀態檢測和控制以及可供用戶隨時查詢、記錄抄表數據的手持智能顯示終端。筆者設計的智能家居系統數字顯示終端是一個基于ZigBee 技術和USB OTG 技術的用戶和智能家居系統互動的媒介,可有效地幫助用戶實現對智能家居系統的監測和抄表數據查詢。
1 數字顯示終端
數字顯示終端是基于M2M 技術的智能家居系統唯一最終面向用戶的部分。采用ZigBee 技術和USB OTG 技術完成對無線設備的監控和抄表數據的查詢、記錄。
1.1 基于M2M 技術的智能家居系統
基于M2M 技術的智能家居系統主要通過Zig-Bee 技術與相關的無線設備組建無線局域網, 采集無線傳感器的數據和輸出控制信號, 并由塢站將采集到得數據匯總封裝后通過M2M網關和Internet傳送到提供相關家居服務的公司的服務器上。它主要由5部分組成: 低功耗數據采集系統、數據匯總傳輸系統(又稱塢站), 數字顯示終端, M2M網關和服務器, 并主要使用在居家能源管理和居家自動化兩個方面。
1) 居家能源管理。塢站將管理安裝在家庭中的幾個低功耗無線傳感器(煤氣、水和電)。所有塢站從無線傳感器采集到的信息在對接模式時被傳送給數字顯示終端。數字顯示終端將使用文字、圖形、圖標和圖片把這些信息顯示出來。
2) 居家自動化。這種情況類似于居家能源管理, 只是其使用的無線傳感器可以管理輸入輸出信號以控制室內電氣設備, 如門窗、室內照明等設備。
本套智能家居系統主要將M2M 技術融合在網關, 而最終面向用戶的只是數字顯示終端(見圖1)。
1.2 數字顯示終端的設計原理與方案
數字顯示終端是智能家居系統與用戶互動的關鍵部分, 通過ZigBee 技術與安裝在室內的低功耗無線設備建立無線局域網, 監控無線設備的工作狀態, 并通過USB OTG 高速數據傳輸接口與塢站連接, 將塢站采集到的抄表數據以圖、表或文字的形式顯示出來, 同時將檢測到的室內低功耗無線設備的工作狀態發送到服務器, 供用戶遠程登錄服務器監測和控制低功耗無線設備。數字顯示終端工作在兩種模式下, 一種是對接模式進行, 即通過USBOTG 高速數據傳輸接口和塢站連接進行數據交換;另一種是移動模式, 即不與塢站連接的工作狀態,這時它只能檢測和控制相關低功耗無線設備。USBOTG 接口不僅可以傳輸數據, 當數字顯示終端與塢站對接時, 可以通過USB OTG 接口給數字顯示終端的蓄電池充電。
數字顯示終端主要由無線模塊、顯示模塊、數據存儲模塊、數據傳輸接口、電源部分和用戶導航鍵6 部分組成(見圖2)。
【!=={$pagepage}==】
2 數字顯示終端的實現
數字顯示終端處理器選用LPC1758.LPC1758是一款基于ARM Cortex-M3 內核的處理器, 集成了USB2.0 功能, 包括USB 主機、USB 從機和USBOTG, 擁有512 KB 的FLASH 和64 KB 的SRAM.無線模塊選用的是ZICM2410P0-1 模塊。顯示模塊選用DMT32240T035_01WN 模塊。數據存儲模塊選用4 GB 的FLASH 存儲器, 也可升級為16 GB 的存儲空間。因處理器已集成OTG 功能, 所以由處理器和USB 收發器芯片ISP1302 共同組成數據傳輸結論。
導航鍵具有上下左右導航和選擇鍵。電源部分選用可通過USB 接口充電的蓄電池(5 V~500 mA), 電池容量最小為600 mA/h, 全功能模式供電24 h,休眠模式供電240 h.數字顯示終端的軟件部分是由μCOS-II 實現。
2.1 數字顯示終端的硬件實現
數字顯示終端(見圖2) 由6 部分組成, 其中主要是無線模塊和數據傳輸接口的實現。
1) 無線模塊的實現。無線模塊是基于ZiGBee技術的, 該技術是一種在900 MHz 及2.4 GHz 頻段, 近距離、低復雜度、低功耗、低數據速率、低成本的雙向無線通信技術。它由ZICM2410P0-1 芯片和外圍電路組成(包括上電復位電路和工作指示電路)。
ZICM2410 芯片包括多個通用I/O 引腳、定時器、UART 和SPI 等, 而且還有硬件語音編解碼器,獨有的IIS/SPI/UART 音頻輸入輸出接口, 擴展出500 KB/s 或1 MB/s 的無線傳輸速率, 通過PCB 走線構成天線, 103 dB 的射頻鏈路預算, 1.5 V 時RX靈敏度為-97 dB/m, 1.5 V 時射頻TX 功率為+6 dB/m.在外圍電路的設計中, 通過ZICM2410 的UART與LPC1758 處理器連接, 為了保證程序的穩定性和射頻性能, 采用了復位芯片CAT809E, 無線模塊采用F 型天線拓撲結構, 支持全向輻射模式。為了保證天線的性能發揮, 數字顯示終端的主板上要有足夠多的接地面, 并且不要在模塊的天線下方布線,確保PCB 走線和其他元件遠離天線。
2) 數據傳輸接口的實現。數據傳輸接口的電路主要是由處理器芯片LPC1758 和USB 收發器芯片ISP1302 組成, 接口插頭選用Mini-A 插頭。處理器LPC1758 集成了USB2.0 功能, 支持OT 模式, 數據傳輸接口電路。
LPC1758在設計USB OTG接口電路, 需要外接1個USB收發器ISP1302,LPC1758和ISP1302通過I2C總線連接通信,LPC1758內部的收發器負責控制USB信號切換, 而ISP1302 負責實現OTG 功能。此時,LPC1758內部的收發器在VP/VM模式下工作。
3) 其他部分的硬件實現。數字顯示終端其他部分還包括顯示模塊、數據存儲模塊、電源部分和用戶導航鍵。DMT32240T035_01WN 顯示模塊集成的功能非常齊全, 它通過RS232 直接和處理器LPC1758 連接, 但在電源的處理上要確保最終接到顯示模塊上的電壓不低于5 V.數據存儲模塊選用KFW4G16Q2M-DEB6 NAND FLASH.用戶導航鍵采用普通薄膜式按鍵。電源部分選型比較重要, 作為數字顯示終端的能量來源, 不僅要滿足顯示模塊的電壓5~6 V, 電流不低于130 mA, 而且能接受USB接口充電, 電池容量不低于600 mA/h.
2.2 數字顯示終端的軟件實現
數字顯示終端的操作系統選用μCOS-II 實時操作系統。它是一種簡單高效、源代碼公開的實時嵌入式操作系統, 具有良好的擴展性和可移植性, 被廣泛應用到各種嵌入式處理器上。
μC/OSII 的核心源代碼不用修改, 移植中需要修改的是涉及處理器的OS_CPU_C.C, OS_CPU_A.
ASM, OS_CPU.H 三個文件。
1) OS_CPU.H 文件包含μC/OSII 所需要的常量、宏和自定義類型等。
OS_CPU.H 定義的數據類型。在這次移植中μC/OSII 重新定義了數據類型。
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef signed char INT8S;
typedef unsigned short INT16U;
typedef signed short INT16S;
typedef unsigned int INT32U;
typedef signed int INT32S;
typedef float FP32;
typedef double FP64;
typedef unsigned int OS_STK;
typedef unsigned int OS_CPU_SR.
不同處理器的堆棧增長方向是不一樣的,LPC1758 的堆棧是從高地址往低地址增長的,OS_STK_GROWTH設為1, 程序為:
#define OS_STK_GROWTH 1.
2) OS_CPU_C.C文件。在OS_CPU_C.C定義的C函數中,OSTaskStkInit()函數與處理器相關,所以移植代碼需要修改該函數。其程序為(初始化任務時調用此函數初始化任務使用的堆棧)。
OS_STK * OSTaskStkInit (void (*task) (void
*p_arg),void *p_arg,OS_STK *ptos,INT16U opt)
{
OS_STK *stk;
(void) opt; //防止編譯警告
stk=ptos; //裝載棧頂指針, 即堆棧數組最后的地址模擬中斷發生的堆棧情況
*(stk)=(INT32U)0x01000000L; //xPSR
*(stk)=(INT32U)task; //PC, 任務入口
*(stk)=(INT32U)0xFFFFFFFEL; //R14(LR)
*(stk)=(INT32U)0x12121212L; //R12
*(stk)=(INT32U)0x03030303L; //R3
*(stk)=(INT32U)0x02020202L; //R2
*(stk)=(INT32U)0x01010101L; //R1
* (stk) =(INT32U)p_arg; //R0, 輸入參數p_arg 模擬任務進程, 保存其他寄存器到堆棧
*(stk)=(INT32U)0x11111111L; //R11
*(stk)=(INT32U)0x10101010L; //R10
*(stk)=(INT32U)0x09090909L; //R9
*(stk)=(INT32U)0x08080808L; //R8
*(stk)=(INT32U)0x07070707L; //R7
*(stk)=(INT32U)0x06060606L; //R6
*(stk)=(INT32U)0x05050505L; //R5
*(stk)=(INT32U)0x04040404L; /R4
return(stk);
}
【!=={$pagepage}==】
3) OS_CPU_A.ASM 文件。μC/OSII 的移植需要編寫5 個簡單的匯編語言函數。
OS_ENTER _CRITICAL (): 關閉中斷源;
OS_EXIT_CRITICAL (): 重開中斷源;
OSStartHighRdy (): 運行當前優先級最高的任務;
OSCtxSw (): 一個任務放棄CPU 使用權時調用;
OSIntCtxSw (): 在退出中斷服務函數OSIntExit() 中被調用, 實現中斷級任務切換。
LPC1758使用OSPendSV()函數快捷地進行上下文切換。OSPendSV()的C語言表述程序為OSPendSV: 關中斷;
if (PSP ! =NULL)
{
//保存R4~R11 到任務堆棧SP_process;
OSTCBCur>OSTCBStkPtr = SP_process;
}
OSTaskSwHook ();
OSPrioCur = OSPrioHighRdy;
OSTCBCur = OSTCBHighRdy;
PSP = OSTCBHighRdy>OSTCBStkPtr;
//從新任務堆棧中恢復R4~R11;
/恢復中斷;
//異常返回;
完成上述工作后, 只要再根據目標板的實際情況編寫Target 目錄中的3 個文件, μC/OSII 就可以運行在處理器上了。
3 重點解決數字顯示模塊的組網問題
1) 角色介紹。ZigBee 標準網絡定義了3 種角色, 分別是協作員、路由和端節點。
協作員(coordinator) 負責啟動整個網絡, 它是網絡的第一個設備, 協作員選擇一個信道和一個網絡ID, 隨后就可以啟動網絡。
路由(router) 的功能是允許其他設備加入網絡, 協助網絡中其他終端設備通信。
端節點(end device) 沒有特定的維持網絡結構的責任, 它可以選擇睡眠或喚醒兩種工作狀態, 功耗小, 可使用電池供電。
【!=={$pagepage}==】
2) 網絡拓撲。ZigBee 網絡有星型網、簇型網和網狀網3 種組網方式(見圖3)。如果直接使用IEEE 802.15.4 底層的還有點對點模式和點對多點模式兩種組網方式(見圖4)。
智能家居系統綜合運用了星型網和點對多點模式的組網方式。由塢站作為路由, 負責管理整個家居系統構建的ZigBee 網絡, 其他低功耗無線傳感器、無線控制設備和數字顯示終端作為端節點。其中低功耗無線傳感器、數字顯示終端與塢站采用星型網組網方式, 數字顯示終端和無線控制設備采用點對多模式(見圖5)。
4 結束語
數字顯示終端通過采用ZigBee 技術和USB OTG技術, 實現了室內低功耗無線設備的穩定監控和數據采集及存儲, 并以友好的用戶界面和便攜性能改進了智能家居系統和用戶的交流方式, 使用戶能更加方便地監控到家用低功耗無線設備的工作狀態和查詢抄表數據。