OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6105|回复: 9

ADXL345加速度传感器计步数算法程序求解

[复制链接]

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-11
在线时间
28 小时
发表于 2017-4-9 22:22:55 | 显示全部楼层 |阅读模式
2金钱
本帖最后由 ygxdh 于 2017-4-9 22:27 编辑

最近,小白在弄ADXL345加速度传感器计步数,发现ADI上面有这方面算法的介绍http://www.analog.com/cn/analog- ... igital-acceler.html主要有数字滤波,动态阈值,峰值检测等内容。自己也结合着网上和原子哥提供的一些代码弄了一下。但是用串口调试助手调试,还是有问题step,直接从0跳到33。。。。求论坛大神辅助小弟一下
下面是我最近编写的代码 ADX345加速度传感器.zip (4.41 MB, 下载次数: 611)

最佳答案

查看完整内容[请看2#楼]

自己最后参考51黑论坛里面大神的代码,基本在STM32中实现了计步功能。如下文件为该论坛里面下载的源代码,只要把step_counter()函数移植到STM32中就好啦,其余的读取加速度值和IIC通讯较为简单,可以直接参考其他内容编写。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-11
在线时间
28 小时
 楼主| 发表于 2017-4-9 22:22:56 | 显示全部楼层
自己最后参考51黑论坛里面大神的代码,基本在STM32中实现了计步功能。如下文件为该论坛里面下载的源代码,只要把step_counter()函数移植到STM32中就好啦,其余的读取加速度值和IIC通讯较为简单,可以直接参考其他内容编写。

简单计步器.zip

106.26 KB, 下载次数: 757

回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-11
在线时间
28 小时
 楼主| 发表于 2017-4-9 22:26:37 | 显示全部楼层
这是我用串口调试助手调试出来结果,求助大神呀
捕获.JPG
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-4-10 00:34:17 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-8
在线时间
3 小时
发表于 2017-4-10 14:45:32 | 显示全部楼层
                     for(i=0;i<33;i++)
                   {
                            printf(" X:%d \t", axis_converted_avg[i].X);         //2aê&#212;&#188;ó&#203;ù&#182;è&#214;μ
                        }                                                      
                   ADX_GetXYZDataNEW(&Xval1, &Yval1, &Zval1,buf);
           for(j=0;j<33;j++)
                                        {
                                                ADXL345_STEPCOUNT(buf[i]);
                                               
                                        }
          printf(" step:%d \n", g_step_count);   //′
改为
                     for(i=0;i<33;i++)
                   {
                            printf(" X:%d \t", axis_converted_avg[i].X);         //2aê&#212;&#188;ó&#203;ù&#182;è&#214;μ
                        }                                                      
                   ADX_GetXYZDataNEW(&Xval1, &Yval1, &Zval1,buf);
           for(j=0;j<33;j++)
                                        {
                                                ADXL345_STEPCOUNT(buf[i]);
                                                printf(" step:%d \n", g_step_count);   //
                                        }
试试看
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-11
在线时间
28 小时
 楼主| 发表于 2017-4-10 17:22:01 | 显示全部楼层

捕获.JPG
我又看了一下,如果把printf(" step:%d \n", g_step_count);放进去是这样的结果。 应该说明程序是运行了ADXL345_STEPCOUNT()这个函数,貌似 g_step_count++那里里面有问题。我从那个网页算法里面看见有时间窗口这个算法,什么两个有效步伐的时间间隔在时间窗口[0.2 s - 2.0 s]之内,不知道会不会是这个问题,也不知道怎么编写程序,求大神辅助我一下



回复

使用道具 举报

3

主题

108

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2014-2-24
在线时间
257 小时
发表于 2017-4-10 22:25:51 | 显示全部楼层
ygxdh 发表于 2017-4-10 17:22
我又看了一下,如果把printf(" step:%d \n", g_step_count);放进去是这样的结果。 应该说明程序是运行 ...

用定时器计时就好
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-11
在线时间
28 小时
 楼主| 发表于 2017-4-11 13:48:09 | 显示全部楼层
小小怪 发表于 2017-4-10 22:25
用定时器计时就好

好的,谢谢。我先看看RTC部分,再弄弄
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-11
在线时间
28 小时
 楼主| 发表于 2017-4-12 12:40:50 | 显示全部楼层
小小怪 发表于 2017-4-10 22:25
用定时器计时就好

大神,我现在利用STEPCOUNT函数里面已经加入了时间串口,但是通过串口助手观察结果,值还是不正确  。求各位大神帮小白看看
捕获.JPG
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2018-10-25
在线时间
1 小时
发表于 2018-10-25 23:03:32 | 显示全部楼层
你好 我没搞懂怎么判断步伐是不是迈出了 能讲解一下吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 09:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表