基于ARM嵌入式的遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計(jì)
1 引言
監(jiān)控系統(tǒng)現(xiàn)已成為現(xiàn)代化生產(chǎn)、生活中不可缺少的重要組成部分。目前,監(jiān)控系列產(chǎn)品 種類繁多,大部分廣泛應(yīng)用于交通、醫(yī)院、銀行、家居、學(xué)校等安防領(lǐng)域。
隨著嵌入式系統(tǒng)的出現(xiàn),尤其是基于 arm 內(nèi)核芯片的嵌入式系統(tǒng)的出現(xiàn),使得監(jiān)控系統(tǒng)的應(yīng)用領(lǐng)域更為廣泛。本文設(shè)計(jì)的遠(yuǎn)程監(jiān)控報(bào)警系統(tǒng)除了作為安防功能外,還可以應(yīng)用于 以下領(lǐng)域:通訊領(lǐng)域:遠(yuǎn)程通訊、視頻會(huì)議和視頻點(diǎn)播、證券、遠(yuǎn)程教育等。醫(yī)療領(lǐng)域:病 房監(jiān)護(hù)、遠(yuǎn)程診斷等。工業(yè)領(lǐng)域:遠(yuǎn)程設(shè)備診斷、維護(hù)、維修,遠(yuǎn)程生產(chǎn)監(jiān)控等。家用領(lǐng)域:家用電器遠(yuǎn)程維護(hù);電、氣、火等重大事故自動(dòng)報(bào)警等。
2 系統(tǒng)設(shè)計(jì)
2.1系統(tǒng)組成
本文設(shè)計(jì)的遠(yuǎn)程監(jiān)控系統(tǒng)主要由中心控制器、數(shù)據(jù)終端、傳感器模塊、通訊模塊、接口模塊等幾部分組成。系統(tǒng)組成圖(如圖 1)。
2.2中心控制器
系統(tǒng)核心負(fù)責(zé)數(shù)據(jù)采集判斷處理。為了提高系統(tǒng)工作效率,這里使用的是三星公司的 S3C2410芯片作為處理器。S3C2410 芯片是一款高性價(jià)比的 ARM 芯片,非常適合作手機(jī)、PDA 等手持設(shè)備。主要特性包括: arm920T 內(nèi)核,最高工作頻率 203MHz,LCD 控制器:可直接驅(qū)動(dòng)真彩液晶屏,最高支持 2048×1024 真彩液晶屏,2 個(gè) USB Host端口,1 個(gè)USB Device端口,支持 Nand flash 啟動(dòng)模式,SD 卡接口,UART、IIC、SPI、IIS 等多種類 型串行接口, 4 通道DMA。
本文的監(jiān)控系統(tǒng)的 CPU 核心部分使用的是標(biāo)準(zhǔn)的 SO-DIMM200 金手指接口,便于后期 維護(hù)和升級(jí)。如果該監(jiān)控系統(tǒng)的使用環(huán)境較為苛刻,可以將 CPU替換為S3C2440芯片。 S3C2440完全兼容S3C2410全部特性(注意:芯片引腳不完全兼容)。與S3C2410芯片相比,S3C2440的性能更為優(yōu)越:最高工作頻率可達(dá)500MHz,內(nèi)部集成CMOS攝像頭接口,但價(jià)格較昂貴。
2.3數(shù)據(jù)終端
數(shù)據(jù)終端的主要功能是對(duì)監(jiān)控?cái)?shù)據(jù)進(jìn)行分析、處理,及時(shí)將數(shù)據(jù)匯報(bào)給監(jiān)控人員。同時(shí),監(jiān)控人員可以根據(jù)現(xiàn)場(chǎng)情況,使用數(shù)據(jù)終端對(duì)監(jiān)控的設(shè)備進(jìn)行遠(yuǎn)程控制。數(shù)據(jù)終端最大優(yōu)勢(shì) 就是安全、可靠、便于攜帶。一般情況下為了節(jié)約成本,可以將手機(jī)、PDA 等移動(dòng)通訊設(shè) 備作為數(shù)據(jù)終端使用。但是如果作為對(duì)高危環(huán)境或精密儀器的監(jiān)控系統(tǒng),數(shù)據(jù)終端需要專業(yè) 定制。這里使用的是中心控制器的作為數(shù)據(jù)終端,即中心控制器既作為數(shù)據(jù)采集發(fā)送中心,也可數(shù)據(jù)接收處理中心使用。
2.4通訊模塊
通訊模塊主要負(fù)責(zé)遠(yuǎn)程數(shù)據(jù)通訊。帶有 RS232/485、GPRS、CDMA 等一種或多種通訊 方式。需要根據(jù)現(xiàn)場(chǎng)環(huán)境和用戶需要進(jìn)行定制。通訊模塊與控制器通過(guò)接口總線連接,連接 方式為 TTL/RS232/RS485 等。
2.5傳感器模塊
傳感器模塊的主要功能是感知外部環(huán)境,對(duì)外部環(huán)境進(jìn)行實(shí)時(shí)監(jiān)測(cè)。由人體紅外傳感器、 振動(dòng)傳感器、超聲波傳感器、可燃?xì)怏w傳感器、溫度傳感器、濕度傳感器等一種或多種傳感 器組成。可根據(jù)現(xiàn)場(chǎng)監(jiān)測(cè)環(huán)境不同進(jìn)行定制。
2.6接口模塊
接口模塊主要作為系統(tǒng)擴(kuò)展功能使用,將控制器的 A/D 轉(zhuǎn)換、I2C、SPI 等多種接口進(jìn)行 外部擴(kuò)展。接口模塊沒(méi)有特定的功能,但可以根據(jù)需要與其他設(shè)備連接,例如可以與工業(yè)儀 器儀表或設(shè)備連接,實(shí)時(shí)對(duì)儀器或設(shè)備進(jìn)行監(jiān)控。
接口模塊雖然不是監(jiān)控系統(tǒng)的主要部分,但是對(duì)于整個(gè)系統(tǒng)來(lái)說(shuō)卻是不可缺少。因?yàn)楸疚牡谋O(jiān)控系統(tǒng)主要考慮到了系統(tǒng)的可擴(kuò)展性和與其它系統(tǒng)無(wú)縫連接。通過(guò)接口模塊可以很方 便的對(duì)監(jiān)控系統(tǒng)進(jìn)行升級(jí),并且可以實(shí)現(xiàn)與其他系統(tǒng)或設(shè)備的無(wú)縫連接。這也是本系統(tǒng)區(qū)優(yōu) 于其他監(jiān)控系統(tǒng)的主要功能。
3 軟件設(shè)計(jì)
3.1工作軟件
系統(tǒng)的軟件設(shè)計(jì)較為復(fù)雜,這里只給出了整個(gè)工作軟件流程(如圖 2)。
3.2操作系統(tǒng)移植
S3C2410 芯片支持多種嵌入式操作系統(tǒng),如 WINCE、uCLinux 等。但考慮到監(jiān)控系統(tǒng) 的實(shí)時(shí)性要求,這里使用的是 μC/OS-II 嵌入式實(shí)時(shí)操作系統(tǒng)。μC/OS-II 是一個(gè)源碼公開(kāi)、可 移植、可固化、可裁剪、占先式的實(shí)時(shí)多任務(wù)操作系統(tǒng)。其絕大部分源碼是用 ANSI C 寫的。 整個(gè)嵌入式系統(tǒng)分為兩大層:硬件層和軟件層。這里主要研究軟件層的架構(gòu)。軟件層主 要分為四個(gè)部分:實(shí)時(shí)操作系統(tǒng)內(nèi)核,與處理器相關(guān)部分,與應(yīng)用程序相關(guān)部分,用戶的應(yīng)用程序。移植 μC/OS-II 系統(tǒng)需要修改的文件有:應(yīng)用程序相關(guān)文件: OS_CFG.HINCLUDE.H; 處理器相關(guān)文件: OS_CPU.H、 OS_CPU_A.ASM、OS_CPU_C.C。
3.2.1 與處理器相關(guān)的代碼
這是移植中最關(guān)鍵的部分。內(nèi)核將應(yīng)用系統(tǒng)和底層硬件有機(jī)的結(jié)合成一個(gè)實(shí)時(shí)系統(tǒng),要 使同一個(gè)內(nèi)核能適用于不同的硬件體系,就需要在內(nèi)核和硬件之間有一個(gè)中間層,這就是與 處理器相關(guān)的代碼。處理器不同。這部分代碼也不同。我們?cè)谝浦矔r(shí)需要自己移植這部分代 碼。
a)OS_CPU.H
包括了用#define 定義的與處理器相關(guān)的常量,宏和類型定義,有系統(tǒng)數(shù)據(jù)類型定義,棧 增長(zhǎng)方向定義,關(guān)中斷和開(kāi)中斷定義,系統(tǒng)軟中斷的定義等等。
b)OS_CPU_A.ASM
這部分需要對(duì)處理器的寄存器進(jìn)行操作,所以必須用匯編語(yǔ)言來(lái)編寫。包括四個(gè)子函數(shù): OSStartHighRdy(),OSCtxSw(),OSIntCtxSw(),OSTickISR()。OSStartHighRdy()在多任務(wù) 系統(tǒng)啟動(dòng)函數(shù) OSStart()中調(diào)用。完成的功能是:設(shè)置系統(tǒng)運(yùn)行標(biāo)志位 OSRunning = TRUE; 將就緒表中最高優(yōu)先級(jí)任務(wù)的棧指針 Load 到 SP 中,并強(qiáng)制中斷返回。這樣就緒的最高優(yōu)先 級(jí)任務(wù)就如同從中斷里返回到運(yùn)行態(tài)一樣,使得整個(gè)系統(tǒng)得以運(yùn)轉(zhuǎn)。OSCtxSw()在任務(wù)級(jí)任 務(wù)切換函數(shù)中調(diào)用的。任務(wù)級(jí)切換是通過(guò) SWI 或者 TRAP 人為制造的中斷來(lái)實(shí)現(xiàn)的。ISR 的向 量地址必須指向 OSCtxSw()。這一中斷完成的功能:保存任務(wù)的環(huán)境變量(主要是寄存器的值, 通過(guò)入棧來(lái)實(shí)現(xiàn)),將當(dāng)前 SP 存入任務(wù) TCB 中,載入就緒最高優(yōu)先級(jí)任務(wù)的 SP,恢復(fù)就緒最高 優(yōu)先級(jí)任務(wù)的環(huán)境變量,中斷返回。這樣就完成了任務(wù)級(jí)的切換。
OSIntCtxSw()在退出中斷服務(wù)函數(shù) OSIntExit()中調(diào)用,實(shí)現(xiàn)中斷級(jí)任務(wù)切換.由于是在中斷里調(diào)用,所以處理器的寄 存器入棧工作已經(jīng)做完,就不用作這部分工作了。具體完成的任務(wù);調(diào)整棧指針(因?yàn)檎{(diào)用 函數(shù)會(huì)使任務(wù)棧結(jié)構(gòu)與系統(tǒng)任務(wù)切換時(shí)堆棧標(biāo)準(zhǔn)結(jié)構(gòu)不一致),保存當(dāng)前任務(wù) SP,載入就緒 最高優(yōu)先級(jí)任務(wù)的 SP,恢復(fù)就緒最高優(yōu)先級(jí)任務(wù)的環(huán)境變量,中斷返回。這樣就完成了中斷 級(jí)任務(wù)切換。OSTickISR()系統(tǒng)時(shí)鐘節(jié)拍中斷服務(wù)函數(shù),這是一個(gè)周期性中斷,為內(nèi)核提供時(shí)鐘節(jié)拍。頻率越高系統(tǒng)負(fù)荷越重。其周期的大小決定了內(nèi)核所能給應(yīng)用系統(tǒng)提供的最小時(shí) 間間隔服務(wù)。一般只限于 ms 級(jí)(跟 MCU 有關(guān)),對(duì)于要求更加苛刻的任務(wù)需要用戶自己建立中 斷來(lái)解決.該函數(shù)具體內(nèi)容:保存寄存器(如果硬件自動(dòng)完成就可以省略),調(diào) OSIntEnter(), 調(diào)用 OSTimeTick(),調(diào)用 OSIntExit(),恢復(fù)寄存器,中斷返回。
c) OS_CPU_C.C
該文件中共定義了 6 個(gè)函數(shù),但是最重要的是 OSTaskStkInit().其他都是對(duì)系統(tǒng)內(nèi)核的擴(kuò)展時(shí)用的.OSTaskStkInit()是在用戶建立任務(wù)時(shí)系統(tǒng)內(nèi)部自己調(diào)用的,對(duì)用戶任務(wù)的堆棧 進(jìn)行初始化。使建立好的進(jìn)入就緒態(tài)任務(wù)的堆棧與系統(tǒng)發(fā)生中斷并且將環(huán)境變量保存完畢時(shí) 的棧結(jié)構(gòu)一致。這樣就可以用中斷返回指令使就緒的任務(wù)運(yùn)行起來(lái)。
3.2.2與應(yīng)用相關(guān)的代碼
這部分包括兩個(gè)文件:OS_CFG.H, INCLUDES.H。 用戶根據(jù)自己的應(yīng)用系統(tǒng)來(lái)定制合適 的內(nèi)核服務(wù)功能。OS_CFG.H 來(lái)配置內(nèi)核,用戶根據(jù)需要對(duì)內(nèi)核進(jìn)行定制,留下需要的部 分,去掉不需要的部分,設(shè)置系統(tǒng)的基本情況。比如系統(tǒng)可提供的最大任務(wù)數(shù)量,是否定制 郵箱服務(wù),是否需要系統(tǒng)提供任務(wù)掛起功能,是否提供任務(wù)優(yōu)先級(jí)動(dòng)態(tài)改變功能等等。 INCLUDES.H 系統(tǒng)頭文件,整個(gè)實(shí)時(shí)系統(tǒng)程序所需要的文件,包括了內(nèi)核和用戶的頭文件。
3.3用戶圖形接口
雖然 μC/OS-II 操作系統(tǒng)具有很高的實(shí)時(shí)性,但不像 WINCE、uCLinux 等操作系統(tǒng)那樣 有良好的圖形界面支持。所以,在使用液晶和觸摸屏的情況下需要移植用戶圖形接口程序。這里使用的是 μC/GUI。μC/GUI 是一個(gè)軟件模塊集合,通過(guò)該模塊可以在我們的嵌入式產(chǎn)品 中加入用戶圖形接口(GUI)。μC/GUI 具有很高的執(zhí)行效率,并且與處理器和 LCD 控制器相 獨(dú)立。該模塊可以工作在單任務(wù)或者多任務(wù)環(huán)境,可以支持不同大小的顯示方式。
通過(guò) μC/GUI 我們可以很方便的在液晶屏繪制圖形和界面。如果需要多種字體支持,必 須自己將相應(yīng)的字體字庫(kù)加入到 μC/GUI 中。為了避免出現(xiàn)亂碼,盡量使用 GB2312 國(guó)標(biāo)字庫(kù)。
3.4關(guān)于字庫(kù)的兼容性問(wèn)題
我們國(guó)內(nèi)通常使用的漢字字庫(kù)是 GB 碼,但國(guó)際上使用的是 UNICODE 碼 ,所以如果數(shù)據(jù)終端使用的是手機(jī)、PDA 等移動(dòng)通信設(shè)備,那么在數(shù)據(jù)發(fā)送前必須進(jìn)行字碼轉(zhuǎn)換,即 GB 碼 轉(zhuǎn)換為 UNICODE 碼或者 UNICODE 碼轉(zhuǎn)換為 GB 碼。由于 GB 碼與 UNICODE 碼在排列組合上沒(méi)有任何規(guī)律,所以通常字碼轉(zhuǎn)換的方法就是 查表法。
4 結(jié)束語(yǔ)
基于 arm9 嵌入式系統(tǒng)的遠(yuǎn)程監(jiān)控系統(tǒng)與以往的監(jiān)控系統(tǒng)不同,高性能的處理器芯片大 大提高了系統(tǒng)的性能。使監(jiān)控系統(tǒng)能夠工作在比較惡劣的環(huán)境中。并且在設(shè)計(jì)上充分考慮到 了系統(tǒng)的可擴(kuò)展性和兼容性問(wèn)題,實(shí)現(xiàn)了本系統(tǒng)與其他系統(tǒng)的無(wú)縫連接。以滿足不同工作環(huán) 境的需要。
評(píng)論