计步器设计总结--计步器算法
花了一段时间研究的计步器,又荒废了一段时间,现在再次研究一下,顺便总结。
- 第一:传感器介绍(ADXL345)
本次研究的计步器的传感器采用ADXL345加速度计,三轴数字输出加速度传感器。具有最高13位分辨率,±16g可变测量范围,低功耗。其具体功能分不再具体介绍,使用任何芯片,第一步是看懂芯片手册;下面针对芯片手册内容,简单的介绍一下简单的使用配置。
- ADXL345支持SPI和IIC两种通信方式,根据个人控制芯片选着通信方式。
- 主要配置寄存器:
寄存器映射地址 | 配置 | 功能简述(相关配置查看对应寄存器) |
0X31 | 0X2B | 低电平中断输出,13位全分辨率,输出数据右对齐,16g量程 |
0X2C | 0X0A | 数据输出速度100hz |
0X2D | 0X28 | 链接使能,测量模式 |
0X2E | 0X00 | 不使用中断 |
0x32, 0x33, 0x34, ... 0x37 |
只读 |
X轴数据0, X轴数据1, Y轴数据0, ... Z轴数据1 |
注:对应配置相关功能,芯片手册有详细介绍,上述为简单的配置使用。
- ADXL345初始化:
本人使用的是IIC通信方式,通过读取0x00即芯片的ID,与之比较相等则通信成功,进行下一步,写以上寄存器的配置。此外提高准确度,可以写入XYZ的偏移量。计算最接近偏移量寄存器的LSB: *xoffset=-round(offx/4); *yoffset=-round(offy/4); *zoffset=-round(offz-256/4); 写入0X1E X轴偏移,自动校准一下,其他轴同理。
完成初始化即可读取0x32开始连续6个地址的数据。然后把两个地址的数据合成。参照数据手册的时序图编写通信方式读取数据。(为了提高精确度可以添加滤波程序。)传感器介绍完毕。
- 第二:计步器算法思想
1、运动阀值
一般运动轨迹如上图模拟所示。运动加速度一般呈现正弦变化,上图中下半部分就是呈现运动阀值的重要性。当运动速度提升,最大值与最小值抬高时候,平均值也应当跟着轨迹变化。因此,所谓的运动阀值是一个动态值,具有自适应性,并且足够快。 加速度计不断的更新三轴数据,采集滤波,判断最大值与最小值。我们以采样50次为一组更新一次阀值。平均值(max+min)/2做为“运动阀值”。动态精度由自己划分,把运动变化量划分等级,随着运动阀值大小判定当前精度值。
2、迈步判断
- 步伐迈出的条件定义:当加速度曲线跨过动态阀值上方时或者当加速度曲线跨过动态阀值下方时加速度的变化为正值或者为负值。
- 利用线性位移寄存器和动态阀值和动态精度一起判断个体是否迈出有效的一步。建立两个寄存,new寄存器和old寄存器;当前数据采集到后判断是否移入new寄存器,满足移入条件:加速度变化量大于当前的动态精度。就把当前采集的数据移入new寄存器,否则new保持不变。每当新数据到来时候,new寄存器的值无条件移入old寄存器。这样,就能够避免高频噪声的影响,提高判断精度。
- 三轴加速度同时检测,可以但是只要一个轴的加速度变化最大,可以利用该轴当为运动方向,其他轴忽略不计。
第三:程序
额~ 好多。。。主要是计步器算法思想,有空再详细介绍。(待续...)