- 收藏
- 点赞
- 分享
- 举报
QMC6308读取数据异常
我这里使用的QMC6308地磁的芯片,读取xyz的分量数据,然后计算方位角的内容。
数据手册中介绍的是,每个轴16位数据,范围是-32786到32767,最高位是符号位,以二进制补码存放。
reg_data.x_data = (data[1] << 8) | data[0];这是我处理两个寄存器,使其合并为x轴数据的部分。y和z轴同理。
该模块,我设置的是连续模式,正负2Gauss,10HZ等等这些内容。(具体是0x0b寄存器设置为0x30,0x0a寄存器设置为0xc3)
我只是用平行于地面的两个轴,x和y轴数据计算方位角,具体部分如下
float calculate_angle(float x, float y) {
float angle = atan2f(y, x) 180.0f / M_PI;
if (angle < 0.0f) {
angle += 360.0f;
}
return angle;
}
但是现在的情况是,得到的方位角的角度,确实是360°变动,但是xy轴数据有些奇怪,并且实际上模块转动90°,但是角度变化有时候不足90,有时候远超90,甚至达到了170°。
接下来是说数据的情况了,x轴数据,读取到reg_data.x_data这里后,直接printf打印(用%d,直接打印出原码,并用于计算),但是x轴的值,会在200到-460之间变化,到200后,就减小,到-460就增大,无论左右,就这样循环往复。
y轴数据情况相同,只不过是-560到150。
计算角度的数据是经过处理的,也就是
float convert_to_gauss(int16_t raw_data) {
// 将二进制补码转换为浮点数
float gauss = (float)raw_data /32767 2000.0;
return gauss;
} 这样,将数据转为gauss的单位在进行计算。
下面是角度变化,
以向东为基准,是150°,
逆时针旋转90°,变为210°,仅增加60°,此时指向北
在逆时针旋转90°,变为20°,增加170°,此时指向西,(超过360°后,从0开始)
在逆时针旋转90°,变为100°,增加80°,此时指向南
再逆时针旋转90°。变为150°,增加50°,此时指向动(到初始位置)
以上大致就说全部的内容了,实在是不知道为什么xy轴数据会那样变化,也不知道这个角度变化为什么这么没有规律,有使用过这个同型号的芯片,或者类似的吗,这种情况是什么原因导致的?有什么解决办法吗?
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
-
2019-07-25 09:35:19
-
2020-12-03 09:22:13
-
2016-10-14 11:48:23
-
2018-11-16 15:13:22
-
2017-09-08 10:47:34
-
2022-12-07 15:52:14
-
2016-12-12 15:04:13
-
2018-12-14 10:37:02
-
2020-10-27 14:26:10
-
2018-12-21 14:40:32
-
2019-01-14 09:20:32
-
2020-12-08 17:30:00
-
2018-10-23 13:46:20
-
2017-06-07 14:05:59
-
2021-01-13 13:40:57
-
2023-10-31 19:31:23
-
2018-10-21 10:22:16
-
2020-11-26 15:46:02
-
2017-06-06 11:04:29
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明