OpenEdv-开源电子网

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

求助 minifly 磁力计数据处理

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2019-3-28
在线时间
5 小时
发表于 2019-3-28 16:43:23 | 显示全部楼层 |阅读模式
1金钱
/*处理磁力计数据*/
void processMagnetometerMeasurements(const uint8_t *buffer)
{
        if (buffer[0] & (1 << AK8963_ST1_DRDY_BIT))
        {
                int16_t headingx = (((int16_t) buffer[2]) << 8) | buffer[1];
                int16_t headingy = (((int16_t) buffer[4]) << 8) | buffer[3];
                int16_t headingz = (((int16_t) buffer[6]) << 8) | buffer[5];

                sensors.mag.x = (float)headingx / MAG_GAUSS_PER_LSB;
                sensors.mag.y = (float)headingy / MAG_GAUSS_PER_LSB;
                sensors.mag.z = (float)headingz / MAG_GAUSS_PER_LSB;
               
                magRaw.x = headingx;/*用于上传到上位机*/
                magRaw.y = headingy;
                magRaw.z = headingz;
        }
}

这段代码中为什么要将磁力计原始数据除以MAG_GAUSS_PER_LSB(666.7)?

最佳答案

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

因为minifly的飞控固件中在初始化ak8963时使能的是16位sensitivity和连续工作模式2,而其16位sensitivity的值为0.15μT/LSB,连续工作模式2的数据输出速率为100Hz。所以磁强=16位ADC值(headingx) * sensitivity(0.15μT/LSB) / 100,把后两项合并写成除法形式就是666.7
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

36

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2018-6-7
在线时间
62 小时
发表于 2019-3-28 16:43:24 | 显示全部楼层
因为minifly的飞控固件中在初始化ak8963时使能的是16位sensitivity和连续工作模式2,而其16位sensitivity的值为0.15μT/LSB,连续工作模式2的数据输出速率为100Hz。所以磁强=16位ADC值(headingx) * sensitivity(0.15μT/LSB) / 100,把后两项合并写成除法形式就是666.7
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2019-3-28 17:05:28 | 显示全部楼层
帮顶!
回复

使用道具 举报

31

主题

2176

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14141
金钱
14141
注册时间
2018-8-3
在线时间
1143 小时
发表于 2019-3-29 09:26:54 | 显示全部楼层
帮顶!!!
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2019-3-28
在线时间
5 小时
 楼主| 发表于 2019-4-16 16:32:53 | 显示全部楼层
maksyuki 发表于 2019-3-28 16:43
因为minifly的飞控固件中在初始化ak8963时使能的是16位sensitivity和连续工作模式2,而其16位sensitivity的 ...

你好 16位ADC值(headingx) * sensitivity(0.15μT/LSB) 这里可以理解 但是为什么还要除以数据输出速率?
回复

使用道具 举报

0

主题

36

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2018-6-7
在线时间
62 小时
发表于 2019-4-24 19:21:53 | 显示全部楼层
minifly的代码应该参考过Crazyflie的代码,我到Crazyflie的官方论坛问过这个问题,这是他们官方回答Why the value of "MAG_GAUSS_PER_LSB" is 666.7
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-12-31
在线时间
6 小时
发表于 2021-11-13 14:53:55 | 显示全部楼层
磁力计的数据有使用吗?我在用1.4的代码,没有用耶
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-5-29 14:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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