王蔚揚 丁嘉月 汪鵬洪 查寧雯 李曉寧
摘 要:介紹了一種采用STM32F103芯片,并基于嵌入式實時操作系統μC/OS-II的睡枕控制系統的研究設計。針對睡眠時因翻身產生的睡枕高度不適,在用戶睡眠時通過三軸加速度傳感器MMA7361LC采集數據分析用戶睡眠姿態,進而通過芯片控制充放氣裝置對睡枕內置氣囊高度進行實時地調節。該系統相比傳統基于單任務機制的控制系統具有更好的實時控制性能和可靠性能。經過調試驗證,系統能滿足用戶睡姿數據的實時采集和枕頭高度調節要求。所設計的控制系統可用于數據實時采集和反饋控制等復雜系統中。
關鍵詞:STM32 μC/OS-II 加速度計 任務調度 消息郵箱
中圖分類號:TP271+.5 文獻標識碼:A 文章編號: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
枕頭高度不合適會對我們的頸椎健康造成影響。現在市面上的枕頭大多都為普通枕頭,高度不可調節。用戶睡眠時無意識翻身,會使枕頭高度處于一個不合理的狀態,影響我們的頸椎健康。相比之下,記憶枕雖然能實現枕頭高度符合個人需要,但它在用戶改變睡姿后枕頭的形態改變較為緩慢,實際使用效果并不理想。因此,該文設計了一個能在用戶睡眠時根據睡姿來調節高度的智能睡枕[1]。系統基于嵌入式實時操作系統μC/OS-II,采用STM32單片機實時采集傳感器數據,對用戶睡姿進行判斷,并進行反饋,從而控制睡枕高度。系統有足夠的實時性和穩定性,能夠滿足用戶所需睡眠時對睡枕高度的實時控制要求。
1 系統整體方案設計
該系統設計由硬件與軟件兩部分構成。硬件以STM32處理器作為主控芯片,三軸加速度傳感器采集數據分析用戶睡姿,睡枕內置氣囊外接微型充氣泵以及泄氣閥。整個睡枕控制系統設計有按鍵操作、TFT-LCD液晶屏顯示和氣泵控制功能。系統可增設實時時鐘顯示和鬧鈴功能,實用性強。
所設計的睡枕控制系統的硬件平臺結構如圖1所示。
傳統程序設計是基于單任務機制的,在實際應用中如果其中一個任務運行出現了錯誤,可能直接導致系統程序跑飛或者陷入死循環而無法工作。因此,系統軟件以嵌入式實時操作系統μC/OS-II為基礎,該操作系統最初便是為微控制器應用設計的,有著內核小、多任務、可裁剪、實時性好、系統服務豐富和使用方便等特點,廣泛用于飛行器、醫療設備、手機通信和工業控制等各類產品中[2,3]。μC/OS-II可以支持包括8個系統保留任務在內的多達64個任務,滿足一般控制系統的任務數量要求,且系統本身具有任務調度和任務監控功能,使系統具有較高的實時性和可靠性,完全適用于睡枕系統設計的需要。
2 系統的硬件部分
2.1 供電電路設計
系統采用6 V直流穩壓電源作為電源輸入。由于STM32控制器芯片、MMA7361LC和LCD顯示屏均采用3.3 V直流供電,所以采用AMS1117-3.3芯片將輸入電源降壓給其供電。該降壓模塊設置有LED燈,當模塊正常工作輸出電壓時LED燈亮。電源另一路則直接以6 V直流接入電路給充氣泵及泄氣閥供電。降壓模塊電路如圖2所示。
2.2 主控芯片外圍電路設計
主控芯片采用意法半導體(ST)集團的基于ARM Cortex-M3內核的STM32F103ZET6芯片,該控制器由3.3 V直流電壓供電,最高工作頻率可以達到72 MHz,并且芯片內已經集成12位逐次逼近型模擬數字轉換器(ADC)[3]。該ADC測量通道較多,可以支持測量16個外部信號源,各通道A/D轉換均可以單次或者掃描模式執,轉換后的數據結果存儲在16位數據寄存器ADC_ConvertedValue中[4]。芯片外圍電路設置包括SPI FLASH、晶振模塊、復位電路和EEPROM等,用以拓展控制器的使用功能。
2.3 睡姿傳感器電路設計
加速度傳感器采用美國飛思卡爾半導體(Freescale Semiconductor)公司出產的MMA7361LC型單芯片三軸加速度傳感器,該款傳感器具有電流消耗低、微機械型等特點,其內部設置了諸如低通濾波器電路及溫度補償電路等用于提高傳感器精度的電路模塊[5]。傳感器有多種選擇模式,可以設為檢測線性自由落體或者休眠模式,可以選擇1.5 g或者6 g兩種靈敏度。該系統選擇了1.5 g模式,使得檢測靈敏度可以達到800 mV/g,且設置方式簡單,只需在使用時將g-Select端置空即選定為該模式。該加速度傳感器輸出的電壓模擬信號,經過預處理電路后,通過程序預設的I/O口與STM32控制器的ADC通道相連接,采用ADC1的1、2、3通道分別采集加速度傳感器X、Y、Z輸出口輸出的模擬信號;控制器的PG8口用于控制休眠狀態,節省電能。電路設計如圖3所示。
2.4 充放氣裝置電路設計
由于系統中微型充氣泵與泄氣閥均采用6 V直流供電,為了使單片機能控制充放氣設備的啟停,采用NPN型三極管8050設計控制電路,由單片機I/O口輸出信號控制三極管導通,進而控制充放氣設備工作。系統設置三個充氣泵,分別配有三個泄氣閥。
2.5 顯示、按鍵模塊電路設計
所采用的顯示屏為可支持16位數據寬度的四線電阻式觸摸屏,可以實現觸摸操作。系統設有4個操作按鍵,其中按鍵S1上接VCC3.3 V,可用于實現系統的待機喚醒功能;其余3個按鍵設置有濾波電容,用于通過硬件方式來消除按鍵抖動產生的信號干擾,使按鍵輸入信號穩定便于單片機讀取。
3 基于μC/OS-II的軟件實現
3.1 軟件設計思想
系統軟件設計主要由μC/OS-II操作系統在STM32平臺上的移植和各種應用任務的代碼編寫構成。移植時需要修改內核程序,主要是修改系統內核中與編譯器相關的代碼os_cpu.h、與處理器相關的代碼os_cpu_a.asm和與操作系統相關的代碼os_cpu_c.c[3,6]。置于用戶腹部的三軸加速度傳感器輸出模擬信號至STM32控制器[5],經過芯片內ADC處理轉化成數字信號后,數據結果經由芯片內部數據傳輸模塊(DMA)傳給CPU。后經程序算法分析出當前用戶睡眠所處的體位狀態,進而通過I/O口發出高低電平控制電路,使氣泵和泄氣閥對氣囊進行充放氣來調節枕體高度。
3.2 系統任務設置
系統的軟件結構模型如圖4所示。由μC/OS-II操作系統負責調度管理各個任務。
監控任務用于監控程序運行狀態,當出現BUG時對系統初始狀態進行重新設定;數據采集任務采集傳感器數據;數據處理任務對采集到的傳感器數據進行分析,判斷用戶睡眠姿勢;LCD觸摸任務顯示當前睡枕所處狀態,可觸摸操作方便用戶控制;按鍵檢測任務檢測用戶的按鍵操作,在任務程序中通過命令改變程序工作狀態;由反饋控制任務控制充放氣裝置來調節氣囊高度。
每個模塊對應的功能任務互相之間為并行關系,由于μC/OS-II中采用基于優先級的任務調度算法,所以系統中每個任務的優先級均不可能相同。該系統采用靜態方式設置任務的優先級,在滿足任務調度功能的同時,大大簡化了系統的控制工作。程序設計中設置按鍵檢測任務的優先級較高,設為9,數字越小表示任務優先級越高,其余分別設置數據處理任務為11,反饋控制任務為13,數據采集任務為15,LCD觸摸任務為17。間隔設置系統任務優先級,可方便后續對系統任務的拓展。
3.3 任務間通信和調度
該系統通過消息郵箱來完成各個任務間的通信。?C/OS-II中有多種任務通信方式,消息郵箱這種通信方式主要是由一個任務向另一個指定任務發送一個指針型變量,這個指針可以指向一個包含信息的數據結構,可以直接在任務間進行信息內容的傳遞,這使得任務間通信更加高效[7]。在使用消息郵箱時通過調用系統函數OSMboxCreate()來創建郵箱,同時設置指針的初始值為所需發送的信息數據地址。該系統共設計了3個消息郵箱,分別為: (1)MboxDataprocessing郵箱。接收數據采集任務發送的消息,數據處理任務等待消息;(2)MboxControl郵箱。接收由數據處理任務發送的消息,反饋控制任務等待消息; (3)Mboxmonitoring郵箱。接收反饋控制任務發送的消息,監控任務等待消息。
μC/OS-II作為一個完全可剝奪型的實時內核系統,其核心是任務調度算法,因此系統內核總是選擇處于就緒狀態下具有最高優先級的任務賦予其CPU控制權[8]。其調度過程具體表現為系統內核通過查找就緒態任務列表OSUnMapTbl[]找出此時優先級最高的就緒態任務,然后將該任務PCB地址賦予OSPrioHighRdy,接著賦予該任務CPU控制權來完成某個階段的任務切換[3]。
3.4 系統運行
全部系統任務均在μC/OS-II系統內核的調度下循環運行。設置的監控任務用于對系統運行狀態進行監控。監控任務在超出定義的等待時間后如果依舊未取得消息,則判斷系統運行出現錯誤。此時監控任務獲得CPU控制權對系統重新初始化,通過該任務的運行使得系統具有一定的錯誤自檢能力,提高程序運行的可靠性和穩定性。
4 實驗結果
完成系統的軟硬件設計后,對睡枕進行調試測試。該系統所設置五種常見睡姿狀態對應傳感器電壓參數范圍及其重復測試準確率如表1、表2所示。
對五種常見睡姿的檢測正確率均達到90%,且在完成睡姿檢測后能啟動相應程序對睡枕高度進行調節。此外,系統可通過按鍵或者LCD觸摸操作對睡枕進行控制。
5 結語
基于STM32F103控制器和嵌入式實時操作系統μC/OS-II設計了一種智能睡枕的控制系統。經過系統調試驗證,睡枕在控制下,能通過MMA7361LC三軸加速度傳感器實現五種常見睡姿的檢測,并通過充放氣設備調節睡枕高度,系統的可靠性相比傳統單任務機制的系統有明顯提升。但目前尚未做到對枕頭高度的實時判斷且睡姿檢測不夠多樣,對此可進一步增設傳感器。此控制系統通用性較強,能為后續研究提供一定的基礎和借鑒。隨著智能家居的不斷發展和人們對生活品質的追求,智能健康睡枕將會有廣闊的發展空間。
參考文獻
[1] 支一飛.基于圖像技術的可自動調節高度睡枕系統研究[D].西安:西安電子科技大學,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].南京:南京理工大學,2013.
[4] 馬建偉.基于STM32的空氣動力學數據采集系統的設計[D].成都:西南交通大學,2010.
[5] 胡弢,王蕾,侯琳琳,等.基于加速度傳感器的睡眠體位監測方法的研究[J].中國醫學物理學雜志,2012,29(4):3542-3545.
[6] 任哲,房紅征,曹靖.嵌入式實時操作系統μC/OS-II原理及應用[M].3版.北京:北京航空航天大學出版社,2014:228-240.
[7] 郭澤.便攜式光伏方陣測試儀的研發[D].上海:上海交通大學,2008.
[8] 吳嵩,曹樂千.基于μC/OS-II的時間片調度法設計[J].單片機與嵌入式系統應用,2008(12):23-25.