引言
無(wú)線(xiàn)傳感器網(wǎng)絡(luò)(Wireless Sensor Networks)是通信技術(shù)、計(jì)算機(jī)技術(shù)、傳感器技術(shù)和網(wǎng)絡(luò)技術(shù)相結(jié)合的產(chǎn)物。無(wú)線(xiàn)傳感器網(wǎng)絡(luò)是由大量隨機(jī)分布的、具有實(shí)時(shí)感知和自組織能力的傳感器節(jié)點(diǎn)組成的,它具有分布式處理帶來(lái)的監(jiān)測(cè)精度高、容錯(cuò)性好、覆蓋區(qū)域廣等優(yōu)點(diǎn),在環(huán)境監(jiān)控、消費(fèi)類(lèi)電子、軍事偵察以及交通管理等很多領(lǐng)域中具有廣闊的應(yīng)用前景,是近期國(guó)際上研究的熱點(diǎn)之一。
1.系統(tǒng)方案設(shè)計(jì)
無(wú)線(xiàn)傳感器網(wǎng)絡(luò)的基本組成單元是具備信息采集和通信功能的嵌入式節(jié)點(diǎn),因此無(wú)線(xiàn)傳感器網(wǎng)絡(luò)的設(shè)計(jì)也就是節(jié)點(diǎn)的設(shè)計(jì)。本文根據(jù)無(wú)線(xiàn)傳感器網(wǎng)絡(luò)的功能需求,按照嵌入式系統(tǒng)體裁衣的思想選擇各個(gè)功能模塊部件,著重考慮節(jié)點(diǎn)的性?xún)r(jià)比和可升級(jí)性等因素,設(shè)計(jì)嵌入式無(wú)線(xiàn)傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的硬件結(jié)構(gòu)。根據(jù)功能需求,將各個(gè)獨(dú)立功能模塊化,節(jié)點(diǎn)的硬件體系結(jié)構(gòu)如圖 1所示。
本文綜合硬件平臺(tái)因素,系統(tǒng)軟件使用嵌入式實(shí)時(shí)操作系統(tǒng) FreeRTOS。由于簇頭節(jié)點(diǎn)需具備 GPRS數(shù)據(jù)傳輸功能,因而軟件體系中具備 TCP/IP協(xié)議棧也是非常重要的。本文選擇了在著名開(kāi)源網(wǎng)站 SourceForge上公開(kāi)發(fā)布的嵌入式實(shí)時(shí)操作系統(tǒng) FreeRTOS作為系統(tǒng)軟件體系設(shè)計(jì)的基礎(chǔ),選擇己經(jīng)移植到 FreeRTOS上的的 uIP作為系統(tǒng) TCP/IP協(xié)議棧。在節(jié)點(diǎn)組網(wǎng)模塊設(shè)計(jì)中,本文移植了符合 ZigBee規(guī)范的軟件,從而為節(jié)點(diǎn)的組網(wǎng),路由等應(yīng)用層程序的開(kāi)發(fā)提供了基礎(chǔ)。如圖 2所示為系統(tǒng)的軟件體系結(jié)構(gòu)。
1 無(wú)線(xiàn)傳感器網(wǎng)絡(luò)節(jié)點(diǎn)硬件設(shè)計(jì)
2 1ARM處理器模塊通信電路設(shè)計(jì)
采用 GPRS模塊進(jìn)行數(shù)據(jù)傳輸過(guò)程中,為便于系統(tǒng)測(cè)試,本文采用 AT91SAM7S256提供的一路兩線(xiàn)制串口DBG COM顯示由CPU發(fā)送給 GPRS模塊的數(shù)據(jù),采用剩下的 USARTO顯示由 GPRS模塊發(fā)送給 CPU的數(shù)據(jù),實(shí)現(xiàn)對(duì)發(fā)送和接收數(shù)據(jù)的監(jiān)測(cè)和解析,為系統(tǒng)功能的調(diào)試提供了一種良好的接口。
2.2 ARM處理器時(shí)鐘電路設(shè)計(jì)
AT91 SAM7S系列微控制器系統(tǒng)時(shí)鐘由時(shí)鐘發(fā)生器提供,其內(nèi)部包括 1個(gè)鎖相環(huán) (PLL), 1個(gè)主振蕩器,1個(gè) RC振蕩器。時(shí)鐘發(fā)生器為系統(tǒng)提供下列時(shí)鐘: SLCK慢速時(shí)鐘。由 RC振蕩器提供,是電源管理系統(tǒng)內(nèi)唯一恒定時(shí)鐘。 MAINCK主振蕩器輸出時(shí)鐘。PLLCK分頻器與 PLL輸出。
圖 4 時(shí)鐘模塊電路原理圖
2.3 MC39i模塊電路設(shè)計(jì)
GPRS模塊設(shè)計(jì)可劃分為 SIM卡接口電路、啟動(dòng)復(fù)位電路和控制接口電路三部分。啟動(dòng)復(fù)位電路設(shè)計(jì),MC39i上電后,將其 IGT引腳拉低至少 100ms,即可以開(kāi)啟 MC39i;MC39i帶有一個(gè)符合 ISO 7816-3 IC卡標(biāo)準(zhǔn)的 SiM卡接口,用戶(hù)可以方便的接外部 SIM讀卡器; MC39i通過(guò) ZIF插座提供了符合 ITU-T DCE標(biāo)準(zhǔn)的 RS232接口,通過(guò) RS232接口可以向 MC39i發(fā)送 AT命令和數(shù)據(jù)。該接口工作在 CMOS電平下。MC39i的 RS232接口支持 8位數(shù)據(jù)、無(wú)校驗(yàn)、 1位停止位的數(shù)據(jù)格式,波特率可以設(shè)置為 300bps~115kbps。支持 RTS/CTS硬件握手信號(hào)和 XON/XOFF握手信號(hào)。
2.4振動(dòng)傳感器模塊設(shè)計(jì)
本文振動(dòng)信號(hào)的檢測(cè)采用 ADXL202實(shí)現(xiàn),ADXL202是美國(guó)模擬器件公司設(shè)計(jì)生產(chǎn)的的新型單芯片雙軸加速度傳感器,加速度測(cè)量范圍是士 2g;動(dòng)態(tài)測(cè)試帶寬為 0~5kHz,可測(cè)量靜態(tài)加速度、振動(dòng)和傾角。本文采用加速度傳感器用于監(jiān)測(cè)較大的振動(dòng)或移動(dòng),達(dá)到防盜的目的。由于振動(dòng)在微觀(guān)上是物體加速度的快速變化,因此本文采用此原理進(jìn)行振動(dòng)信號(hào)的監(jiān)測(cè)。將 ADXL202的 X軸和 Y軸加速度輸出引腳與 CPU的定時(shí)計(jì)數(shù)器相連接,利用 TC捕獲芯片的 PWM信號(hào)得到當(dāng)前的加速度,如果連續(xù)監(jiān)測(cè)到芯片加速度的急劇變化,則可判定振動(dòng)的產(chǎn)生,加速度的變化程度對(duì)應(yīng)于振動(dòng)的強(qiáng)弱。設(shè)置與芯片 T2引腳連接的電阻值為
1.25MS2,使得其輸出信號(hào)的周期為 l 0ms,從而獲得較好的分辨率,其原理圖如圖 5所示。
3.系統(tǒng)軟件設(shè)計(jì)
3.1 GPRS模塊軟件設(shè)計(jì)
GPRS模塊用于無(wú)線(xiàn)傳感器網(wǎng)絡(luò)間的通信,它是節(jié)點(diǎn)的重要組成部分之一。通過(guò) GPRS模塊進(jìn)行數(shù)據(jù)傳輸本質(zhì)上是利用了移動(dòng)通信網(wǎng)絡(luò)與 Internet網(wǎng)絡(luò)之間的互聯(lián),因而傳輸?shù)臄?shù)據(jù)需要符合 Internet網(wǎng)絡(luò)的 TCP/IP協(xié)議標(biāo)準(zhǔn)。無(wú)線(xiàn)傳感器網(wǎng)絡(luò)節(jié)點(diǎn)利用 GPRS實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)倪^(guò)程為:首先利用 ARM處理器控制 MC39i模塊實(shí)現(xiàn)與 Internet網(wǎng)絡(luò)的連接,通過(guò) PPP協(xié)議獲得 IP地址;然后將經(jīng)過(guò) TCP/IP以及 PPP協(xié)議封裝的數(shù)據(jù)通過(guò) RS232串口發(fā)送給 MC39i。根據(jù) GPRS撥號(hào)上網(wǎng)的通信規(guī)程以及 MC39i模塊的控制說(shuō)明,本文設(shè)計(jì)如圖 6所示系統(tǒng)流程圖完成 GPRS模塊撥號(hào)上網(wǎng)以及后續(xù)的數(shù)據(jù)傳輸處理,其中 PPP協(xié)商處理和數(shù)據(jù)的 TCP/IP以及應(yīng)用層的封裝處理是本模塊設(shè)計(jì)的重點(diǎn)和難點(diǎn)。
3.2 MC39i驅(qū)動(dòng)程序設(shè)計(jì)
MC39i模塊驅(qū)動(dòng)設(shè)計(jì)主要包括 FreeRTOS下 USART驅(qū)動(dòng)程序設(shè)計(jì),MC39i模塊的初始化和 GPRS網(wǎng)絡(luò)參數(shù)設(shè)置。它在保證 GPRS模塊可用性的前提下,為數(shù)據(jù)的傳輸提供通道,為鏈路層以及上層協(xié)議的實(shí)現(xiàn)提供方便的接口。
串口驅(qū)動(dòng)程序的工作過(guò)程為:當(dāng)某一個(gè)任務(wù)需要通過(guò)串口發(fā)送數(shù)據(jù)時(shí),必須先得到該串口發(fā)送隊(duì)列的信號(hào)量時(shí)才可發(fā)送數(shù)據(jù),發(fā)送結(jié)束后釋放信號(hào)量 ;如果無(wú)法取得信號(hào)量,則掛起該任務(wù)等待信號(hào)量有效。驅(qū)動(dòng)程序中為 USART建立發(fā)送隊(duì)列和接收隊(duì)列兩個(gè)隊(duì)列。當(dāng)發(fā)送隊(duì)列不為空時(shí),發(fā)送中斷使能,從而將發(fā)送隊(duì)列中的數(shù)據(jù)通過(guò)串口中斷服務(wù)程序發(fā)送到串口。如果需要發(fā)送數(shù)據(jù),只需調(diào)用 xSerialPutChar函數(shù)向發(fā)送隊(duì)列傳送數(shù)據(jù)即可 ;如果需要從串口接收數(shù)據(jù),需調(diào)用 xSerialGetChar函數(shù),等待從隊(duì)列接收數(shù)據(jù),串口驅(qū)動(dòng)程序即可使能 USART接收中斷,進(jìn)行數(shù)據(jù)接收的準(zhǔn)備,串口接收中斷服務(wù)會(huì)將接收到的數(shù)據(jù)自動(dòng)發(fā)送到串口接收隊(duì)列中。
建立發(fā)送和接收隊(duì)列的代碼如下: xRxedChars=xQueueCreate( uxQueueLength, (portBASE TYPE)sizeof( *pDataPackage)); xCharsForTx=xQueueCreate(uxQueueLength+1, portBASE_TYPE)sizeof(*pDataPackage)); 其中 xQueueCreate為 FreeRTOS操作系統(tǒng)提供的創(chuàng)建隊(duì)列的 API接口函數(shù)。第一個(gè)參
數(shù)指定了隊(duì)列的深度,第二個(gè)參數(shù)指定了隊(duì)列的寬度。驅(qū)動(dòng)程序?yàn)閼?yīng)用程序提供了以下函數(shù)接口:signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed portCHAR cOutChar, portTickType xBlockTime) void vSerialPutString( xComPortHandle pxPort, const signed portCHAR * const pcString, unsigned portSHORT usStringLength) void Uartse Printf(char *fmt,...);void IntSendString(char *pt) signed portBASE_TYPExSerialGetChar(xComPortHandlepxPort,signed ortCHAR*pcRxedChar, portTickType xBlockTime)
3.3振動(dòng)傳感器任務(wù)設(shè)計(jì)
本文采用 AT91 SAM7S256處理器的定時(shí)計(jì)數(shù)器實(shí)現(xiàn)對(duì)振動(dòng)傳感器 ADX202輸出 PWM信號(hào)的測(cè)量。采用加速度傳感器測(cè)量振動(dòng)信號(hào)用于監(jiān)測(cè)較大的振動(dòng)或移動(dòng),達(dá)到防盜的作用。由于振動(dòng)是物體加速度的快速變化,本文采用此原理進(jìn)行振動(dòng)信號(hào)的監(jiān)測(cè)。驗(yàn)。最后確定當(dāng)加速度連續(xù)兩次變化超過(guò) 0.03 m/s2時(shí),發(fā)出振動(dòng)警報(bào),這樣可以靈敏的監(jiān)測(cè)汽車(chē)移動(dòng)和碰撞等事件,并且排除了由于其他情況導(dǎo)致的信號(hào)波動(dòng)。,以下給出加速度傳感器處理任務(wù)的核心代碼如下:
void vADXLTask( void *pvParameters) { (void)pvParameters;
InitTC1Capture();//初始化 TC1, 2工作模式 InitTC2Capture();
while(1) { xQueueReceive(ADXLCapDataQ, pcBuffer, xBlockTitne) pShkData=AnalysisADXLdataQ; //分析 X, Y軸的所得的計(jì)數(shù)器捕獲數(shù)值 AssertX=pdFALSE;//狀態(tài)變量復(fù)位 AssertY=pdFALSE; xQueueSend(ShakeDataQ, pShkData, xBIockTime)://將振動(dòng)信號(hào)發(fā)送到隊(duì)列中 vTaskDelay(WAIT*TICK_PER_SEC);//任務(wù)延時(shí) portENTER_CRITICAL(); startTC1Capture(); //啟動(dòng)定時(shí) /計(jì)數(shù)器 1再次進(jìn)行測(cè) t startTC2Capture();//啟動(dòng)定時(shí) /計(jì)數(shù)器 2再次進(jìn)行測(cè)盆 portEXIT_CRITICAL(); } }
4總結(jié)
本文創(chuàng)新點(diǎn):無(wú)線(xiàn)傳感器網(wǎng)絡(luò)是一種全新的信息獲取和處理方式,具有廣泛的應(yīng)用前景。本文在分析國(guó)內(nèi)外研究現(xiàn)狀和無(wú)線(xiàn)傳感器網(wǎng)絡(luò)功能需求的基礎(chǔ)上,提出并實(shí)現(xiàn)了利用 ARM處理器采用嵌入式技術(shù)設(shè)計(jì)無(wú)線(xiàn)傳感器網(wǎng)絡(luò)汽車(chē)防盜系統(tǒng)的總體方案,并重點(diǎn)開(kāi)展了節(jié)點(diǎn)的軟硬件方面的研究,采用嵌入式 ARM處理器,結(jié)合 GPRS通信模塊 MC39i,振動(dòng)傳感器實(shí)現(xiàn)了一種高性能無(wú)線(xiàn)傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的硬件設(shè)計(jì),在實(shí)際使用,系統(tǒng)靈敏度高,運(yùn)行穩(wěn)定,具有較高的實(shí)用價(jià)值