趙錦劍,楊光永,2,吳海鋒,周安然
(1.云南民族大學電氣信息工程學院,昆明650504;2.華南理工大學機械工程學院,廣州510640)
基于μC/OS-Ⅱ的無線傳感器網(wǎng)絡節(jié)點低功耗設計
趙錦劍1,楊光永1,2,吳海鋒1,周安然1
(1.云南民族大學電氣信息工程學院,昆明650504;2.華南理工大學機械工程學院,廣州510640)
針對無線傳感器網(wǎng)絡節(jié)點存在的能源受限問題,從操作系統(tǒng)層面對節(jié)點進行了低功耗設計,提出了一種基于μC/OS-Ⅱ的無線傳感器網(wǎng)絡節(jié)點的功耗管理方案,分別從節(jié)點微處理器、外圍設備以及電池能量3個方面進行了電源管理設計.并在STM32F103ZET6微處理器的節(jié)點上進行了試驗.結果表明:該方案能夠有效降低系統(tǒng)功耗,當系統(tǒng)處于空閑狀態(tài)時,功耗相比于正常運行時有了明顯的降低,且系統(tǒng)運行穩(wěn)定.
μC/OS-Ⅱ;低功耗設計;無線傳感器網(wǎng)絡節(jié)點;空閑狀態(tài);電源管理
無線傳感器網(wǎng)絡(WSN)是由分布在監(jiān)測區(qū)域內(nèi)大量的微型傳感器節(jié)點通過無線電通信形成的一個多跳的自組織網(wǎng)絡系統(tǒng)[1].目前大部分的無線傳感器網(wǎng)絡節(jié)點操作系統(tǒng)都將低功耗設計作為節(jié)點軟件設計的重要部分.例如,專為無線傳感器網(wǎng)絡開發(fā)的微型操作系統(tǒng)TinyOS[2],當其就緒任務隊列為空時,系統(tǒng)就會進入睡眠狀態(tài),直到當有事件喚醒時,才去處理該事件.美國加州大學開發(fā)的SOS[3]操作系統(tǒng),除了能夠在系統(tǒng)空閑時自動將CPU置于低功耗狀態(tài),還提供了一個抽象接口可以用來管理外圍設備的功耗狀態(tài).浙江大學開發(fā)的SenSpire OS[4]是一套基于WSN的操作系統(tǒng),具有靈活的應用程序編程模式,在提高系統(tǒng)工作效率的同時降低系統(tǒng)的功耗.μC/OS-Ⅱ是一種應用在嵌入式設備中的操作系統(tǒng),在無線傳感器網(wǎng)絡中得到廣泛應用,本文提出了一種基于μC/OS-Ⅱ的無線傳感器網(wǎng)絡節(jié)點功耗管理方案.
μC/OS-Ⅱ是一個搶占式多任務實時操作系統(tǒng)內(nèi)核[5],基于該系統(tǒng)的無線傳感器網(wǎng)絡節(jié)點功耗管理可以分為3個方面的內(nèi)容,如圖1所示.

1)微處理器的功耗管理.動態(tài)調(diào)節(jié)CPU內(nèi)核電壓和頻率,根據(jù)節(jié)點運行情況實現(xiàn)系統(tǒng)運行模式的切換[6],比如工作模式、空閑模式和睡眠模式之間的切換;
2)外圍設備的功耗管理.通過操作系統(tǒng)的任務調(diào)度設計使節(jié)點外圍設備在性能和能耗上達到平衡,使設備能夠及時進入低功耗模式,實現(xiàn)功耗管理;
3)電池管理.進行節(jié)點電池電量檢測,根據(jù)檢測到的結果對節(jié)點進行相應管理.
2.1 微處理器的低功耗設計
在節(jié)點的能量消耗中微處理器占據(jù)了很大的一部分.本設計中節(jié)點采用的微處理器芯片STM32F103ZET6具有正常工作模式以及睡眠、停機和待機3種低功耗模式,且可以通過編程實現(xiàn)各種模式之間的切換.STM32F103ZET6各種工作狀態(tài)具有不同的工作電壓和頻率,功耗也就不同.因此為了最大限度地降低系統(tǒng)功耗,需使STM32F103ZET6盡可能處于低功耗模式.
電源管理的主要任務是控制系統(tǒng)適時地在正常工作狀態(tài)和低功耗狀態(tài)之間的轉換,使節(jié)點能量達到最省狀態(tài)[7].本文主要通過對操作系統(tǒng)μC/OS-Ⅱ進行編程設計,使STM32F103ZET6能夠快速地進入睡眠模式,實現(xiàn)微處理器的低功耗設計.
實際上,節(jié)點的任務執(zhí)行時間往往只占CPU運行時間的很少一部分,CPU大多數(shù)時間處于空閑狀態(tài).μC/OS-Ⅱ在內(nèi)核啟動前會首先自動創(chuàng)建一個空閑任務函數(shù)OSTaskIdle( ),該任務具有最低優(yōu)先級且此優(yōu)先級上沒有其它任務.因此,當沒有其它任務運行時,空閑任務就會得到執(zhí)行.所以可以在空閑任務末尾添加一個函數(shù)SleepMode( ),在該函數(shù)內(nèi)編寫使STM32F103ZET6進入睡眠模式的指令,當操作系統(tǒng)一旦調(diào)用空閑任務OSTask Idle( ),便可使STM32F103ZET6進入睡眠模式,從而節(jié)約能耗.為了增加系統(tǒng)設計的靈活性,可以在μC/OS-Ⅱ操作系統(tǒng)的配置文件中加入宏開關configUse_Sleep-Mode,當configUse_SleepMode值為1時空閑任務OSTaskIdle( )會調(diào)用SleepMode( )函數(shù)使STM32F103ZET6進入睡眠模式.若為0則不調(diào)用該函數(shù),CPU將不會進入睡眠模式.改進后的空閑任務的主要代碼如下所示:

2.2 外部設備的低功耗設計
節(jié)點外設模塊主要實現(xiàn)的功能有:數(shù)據(jù)采集、傳輸、能量檢測以及與上位機通信等.根據(jù)節(jié)點不同硬件模塊的操作以及需要實現(xiàn)的功能,可以對將節(jié)點的功能進行任務劃分和優(yōu)先級配置.對節(jié)點進行合理的任務劃分可以有效簡化系統(tǒng)程序設計,提高CPU的利用率,降低系統(tǒng)的功耗.本文中采用靜態(tài)優(yōu)先級設置,節(jié)點任務的具體劃分和優(yōu)先級分配如表1所示.
μC/OS-Ⅱ是一個搶占式的多任務操作系統(tǒng),總是運行就緒列表中優(yōu)先級最高的任務,其核心是任務調(diào)度器.在進行任務設計時,可以通過任務調(diào)度的方式使各個外部設備滿足各自的時間和性能需求.通過在任務調(diào)度中考慮節(jié)能問題,使系統(tǒng)生存時間可得到明顯的延長.μC/OS-Ⅱ具有5種任務狀態(tài),分別是運行態(tài)、就緒態(tài)、掛起態(tài)、睡眠態(tài)以及中斷服務態(tài),可以通過調(diào)度實現(xiàn)任務在這5種狀態(tài)之間的轉換.μC/OS-Ⅱ的任務調(diào)度是按照優(yōu)先級搶占式進行的,因此需要考慮任務間的資源共享、同步以及互斥等因素.本文中采用信號量和消息隊列用于控制資源共享以及任務間的通信.當任務沒有獲得信號量或者消息隊列為空時,等待接收該信號量或消息隊列中消息的任務會被掛起.本文節(jié)點的多任務調(diào)度框圖如圖2所示.

表1 節(jié)點任務劃分及優(yōu)先級分配

當系統(tǒng)啟動后,操作系統(tǒng)μC/OS-Ⅱ和硬件進行初始化,CPU的控制權交給μC/OS-Ⅱ管理,CPU內(nèi)核循環(huán)檢測是否有外部中斷產(chǎn)生.當串口1接收到來自上位機的數(shù)據(jù)時會產(chǎn)生中斷,系統(tǒng)將會自動進入串口中斷服務程序USART1_ISRHandler( )執(zhí)行串口數(shù)據(jù)的接收管理.USART1_ISRHandler( )將串口1接收的數(shù)據(jù)RxData緩存到一個地址為RxDataPtr的數(shù)據(jù)緩存區(qū)USART_RX_BUF[]中,并通過事先創(chuàng)建的消息隊列UARTQ將地址RxDataPtr傳送給優(yōu)先級最高的串口通信任務PortCom_Task( ).串口通信任務獲得到消息RxDataPtr后對USART_RX_BUF[]中的數(shù)據(jù)進行處理.如果CPU沒有檢查到串口中斷發(fā)生,那么串口通信任務將會被掛起.USART1_ISRHandler( )的主要代碼如下:


本設計中節(jié)點采用16位CPU定時器Timer 3#溢出中斷的方式進行周期性數(shù)據(jù)采集,采樣頻率為0.2 Hz.當CPU內(nèi)核檢測到Timer 3#發(fā)生定時溢出中斷時,μC/OS-Ⅱ調(diào)用中斷服務程序TIM3_ISRHandler( )進行中斷處理,并發(fā)送信號量Sem_Acq給數(shù)據(jù)采集任務DataAcq_Task( ).DataAcq_Task( )接收到信號量Sem_Acq后,喚醒數(shù)據(jù)采集模塊實現(xiàn)對待測數(shù)據(jù)的ADC采樣,并通過之前創(chuàng)建的消息隊列AcqDataQ將采集到的數(shù)據(jù)AcqData作為消息發(fā)送給節(jié)點數(shù)據(jù)發(fā)送任務DataSen_Task( ).同時Data-Acq_Task( )將會將它自身掛起,并通過調(diào)用Acq-ModuleSleep( )函數(shù)設置相應的寄存器使數(shù)據(jù)采集模塊及時進入休眠狀態(tài),節(jié)點需再次等待CPU定時器溢出時,才進行數(shù)據(jù)采集.數(shù)據(jù)的ADC采樣的主要代碼如下:

數(shù)據(jù)發(fā)送任務DataSen_Task( )接收到消息隊列AcqDataQ中的消息AcqData后,無線通信模塊被喚醒開始工作,向鄰節(jié)點發(fā)送數(shù)據(jù)接收請求并執(zhí)行數(shù)據(jù)發(fā)送任務.在執(zhí)行數(shù)據(jù)發(fā)送任務時首先通過SPI總線將要發(fā)送的數(shù)據(jù)AcqData寫入到無線通信模塊,然后在應用層調(diào)用定義的發(fā)送函數(shù)RFSendData( )執(zhí)行數(shù)據(jù)發(fā)送功能.當數(shù)據(jù)發(fā)送完成時,DataSen_ Task( )將發(fā)送信號量Sem_Bat給電池管理任務BatteryMan_Task( ),并自身掛起,無線通信模塊也進入低功耗狀態(tài).數(shù)據(jù)發(fā)送任務主要代碼如下:


本設計在μC/OS-Ⅱ內(nèi)核中設計一個任務掛起列表,當有任務執(zhí)行完后進入掛起態(tài)時,將任務掛入到掛起列表.如果當系統(tǒng)中的所有任務都掛入了掛起列表,則說明系統(tǒng)的中的所有任務都進入了掛起態(tài),那么系統(tǒng)就會處于空閑狀態(tài),由前面的微處理器低功耗設計可知系統(tǒng)會隨之進入睡眠模式.當有中斷發(fā)生時,系統(tǒng)將退出睡眠模式,進入運行狀態(tài).
通過μC/OS-Ⅱ獲取所有應用程序的性能需求,并根據(jù)性能需求進行合理的任務調(diào)度設計,直接控制底層硬件資源,從而在節(jié)點的性能和能耗控制之間進行必要的折衷,使各個外設模塊以及微處理器能夠及時的進入低功耗狀態(tài),達到降低節(jié)點功耗的目的.
2.3 電池管理實現(xiàn)
無線傳感器網(wǎng)絡中,傳感器節(jié)點和匯聚節(jié)點是動態(tài)分配的,節(jié)點電量的多少直接影響著節(jié)點在無線傳感器網(wǎng)絡拓撲結構中的地位.本文選用DS2786芯片對節(jié)點電池電量進行檢測,DS2786是一款基于開路電壓(OCV)的獨立式電量計,能夠利用庫侖計與電池OCV的模型組合計算相對電量,且其休眠時電流僅為1μA.CPU通過I2C總線接口讀取DS2786的電量估算數(shù)據(jù),獲取電池的狀態(tài)信息,實現(xiàn)對節(jié)點的電池管理.STM32F103ZET6通過I2C讀取DS2786測量到電量的偽代碼如下:

例如,當CPU讀取到匯聚節(jié)點的電量信息ElecQuantity后,電池管理任務BatteryMan_Task( )會根據(jù)電池運行狀態(tài)進行相應的管理,具體實現(xiàn)過程如圖3所示.

本文以基于STM32F103ZET6微處理器的無線傳感器網(wǎng)絡節(jié)點為例進行實驗,節(jié)點采集的數(shù)據(jù)為FM頻段的信號強度.編譯環(huán)境采用IAR workbench for ARM 6.40,在STM32F103ZET6上移植入μC/OS-Ⅱ操作系統(tǒng),對節(jié)點進行功耗管理.數(shù)據(jù)采集模塊選用RDA5820接收FM頻段信號;射頻模塊采用通信頻率為2.4 GHz的CC2530模塊,工作電壓為2~3.6 V,將射頻輸出功率設置為1 dBm.
分別測試μC/OS-Ⅱ系統(tǒng)改進前后在各模式下的電流、電壓及功耗情況.測試結果如表2所示.

表2 改進前后系統(tǒng)在各模式下的電流電壓值
通過表2中實驗數(shù)據(jù)可以看出,改進后節(jié)點處于空閑狀態(tài)時系統(tǒng)的功耗有了明顯的降低.原因是改進后,當節(jié)點處于空閑狀態(tài)時系統(tǒng)就會通過調(diào)用SleepMode( )函數(shù)使CPU進入睡眠模式,降低了系統(tǒng)功耗.
本文主要從操作系統(tǒng)層面分別從節(jié)點的微處理器和外圍設備以及電池能量檢測3個方面進行了電源管理設計.首先對操作系統(tǒng)μC/OS-Ⅱ進行了改進使其具有低功耗的特點;其次,對操作系統(tǒng)μC/OS-Ⅱ進行任務調(diào)度設計,有效管理節(jié)點各個模塊的工作模式,從而降低節(jié)點的功耗;最后通過檢測節(jié)點電池能量,判斷節(jié)點能否繼續(xù)穩(wěn)定工作.實驗結果表明,該方案能夠有效地減少節(jié)點功耗,從而延長無線傳感器網(wǎng)絡的使用壽命,具有一定的實際應用價值.
[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ǎng)絡操作系統(tǒng)Tiny-OS[M].北京:清華大學出版社,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ǎng)絡基于μC/OS-Ⅱ的低功耗改進[J].單片機與嵌入式系統(tǒ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.
(責任編輯 莊紅林)
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.
國家自然科學基金(61262091);云南省高校無線傳感器網(wǎng)絡重點實驗室開放基金(ZK2011002);云南民族大學研究生創(chuàng)新項目(2013YCX01).
趙錦劍(1986-),男,碩士研究生.主要研究方向:無線傳感器網(wǎng)絡和嵌入式系統(tǒng).
楊光永(1970-),男,博士研究生,副教授,碩士生導師.主要研究方向:微系統(tǒng)、智能控制與數(shù)字系統(tǒng)設計.