1 引言 隨著信息技術的廣泛應用,人們對家庭居住環境的要求越來越高。智能家居在我國起步較晚,目前家居網絡的應用復雜而分散,沒有統一的標準。大體而言可分為高層的信息娛樂網絡和底層的數據采集與控制網絡。在底層以微控制器為核心作為智能家居網絡結點是目前家居網絡的主要實現方式。
2系統方案 本系統主控采用ARM微控制器中的LPC2478,它有512K字節的程序存儲空間,豐富的片上資源,片上具有LCD控制器和兩個CAN接口,它非常適合低功耗、低成本的嵌入式設計。圖1中有8個模擬量輸入,由于在實際家居狀態監控數據中模擬量較少,加之LPC2478片上有可復用8路10位模數轉換器,所以本系統直接以其片上資源實現A/D功能。采所采集的模擬量經微控制器處理之后通過PA口輸出到LCD顯示模塊(LCM1)進行本地顯示,以及經CAN1口輸出到遠程主機,同時也可以通過UART0以RS-232串行通信方式傳送到本地PC機.開關量經過總線隔離驅動芯片(74HC245)輸入到微控制器的P0~P2口。微控制器處理之后經P3口輸出到8D鎖存器74HC573中,然后經過驅動電路控制如照明、空調等僅需要開關的家用電器.開啟用邏輯“1”表示,關閉用邏輯“0”表示,與此同時微控制器同樣經CAN1口輸出到遠程主機,鍵盤電路用于設置系統的工作狀態及對采集量進行本地顯示。
圖1 下位機硬件設計框圖
3系統軟硬件設計 下位機軟件設計主要可分為數據采集模塊、通信模塊、鍵盤及LCD控制模塊、開關量輸出控制模塊。限于篇幅只介紹數據采集模塊的具體實現方式。ARM微控制器應用輪詢方式進行模擬量和開關量的采集。通過設置定時器/計數器0中斷,每次中斷時間20毫秒,用于模擬量(AI)采樣定時;定時器/計數器1中斷,中斷時間250毫秒,每次中斷時掃描開關量輸入(DI)狀態.主程序開始時進行定時/計數器0,定時/計數器1,AD,DI等的初始化,初始化主要是設置定時器的中斷方式(設置定時器0溢出中斷,定時器1比較中斷),外部中斷INT0,INT1中斷方式(INT0下降沿產生異步中斷請求,INT1上升沿產生異步中斷請求);AD,DI處于可以接收模擬量和開關量的狀態,然后程序進入循環狀態,等待上位機控制信息的到來,如果有控制信息到來便把相應的標志位置1,主程序跳轉到相應的服務程序產生相應操作。
l 定時器0中斷服務程序
定時器0中斷主要完成模擬量的數據采集與平均值計算,其程序流程圖如圖2所示,具體為:定時器0中斷時間為20毫秒,用于AD采樣計時;當AD采樣次數滿15次后判斷采樣結束標志,如果采樣結束則計算平均值然后在LCD上進行顯示后,產生AD中斷,zui后中斷返回。
l 定時器1中斷服務程序
定時器1主要完成掃描開關量輸入狀態,其中斷程序流程圖如圖3所示.具體為:中斷時間為250毫秒,如果有開關量輸入,則置開關量輸入標志為1,然后中斷返回。
圖2定時/計數器0中斷服務程序流程圖
圖3定時/計數器1中斷服務程序流程圖
上位機監控管理軟件設計采用分層結構,三個功能模塊從下至上依次分布在三層之中.由下向上三層依次為底層,通信層和圖形用戶界面層(GUI層),如圖4所示:
圖4 上位機軟件層次結構
系統設計在底層之上加通信層,這樣就可以完成本系統自定義的通信協議,由于系統要完成數據采集功能,這里的通信層也包括了數據處理模塊,這樣做可以簡化一些設計,減小代碼編寫量.通信層之上是圖形用戶界面層(GUI層),這層的功能是把數據流從通信層中讀出來,以圖形方式向用戶表示,這樣在用戶使用系統的時候就會感到自由清晰,很好地完成工作。
本系統主要應用的是串行通信協議,這個協議是定義在物理層之上的,其具體協議行為發生在底層,我們不必關心它,只需對它的設置參數進行相應的設置.另外,為完成系統的功能要求還須自定義一個數據幀或命令幀格式.所以這里通信層中的通信協議包括了兩方面的內容:一個是串行端口參數設置,另一個就是自定義的數據幀或命令幀。
串行端口設置參數主要有以下幾個:波特率、數據位、奇偶校驗位、停止位以及編碼方式.本系統中的波特率設置為19200 bit/s;數據位設置為8位;由于通信距離較近所以沒有奇偶校驗;停止位設為1位;編碼方式采用ASCII碼方式。這里的設置通過對Visual Basic 2005中SerialPort類中的公共屬性BaudRate、DataBits、Parity、StopBits、Encoding的設置即可完成。
接收數據幀和命令幀兩部分,數據幀的格式如圖5,命令幀格式如圖6所示。
圖5接收數據幀結構
圖6發送命令幀結構
這里的“$”代表起始字符,“YK” 代表發送設備標志,“*”代表校驗和標志“<CR><LF>”代表結束標志.其中各項數據以 “,”分隔.在命令幀中用 “KZ”代表發送設備標志,其他符號和接收數據幀相同.數據幀中模擬量有5個,每個用4個字符表示.數字量用“0”和“1”表示LED燈的滅和亮。
Visual Basic 2005 中的SerialPort類用于控制串行端口文件資源.它具有如下特性:提供同步 I/O 和事件驅動的 I/O,對管腳和中斷狀態的訪問以及對串行驅動程序屬性的訪問。
本系統中只引用了它其中的4個方法分別是Open方法、Close方法、Write方法、ReadLine方法和一個接收數據的DataReceived事件.Open方法用于打開計算機的串行端口,在本系統中使用方法如下:
Try
With serialport
.PortName = cbbCOMPorts.Text '設置串口名
.BaudRate = 19200 '設置波特率
.Parity = IO.Ports.Parity.None '無奇偶校驗
.DataBits = 8 '設置數據位
.StopBits = IO.Ports.StopBits.One '設置停止位
End With
serialport.Open() '打開串口
lblHelp.Text = cbbCOMPorts.Text & "已連接,請您選擇相應操作!"
Catch ex As Exception '捕捉異常
MsgBox(ex.ToString) '異常信息提示對話框
End Try '結束Try語句
其他的三個方法的使用方法類似,這里從略。
4 結論 基于ARM核心的微控制器無論在運算速度還是系統實現成本上都優于傳統的8位單片機。本文利用NXP公司ARM7微控制器LPC2478設計完成了家居網絡的底層監控系統。本系統充分利用LPC2478的豐富片上資源,如LCD控制器、CAN總線接口,輔之簡單的外圍電路實現監控系統的硬件部分。整個監控電路板的實現成本及功耗體積相比8位單片機實現方案,大大縮小,很適合家居智能化的工程實施。另外本文還提出了PC機監控管理軟件的通信層結構及實現細節,可以為家居智能化改造提供技術基礎。