王蔚揚(yáng) 丁嘉月 汪鵬洪 查寧雯 李曉寧
摘 要:介紹了一種采用STM32F103芯片,并基于嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II的睡枕控制系統(tǒng)的研究設(shè)計(jì)。針對(duì)睡眠時(shí)因翻身產(chǎn)生的睡枕高度不適,在用戶睡眠時(shí)通過(guò)三軸加速度傳感器MMA7361LC采集數(shù)據(jù)分析用戶睡眠姿態(tài),進(jìn)而通過(guò)芯片控制充放氣裝置對(duì)睡枕內(nèi)置氣囊高度進(jìn)行實(shí)時(shí)地調(diào)節(jié)。該系統(tǒng)相比傳統(tǒng)基于單任務(wù)機(jī)制的控制系統(tǒng)具有更好的實(shí)時(shí)控制性能和可靠性能。經(jīng)過(guò)調(diào)試驗(yàn)證,系統(tǒng)能滿足用戶睡姿數(shù)據(jù)的實(shí)時(shí)采集和枕頭高度調(diào)節(jié)要求。所設(shè)計(jì)的控制系統(tǒng)可用于數(shù)據(jù)實(shí)時(shí)采集和反饋控制等復(fù)雜系統(tǒng)中。
關(guān)鍵詞:STM32 μC/OS-II 加速度計(jì) 任務(wù)調(diào)度 消息郵箱
中圖分類號(hào):TP271+.5 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2016)07(a)-0095-04
Design of the Pillow Control System Based on μC/OS-II①
Wang Weiyang Ding Jiayue Wang Penghong Zha Ningwen Li Xiaoning
(School of Information & Electronic Engineering, Zhejiang Gongshang University, Hangzhou Zhejiang, 310018, China)
Abstract: A pillow control system based on STM32F103 and embedded real-time operating system μC/OS-II is designed in this pager. Analyzing the users posture of sleeping by the acceleration sensor MMA7361LC, the system uses the air pumps and release valves to adjust the height of the balloons in the pillow. The system has better real-time control performance and reliability than the traditional system based on a single task. After experiments, the design of the control system can meet the requirement of real-time data acquisition and pillow height adjustment. And it can be applied to complex systems which have real-time data acquisition part and feedback control part.
Key Words: STM32; μC/OS-II; Accelerometer; Task scheduling; Mail box
枕頭高度不合適會(huì)對(duì)我們的頸椎健康造成影響?,F(xiàn)在市面上的枕頭大多都為普通枕頭,高度不可調(diào)節(jié)。用戶睡眠時(shí)無(wú)意識(shí)翻身,會(huì)使枕頭高度處于一個(gè)不合理的狀態(tài),影響我們的頸椎健康。相比之下,記憶枕雖然能實(shí)現(xiàn)枕頭高度符合個(gè)人需要,但它在用戶改變睡姿后枕頭的形態(tài)改變較為緩慢,實(shí)際使用效果并不理想。因此,該文設(shè)計(jì)了一個(gè)能在用戶睡眠時(shí)根據(jù)睡姿來(lái)調(diào)節(jié)高度的智能睡枕[1]。系統(tǒng)基于嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II,采用STM32單片機(jī)實(shí)時(shí)采集傳感器數(shù)據(jù),對(duì)用戶睡姿進(jìn)行判斷,并進(jìn)行反饋,從而控制睡枕高度。系統(tǒng)有足夠的實(shí)時(shí)性和穩(wěn)定性,能夠滿足用戶所需睡眠時(shí)對(duì)睡枕高度的實(shí)時(shí)控制要求。
1 系統(tǒng)整體方案設(shè)計(jì)
該系統(tǒng)設(shè)計(jì)由硬件與軟件兩部分構(gòu)成。硬件以STM32處理器作為主控芯片,三軸加速度傳感器采集數(shù)據(jù)分析用戶睡姿,睡枕內(nèi)置氣囊外接微型充氣泵以及泄氣閥。整個(gè)睡枕控制系統(tǒng)設(shè)計(jì)有按鍵操作、TFT-LCD液晶屏顯示和氣泵控制功能。系統(tǒng)可增設(shè)實(shí)時(shí)時(shí)鐘顯示和鬧鈴功能,實(shí)用性強(qiáng)。
所設(shè)計(jì)的睡枕控制系統(tǒng)的硬件平臺(tái)結(jié)構(gòu)如圖1所示。
傳統(tǒng)程序設(shè)計(jì)是基于單任務(wù)機(jī)制的,在實(shí)際應(yīng)用中如果其中一個(gè)任務(wù)運(yùn)行出現(xiàn)了錯(cuò)誤,可能直接導(dǎo)致系統(tǒng)程序跑飛或者陷入死循環(huán)而無(wú)法工作。因此,系統(tǒng)軟件以嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II為基礎(chǔ),該操作系統(tǒng)最初便是為微控制器應(yīng)用設(shè)計(jì)的,有著內(nèi)核小、多任務(wù)、可裁剪、實(shí)時(shí)性好、系統(tǒng)服務(wù)豐富和使用方便等特點(diǎn),廣泛用于飛行器、醫(yī)療設(shè)備、手機(jī)通信和工業(yè)控制等各類產(chǎn)品中[2,3]。μC/OS-II可以支持包括8個(gè)系統(tǒng)保留任務(wù)在內(nèi)的多達(dá)64個(gè)任務(wù),滿足一般控制系統(tǒng)的任務(wù)數(shù)量要求,且系統(tǒng)本身具有任務(wù)調(diào)度和任務(wù)監(jiān)控功能,使系統(tǒng)具有較高的實(shí)時(shí)性和可靠性,完全適用于睡枕系統(tǒng)設(shè)計(jì)的需要。
2 系統(tǒng)的硬件部分
2.1 供電電路設(shè)計(jì)
系統(tǒng)采用6 V直流穩(wěn)壓電源作為電源輸入。由于STM32控制器芯片、MMA7361LC和LCD顯示屏均采用3.3 V直流供電,所以采用AMS1117-3.3芯片將輸入電源降壓給其供電。該降壓模塊設(shè)置有LED燈,當(dāng)模塊正常工作輸出電壓時(shí)LED燈亮。電源另一路則直接以6 V直流接入電路給充氣泵及泄氣閥供電。降壓模塊電路如圖2所示。
2.2 主控芯片外圍電路設(shè)計(jì)
主控芯片采用意法半導(dǎo)體(ST)集團(tuán)的基于ARM Cortex-M3內(nèi)核的STM32F103ZET6芯片,該控制器由3.3 V直流電壓供電,最高工作頻率可以達(dá)到72 MHz,并且芯片內(nèi)已經(jīng)集成12位逐次逼近型模擬數(shù)字轉(zhuǎn)換器(ADC)[3]。該ADC測(cè)量通道較多,可以支持測(cè)量16個(gè)外部信號(hào)源,各通道A/D轉(zhuǎn)換均可以單次或者掃描模式執(zhí),轉(zhuǎn)換后的數(shù)據(jù)結(jié)果存儲(chǔ)在16位數(shù)據(jù)寄存器ADC_ConvertedValue中[4]。芯片外圍電路設(shè)置包括SPI FLASH、晶振模塊、復(fù)位電路和EEPROM等,用以拓展控制器的使用功能。
2.3 睡姿傳感器電路設(shè)計(jì)
加速度傳感器采用美國(guó)飛思卡爾半導(dǎo)體(Freescale Semiconductor)公司出產(chǎn)的MMA7361LC型單芯片三軸加速度傳感器,該款傳感器具有電流消耗低、微機(jī)械型等特點(diǎn),其內(nèi)部設(shè)置了諸如低通濾波器電路及溫度補(bǔ)償電路等用于提高傳感器精度的電路模塊[5]。傳感器有多種選擇模式,可以設(shè)為檢測(cè)線性自由落體或者休眠模式,可以選擇1.5 g或者6 g兩種靈敏度。該系統(tǒng)選擇了1.5 g模式,使得檢測(cè)靈敏度可以達(dá)到800 mV/g,且設(shè)置方式簡(jiǎn)單,只需在使用時(shí)將g-Select端置空即選定為該模式。該加速度傳感器輸出的電壓模擬信號(hào),經(jīng)過(guò)預(yù)處理電路后,通過(guò)程序預(yù)設(shè)的I/O口與STM32控制器的ADC通道相連接,采用ADC1的1、2、3通道分別采集加速度傳感器X、Y、Z輸出口輸出的模擬信號(hào);控制器的PG8口用于控制休眠狀態(tài),節(jié)省電能。電路設(shè)計(jì)如圖3所示。
2.4 充放氣裝置電路設(shè)計(jì)
由于系統(tǒng)中微型充氣泵與泄氣閥均采用6 V直流供電,為了使單片機(jī)能控制充放氣設(shè)備的啟停,采用NPN型三極管8050設(shè)計(jì)控制電路,由單片機(jī)I/O口輸出信號(hào)控制三極管導(dǎo)通,進(jìn)而控制充放氣設(shè)備工作。系統(tǒng)設(shè)置三個(gè)充氣泵,分別配有三個(gè)泄氣閥。
2.5 顯示、按鍵模塊電路設(shè)計(jì)
所采用的顯示屏為可支持16位數(shù)據(jù)寬度的四線電阻式觸摸屏,可以實(shí)現(xiàn)觸摸操作。系統(tǒng)設(shè)有4個(gè)操作按鍵,其中按鍵S1上接VCC3.3 V,可用于實(shí)現(xiàn)系統(tǒng)的待機(jī)喚醒功能;其余3個(gè)按鍵設(shè)置有濾波電容,用于通過(guò)硬件方式來(lái)消除按鍵抖動(dòng)產(chǎn)生的信號(hào)干擾,使按鍵輸入信號(hào)穩(wěn)定便于單片機(jī)讀取。
3 基于μC/OS-II的軟件實(shí)現(xiàn)
3.1 軟件設(shè)計(jì)思想
系統(tǒng)軟件設(shè)計(jì)主要由μC/OS-II操作系統(tǒng)在STM32平臺(tái)上的移植和各種應(yīng)用任務(wù)的代碼編寫(xiě)構(gòu)成。移植時(shí)需要修改內(nèi)核程序,主要是修改系統(tǒng)內(nèi)核中與編譯器相關(guān)的代碼os_cpu.h、與處理器相關(guān)的代碼os_cpu_a.asm和與操作系統(tǒng)相關(guān)的代碼os_cpu_c.c[3,6]。置于用戶腹部的三軸加速度傳感器輸出模擬信號(hào)至STM32控制器[5],經(jīng)過(guò)芯片內(nèi)ADC處理轉(zhuǎn)化成數(shù)字信號(hào)后,數(shù)據(jù)結(jié)果經(jīng)由芯片內(nèi)部數(shù)據(jù)傳輸模塊(DMA)傳給CPU。后經(jīng)程序算法分析出當(dāng)前用戶睡眠所處的體位狀態(tài),進(jìn)而通過(guò)I/O口發(fā)出高低電平控制電路,使氣泵和泄氣閥對(duì)氣囊進(jìn)行充放氣來(lái)調(diào)節(jié)枕體高度。
3.2 系統(tǒng)任務(wù)設(shè)置
系統(tǒng)的軟件結(jié)構(gòu)模型如圖4所示。由μC/OS-II操作系統(tǒng)負(fù)責(zé)調(diào)度管理各個(gè)任務(wù)。
監(jiān)控任務(wù)用于監(jiān)控程序運(yùn)行狀態(tài),當(dāng)出現(xiàn)BUG時(shí)對(duì)系統(tǒng)初始狀態(tài)進(jìn)行重新設(shè)定;數(shù)據(jù)采集任務(wù)采集傳感器數(shù)據(jù);數(shù)據(jù)處理任務(wù)對(duì)采集到的傳感器數(shù)據(jù)進(jìn)行分析,判斷用戶睡眠姿勢(shì);LCD觸摸任務(wù)顯示當(dāng)前睡枕所處狀態(tài),可觸摸操作方便用戶控制;按鍵檢測(cè)任務(wù)檢測(cè)用戶的按鍵操作,在任務(wù)程序中通過(guò)命令改變程序工作狀態(tài);由反饋控制任務(wù)控制充放氣裝置來(lái)調(diào)節(jié)氣囊高度。
每個(gè)模塊對(duì)應(yīng)的功能任務(wù)互相之間為并行關(guān)系,由于μC/OS-II中采用基于優(yōu)先級(jí)的任務(wù)調(diào)度算法,所以系統(tǒng)中每個(gè)任務(wù)的優(yōu)先級(jí)均不可能相同。該系統(tǒng)采用靜態(tài)方式設(shè)置任務(wù)的優(yōu)先級(jí),在滿足任務(wù)調(diào)度功能的同時(shí),大大簡(jiǎn)化了系統(tǒng)的控制工作。程序設(shè)計(jì)中設(shè)置按鍵檢測(cè)任務(wù)的優(yōu)先級(jí)較高,設(shè)為9,數(shù)字越小表示任務(wù)優(yōu)先級(jí)越高,其余分別設(shè)置數(shù)據(jù)處理任務(wù)為11,反饋控制任務(wù)為13,數(shù)據(jù)采集任務(wù)為15,LCD觸摸任務(wù)為17。間隔設(shè)置系統(tǒng)任務(wù)優(yōu)先級(jí),可方便后續(xù)對(duì)系統(tǒng)任務(wù)的拓展。
3.3 任務(wù)間通信和調(diào)度
該系統(tǒng)通過(guò)消息郵箱來(lái)完成各個(gè)任務(wù)間的通信。?C/OS-II中有多種任務(wù)通信方式,消息郵箱這種通信方式主要是由一個(gè)任務(wù)向另一個(gè)指定任務(wù)發(fā)送一個(gè)指針型變量,這個(gè)指針可以指向一個(gè)包含信息的數(shù)據(jù)結(jié)構(gòu),可以直接在任務(wù)間進(jìn)行信息內(nèi)容的傳遞,這使得任務(wù)間通信更加高效[7]。在使用消息郵箱時(shí)通過(guò)調(diào)用系統(tǒng)函數(shù)OSMboxCreate()來(lái)創(chuàng)建郵箱,同時(shí)設(shè)置指針的初始值為所需發(fā)送的信息數(shù)據(jù)地址。該系統(tǒng)共設(shè)計(jì)了3個(gè)消息郵箱,分別為: (1)MboxDataprocessing郵箱。接收數(shù)據(jù)采集任務(wù)發(fā)送的消息,數(shù)據(jù)處理任務(wù)等待消息;(2)MboxControl郵箱。接收由數(shù)據(jù)處理任務(wù)發(fā)送的消息,反饋控制任務(wù)等待消息; (3)Mboxmonitoring郵箱。接收反饋控制任務(wù)發(fā)送的消息,監(jiān)控任務(wù)等待消息。
μC/OS-II作為一個(gè)完全可剝奪型的實(shí)時(shí)內(nèi)核系統(tǒng),其核心是任務(wù)調(diào)度算法,因此系統(tǒng)內(nèi)核總是選擇處于就緒狀態(tài)下具有最高優(yōu)先級(jí)的任務(wù)賦予其CPU控制權(quán)[8]。其調(diào)度過(guò)程具體表現(xiàn)為系統(tǒng)內(nèi)核通過(guò)查找就緒態(tài)任務(wù)列表OSUnMapTbl[]找出此時(shí)優(yōu)先級(jí)最高的就緒態(tài)任務(wù),然后將該任務(wù)PCB地址賦予OSPrioHighRdy,接著賦予該任務(wù)CPU控制權(quán)來(lái)完成某個(gè)階段的任務(wù)切換[3]。
3.4 系統(tǒng)運(yùn)行
全部系統(tǒng)任務(wù)均在μC/OS-II系統(tǒng)內(nèi)核的調(diào)度下循環(huán)運(yùn)行。設(shè)置的監(jiān)控任務(wù)用于對(duì)系統(tǒng)運(yùn)行狀態(tài)進(jìn)行監(jiān)控。監(jiān)控任務(wù)在超出定義的等待時(shí)間后如果依舊未取得消息,則判斷系統(tǒng)運(yùn)行出現(xiàn)錯(cuò)誤。此時(shí)監(jiān)控任務(wù)獲得CPU控制權(quán)對(duì)系統(tǒng)重新初始化,通過(guò)該任務(wù)的運(yùn)行使得系統(tǒng)具有一定的錯(cuò)誤自檢能力,提高程序運(yùn)行的可靠性和穩(wěn)定性。
4 實(shí)驗(yàn)結(jié)果
完成系統(tǒng)的軟硬件設(shè)計(jì)后,對(duì)睡枕進(jìn)行調(diào)試測(cè)試。該系統(tǒng)所設(shè)置五種常見(jiàn)睡姿狀態(tài)對(duì)應(yīng)傳感器電壓參數(shù)范圍及其重復(fù)測(cè)試準(zhǔn)確率如表1、表2所示。
對(duì)五種常見(jiàn)睡姿的檢測(cè)正確率均達(dá)到90%,且在完成睡姿檢測(cè)后能啟動(dòng)相應(yīng)程序?qū)λ砀叨冗M(jìn)行調(diào)節(jié)。此外,系統(tǒng)可通過(guò)按鍵或者LCD觸摸操作對(duì)睡枕進(jìn)行控制。
5 結(jié)語(yǔ)
基于STM32F103控制器和嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II設(shè)計(jì)了一種智能睡枕的控制系統(tǒng)。經(jīng)過(guò)系統(tǒng)調(diào)試驗(yàn)證,睡枕在控制下,能通過(guò)MMA7361LC三軸加速度傳感器實(shí)現(xiàn)五種常見(jiàn)睡姿的檢測(cè),并通過(guò)充放氣設(shè)備調(diào)節(jié)睡枕高度,系統(tǒng)的可靠性相比傳統(tǒng)單任務(wù)機(jī)制的系統(tǒng)有明顯提升。但目前尚未做到對(duì)枕頭高度的實(shí)時(shí)判斷且睡姿檢測(cè)不夠多樣,對(duì)此可進(jìn)一步增設(shè)傳感器。此控制系統(tǒng)通用性較強(qiáng),能為后續(xù)研究提供一定的基礎(chǔ)和借鑒。隨著智能家居的不斷發(fā)展和人們對(duì)生活品質(zhì)的追求,智能健康睡枕將會(huì)有廣闊的發(fā)展空間。
參考文獻(xiàn)
[1] 支一飛.基于圖像技術(shù)的可自動(dòng)調(diào)節(jié)高度睡枕系統(tǒng)研究[D].西安:西安電子科技大學(xué),2014.
[2] X Wang,H Li,Y Zhu.Design on automatic control system for smart car based on μC/OS-II[C]//Proc of the 2nd International Conference on Cloud Computing and Intelligence Systems, IEEE,Hangzhou,China,2012(3):1188-1191.
[3] 路?;?基于STM32F103ZET6的動(dòng)力電池管理系統(tǒng)設(shè)計(jì)[D].南京:南京理工大學(xué),2013.
[4] 馬建偉.基于STM32的空氣動(dòng)力學(xué)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)[D].成都:西南交通大學(xué),2010.
[5] 胡弢,王蕾,侯琳琳,等.基于加速度傳感器的睡眠體位監(jiān)測(cè)方法的研究[J].中國(guó)醫(yī)學(xué)物理學(xué)雜志,2012,29(4):3542-3545.
[6] 任哲,房紅征,曹靖.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II原理及應(yīng)用[M].3版.北京:北京航空航天大學(xué)出版社,2014:228-240.
[7] 郭澤.便攜式光伏方陣測(cè)試儀的研發(fā)[D].上海:上海交通大學(xué),2008.
[8] 吳嵩,曹樂(lè)千.基于μC/OS-II的時(shí)間片調(diào)度法設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008(12):23-25.