摘 要:智能手环作为一款穿戴式的电子产品,制约其发展的最大因素是待机时间和数据的准确性,本文采用TI公司的MSP430F552916位超低功耗单片机为主控制器,在其上移植μC/OS-Ⅱ系统后改进了计步算法。实验测试了手环的待机功耗和手环计步的精确度,通过与目前市场上其他主流产品对比,本文设计的智能手环在计步的准确度与低功耗方面都有显著提升,有进一步研究和推广的价值。
关键词: MSP430F5529;智能手环;超低功耗;μC/OS-Ⅱ
0 引言
智能手环是一种穿戴式智能设备,其最基本的功能是计步和睡眠质量追踪,而这两个最基本的数据都是依靠手环中的加速度传感器来测量的。加入用户身高、体重、年龄等数值后通过软件计算可得出消耗热量[1-3]、行走距离、睡眠质量[4]等其他数据。目前其困境主要来源两个方面,一方面是数据的准确性,计步的原理是根据人行走时摆臂产生的加速度数据来统计步数,如何屏蔽非行走时摆臂产生的干扰是计步算法的一大难点,而仅依靠睡眠时手臂产生的加速度数据,以多导睡眠图(包含脑电图、心电图、肌电图等10多种生理信号)的标准来衡量睡眠质量不够科学和严谨,只能作为一种参考;另一方面智能手环的待机时间也是制约其发展的一大因素,在供电电池电量受体积所限的情况下必须降低系统功耗达到延长待机的目的。本文设计的智能手环特点在于采用了TI公司的MSP430超低功耗单片机为主控制器,在其上移植了μC/OS-Ⅱ操作系统,完成了整个系统的软硬件设计,并根据反复测试的实验数据设计了精确度更高的计步算法。
1 硬件设计
本文将系统硬件部分划分为三个模块:系统主模块、显示模块和数据通信模块,系统硬件的结构框图如图1所示。显示模块选用ST公司的STM8L101K3经济型单片机驱动的19×5字母LED点阵显示数据。数据通信模块选用CC2541的低功耗蓝牙芯片,完成与IOS或ANDROID设备通信。系统主模块主要由LIS3DH传感器、BQ2423电源管理模块和MSP430F5529单片机组成。
系统选择MSP430F5529单片机为主控制器,其主要优势如下:
(1)低功耗。MSP430F5529主要用到2种功耗模式,一是激活模式(AM),其功耗为270 μA/MHz(8 MHz, 3.0 V);二是待机模式(LPM3),功耗为2.1 μA(3.0 V)。
(2)高性价比。MSP430F5529片内有4个通用串行通信接口,128 KB的闪存,8 KB的SRAM,支持SPI、I2C、UART,在满足本系统应用的情况下MSP430F5529拥有最低的价格。
2 LIS3DH传感器
LIS3DH是ST公司出品的一款低功耗三轴加速度芯片,其有自动休眠的功能,本系统中如果20 s内传感器没有检测到任何加速度的变化则自动进入休眠状态,当加速度变化时LIS3DH会被唤醒。内置有96级的FIFO可以作为数据缓存存储32组XYZ轴的加速度数据,当FIFO溢出时会产生一个中断输出,将中断输出映射到MSP430F5529单片机的外部中断源上能将430单片机从待机模式唤醒读取FIFO中的数据,缓存的存在能使430单片机一次连续读取32组的数据,相比一次读取一组数据的方式能让430单片机更多时间处于待机模式。LIS3DH芯片本身支持 SPI或者I2C两种接口,本系统选择SPI,其具体外围电路如图2所示。数字IO的供电虽然与芯片加速度部分的供电电压相等,但必需保证IO部分先于加速度部分工作,否则芯片的初始化会有问题,因此加速度部分供电引脚VDD相比数字IO供电引脚VDD_IO另外并联了一个大电容以保证VDD_IO足够的上电时间。
3 系统程序设计
3.1 移植μC/OS-Ⅱ系统
μC/OS-Ⅱ是一种采用优先级抢占式调度方案的实时操作系统,经过多年研究已经成功移植到多种MSP430系列的单片机中。本系统在MSP430F5529上成功移植了μC/OS-Ⅱ系统,移植的关键部分是根据MSP430F5529处理器内核修改OS_CPU.H,OS_CPU_A.ASM,OS_CPU_C.C三个文件中的代码。
(1)OS_CPU.H文件编写
根据MSP430F5529的内核重新定义数据类型,不同内核的控制器字长不同,μC/OS-Ⅱ移植包括各种数据类型、开关中断和任务切换的宏定义,以及堆栈增长方向和一些常量标识声明。
(2)OS_CPU_A.ASM文件编写
在OS_CPU_A.ASM文件中需要用汇编语言修改4个函数:OSStartHighRdy(),由OSStart()函数调用,功能是运行优先级最高的就绪任务;OSCtxSw(),是一个任务级的任务切换函数,调用该函数可能造成系统任务重新调度;OSIntCtxSw(),中断级的任务切换函数;OSTickISR(),提供一个定时Tick。
(3)OS_CPU_C.C文件编写
在OS_CPU_C.C文件中需要改写6个函数,实际需要修改的只有OSTaskStkInit()函数,其余5个函数只需声明。OSTaskStkInit()函数由OSTaskCreate()函数和OSTaskCreateExt()函数调用,用来初始化任务的堆栈。其代码编写如下:
OS_STK*OSTaskStkInit(void(*task)(void*pd),void*p_arg,OS_STK*ptos,INT16U opt)
{
INT16U *top;
opt=opt;
top=(INT16U*)ptos;
top--;
*top=(INT16U)(((INT32U)task)&0xffff);
top--;
*top=(INT16U)((((INT32U)task)&0x000f0000)>>4);
*top|=(INT16U)0x0008;
top--;
*top=(INT16U)0x0404;
top--;
*top=(INT16U)0x0505;
top--;
*top=(INT16U)0x0606;
top--;
*top=(INT16U)0x0707;
top--;
*top=(INT16U)0x0808;
top--;
*top=(INT16U)0x0909;
top--;
*top=(INT16U)0x1010;
top--;
*top=(INT16U)0x1111;
top--;
*top=(INT16U)p_arg;
top--;
*top=(INT16U)0x1313;
top--;
*top=(INT16U)0x1414;
top--;
*top=(INT16U)0x1515;
return((OS_STK*)top);
}
3.2 任务设计
智能手环的应用非常强调低功耗特性。MSP430系列[4]的特点也在于此。如果由于运行μC/OS-Ⅱ而破坏了单片机的低功耗特性是得不偿失的。在整个系统设计中,设计一个最低优先级的任务Task_EnterLPM3(),其作用就是使系统进入LPM3的待机模式。这样,在其他高优先级的任务都运行完毕后,系统会调用这个任务使整个系统进入低功耗工作模式,当其他任务又恢复运行时,会自动进入其特定的工作状态,以达到降低功耗的目的。
当MSP430F5529在完成对各模块的初始化和任务的创建后就调用OSStart()函数,此时系统任务由μC/OS-Ⅱ进行调度,开始Task_EnterLPM3()任务处于就绪态,其余所有任务都挂起,MCU进入LPM3的待机模式,通过系统中断,在中断服务程序中将对应任务唤醒成就绪态,其他任务按优先级的高低抢占CPU运行,运行完后再次挂起[5]。
本系统中断和任务主要设计了以下几种:
(1)MCU内部RTC的定时中断(alarm interrupt),当RTC时钟走到定时时间触发中断,在中断服务程序中唤醒定时任务,任务函数震动马达,达到无声唤醒的闹钟功能。
(2)MCU内部的RTC的时钟时间事件中断(clock time event interrupt),当RTC时钟走到第二天0时触发时钟时间事件中断,同上,当任务函数获取CPU后将当天测得的步数、卡路里消耗、睡眠质量等数据自动存入MCU片内SRAM中。
(3)LIS3DH内部FIFO溢出中断,任务函数唤醒MCU处理FIFO中的加速度数据。
(4)CC2541蓝牙模块接收到手机发送的数据,触发UARTRX中断,任务函数根据不同的发送数据完成不同的操作,如进行数据同步,或修改内部的参数(身高、体重、步长、时间、闹钟等)。
(5)按键中断,任务函数根据按键的时间、次数进行复位,在LED点阵上显示数据,开关蓝牙等操作。
本系统程序在μC/OS-Ⅱ调度下的流程图如下图3所示。
4 计步算法
智能手环的一大重要功能就是计步,而计步的准确性除依赖高精度的传感器外,还需要复杂的软件算法来实现,本文参考多次测试的实验数据进行算法的分析设计。
行走时产生的加速度数据波形是周期性的类正弦波[6],具有周期性且运动步数与正弦波数一致,在经滤波[7]处理后的加速度数据中寻找波峰,当出现一对波峰时,判断是否满足三个条件:一是两个波峰的时间间隔是否在时间窗口内;二是局部最值之差是否满足软件设置的阈值;三是系统是否处于计步确认模式。如上述条件都满足则步数加一,流程图如图4所示。
每秒行走的步数在[2,5]区间内,第一个条件的时间窗口定义了人行走一步所需的最短和最长时间,不满足就不计步。不同的运动形式(如打字时手臂的微小晃动与步行时手臂的摆动)产生的运动冲击力不同,从而导致加速度幅度变化不同,第二个条件中加速度的局部最大最小值之差[8]可以反映正弦波形的幅度大小,通过其与阈值进行比较可以判断人是否处于行走状态。为判断LIS3DH传感器检测到的加速度是真正的步行还是偶尔的扰动所致,第三个条件中设计两个工作状态:搜索模式和确认模式[8-9],系统最初处于搜索模式,此时检测到的步数计入缓存,若计入缓存的步数大于两步则进入确认模式,开始正常计步并将之前缓存中的步数加上;系统处于确认模式时,若出现不满足条件的情形,如数据波峰间隔不在时间窗口内则退出计步,进入搜索模式重新搜索。
5 测试
按照前面智能手环的软硬件设计完成实验模型的搭建,选用TI公司的MSP-EXP430F5529LP评估板外接上传感器模块、蓝牙模块和显示模块,用3.7 V的锂电池为系统供电,使用蓝牙助手APK验证蓝牙模块与手机通信的连通性,实际模型如图5所示。
为检测手环测量数据的精确性与系统的低功耗是否达到预期的效果,分别对系统计步的精确度与待机功耗做了合理的测试。表1是A、B、C、D四名被测试者将实验模型绑在手腕上的计步测试结果,检测步数是模型的显示结果,实际步数是两名旁观者口头计数的平均值。
因为智能手环在实际使用中蓝牙和显示模块不需要经常开启,测量实验模型的待机(关闭蓝牙和显示模块)功耗能反应系统在电池供电下实际运行时间。如下表2是两名被测试者(A和B)在一星期内使用手环(关闭蓝牙和显示模块)电池电量的消耗情况,电池电量为90 mAh。
6总结
本次试验在构建智能手环软硬件系统方面探讨了如何降低整个系统的功耗,并最终选择了以MSP430F5529为主控制器移植μC/OS-Ⅱ的设计方案,16位的MSP430单片机兼顾了性能与低功耗的特点,相比目前电池容量40 mAh、普遍待机7~10天的智能手环产品,本系统在同等电池容量40 mAh下能将待机时间延长至15~20天,且在计步方面有更高的精确度,有进一步研究的意义与价值。
参考文献
[1] 向剑锋,李之俊.应用步频建立步行能耗预测公式的研究[J].中国运动医学杂志,2013,31(3):198-201.
[2] 江崇民,邱淑敏,王欢,等.平板运动跑台和场地环境测试走、跑运动能量消耗的比较研究[J].体育科学,2011,30(7):30-36.
[3] 王步标,华明.运动生理学[M].北京:高等教育出版杜,2011.
[4] 范志祥.基于腕动信息的睡眠监测仪研究[D].重庆:重庆大学,2008.
[5] 沈建华,杨艳琴.MSP430系列16位超低功耗单片机原理与实践[M].北京:北京航空航天大学出版社,2008.
[6] 韩文正,冯迪,李鹏,等.基于加速度传感器LIS3DH的计步器设计[J].传感器与微系统,2012,31(11):97-99.
[7] 武晓春.数字信号处理原理与实现[M].兰州:兰州大学出版社,2007.
[8] 宋浩然,廖文帅,赵一鸣.基于加速度传感器ADXL330的高精度计步器[J].传感技术学报,2006,19(4):1005-1008.
[9] 谢如花.步数检测方法及在手腕式计步器中的应用研究[D].兰州:兰州交通大学,2013.