21ic电子技术开发论坛 单片机与嵌入式系统 ST MCU 利用3轴数字加速度计实现功能全面的计步器设计
发新帖我要提问
返回列表
打印
[应用相关]

利用3轴数字加速度计实现功能全面的计步器设计

[复制链接]
5871|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zhuomuniao110 于 2016-3-27 11:36 编辑

简介
计步器是一种颇受欢迎的日常锻炼进度监控器,可以激励人们挑战自己,增强体质,帮助瘦身。早期设计利用加重的机械开关检测步伐,并带有一个简单的计数器。晃动这些装置时,可以听到有一个金属球来回滑动,或者一个摆锤左右摆动敲击挡块。
如今,先进的计步器利用MEMS(微机电系统)惯性传感器和复杂的软件来精确检测真实的步伐。MEMS惯性传感器可以更准确地检测步伐,误检率更低。MEMS惯性传感器具有低成本、小尺寸和低功耗的特点,因此越来越多的便携式消费电子设备开始集成计步器功能,如音乐播放器和手机等。ADI公司的3轴加速度计ADXL335, ADXL345和ADXL346小巧纤薄,功耗极低,非常适合这种应用。
本文以对步伐特征的研究为基础,描述一个采用3轴加速度计ADXL345的全功能计步器参考设计,它能辨别并计数步伐,测量距离、速度甚至所消耗的卡路里。
ADXL345专有的(正在申请专利)片内32级先进先出(FIFO)缓冲器可以存储数据,并执行计步器应用的相关操作,从而最大程度地减少主处理器干预,为便携式设备节省宝贵的系统功率。其13位分辨率(4 mg/LSB)甚至允许计步器以合理的精度测量超低速步行(每步加速度变化约55 mg)。
了解模型
在可用于分析跑步或步行的特征当中,我们选择“加速度”作为相关参数。个体(及其相关轴)的运动包括三个分量,分别是前向(“滚动”)、竖向(“偏航”)和侧向(“俯仰”),如图1所示。ADXL345检测其三个轴——x、y和z上的加速度。计步器处于未知方向,因此测量精度不应严重依赖于运动轴与加速度计测量轴之间的关系。
图1. 各轴的定义
让我们考虑步行的特性。图2描绘了一个步伐,我们将其定义为单位步行周期,图中显示了步行周期各阶段与竖向和前向加速度变化之间的关系。
图2. 步行阶段与加速度模式
图3显示了与一名跑步者的竖向、前向和侧向加速度相对应的x、y和z轴测量结果的典型图样。无论如何穿戴计步器,总有至少一个轴具有相对较大的周期性加速度变化,因此峰值检测和针对所有三个轴上的加速度的动态阈值决策算法对于检测单位步行或跑步周期至关重要。
图3. 从一名跑步者测得的x、y和z轴加速度的典型图样

算法
步伐参数

数字滤波器:首先,为使图3所示的信号波形变得平滑,需要一个数字滤波器。可以使用四个寄存器和一个求和单元,如图4所示。当然,可以使用更多寄存器以使加速度数据更加平滑,但响应时间会变慢。
图4. 数字滤波器
图5显示了来自一名步行者所戴计步器的最活跃轴的滤波数据。对于跑步者,峰峰值会更高。
图5. 最活跃轴的滤波数据
动态阈值和动态精度:系统持续更新3轴加速度的最大值和最小值,每采样50次更新一次。平均值(Max + Min)/2称为“动态阈值”。接下来的50次采样利用此阈值判断个体是否迈出步伐。由于此阈值每50次采样更新一次,因此它是动态的。这种选择具有自适应性,并且足够快。除动态阈值外,还利用动态精度来执行进一步滤波,如图6所示。
图6. 动态阈值和动态精度
利用一个线性移位寄存器和动态阈值判断个体是否有效地迈出一步。该线性移位寄存器含有2个寄存器:sample_new寄存器和sample_old寄存器。这些寄存器中的数据分别称为sample_new和sample_old。当新采样数据到来时,sample_new无条件移入sample_old寄存器。然而,sample_result是否移入sample_new寄存器取决于下述条件:如果加速度变化大于预定义精度,则最新的采样结果sample_result移入sample_new寄存器,否则sample_new寄存器保持不变。因此,移位寄存器组可以消除高频噪声,从而保证结果更加精确。
步伐迈出的条件定义为:当加速度曲线跨过动态阈值下方时,加速度曲线的斜率为负值(sample_new < sample_old)。 .
峰值检测:步伐计数器根据x、y、z三轴中加速度变化最大的一个轴计算步数。如果加速度变化太小,步伐计数器将忽略。
步伐计数器利用此算法可以很好地工作,但有时显得太敏感。当计步器因为步行或跑步之外的原因而非常迅速或非常缓慢地振动时,步伐计数器也会认为它是步伐。为了找到真正的有节奏的步伐,必须排除这种无效振动。利用“时间窗口”和“计数规则”可以解决这个问题。
“时间窗口”用于排除无效振动。假设人们最快的跑步速度为每秒5步,最慢的步行速度为每2秒1步。这样,两个有效步伐的时间间隔在时间窗口[0.2 s - 2.0 s]之内,时间间隔超出该时间窗口的所有步伐都应被排除。
ADXL345的用户可选输出数据速率特性有助于实现时间窗口。表1列出了TA = 25°C, VS = 2.5 V, and VDD I/O = 1.8 V时的可配置数据速率(以及功耗)。
表1. 数据速率和功耗
输出数据 速率 (Hz)带宽 (Hz)速率 代码IDD (µA)
320016001111146
16008001110100
8004001101145
4002001100145
2001001011145
100501010145
50251001100
2512.5100065
12.56.25011155
6.253.125011040

此算法使用50 Hz数据速率(20 ms)。采用interval的寄存器记录两步之间的数据更新次数。如果间隔值在10与100之间,则说明两步之间的时间在有效窗口之内;否则,时间间隔在时间窗口之外,步伐无效。
“计数规则” 用于确定步伐是否是一个节奏模式的一部分。步伐计数器有两个工作状态:搜索规则和确认规则。步伐计数器以搜索规则模式开始工作。假设经过四个连续有效步伐之后,发现存在某种规则(in regulation),那么步伐计数器就会刷新和显示结果,并进入“确认规则”工作模式。在这种模式下工作时,每经过一个有效步伐,步伐计数器就会更新一次。但是,如果发现哪怕一个无效步伐,步伐计数器就会返回搜索规则模式,重新搜索四个连续有效步伐。
图7显示了步伐参数的算法流程图。
图7. 步伐参数算法流程图
距离参数
根据上述算法计算步伐参数之后,我们可以使用公式1获得距离参数。
距离 = 步数 × 每步距离(1)
每步距离取决于用户的速度和身高。如果用户身材较高或以较快速度跑步,步长就会较长。参考设计每2秒更新一次距离、速度和卡路里参数。因此,我们使用每2秒计数到的步数判断当前跨步长度。表2显示了用于判断当前跨步长度的实验数据。
表2. 跨步长度与速度(每2秒步数)和身高的关系
每2秒步数跨步(m/s)
0~2身高/5
2~3身高/4
3~4身高/3
4~5身高/2
5~6身高/1.2
6~8身高
>=81.2 ×身高

2秒的时间间隔可以利用采样数精确算出。以50 Hz数据速率为例,处理器可以每100次采样发送一次相应的指令。处理器利用一个名为m_nLastPedometer的变量记录每个2秒间隔开始时的步数,并利用一个名为m_nPedometerValue的变量记录每个2秒间隔结束时的步数。这样,每2秒步数等于m_nPedometerValue与m_nLastPedometer之差。
虽然数据速率为50 Hz,但ADXL345的片内FIFO使得处理器无需每20 ms读取一次数据,极大地减轻了主处理器的负担。该缓冲器支持四种工作模式:旁路、FIFO、流和触发。在FIFO模式下,x、y、z轴的测量数据存储在FIFO中。当FIFO中的采样数与FIFO_CTL寄存器采样数位规定的数量相等时,水印中断置1。如前所述,人们的跑步速度最快可达每秒5步,因此每0.2秒刷新一次结果即可保证实时显示,从而处理器只需每0.2秒通过水印中断唤醒一次并从ADXL345读取数据。FIFO的其它功能也都非常有用。利用触发模式,FIFO可以告诉我们中断之前发生了什么。由于所述解决方案没有使用FIFO的其它功能,因此笔者将不展开讨论。
速度参数
速度 = 距离/时间,而每2秒步数和跨步长度均可根据上述算法计算,因此可以使用公式2获得速度参数。
速度 = 每2秒步数 × 跨步/2 s(2)
卡路里参数
我们无法精确计算卡路里的消耗速率。决定其消耗速率的一些因素包括体重、健身强度、运动水平和新陈代谢。不过,我们可以使用常规近似法进行估计。表3显示了卡路里消耗与跑步速度的典型关系。
表3. 卡路里消耗与跑步速度的关系
跑步速度 (km/h)卡路里消耗(C/kg/h)
810
1215
1620
2025

由表3可以得到公式(3)。
卡路里(C/kg/h) = 1.25 × 跑步速度(km/h)(3)
以上所用的速度参数单位为m/s,将km/h转换为m/s可得公式4。
卡路里(C/kg/h) = 1.25 × 速度(m/s) × 3600/1000(4)
卡路里参数随同距离和速度参数每2秒更新一次。为了考虑运动者的体重,我们可以将公式4转换为公式5。体重(kg)为用户输入量,一个小时等于1800个2秒间隔。
卡路里(C/2 s) = 4.5 × 速度 × 体重/1800(5)
如果用户在步行或跑步之后休息,则步数和距离将不变化,速度应为0,此时的卡路里消耗可以利用公式6计算(休息时的卡路里消耗约为1 C/kg/h)。
卡路里(C/2 s) = 1 × 体重/1800(6)
最后,我们可以将所有2秒间隔的卡路里相加,获得总卡路里消耗量。
硬件连接
ADXL345易于连接到任何使用I2C®或SPI数字通信协议的处理器。图8给出了演示设备的原理示意图,它采用3V电池供电。ADXL345的/CS引脚连接到板上的VS,以选择I2C模式。利用一个低成本精密模拟微控制器ADuC7024从ADXL345读取数据,执行算法,并通过UART将结果发送至PC。SDA和SCL分别为I2C总线的数据和时钟引脚,从ADXL345连接到ADuC7024的对应引脚。ADXL345的两个中断引脚连接到ADuC7024的IRQ输入,以产生各种中断信号并唤醒处理器。
图8. 硬件系统的原理示意图
用户界面
用户界面显示测试数据,并对操作员的指令做出响应。用户界面(UI)运行之后,串行端口应打开,通信链路应启动,随后演示程序将持续运行。图9显示了用户佩戴计步器步行或跑步时的测试情况。用户可以输入其体重和身高数据,距离、速度和卡路里参数将根据这些数据进行计算。
图9. 用户佩戴计步器步行或跑步时的测试情况
结论
ADXL345是一款出色的加速度计,非常适合计步器应用。它具有小巧纤薄的特点,采用3 mm × 5 mm × 0.95 mm塑封封装,利用它开发的计步器已经出现在医疗仪器和高档消费电子设备中。它在测量模式下的功耗仅40 µA,待机模式下为0.1 µA,堪称电池供电产品的理想之选。嵌入式FIFO极大地减轻了主处理器的负荷,使功耗显著降低。此外,可以利用可选的输出数据速率进行定时,从而取代处理器中的定时器。13位分辨率可以检测非常小的峰峰值变化,为开发高精度计步器创造了条件。最后,它具有三轴输出功能,结合上述算法,用户可以将计步器戴在身上几乎任何部位。
几点建议:如果应用对成本极其敏感,或者模拟输出加速度计更适合,建议使用ADXL335,它是一款完整的小尺寸、薄型、低功耗、三轴加速度计,提供经过信号调理的电压输出。如果PCB尺寸至关重要,建议使用ADXL346,这款低功耗器件的内置功能甚至比ADXL345还多,采用小巧纤薄的3 mm × 3 mm × 0.95 mm塑封封装,电源电压范围为1.7 V至2.75 V。

沙发
zhuomuniao110|  楼主 | 2016-3-27 11:37 | 只看该作者

随着现代生活质量提高,越来越多人开始注重自己的日常健康锻炼,计步作为一种有效记录监控锻炼的监控手段,已经广泛应用在移动终端的应用中。但目前大部分实现都是通过GPS信号来测算运动距离反推行走步数,有效但是在室内或者无GPS信号的设备上无法工作,同时GPS精度对结果的干扰也比较大,本文提出一个新的测步方法,即通过设备上的加速器来计算步数,在不支持GPS的设备上也可正常工作,可用以与GPS互相配合测步,让应用的使用场景更加多样。


1. 了解模型特征

  目前大部分设备都提供了可以检测各个方向的加速检测器,以iOS设备为例,我们利用了其三轴加速计(x,y,z轴代表方向如图)的特性来分析。分别用以检测人步行中三个方向的加速度变化。  

  用户在水平步行运动中,垂直和前进两个加速度会呈现周期性变化,如图所示,在步行收脚的动作中,由于重心向上单只脚触地,垂直方向加速度是呈正向增加的趋势,之后继续向前,重心下移两脚触底,加速度相反。水平加速度在收脚时减小,在迈步时增加。

  反映到图表中,我们可以看到在步行运动中,垂直和前进产生的加速度与时间大致为一个正弦曲线,而且在某点有一个峰值,其中垂直方向的加速度变化最大,通过对轨迹的峰值进行检测计算和加速度阈值决策,即可实时计算用户运动的步数,还可依此进一步估算用户步行距离。


2.  计步算法

  因为用户在运动中可能手平持设备或者将设备置于口袋中,所以设备的放置方向不定,为此我们通过计算三个加速度的矢量长度,获得一条步行运动的正弦曲线轨迹。

  第二步是峰值检测,我们记录了上次矢量长度和运动方向,通过矢量长度的变化,可以判断目前加速度的方向,并和上一次保存的加速度方向进行比较,如果是相反的,即是刚过峰值状态,则进入计步逻辑进行计步,否则舍弃。通过对峰值的次数累加可得到用户步行步伐。

  最后是去干扰,手持设备会有一些低幅度和快速的抽动状态,或是我们俗称的手抖,或者某个恶作剧用户想通过短时快速反复摇动设备来模拟人走路,这些干扰数据如果不剔除,会影响记步的准确值,对于这种干扰,我们可以通过给检测加上阈值和步频判断来过滤。


  人体最快的跑步频率为5HZ,也就是说相邻两步的时间间隔的至少大于0.2秒,如图所示,我们设置了timespan在记步过程中我们过滤了高频噪声,即步频过快的情况。同时我们通过和上次加速度大小进行比较,设置设立一定的阈值Threshold来判断运动是否属于有效,有效运动才可进行记步。


3. 关于计步器的扩展

  以上是一个依靠加速度测算的计步器实现原理,已知步行和跑步的步伐经验值,那么稍微改进下即可变成一个测距测速计。

  通过三轴加速度我们可以知道用户的运动状态,除了计步,我们还可以通过加速器的变化曲线判断用户摔倒状态,做成一个老人和儿童摔倒检测自动报警器。


使用特权

评论回复
板凳
dirtwillfly| | 2016-3-27 12:16 | 只看该作者
感谢 分享,奇怪,竟然没有收藏按钮了

使用特权

评论回复
地板
戈卫东| | 2016-3-27 12:22 | 只看该作者
dirtwillfly 发表于 2016-3-27 12:16
感谢 分享,奇怪,竟然没有收藏按钮了

有啊。。。。。楼主贴下边有收藏按钮。。。。

使用特权

评论回复
5
dirtwillfly| | 2016-3-27 13:09 | 只看该作者
戈卫东 发表于 2016-3-27 12:22
有啊。。。。。楼主贴下边有收藏按钮。。。。

已经是登陆以后


使用特权

评论回复
6
justtest111| | 2016-3-27 19:30 | 只看该作者
zhuomuniao110 发表于 2016-3-27 11:37
随着现代生活质量提高,越来越多人开始注重自己的日常健康锻炼,计步作为一种有效记录监控锻炼的监控手段, ...

我也看不到收藏按钮。。。回复mark

使用特权

评论回复
7
mega1702| | 2016-3-27 23:47 | 只看该作者
谢谢分享!!!

使用特权

评论回复
8
jemy00| | 2016-3-28 08:58 | 只看该作者
mark!

使用特权

评论回复
9
杉树林罗| | 2016-3-28 09:40 | 只看该作者
mark

使用特权

评论回复
10
奥卡姆剃刀| | 2016-3-28 09:45 | 只看该作者
顶一个!

使用特权

评论回复
11
penguin008| | 2016-3-28 10:18 | 只看该作者
蛮专业的资料了,感谢分享!

使用特权

评论回复
12
wgsxsm| | 2016-3-28 10:36 | 只看该作者
好文,收藏下
谢谢楼主分享

使用特权

评论回复
13
世界心| | 2016-3-28 10:44 | 只看该作者
“还利用动态精度来执行进一步滤波”咋看还觉得挺高端的,详细看了之后才发现是限幅滤波,哈哈

使用特权

评论回复
14
FireRiver9| | 2016-3-28 12:03 | 只看该作者
ADXL345是一款小而薄的超低功耗3轴加速度计,分辨率高(13位),用作计步器够用了

使用特权

评论回复
15
slotg| | 2016-3-28 13:46 | 只看该作者
强大的资料,感谢分享。

使用特权

评论回复
16
zhuomuniao110|  楼主 | 2016-3-28 19:02 | 只看该作者
世界心 发表于 2016-3-28 10:44
“还利用动态精度来执行进一步滤波”咋看还觉得挺高端的,详细看了之后才发现是限幅滤波,哈哈 ...

哈哈,这种节奏明显的都是这种滤波方式。特别是只测两种状态,百分百是限幅滤波。

使用特权

评论回复
17
gaoyang9992006| | 2016-3-28 20:21 | 只看该作者
主要是传感器的数据,如何处理,为你所用。

使用特权

评论回复
18
efen| | 2016-4-2 14:53 | 只看该作者
顶一个

使用特权

评论回复
19
zhuomuniao110|  楼主 | 2016-4-10 10:47 | 只看该作者
峰值检测,我们记录了上次矢量长度和运动方向,通过矢量长度的变化,可以判断目前加速度的方向,并和上一次保存的加速度方向进行比较,如果是相反的,即是刚过峰值状态,则进入计步逻辑进行计步,否则舍弃。通过对峰值的次数累加可得到用户步行步伐

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

189

主题

3256

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部