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