找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1893|回复: 7
收起左侧

关于ADXL345减速的问题

[复制链接]
ID:401564 发表于 2020-8-7 09:32 | 显示全部楼层 |阅读模式
最近在做一个基于ADXL345的自动提示刹车山地车尾灯的产品,硬件是做好了大概的原理就是通过检测一个轴加速度来判断有没有在刹车
现在有问题是:要通过怎么样的算法来判断这个刹车与否?想是几个算法,有做过相关的能否给个建议
1:每100mS取样一次,使用前后两次数据对比判断是否有减速动作
2:每15mS取样一次,取样8次之后平均值算一个数据,下一个数据再和这个数据相比,用来判断刹车与否
3:每两次取样有一个减速,算一次,连续减速N次算一次有效的刹车
以上就是能想到的算法,不知道哪个好点,还是有其它更好的算法?
还有,暂时还没有想到怎么关断车灯倒下和刹车,因为,如果是车灯倒下的话,它也是会产生加速度的,它如何与正常的刹车区分呢?
回复

使用道具 举报

ID:451718 发表于 2020-8-7 12:00 | 显示全部楼层
对你这个项目很赶兴趣。   看来你已经有突破了。   不妨重点来看看上坡和下坡,如果上坡减速都可以判断得到,那么问题解决方法就有了。  
先来看平地运动的受力
180.jpg
回复

使用道具 举报

ID:451718 发表于 2020-8-7 12:52 | 显示全部楼层
本帖最后由 robinsonlin 于 2020-8-7 14:44 编辑

在平地上,F1是一个持续存在的摩擦阻力,只有当F1方向的力突然大于这个摩擦阻力时,才可能是有擦车的行为发生。 所以可能需要一个函数去计算这个F1方向力的变化是不是平滑的。 持续判断,持续比较吧,可能需要实际去测量,取一个最大的阻力值作为触发点。

在坡地上,其实也可以判断,这个判断应该放在第一级。在坡地上时,重力G分解为G1 和G2, G1比G小,因为你的车头水平度已经发生了变化, 芯片实际检测到重力轴向的力应该是G1,这时就可以判断是在坡地上了,至于是上坡还是下坡,就得通过 平地到坡地的受力突变来判断了, 这还得写一个重力突变判断函数,判断依据就是重力轴向的上的信号变小了多少。如果是持续变小,(下坡的时候会有一个微小的失重过程)可以判断为下坡, 如果是变小后,基本维持不变,那就是上坡。 这个也得实地测量后才有依据。上坡过程中,G2是阻力,运动轴向上的力突然大于F1+G2,便是判断为刹车了。下坡过程中,G2变成了动力,所以这个时候,F1-G2这个应该为负数,这个负数的绝对值突然变小,可判断为刹车了。
关于静止时,是否刹车的判断, 应该可以通过运动轴向上是否有轻微的信号变化来判断。因为,就算是匀速,也不可能是绝对的匀速,运动过程中,轴向上肯定会有信号波动。 只有静止的时候,各个轴向才不会有信号变化。 当G1<G ,但是运动轴向信号为0,则认为是坡道刹车,可以一直触发刹车。  当G恒定为一个常量,切G1=G,轴向上信号为0时,可以判断为平地刹车,做个延迟关闭吧,这种情况也很少出现,功能也不实用。

大致思路是这样,细节可以还需要有实际数据再推敲。
30.jpg
回复

使用道具 举报

ID:401564 发表于 2020-8-7 15:06 | 显示全部楼层
robinsonlin 发表于 2020-8-7 12:00
对你这个项目很赶兴趣。   看来你已经有突破了。   不妨重点来看看上坡和下坡,如果上坡减速都可以判断得到 ...

其实没有那么复杂的
我只取一个轴的数据,比如Z轴,尾灯是夹在单车后面的,既然是尾灯它就一定是身后的,那么,Z轴的方向也是固定的
那么,对于Z轴,就只有加速度,静止和减速度三种状态了
如果一直上坡,比如它一直是输出0.5G的数据,那就说明它一直是这个状态,并没有加速度
如果上一时间是输出0.5G,下一个时间输出0.9G,那么,就认为它是加速度了
现在的问题主要是这个取样的时间和算法,在这一块没有经验,想向别人取点经
最终结果还是要在单车上测试才行的了
回复

使用道具 举报

ID:451718 发表于 2020-8-7 17:48 | 显示全部楼层
Y_G_G 发表于 2020-8-7 15:06
其实没有那么复杂的
我只取一个轴的数据,比如Z轴,尾灯是夹在单车后面的,既然是尾灯它就一定是身后的,那 ...

刹车的状态,确实是对应G值的改变,你前面的理解是对的,后面的确实不完全正确。 只要有加速度,速度就会改变,无论正负。如果为正值时是在加速,那么为负值时,就是在减速。  当加速度为0时,速度才是恒定的。 这个时候,理想状态是不受任何作用力的。 实际上,总会受到摩擦力和空气阻力,这才导致你滑行的单车会停下来。  Z轴对应的状态应该是加速、匀速(G值为0)、减速三个状态。 静止状态,实际上也是一种匀速状态。  所以,刹车的发生一定是有个大于摩擦力和空气阻力的 力产生了,才会导致刹车。 所以,按照你的思路,如果滑行中的单车,会在Z轴上输出一个信号,只要是在平路上滑行,这个信号肯定是平滑递减信号。在滑行过程中,这个递减信号突然增大,才可以判断为有刹车。 递减恢复原来的速率,就是刹车消失了。 信号为0,就是单车停下来了。
以上只是详细说了滑行过程中的刹车情况,还有加速过程刹车,匀速过程刹车,上坡刹车,和下坡刹车,以及坡路静止刹车,应该都可以通过程序读取出状态的。不信你可以测试,等待你的测试结果。
持续关注你的进展。
回复

使用道具 举报

ID:401564 发表于 2020-8-7 21:48 | 显示全部楼层
robinsonlin 发表于 2020-8-7 17:48
刹车的状态,确实是对应G值的改变,你前面的理解是对的,后面的确实不完全正确。 只要有加速度,速度就 ...

在力学中,静止的G值是0,但我看过这个传感器了,它在不同角度输出的数据是不同的,
打个比方:它正面放的时候,Z轴会一直输出1G,这一点在实际测试中也测试过了 51hei截图20200807214654.jpg 现在和问题数据采样的时间和算法上还在摸索中,有经验参考更好,没有就自己一遍一遍测试
回复

使用道具 举报

ID:401564 发表于 2020-8-7 22:18 | 显示全部楼层
robinsonlin 发表于 2020-8-7 17:48
刹车的状态,确实是对应G值的改变,你前面的理解是对的,后面的确实不完全正确。 只要有加速度,速度就 ...

上坡和下坡暂时归入滑行这一项来算,暂时只取一个轴的数据,如果可行的话就省得去读取XYZ三个轴的数据了
多谢提醒,我倒是没有考虑到加速度过程的减速,回头再改改
现在只能是在办公室里用手左右摆摆试一下,小跑一小段停下也都能亮灯提示了
明天还考虑一下加速过程中减速的问题
回复

使用道具 举报

ID:451718 发表于 2020-8-8 11:28 | 显示全部楼层
Y_G_G 发表于 2020-8-7 21:48
在力学中,静止的G值是0,但我看过这个传感器了,它在不同角度输出的数据是不同的,
打个比方:它正面放的时 ...

嗯,我昨天看了一下这个芯片的资料。 谈一下更远的想法, 你的器件做好了以后,电路板需要是在器件内平放的,如果不能相对水平放置,Z轴的G值就不会是1个G。可能会小于1个G。 单车的款式不同,导致外形会各有不同。 器件安装好后,如果需要调水平状态,因为只有在水平状态,器件才能最精准,那么这就是个缺陷了。
所以我想, 你可能需要重建一个相对坐标系。开机第一步,就是检测哪个虚拟坐标的Z轴是1个G。  然后确定倾角,算法应该有现成的,不过计算量会有点大,可能得用纯16位以上芯片来做了。

另外,芯片平放时,你做的水平运动,不要测Z轴数据, 测一个X轴,或者Y轴数据试试,数据变动幅度会更明显。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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