趙錦劍,楊光永,2,吳海鋒,周安然
(1.云南民族大學(xué)電氣信息工程學(xué)院,昆明650504;2.華南理工大學(xué)機(jī)械工程學(xué)院,廣州510640)
基于μC/OS-Ⅱ的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)低功耗設(shè)計(jì)
趙錦劍1,楊光永1,2,吳海鋒1,周安然1
(1.云南民族大學(xué)電氣信息工程學(xué)院,昆明650504;2.華南理工大學(xué)機(jī)械工程學(xué)院,廣州510640)
針對(duì)無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)存在的能源受限問(wèn)題,從操作系統(tǒng)層面對(duì)節(jié)點(diǎn)進(jìn)行了低功耗設(shè)計(jì),提出了一種基于μC/OS-Ⅱ的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)的功耗管理方案,分別從節(jié)點(diǎn)微處理器、外圍設(shè)備以及電池能量3個(gè)方面進(jìn)行了電源管理設(shè)計(jì).并在STM32F103ZET6微處理器的節(jié)點(diǎn)上進(jìn)行了試驗(yàn).結(jié)果表明:該方案能夠有效降低系統(tǒng)功耗,當(dāng)系統(tǒng)處于空閑狀態(tài)時(shí),功耗相比于正常運(yùn)行時(shí)有了明顯的降低,且系統(tǒng)運(yùn)行穩(wěn)定.
μC/OS-Ⅱ;低功耗設(shè)計(jì);無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn);空閑狀態(tài);電源管理
無(wú)線傳感器網(wǎng)絡(luò)(WSN)是由分布在監(jiān)測(cè)區(qū)域內(nèi)大量的微型傳感器節(jié)點(diǎn)通過(guò)無(wú)線電通信形成的一個(gè)多跳的自組織網(wǎng)絡(luò)系統(tǒng)[1].目前大部分的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)操作系統(tǒng)都將低功耗設(shè)計(jì)作為節(jié)點(diǎn)軟件設(shè)計(jì)的重要部分.例如,專為無(wú)線傳感器網(wǎng)絡(luò)開發(fā)的微型操作系統(tǒng)TinyOS[2],當(dāng)其就緒任務(wù)隊(duì)列為空時(shí),系統(tǒng)就會(huì)進(jìn)入睡眠狀態(tài),直到當(dāng)有事件喚醒時(shí),才去處理該事件.美國(guó)加州大學(xué)開發(fā)的SOS[3]操作系統(tǒng),除了能夠在系統(tǒng)空閑時(shí)自動(dòng)將CPU置于低功耗狀態(tài),還提供了一個(gè)抽象接口可以用來(lái)管理外圍設(shè)備的功耗狀態(tài).浙江大學(xué)開發(fā)的SenSpire OS[4]是一套基于WSN的操作系統(tǒng),具有靈活的應(yīng)用程序編程模式,在提高系統(tǒng)工作效率的同時(shí)降低系統(tǒng)的功耗.μC/OS-Ⅱ是一種應(yīng)用在嵌入式設(shè)備中的操作系統(tǒng),在無(wú)線傳感器網(wǎng)絡(luò)中得到廣泛應(yīng)用,本文提出了一種基于μC/OS-Ⅱ的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)功耗管理方案.
μC/OS-Ⅱ是一個(gè)搶占式多任務(wù)實(shí)時(shí)操作系統(tǒng)內(nèi)核[5],基于該系統(tǒng)的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)功耗管理可以分為3個(gè)方面的內(nèi)容,如圖1所示.
1)微處理器的功耗管理.動(dòng)態(tài)調(diào)節(jié)CPU內(nèi)核電壓和頻率,根據(jù)節(jié)點(diǎn)運(yùn)行情況實(shí)現(xiàn)系統(tǒng)運(yùn)行模式的切換[6],比如工作模式、空閑模式和睡眠模式之間的切換;
2)外圍設(shè)備的功耗管理.通過(guò)操作系統(tǒng)的任務(wù)調(diào)度設(shè)計(jì)使節(jié)點(diǎn)外圍設(shè)備在性能和能耗上達(dá)到平衡,使設(shè)備能夠及時(shí)進(jìn)入低功耗模式,實(shí)現(xiàn)功耗管理;
3)電池管理.進(jìn)行節(jié)點(diǎn)電池電量檢測(cè),根據(jù)檢測(cè)到的結(jié)果對(duì)節(jié)點(diǎn)進(jìn)行相應(yīng)管理.
2.1 微處理器的低功耗設(shè)計(jì)
在節(jié)點(diǎn)的能量消耗中微處理器占據(jù)了很大的一部分.本設(shè)計(jì)中節(jié)點(diǎn)采用的微處理器芯片STM32F103ZET6具有正常工作模式以及睡眠、停機(jī)和待機(jī)3種低功耗模式,且可以通過(guò)編程實(shí)現(xiàn)各種模式之間的切換.STM32F103ZET6各種工作狀態(tài)具有不同的工作電壓和頻率,功耗也就不同.因此為了最大限度地降低系統(tǒng)功耗,需使STM32F103ZET6盡可能處于低功耗模式.
電源管理的主要任務(wù)是控制系統(tǒng)適時(shí)地在正常工作狀態(tài)和低功耗狀態(tài)之間的轉(zhuǎn)換,使節(jié)點(diǎn)能量達(dá)到最省狀態(tài)[7].本文主要通過(guò)對(duì)操作系統(tǒng)μC/OS-Ⅱ進(jìn)行編程設(shè)計(jì),使STM32F103ZET6能夠快速地進(jìn)入睡眠模式,實(shí)現(xiàn)微處理器的低功耗設(shè)計(jì).
實(shí)際上,節(jié)點(diǎn)的任務(wù)執(zhí)行時(shí)間往往只占CPU運(yùn)行時(shí)間的很少一部分,CPU大多數(shù)時(shí)間處于空閑狀態(tài).μC/OS-Ⅱ在內(nèi)核啟動(dòng)前會(huì)首先自動(dòng)創(chuàng)建一個(gè)空閑任務(wù)函數(shù)OSTaskIdle( ),該任務(wù)具有最低優(yōu)先級(jí)且此優(yōu)先級(jí)上沒(méi)有其它任務(wù).因此,當(dāng)沒(méi)有其它任務(wù)運(yùn)行時(shí),空閑任務(wù)就會(huì)得到執(zhí)行.所以可以在空閑任務(wù)末尾添加一個(gè)函數(shù)SleepMode( ),在該函數(shù)內(nèi)編寫使STM32F103ZET6進(jìn)入睡眠模式的指令,當(dāng)操作系統(tǒng)一旦調(diào)用空閑任務(wù)OSTask Idle( ),便可使STM32F103ZET6進(jìn)入睡眠模式,從而節(jié)約能耗.為了增加系統(tǒng)設(shè)計(jì)的靈活性,可以在μC/OS-Ⅱ操作系統(tǒng)的配置文件中加入宏開關(guān)configUse_Sleep-Mode,當(dāng)configUse_SleepMode值為1時(shí)空閑任務(wù)OSTaskIdle( )會(huì)調(diào)用SleepMode( )函數(shù)使STM32F103ZET6進(jìn)入睡眠模式.若為0則不調(diào)用該函數(shù),CPU將不會(huì)進(jìn)入睡眠模式.改進(jìn)后的空閑任務(wù)的主要代碼如下所示:
2.2 外部設(shè)備的低功耗設(shè)計(jì)
節(jié)點(diǎn)外設(shè)模塊主要實(shí)現(xiàn)的功能有:數(shù)據(jù)采集、傳輸、能量檢測(cè)以及與上位機(jī)通信等.根據(jù)節(jié)點(diǎn)不同硬件模塊的操作以及需要實(shí)現(xiàn)的功能,可以對(duì)將節(jié)點(diǎn)的功能進(jìn)行任務(wù)劃分和優(yōu)先級(jí)配置.對(duì)節(jié)點(diǎn)進(jìn)行合理的任務(wù)劃分可以有效簡(jiǎn)化系統(tǒng)程序設(shè)計(jì),提高CPU的利用率,降低系統(tǒng)的功耗.本文中采用靜態(tài)優(yōu)先級(jí)設(shè)置,節(jié)點(diǎn)任務(wù)的具體劃分和優(yōu)先級(jí)分配如表1所示.
μC/OS-Ⅱ是一個(gè)搶占式的多任務(wù)操作系統(tǒng),總是運(yùn)行就緒列表中優(yōu)先級(jí)最高的任務(wù),其核心是任務(wù)調(diào)度器.在進(jìn)行任務(wù)設(shè)計(jì)時(shí),可以通過(guò)任務(wù)調(diào)度的方式使各個(gè)外部設(shè)備滿足各自的時(shí)間和性能需求.通過(guò)在任務(wù)調(diào)度中考慮節(jié)能問(wèn)題,使系統(tǒng)生存時(shí)間可得到明顯的延長(zhǎng).μC/OS-Ⅱ具有5種任務(wù)狀態(tài),分別是運(yùn)行態(tài)、就緒態(tài)、掛起態(tài)、睡眠態(tài)以及中斷服務(wù)態(tài),可以通過(guò)調(diào)度實(shí)現(xiàn)任務(wù)在這5種狀態(tài)之間的轉(zhuǎn)換.μC/OS-Ⅱ的任務(wù)調(diào)度是按照優(yōu)先級(jí)搶占式進(jìn)行的,因此需要考慮任務(wù)間的資源共享、同步以及互斥等因素.本文中采用信號(hào)量和消息隊(duì)列用于控制資源共享以及任務(wù)間的通信.當(dāng)任務(wù)沒(méi)有獲得信號(hào)量或者消息隊(duì)列為空時(shí),等待接收該信號(hào)量或消息隊(duì)列中消息的任務(wù)會(huì)被掛起.本文節(jié)點(diǎn)的多任務(wù)調(diào)度框圖如圖2所示.
表1 節(jié)點(diǎn)任務(wù)劃分及優(yōu)先級(jí)分配
當(dāng)系統(tǒng)啟動(dòng)后,操作系統(tǒng)μC/OS-Ⅱ和硬件進(jìn)行初始化,CPU的控制權(quán)交給μC/OS-Ⅱ管理,CPU內(nèi)核循環(huán)檢測(cè)是否有外部中斷產(chǎn)生.當(dāng)串口1接收到來(lái)自上位機(jī)的數(shù)據(jù)時(shí)會(huì)產(chǎn)生中斷,系統(tǒng)將會(huì)自動(dòng)進(jìn)入串口中斷服務(wù)程序USART1_ISRHandler( )執(zhí)行串口數(shù)據(jù)的接收管理.USART1_ISRHandler( )將串口1接收的數(shù)據(jù)RxData緩存到一個(gè)地址為RxDataPtr的數(shù)據(jù)緩存區(qū)USART_RX_BUF[]中,并通過(guò)事先創(chuàng)建的消息隊(duì)列UARTQ將地址RxDataPtr傳送給優(yōu)先級(jí)最高的串口通信任務(wù)PortCom_Task( ).串口通信任務(wù)獲得到消息RxDataPtr后對(duì)USART_RX_BUF[]中的數(shù)據(jù)進(jìn)行處理.如果CPU沒(méi)有檢查到串口中斷發(fā)生,那么串口通信任務(wù)將會(huì)被掛起.USART1_ISRHandler( )的主要代碼如下:
本設(shè)計(jì)中節(jié)點(diǎn)采用16位CPU定時(shí)器Timer 3#溢出中斷的方式進(jìn)行周期性數(shù)據(jù)采集,采樣頻率為0.2 Hz.當(dāng)CPU內(nèi)核檢測(cè)到Timer 3#發(fā)生定時(shí)溢出中斷時(shí),μC/OS-Ⅱ調(diào)用中斷服務(wù)程序TIM3_ISRHandler( )進(jìn)行中斷處理,并發(fā)送信號(hào)量Sem_Acq給數(shù)據(jù)采集任務(wù)DataAcq_Task( ).DataAcq_Task( )接收到信號(hào)量Sem_Acq后,喚醒數(shù)據(jù)采集模塊實(shí)現(xiàn)對(duì)待測(cè)數(shù)據(jù)的ADC采樣,并通過(guò)之前創(chuàng)建的消息隊(duì)列AcqDataQ將采集到的數(shù)據(jù)AcqData作為消息發(fā)送給節(jié)點(diǎn)數(shù)據(jù)發(fā)送任務(wù)DataSen_Task( ).同時(shí)Data-Acq_Task( )將會(huì)將它自身掛起,并通過(guò)調(diào)用Acq-ModuleSleep( )函數(shù)設(shè)置相應(yīng)的寄存器使數(shù)據(jù)采集模塊及時(shí)進(jìn)入休眠狀態(tài),節(jié)點(diǎn)需再次等待CPU定時(shí)器溢出時(shí),才進(jìn)行數(shù)據(jù)采集.數(shù)據(jù)的ADC采樣的主要代碼如下:
數(shù)據(jù)發(fā)送任務(wù)DataSen_Task( )接收到消息隊(duì)列AcqDataQ中的消息AcqData后,無(wú)線通信模塊被喚醒開始工作,向鄰節(jié)點(diǎn)發(fā)送數(shù)據(jù)接收請(qǐng)求并執(zhí)行數(shù)據(jù)發(fā)送任務(wù).在執(zhí)行數(shù)據(jù)發(fā)送任務(wù)時(shí)首先通過(guò)SPI總線將要發(fā)送的數(shù)據(jù)AcqData寫入到無(wú)線通信模塊,然后在應(yīng)用層調(diào)用定義的發(fā)送函數(shù)RFSendData( )執(zhí)行數(shù)據(jù)發(fā)送功能.當(dāng)數(shù)據(jù)發(fā)送完成時(shí),DataSen_ Task( )將發(fā)送信號(hào)量Sem_Bat給電池管理任務(wù)BatteryMan_Task( ),并自身掛起,無(wú)線通信模塊也進(jìn)入低功耗狀態(tài).數(shù)據(jù)發(fā)送任務(wù)主要代碼如下:
本設(shè)計(jì)在μC/OS-Ⅱ內(nèi)核中設(shè)計(jì)一個(gè)任務(wù)掛起列表,當(dāng)有任務(wù)執(zhí)行完后進(jìn)入掛起態(tài)時(shí),將任務(wù)掛入到掛起列表.如果當(dāng)系統(tǒng)中的所有任務(wù)都掛入了掛起列表,則說(shuō)明系統(tǒng)的中的所有任務(wù)都進(jìn)入了掛起態(tài),那么系統(tǒng)就會(huì)處于空閑狀態(tài),由前面的微處理器低功耗設(shè)計(jì)可知系統(tǒng)會(huì)隨之進(jìn)入睡眠模式.當(dāng)有中斷發(fā)生時(shí),系統(tǒng)將退出睡眠模式,進(jìn)入運(yùn)行狀態(tài).
通過(guò)μC/OS-Ⅱ獲取所有應(yīng)用程序的性能需求,并根據(jù)性能需求進(jìn)行合理的任務(wù)調(diào)度設(shè)計(jì),直接控制底層硬件資源,從而在節(jié)點(diǎn)的性能和能耗控制之間進(jìn)行必要的折衷,使各個(gè)外設(shè)模塊以及微處理器能夠及時(shí)的進(jìn)入低功耗狀態(tài),達(dá)到降低節(jié)點(diǎn)功耗的目的.
2.3 電池管理實(shí)現(xiàn)
無(wú)線傳感器網(wǎng)絡(luò)中,傳感器節(jié)點(diǎn)和匯聚節(jié)點(diǎn)是動(dòng)態(tài)分配的,節(jié)點(diǎn)電量的多少直接影響著節(jié)點(diǎn)在無(wú)線傳感器網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中的地位.本文選用DS2786芯片對(duì)節(jié)點(diǎn)電池電量進(jìn)行檢測(cè),DS2786是一款基于開路電壓(OCV)的獨(dú)立式電量計(jì),能夠利用庫(kù)侖計(jì)與電池OCV的模型組合計(jì)算相對(duì)電量,且其休眠時(shí)電流僅為1μA.CPU通過(guò)I2C總線接口讀取DS2786的電量估算數(shù)據(jù),獲取電池的狀態(tài)信息,實(shí)現(xiàn)對(duì)節(jié)點(diǎn)的電池管理.STM32F103ZET6通過(guò)I2C讀取DS2786測(cè)量到電量的偽代碼如下:
例如,當(dāng)CPU讀取到匯聚節(jié)點(diǎn)的電量信息ElecQuantity后,電池管理任務(wù)BatteryMan_Task( )會(huì)根據(jù)電池運(yùn)行狀態(tài)進(jìn)行相應(yīng)的管理,具體實(shí)現(xiàn)過(guò)程如圖3所示.
本文以基于STM32F103ZET6微處理器的無(wú)線傳感器網(wǎng)絡(luò)節(jié)點(diǎn)為例進(jìn)行實(shí)驗(yàn),節(jié)點(diǎn)采集的數(shù)據(jù)為FM頻段的信號(hào)強(qiáng)度.編譯環(huán)境采用IAR workbench for ARM 6.40,在STM32F103ZET6上移植入μC/OS-Ⅱ操作系統(tǒng),對(duì)節(jié)點(diǎn)進(jìn)行功耗管理.數(shù)據(jù)采集模塊選用RDA5820接收FM頻段信號(hào);射頻模塊采用通信頻率為2.4 GHz的CC2530模塊,工作電壓為2~3.6 V,將射頻輸出功率設(shè)置為1 dBm.
分別測(cè)試μC/OS-Ⅱ系統(tǒng)改進(jìn)前后在各模式下的電流、電壓及功耗情況.測(cè)試結(jié)果如表2所示.
表2 改進(jìn)前后系統(tǒng)在各模式下的電流電壓值
通過(guò)表2中實(shí)驗(yàn)數(shù)據(jù)可以看出,改進(jìn)后節(jié)點(diǎn)處于空閑狀態(tài)時(shí)系統(tǒng)的功耗有了明顯的降低.原因是改進(jìn)后,當(dāng)節(jié)點(diǎn)處于空閑狀態(tài)時(shí)系統(tǒng)就會(huì)通過(guò)調(diào)用SleepMode( )函數(shù)使CPU進(jìn)入睡眠模式,降低了系統(tǒng)功耗.
本文主要從操作系統(tǒng)層面分別從節(jié)點(diǎn)的微處理器和外圍設(shè)備以及電池能量檢測(cè)3個(gè)方面進(jìn)行了電源管理設(shè)計(jì).首先對(duì)操作系統(tǒng)μC/OS-Ⅱ進(jìn)行了改進(jìn)使其具有低功耗的特點(diǎn);其次,對(duì)操作系統(tǒng)μC/OS-Ⅱ進(jìn)行任務(wù)調(diào)度設(shè)計(jì),有效管理節(jié)點(diǎn)各個(gè)模塊的工作模式,從而降低節(jié)點(diǎn)的功耗;最后通過(guò)檢測(cè)節(jié)點(diǎn)電池能量,判斷節(jié)點(diǎn)能否繼續(xù)穩(wěn)定工作.實(shí)驗(yàn)結(jié)果表明,該方案能夠有效地減少節(jié)點(diǎn)功耗,從而延長(zhǎng)無(wú)線傳感器網(wǎng)絡(luò)的使用壽命,具有一定的實(shí)際應(yīng)用價(jià)值.
[1]POTTIE G J,KAISERW J.Embedding the internet:wireless integrated network sensors[J].Communications of the ACM,2003,43(5):51-58.
[2]潘浩,董齊芬,張貴軍.無(wú)線傳感器網(wǎng)絡(luò)操作系統(tǒng)Tiny-OS[M].北京:清華大學(xué)出版社,2011:13-20.
[3]HAN CC,KUMAR R,SHEA R,etal.A dynamic operating system for sensor nodes[C]//Proceedings of the 3rd international conference on Mobile systems,applications,and services.USA:Washington,ACM,2005:163-176.
[4]DONGW,CHEN C,LIU X,et al.SenSpire OS:A predictable,flexible,and efficient operating system for wireless sensor networks[J].IEEE Transactions on Computers,2011,60(12):1788-1801.
[5]KIRPAL R B,NAGRARE T H.Efficient energy management system through RTOS[J].International Journal of Research in Computer and Communication Technology,2014,3(1):28-32.
[6]邱祎,桑楠.無(wú)線傳感器網(wǎng)絡(luò)基于μC/OS-Ⅱ的低功耗改進(jìn)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2007(4):5-7.
[7]HARKUTD G,ALIM S,LOHIYA P.Real-time scheduling algorithms for wireless sensor network[J].Circuits and systems:An International Journal,2014,1(1):11-18.
(責(zé)任編輯 莊紅林)
A low-power design of the wireless sensor network node base on μC/OS-Ⅱ
ZHAO Jin-jian1,YANG Guang-yong1,2,WU Hai-feng1,ZHOU An-ran1
(1.School of Electronics and Information Engineering,Yunnan Minzu University,Kunming 650504,China;2.College of Mechanical Engineering,South China University of Technology,Guangzhou 510640,China)
For solving the problem of limited energy of the wireless sensor network node at the level of the operating system,a power management solution of node based on μC/OS-Ⅱ was proposed.Thisdesign contained three aspects which were the microprocessor and peripheral devices,and battery power.The solution was obtained from the experimental verification on the node whose CPU was STM32F103ZET6.The results have shown that the solution can reduce the power consumption of the systemeffectively.When the system is idle,the power consumption of the node has been significantly reduced compared with the normal operation,and the system is stable.
μC/OS-Ⅱ;low-powerdesign;wireless sensor network node;idle state;power management
TP316.2
A
1672-8513(2014)06-0391-05
2014-05-09.
國(guó)家自然科學(xué)基金(61262091);云南省高校無(wú)線傳感器網(wǎng)絡(luò)重點(diǎn)實(shí)驗(yàn)室開放基金(ZK2011002);云南民族大學(xué)研究生創(chuàng)新項(xiàng)目(2013YCX01).
趙錦劍(1986-),男,碩士研究生.主要研究方向:無(wú)線傳感器網(wǎng)絡(luò)和嵌入式系統(tǒng).
楊光永(1970-),男,博士研究生,副教授,碩士生導(dǎo)師.主要研究方向:微系統(tǒng)、智能控制與數(shù)字系統(tǒng)設(shè)計(jì).