OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 125|回复: 12

GY-271 HMC5883电子罗盘 数据不稳定 跳动很大

[复制链接]

  离线 

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-10-3
在线时间
15 小时
发表于 2017-12-7 19:33:25 | 显示全部楼层 |阅读模式
1金钱
GY-271 HMC5883电子罗盘。协议i2c。读取到的数据时大时小,没有线性变化。请问有什么解决办法,或者有什么处理异常数据的算法?

最佳答案

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

需要先对x,y归一化才能用。 先输出x,y的值 然后水平转一圈,慢慢转也可以多转几圈,分别找到x,y的最大值和最小值。 然后把x,y都映射到-1到1这个数据段。 之后就可以用你现在的函数计算角度了,不过你现在这个函数也有点问题,不能直接+180,而是需要根据x,y的符号判断象限,来决定+多少
回复

使用道具 举报

  离线 

0

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-6-2
在线时间
31 小时
发表于 2017-12-7 19:33:26 | 显示全部楼层
需要先对x,y归一化才能用。

先输出x,y的值

然后水平转一圈,慢慢转也可以多转几圈,分别找到x,y的最大值和最小值。

然后把x,y都映射到-1到1这个数据段。

之后就可以用你现在的函数计算角度了,不过你现在这个函数也有点问题,不能直接+180,而是需要根据x,y的符号判断象限,来决定+多少
回复

使用道具 举报

  离线 

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-10-3
在线时间
15 小时
 楼主| 发表于 2017-12-7 19:41:25 | 显示全部楼层
本帖最后由 ryanwong 于 2017-12-7 19:52 编辑

D:\资料\项目
像这样,我的电子罗盘的位置没有动过。下面的值是根据   atan2((double)y,(double)x) * (180/ 3.14159265) +180  算出来的
QQ图片20171207193842.png
回复

使用道具 举报

  离线 

0

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2017-10-12
在线时间
41 小时
发表于 7 天前 | 显示全部楼层
把x,y打印出来看看
回复

使用道具 举报

  离线 

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-10-3
在线时间
15 小时
 楼主| 发表于 7 天前 | 显示全部楼层
本帖最后由 ryanwong 于 2017-12-8 09:50 编辑
psychoo 发表于 2017-12-8 09:32
把x,y打印出来看看

还有两个问题,一个是现在打印的数值,是读取到的寄存器的值,转换为十进制的结果,怎么让它转换为我们读的懂的数值?第二个问题是,HMC5883数据寄存器的顺序是x,z,y吗?,我觉得我读寄存器的顺序有问题?
QQ图片20171208094423.png
回复

使用道具 举报

  离线 

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-10-3
在线时间
15 小时
 楼主| 发表于 7 天前 | 显示全部楼层
jkd405 发表于 2017-12-8 09:48
需要先对x,y归一化才能用。

先输出x,y的值

谢谢你的指点,我想问一下,是直接将读到的寄存器的值进行归一化吗?就是如果寄存器的最大值,最小值分别为(11592,-128)(这是将读到的值转换为十进制的结果),直接归一化吗?
回复

使用道具 举报

  离线 

0

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-6-2
在线时间
31 小时
发表于 7 天前 | 显示全部楼层
ryanwong 发表于 2017-12-8 10:20
谢谢你的指点,我想问一下,是直接将读到的寄存器的值进行归一化吗?就是如果寄存器的最大值,最小值分别 ...

对,直接归一化,其实你可以看看x,y两轴的最大值减去最小值,如果两个差值比较接近,可以不做幅度上的归一化,只要做一下零偏校准就行,就是让两个的平均值等于0

其实说白了x,y就相当于sin cos,正常应该都是-1到1,但是正切是除法运算,所以两个都从-5000到5000的话也不影响结果,但是两个不一致差的多的话,就是椭圆了。0偏是必须先校的。



回复

使用道具 举报

  离线 

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-10-3
在线时间
15 小时
 楼主| 发表于 7 天前 | 显示全部楼层
jkd405 发表于 2017-12-8 10:32
对,直接归一化,其实你可以看看x,y两轴的最大值减去最小值,如果两个差值比较接近,可以不做幅度上的归 ...

像这样数据对吗?下面是通过 atan2(y,x) * (180 / 3.14159265) 算出来的。x,y我直接定义为double类型。我后面没有加180。我不知道要加多少。

atan2算出的结果

atan2算出的结果

x,y,z三轴的数据

x,y,z三轴的数据
回复

使用道具 举报

  离线 

0

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-6-2
在线时间
31 小时
发表于 7 天前 | 显示全部楼层
ryanwong 发表于 2017-12-8 11:11
像这样数据对吗?下面是通过 atan2(y,x) * (180 / 3.14159265) 算出来的。x,y我直接定义为double类型。我 ...

应该没问题了,你旋转一下看看,加多少那个,你把x,y和你没加之前的角度同时打出来,慢慢转慢慢找规律吧
回复

使用道具 举报

  离线 

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-10-3
在线时间
15 小时
 楼主| 发表于 7 天前 | 显示全部楼层
jkd405 发表于 2017-12-8 11:17
应该没问题了,你旋转一下看看,加多少那个,你把x,y和你没加之前的角度同时打出来,慢慢转慢慢找规律吧

好的,谢谢大哥
回复

使用道具 举报

  离线 

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-10-3
在线时间
15 小时
 楼主| 发表于 7 天前 | 显示全部楼层
jkd405 发表于 2017-12-8 11:17
应该没问题了,你旋转一下看看,加多少那个,你把x,y和你没加之前的角度同时打出来,慢慢转慢慢找规律吧

还有一个问题,能告诉我,atan2....那个公式是怎么来的吗?谢谢。
回复

使用道具 举报

  离线 

0

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2017-6-2
在线时间
31 小时
发表于 7 天前 | 显示全部楼层
ryanwong 发表于 2017-12-8 12:04
还有一个问题,能告诉我,atan2....那个公式是怎么来的吗?谢谢。

x,y的值本身就是与磁场夹角的正弦和余弦。比值就是正切啊,求反正切就得到传感器与磁场的夹角了
回复

使用道具 举报

  离线 

6

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-10-3
在线时间
15 小时
 楼主| 发表于 7 天前 | 显示全部楼层
jkd405 发表于 2017-12-8 13:39
x,y的值本身就是与磁场夹角的正弦和余弦。比值就是正切啊,求反正切就得到传感器与磁场的夹角了

我知道了,谢谢。
回复

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-12-15 20:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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