OpenEdv-开源电子网

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

电子罗盘

[复制链接]

17

主题

237

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1312
金钱
1312
注册时间
2017-3-1
在线时间
259 小时
发表于 2019-2-26 18:09:19 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 NewGuard 于 2019-2-27 09:15 编辑

1.磁力计使用九轴芯片,按照网上的参考资料水平面使用磁力计的X轴和Y轴数据得到方向角和磁北极的夹角,目前在水平面(平面校准后)大概可以得到一个相对稳定的数据(指向角度会有2到3度的跳动,还能接受)。

2.考虑把非水平面下的情况加入后发现角度数据跳动更大,但实际上还在水平面没动,不知道什么问题,是
数据处理有问题吗?希望各位帮忙看看什么问题

参考网址:http://www.dzsc.com/data/2010-11-29/87454.html

accel[0]为x轴加速度值,accel[1]为y轴加速度值,accel[2]为z轴加速度值mag[0]为x轴加磁力值,mag[1]为y轴加磁力值,mag[2]为z轴磁力值

Xh = compass.accel[0] /16384.0f;
Yh = compass.accel[1] /16384.0f;
Zh = compass.accel[2] /16384.0f;

#define RAD2DEG   57.29578f           // 弧度转度 180/π
angleX = atan2(Xh,mySqrt(Yh*Yh+Zh*Zh))*RAD2DEG - offset_x;        
angleY = atan2(Yh,mySqrt(Xh*Xh+Zh*Zh))*RAD2DEG - offset_y;


Yh = compass.mag[1]*cosf(angleY) + compass.mag[0]*sinf(angleY)*sinf(angleX) - compass.mag[2]*cosf(angleX)*sinf(angleY);
Xh = compass.mag[0]*cosf(angleX) + compass.mag[2]*sinf(angleX);


angle = atan2(Yh,Xh) * RAD2DEG + 180;
printf("angleX:%0.1f angleY:%0.1f angle:%0.1f \r\n",angleX,angleY,angle);




2019-02-26_175818.jpg
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-2-27 02:31:31 | 显示全部楼层
回复

使用道具 举报

17

主题

237

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1312
金钱
1312
注册时间
2017-3-1
在线时间
259 小时
 楼主| 发表于 2019-2-27 09:25:26 | 显示全部楼层
各位路过的大佬帮忙指点下,有问题的请指出。
下图为不借用俯仰角和翻滚角校正,只用磁力X和Y轴数据得到的角度。

2019-02-27_092049.jpg
回复

使用道具 举报

17

主题

237

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1312
金钱
1312
注册时间
2017-3-1
在线时间
259 小时
 楼主| 发表于 2019-2-27 09:39:42 | 显示全部楼层
首先角度只有0.1°,会不会是公式的问题?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 17:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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