专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
mpu6050 DMP 如何取消水平校准?
2019-08-14 01:43
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
8080
25
1789
将原子哥的MPU6050DMP成功移植到MINISTM32。每次输出的欧拉角数据都是被自动校准过的。每次初始化的时候,保持mpu6050某一状态,在这个状态的时候输出的欧拉角都为“0”。我想无论mpu6050处在何种状态,初始化完成后,当mpu6050处在水平位置时,输出的欧拉角都为“0”,不知该如何设置?
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
25条回答
老书虫
2019-08-16 15:07
激动的小河马 发表于 2017-5-17 10:20
库的哪些被更改了呢?
问:楼主提供的无校验库的哪些地方被修改了呢?
答:
1.inv_mpu里面,run_self_test函数被更改1:原子的if(result==0x03)改成了无校验库的if(result==0x07),下面解释:
首先找到这一句:result = mpu_run_self_test(gyro, accel);这个的意思是对陀螺仪和加计(加速度计)进行检查。
跳到该函数,找到这里:
accel_result = accel_self_test(accel, accel_st); //对加计进行自检,OK返回1,不OK返回0;
gyro_result = gyro_self_test(gyro, gyro_st); //对陀螺仪进行自检,OK返回1,不OK返回0;
result = 0;
if (!gyro_result)
result |= 0x01; //如果陀螺仪OK,result变成1;
if (!accel_result)
result |= 0x02; //如果加计也OK,result变成3;
#ifdef AK89xx_SECONDARY
compass_result = compass_self_test();
if (!compass_result)
result |= 0x04; //如果磁力计也OK,result变成7;
【结论】因为MPU6050没有磁力计,所以result不可能为0x07,也就是说if必然失败,所以不会执行if里面的校正,也就是无校准。
2.inv_mpu里面,run_self_test函数下面的return被更改:return直接被注释掉,所以不会报错MPU6050 Error。
【结论】这种去掉校验的方法不可取,因为去掉校验之后,数据收敛的时间很长,而且不准。可以试试保存偏移量的办法实现以水平面为参考。
加载中...
查看其它25个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
问:楼主提供的无校验库的哪些地方被修改了呢?
答:
1.inv_mpu里面,run_self_test函数被更改1:原子的if(result==0x03)改成了无校验库的if(result==0x07),下面解释:
首先找到这一句:result = mpu_run_self_test(gyro, accel);这个的意思是对陀螺仪和加计(加速度计)进行检查。
跳到该函数,找到这里:
accel_result = accel_self_test(accel, accel_st); //对加计进行自检,OK返回1,不OK返回0;
gyro_result = gyro_self_test(gyro, gyro_st); //对陀螺仪进行自检,OK返回1,不OK返回0;
result = 0;
if (!gyro_result)
result |= 0x01; //如果陀螺仪OK,result变成1;
if (!accel_result)
result |= 0x02; //如果加计也OK,result变成3;
#ifdef AK89xx_SECONDARY
compass_result = compass_self_test();
if (!compass_result)
result |= 0x04; //如果磁力计也OK,result变成7;
【结论】因为MPU6050没有磁力计,所以result不可能为0x07,也就是说if必然失败,所以不会执行if里面的校正,也就是无校准。
2.inv_mpu里面,run_self_test函数下面的return被更改:return直接被注释掉,所以不会报错MPU6050 Error。
【结论】这种去掉校验的方法不可取,因为去掉校验之后,数据收敛的时间很长,而且不准。可以试试保存偏移量的办法实现以水平面为参考。
一周热门 更多>