书合文秘网 - 设为首页 - 加入收藏
当前位置 首页 > 范文大全 > 教案设计 >

基于μC/OS—II的睡枕控制系统设计

作者: 浏览数: 关键词: 控制系统 设计 OS II

摘 要:介绍了一种采用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.

相关文章:

Top