mpu6050工作原理先亮一会然后一直闪烁怎么回事

你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
谁能救救我啊,我的源码在附件中,帮我看看吧,救救我吧!I2C我使用的是 HAL_I2C_Mem_Read( )和HAL_I2C_Mem_Write( ).
有时间帮你看看,手头暂时没有6050,倒是有一个ADXl345,都是iic通信,应该差不多吧
刚才大致百度了一下,发现个用cubemx做的6050用的板子是F7的,不过我想过程和函数应该差不多,你可以先参考下
STM32的IIC硬件好像是很容易出错的
我仔细调试了下,发现eeprom的某些地址可以读写,有些不可以。比如,我的源程序中是这样的,HAL_I2C_MEM_WRITE(SLAVE_ADDR, BANK_SELECT, LENGTH, DATA);
BANK_SELECT的值为0x6d,功能是选择读写的块,然后再把数据写入缓冲区HAL_I2C_MEM_WRITE(SLAVE_ADDR, I2C_RA_MEM_R_W,
LENGTH, DATA);
I2C_RA_MEM_R_W 的值为0X6F. 这种先选择块,再把数据写进缓冲的方式,根本无法读写。但如果这样:
HAL_I2C_MEM_WRITE(SLAVE_ADDR, 0x6c, LENGTH, DATA);
HAL_I2C_MEM_READ(SLAVE_ADDR, BANK_SELECT, LENGTH,PDATA);
这样才能读写成功。是不是MPU上的eeprom不支持缓冲读写,但官方库的是使用缓冲读写的。
问题终于解决了,原来我的程序并没问题,问题出在,我使用的是ST-Link供电,电压偏低,要直接5V供电才能正常读写EEPROM。这么个问题,竟然让我浪费了十天的时间。
我测量一下,我给9250供电是5V,没问题的
要回复问题请先或
一句话介绍
浏览: 4167
关注: 4 人【求教】MPU6050一直输出0【arduino吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:56,606贴子:
【求教】MPU6050一直输出0收藏
MPU6050一直输出0
哪位大神知道这是什么原因么
我是完全按照这篇知乎上的文章来做的
代码和接线方式也是一样的有谁知道为什么么
arduino, 750多家厂商代理,100多万种现货库存,当天出货,免费送货.
登录百度帐号21ic官方微信-->
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
MPU6050放着不动低位数据也在不停变动,怎么回事?
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
本帖最后由 msly 于
17:39 编辑
用的是GY-521 MPU6050 模块 原始数据
AXH:2 AXL:28 AYH:192 AYL:112 AZH:254 AZL:200 GXH:252 GXL:247 GYH:0 GYL:76 GZH:255 GZL:0 TEMPH:241 TEMPL:48
------------
AXH:2 AXL:44 AYH:192 AYL:160 AZH:253 AZL:168 GXH:253 GXL:30 GYH:0 GYL:96 GZH:255 GZL:245 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:12 AYH:192 AYL:132 AZH:254 AZL:232 GXH:253 GXL:29 GYH:0 GYL:84 GZH:255 GZL:229 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:200 AYH:192 AYL:128 AZH:253 AZL:12 GXH:253 GXL:27 GYH:0 GYL:96 GZH:255 GZL:252 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:80 AYH:192 AYL:148 AZH:254 AZL:72 GXH:252 GXL:239 GYH:0 GYL:92 GZH:0 GZL:8 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:28 AYH:192 AYL:116 AZH:254 AZL:92 GXH:253 GXL:16 GYH:0 GYL:77 GZH:0 GZL:4 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:168 AYH:192 AYL:124 AZH:253 AZL:236 GXH:253 GXL:1 GYH:0 GYL:85 GZH:0 GZL:249 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:100 AYH:192 AYL:128 AZH:254 AZL:28 GXH:253 GXL:25 GYH:0 GYL:92 GZH:0 GZL:4 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:156 AYH:192 AYL:200 AZH:254 AZL:32 GXH:253 GXL:12 GYH:0 GYL:96 GZH:255 GZL:241 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:40 AYH:192 AYL:116 AZH:254 AZL:132 GXH:253 GXL:254 GYH:0 GYL:104 GZH:255 GZL:246 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:152 AYH:192 AYL:128 AZH:254 AZL:108 GXH:253 GXL:18 GYH:0 GYL:93 GZH:0 GZL:250 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:64 AYH:192 AYL:116 AZH:253 AZL:200 GXH:253 GXL:23 GYH:0 GYL:105 GZH:0 GZL:9 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:100 AYH:192 AYL:100 AZH:254 AZL:96 GXH:253 GXL:2 GYH:0 GYL:76 GZH:255 GZL:236 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:116 AYH:192 AYL:4 AZH:254 AZL:172 GXH:252 GXL:252 GYH:0 GYL:84 GZH:0 GZL:255 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:60 AYH:192 AYL:160 AZH:254 AZL:72 GXH:253 GXL:254 GYH:0 GYL:98 GZH:255 GZL:241 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:152 AYH:192 AYL:56 AZH:253 AZL:28 GXH:253 GXL:21 GYH:0 GYL:89 GZH:0 GZL:31 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:104 AYH:192 AYL:144 AZH:253 AZL:168 GXH:253 GXL:23 GYH:0 GYL:71 GZH:0 GZL:4 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:152 AYH:192 AYL:56 AZH:254 AZL:192 GXH:252 GXL:3 GYH:0 GYL:88 GZH:255 GZL:249 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:112 AYH:192 AYL:88 AZH:253 AZL:236 GXH:253 GXL:10 GYH:0 GYL:84 GZH:255 GZL:223 TEMPH:242 TEMPL:240
------------
AXH:2 AXL:148 AYH:192 AYL:76 AZH:254 AZL:24 GXH:252 GXL:244 GYH:0 GYL:94 GZH:255 GZL:240 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:8 AYH:192 AYL:128 AZH:254 AZL:92 GXH:253 GXL:23 GYH:0 GYL:91 GZH:255 GZL:254 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:104 AYH:192 AYL:64 AZH:254 AZL:16 GXH:253 GXL:8 GYH:0 GYL:100 GZH:255 GZL:20 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:108 AYH:192 AYL:116 AZH:254 AZL:80 GXH:253 GXL:248 GYH:0 GYL:93 GZH:255 GZL:253 TEMPH:242 TEMPL:240
------------
AXH:2 AXL:84 AYH:192 AYL:112 AZH:254 AZL:252 GXH:252 GXL:249 GYH:0 GYL:95 GZH:255 GZL:0 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:56 AYH:192 AYL:180 AZH:253 AZL:220 GXH:252 GXL:254 GYH:0 GYL:98 GZH:0 GZL:10 TEMPH:242 TEMPL:240
------------
AXH:2 AXL:60 AYH:192 AYL:88 AZH:254 AZL:84 GXH:252 GXL:5 GYH:0 GYL:97 GZH:0 GZL:0 TEMPH:242 TEMPL:240
------------
AXH:2 AXL:144 AYH:192 AYL:128 AZH:254 AZL:136 GXH:253 GXL:19 GYH:0 GYL:105 GZH:255 GZL:247 TEMPH:242 TEMPL:240
------------
AXH:2 AXL:0 AYH:192 AYL:96 AZH:253 AZL:236 GXH:253 GXL:244 GYH:0 GYL:89 GZH:255 GZL:250 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:140 AYH:192 AYL:152 AZH:254 AZL:76 GXH:252 GXL:228 GYH:0 GYL:108 GZH:0 GZL:250 TEMPH:242 TEMPL:240
------------
AXH:1 AXL:208 AYH:192 AYL:148 AZH:253 AZL:184 GXH:253 GXL:11 GYH:0 GYL:100 GZH:0 GZL:9 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:24 AYH:192 AYL:104 AZH:254 AZL:24 GXH:253 GXL:14 GYH:0 GYL:88 GZH:0 GZL:8 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:72 AYH:192 AYL:156 AZH:254 AZL:80 GXH:253 GXL:25 GYH:0 GYL:95 GZH:255 GZL:14 TEMPH:241 TEMPL:208
------------
AXH:2 AXL:60 AYH:192 AYL:64 AZH:254 AZL:88 GXH:253 GXL:9 GYH:0 GYL:95 GZH:255 GZL:244 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:32 AYH:192 AYL:132 AZH:253 AZL:4 GXH:253 GXL:250 GYH:0 GYL:96 GZH:255 GZL:9 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:52 AYH:192 AYL:64 AZH:253 AZL:68 GXH:253 GXL:14 GYH:0 GYL:63 GZH:0 GZL:32 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:88 AYH:192 AYL:172 AZH:254 AZL:156 GXH:253 GXL:37 GYH:0 GYL:89 GZH:0 GZL:7 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:156 AYH:192 AYL:128 AZH:254 AZL:112 GXH:253 GXL:12 GYH:0 GYL:108 GZH:255 GZL:232 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:56 AYH:192 AYL:132 AZH:254 AZL:88 GXH:253 GXL:9 GYH:0 GYL:86 GZH:255 GZL:4 TEMPH:241 TEMPL:240
------------
AXH:1 AXL:76 AYH:192 AYL:48 AZH:254 AZL:56 GXH:253 GXL:18 GYH:0 GYL:97 GZH:0 GZL:20 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:120 AYH:192 AYL:20 AZH:254 AZL:80 GXH:253 GXL:13 GYH:0 GYL:92 GZH:255 GZL:254 TEMPH:241 TEMPL:240
------------
AXH:1 AXL:248 AYH:192 AYL:120 AZH:254 AZL:144 GXH:253 GXL:25 GYH:0 GYL:92 GZH:0 GZL:9 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:68 AYH:192 AYL:108 AZH:254 AZL:92 GXH:253 GXL:250 GYH:0 GYL:102 GZH:255 GZL:251 TEMPH:241 TEMPL:240
------------
AXH:1 AXL:252 AYH:192 AYL:124 AZH:254 AZL:8 GXH:253 GXL:244 GYH:0 GYL:102 GZH:255 GZL:240 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:120 AYH:192 AYL:76 AZH:254 AZL:92 GXH:252 GXL:245 GYH:0 GYL:87 GZH:255 GZL:247 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:80 AYH:192 AYL:128 AZH:254 AZL:212 GXH:253 GXL:28 GYH:0 GYL:100 GZH:255 GZL:245 TEMPH:242 TEMPL:16
------------
AXH:2 AXL:52 AYH:192 AYL:144 AZH:254 AZL:216 GXH:253 GXL:252 GYH:0 GYL:93 GZH:0 GZL:17 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:48 AYH:192 AYL:108 AZH:254 AZL:92 GXH:252 GXL:232 GYH:0 GYL:99 GZH:255 GZL:1 TEMPH:242 TEMPL:208
------------
AXH:1 AXL:192 AYH:192 AYL:76 AZH:254 AZL:8 GXH:253 GXL:9 GYH:0 GYL:96 GZH:0 GZL:0 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:28 AYH:192 AYL:108 AZH:254 AZL:100 GXH:252 GXL:253 GYH:0 GYL:87 GZH:0 GZL:10 TEMPH:241 TEMPL:208
------------
AXH:2 AXL:48 AYH:192 AYL:76 AZH:254 AZL:252 GXH:253 GXL:14 GYH:0 GYL:109 GZH:255 GZL:224 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:56 AYH:192 AYL:140 AZH:254 AZL:68 GXH:252 GXL:248 GYH:0 GYL:69 GZH:255 GZL:231 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:80 AYH:192 AYL:136 AZH:254 AZL:112 GXH:252 GXL:253 GYH:0 GYL:89 GZH:255 GZL:214 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:8 AYH:192 AYL:172 AZH:254 AZL:244 GXH:253 GXL:5 GYH:0 GYL:102 GZH:255 GZL:0 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:76 AYH:192 AYL:140 AZH:253 AZL:176 GXH:253 GXL:16 GYH:0 GYL:85 GZH:0 GZL:7 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:84 AYH:192 AYL:188 AZH:254 AZL:148 GXH:252 GXL:253 GYH:0 GYL:76 GZH:0 GZL:236 TEMPH:241 TEMPL:16
------------
AXH:2 AXL:64 AYH:192 AYL:84 AZH:254 AZL:48 GXH:253 GXL:9 GYH:0 GYL:85 GZH:255 GZL:0 TEMPH:241 TEMPL:240
------------
AXH:2 AXL:104 AYH:192 AYL:132 AZH:254 AZL:192 GXH:252 GXL:246 GYH:0 GYL:78 GZH:255 GZL:11 TEMPH:242 TEMPL:240
------------
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
有没有人知道这是怎么回事?
这数据还好呀,本来就会跳的;
技术总监, 积分 25424, 距离下一级还需 24576 积分
技术总监, 积分 25424, 距离下一级还需 24576 积分
技术总监, 积分 25424, 距离下一级还需 24576 积分
技术总监, 积分 25424, 距离下一级还需 24576 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
有没有人帮忙分析一下数据,是MPU坏了,还是代码问题
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
初级技术员, 积分 94, 距离下一级还需 6 积分
这数据还好呀,本来就会跳的;
就是会跳也不用这么离谱,我都没有动它,数据一直在跳变
资深工程师, 积分 18454, 距离下一级还需 1546 积分
资深工程师, 积分 18454, 距离下一级还需 1546 积分
资深工程师, 积分 18454, 距离下一级还需 1546 积分
资深工程师, 积分 18454, 距离下一级还需 1546 积分
可能是焊接存在问题。
资深工程师, 积分 18454, 距离下一级还需 1546 积分
资深工程师, 积分 18454, 距离下一级还需 1546 积分
资深工程师, 积分 18454, 距离下一级还需 1546 积分
资深工程师, 积分 18454, 距离下一级还需 1546 积分
MPU6050焊接的时候有问题。
扫描二维码,随时随地手机跟帖
技术新星奖章
人才类勋章
技术领袖奖章
人才类勋章
时间类勋章
坚毅之洋流
发帖类勋章
荣誉元老奖章
等级类勋章
技术奇才奖章
人才类勋章
奔腾之江水
发帖类勋章
时间类勋章
精英会员奖章
等级类勋章
无冕之王奖章
等级类勋章
时间类勋章
您需要登录后才可以回帖查看: 983|回复: 46
求问:MPU6050第一次初始化不成功,总要复位才行(已解决)
本帖最后由 FSL_TICS_ZJJ 于
15:22 编辑
做车中,之前一直用的是模拟陀螺仪,最近在调试数字陀螺仪,用的是KL26的单片机
但是每次程序第一遍运行,总是数据不正确,需要按一下复位键才可以
查了一下说要软件复位,但是我在技术手册上没有找到哪个是软件复位的寄存器
我之前看程序一直都是直接用库,很少接触寄存器的东西
所以希望不要笑话,有没有人可以详解一下
以及为什么要软件先复位一下?谢谢了
会不会是调试下载选项没有钩,复位并运行选项?
会不会是调试下载选项没有钩,复位并运行选项?
~~~~(&_&)~~~~& &小女子愚钝,没看懂你说的是什么意思
右下角那个打挑。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
右下角那个打挑。
您用的是CW吗?
我用的是IAR6.7&&
还是这是Jlink里面的设置?
那个是keil的设置,IAR的话要点仿真才能下载。
或者在project下找到downlod。
那个是keil的设置,IAR的话要点仿真才能下载。
您指的是Download and Debugger吗?我每次下载烧录程序都是选择这一个,但是还是不可以~
爆照上三围& && &&&哇哈哈
进入调试页面后,要点全速运行才能开始,或者点X退出调试应该就开始运行了,不行的话就是连线有问题了。
进入调试页面后,要点全速运行才能开始,或者点X退出调试应该就开始运行了,不行的话就是连线有问题了。 ...
还是不行,就是每次我在插上烧录线之后,第一次运行之后,陀螺仪都采集不到值,然后我按一下单片机上的复位键再运行就又可以了
所以还是不知道该怎么解决这个问题
您知道软件复位应该怎么做吗?
谢谢O(∩_∩)O~&&我好希望早点解决
软件复位的话就写寄存器了,看手册吧。
软件复位的话就写寄存器了,看手册吧。
不过这是为什么要先复位呢?
而且我不太知道软件复位是什么意思
是让整个都复位吗?
SCB_AIRCR寄存器配置中,0x5FA && SCB_AIRCR_VECTKEY_SHIFT为该寄存器的“钥匙”,不得不说ARM将该寄存器保护的很好,还为其配了把钥匙,需要这个钥匙才能对其他的位进行操作,然后置位SYSRESETREQ即可实现软件复位。另外,在这个配置操作的前后,也分别添加了两个__DSB()指令,该指令用来保证在软件复位之前和之后保证内存数据操作都已完成,避免在有些数据还没有来的及更新到目标地址或者目标寄存器前就触发芯片复位从而造成数据丢失。
以上来自网络,具体找本ARM入门的书都有讲。
不过这是为什么要先复位呢?
而且我不太知道软件复位是什么意思
是让整个都复位吗? ...
不复位单片机怎么知道从哪儿开始运行程序?
不复位单片机怎么知道从哪儿开始运行程序?
原来说软件复位是指要复位单片机,我理解的是要将数字陀螺仪进行软件复位呢
我看陀螺仪的寄存器,当时没找到,我再仔细去看一下
谢谢耐心解答
如果你用的是MPU6050请上电一段时间再初始化。
我之前用6050,下载别人的库,直接调用函数,就有数据了,你这种情况没有遇到
如果你用的是MPU6050请上电一段时间再初始化。
我延时也做了大约300ms~~~
MPU6050我刚在嘉立创 买了,后日应该回到啦,到时参考一下你的设计看看
妹纸,发个照片让大家色色吧?
MPU6050我刚在嘉立创 买了,后日应该回到啦,到时参考一下你的设计看看
恩呢,共同学习,不过我也是看的例程大概移植了一下
基本上就可以了,但是就是这一个问题比较不解
我之前用6050,下载别人的库,直接调用函数,就有数据了,你这种情况没有遇到 ...
所以我也比较纳闷~~
所以我也比较纳闷~~
你用示波器抓个时序出来看看?&&是不是时序配合不好
哇& &有女生搞MPU6050& &不容易啊
女孩呀!不容易,很快就是高手了
你需要复位的是陀螺仪还是单片机?
软件复位的话就写寄存器了,看手册吧。
您好,我刚才又检查了一下
如果我插着烧录线,先运行后上电,数据采集不正确
按一下复位键,正常
如果我不插烧录线,上电运行,用蓝牙看也是正常的
所以可能我多虑了
但是我还是不知道为什么插烧录线和不插烧录线有这个区别
你用示波器抓个时序出来看看?&&是不是时序配合不好
看了一下时序,因为这会儿没办法双踪示波,但是复位前和复位后感觉波形差不多
不知道烧录线是不是有很大的影响
哇& &有女生搞MPU6050& &不容易啊
唔啊,说笑了\(^o^)/~
就是用到了感觉性能比较好,但是自己还是太差了
好多不懂的和不会的
女孩呀!不容易,很快就是高手了
你需要复位的是陀螺仪还是单片机?
我之前希望复位的是陀螺仪
但是现在发现不插烧录线 蓝牙发出来的数据不复位也是正确的
插了烧录线就要复位一次
但是还是想知道怎么样对陀螺仪软件复位
刚开始看寄存器,有点不太懂,楼上也有大神解答了一下
我明天再来试试看
不过不知道您知道怎么复位陀螺仪吗
谢谢咯O(∩_∩)O~
楼主是妹纸? 论坛规矩,赶紧上PP
楼主是妹纸? 论坛规矩,赶紧上PP
不急不急,解决了问题再上PP,不然打PP
不急不急,解决了问题再上PP,不然打PP
后面的PP我看懂了,前面的PP什么意思????
后面的PP我看懂了,前面的PP什么意思????
当然是照片啦
当然是照片啦
好吧,原谅我的无知,我以为内涵什么玄机呢
唔啊,说笑了\(^o^)/~
就是用到了感觉性能比较好,但是自己还是太差了
好多不懂的和不会的 ...
这妹子不错& & 有钱途& && & 加油 !
好吧,原谅我的无知,我以为内涵什么玄机呢
去签到领FB吧,再在MM的贴子里纠缠,打PP
没有用过MPU6050&&学习了
关于软件复位,可以看看这篇文章:
关于软件复位,可以看看这篇文章:http://blog.chinaaet.com/detail/35920
谢谢版主,至于插烧录线和不插烧录线的不同,我有点不太懂
今天没时间了,明天我再仔细来学习一下O(∩_∩)O~
当然是照片啦
看到你们的回复,我整个人都不好了~~嘤嘤
还是多学点知识比较重要~~~~(&_&)~~~~
没有用过MPU6050&&学习了
共同学习啦~~(*^__^*) ~
看到你们的回复,我整个人都不好了~~嘤嘤
还是多学点知识比较重要~~~~(&_
哪就上两张PP,让XD们happy下
看到你们的回复,我整个人都不好了~~嘤嘤
还是多学点知识比较重要~~~~(&_
不矛盾,妹纸你上了PP先,以后XD们绝对有问必答。
我之前希望复位的是陀螺仪
但是现在发现不插烧录线 蓝牙发出来的数据不复位也是正确的
插了烧录线就要复 ...
一般软件复位陀螺仪,就是给他复位脚一定时间的低电平
阿莫电子论坛, 原"中国电子开发网"
, 原www.ourdev.cn, 原www.ouravr.com查看: 2119|回复: 15
MPU6050采集加速度一段时间后变成0
如题,我在用mpu6050做计步器,数据处理是在定时器中断里面写的。但是有一个问题就是,加速度采集的数据会周期性的从正常变到0在逐渐正常,往返很多次后,数据就一直为0了。如图所示,那根蓝色的线就是加速度,不知道到底是什么原因。很纠结!谢谢大神们的帮忙
(87.42 KB, 下载次数: 1)
20:12 上传
论坛里有相关案例,可以参考
suoma 发表于
论坛里有相关案例,可以参考
您好我知道看到一个输出全为0的帖子,跟我这个情况不太一样, 别的并没有找到。您可否告诉我一个帖子?谢谢!
热搜MPU6050,我今天帮不了你
貌似你在定时器中断里面写太多事 ?
要有代码才能看出问题
tsaiwn 发表于
貌似你在定时器中断里面写太多事 ?
要有代码才能看出问题
那我把代码发上来看看吧!就是有点长,希望您可以帮帮忙~谢啦
//定时器T3中断处理函数
#pragma vector = T3_VECTOR
__interrupt void T3_ISR(void)
& & IRCON = 0x00;& && && &&&//清中断标志, 也可由硬件自动完成
& & if(Count_20ms++ &= Sample_Period)& && &&&//取10时正好20ms,考虑到AD采样,应适当减少。
& & {& && && && && &
& && &LED1 = ~LED1;
& && &Count_20ms = 0;
& && &Result_Test = AD_Sample();
& && &Sample_AD = First_Order_Filter();& &&&
& && &sprintf(strTemp, &%7d \t %7d \t %7d \t %7d \t %7d \t %7d \n&, \
& && && && && && && &Sample_AD, step, Peak, Valley, Discrepency, time_peak);& && &
& && &UartSendString(strTemp, strlen(strTemp));& &
& && &Find_Peak();
/****************************************************************************
* 名& & 称: Find_Peak()
* 功& & 能: 峰峰值方法检测迈步
* 出口参数: 无
****************************************************************************/
void Find_Peak()
&&int16_t Add_D
&&Add_Data =&&Sample_AD;& && &
&&for(Move_Data = 0; Move_Data & Count_Window_P Move_Data++)&&//数据搬移,所有数据往前一位,此处尽量修改
& & Value_Buf[Move_Data] = Value_Buf[Move_Data+1];
&&Value_Buf[Count_Window_Peak] = Add_D& && &//添加新的数据
&&time_peak++;& && && && && && && && && && && &&&//用来计算峰峰值之间的时间
&&if(Start == Flag_Find_Peak)
& & if(Value_Buf[0]&Value_Buf[1]&&Value_Buf[1]&Value_Buf[2]&&Value_Buf[2]&Value_Buf[3]&&
& && &Value_Buf[3]&Value_Buf[4]&&Value_Buf[4]&Value_Buf[5]&&Value_Buf[5]&Value_Buf[6])
& && &Peak = Value_Buf[Mid_Test];
& && &Flag_Find_Peak = S&&
& && &time_peak = 0;& && && && && && && && && && &//找到峰值时,time_peak重新开始计数
&&if(Stop == Flag_Find_Peak)
& & if(Value_Buf[0]&Value_Buf[1]&&Value_Buf[1]&Value_Buf[2]&&Value_Buf[2]&Value_Buf[3]&&
& && & Value_Buf[3]&Value_Buf[4]&&Value_Buf[4]&Value_Buf[5]&&Value_Buf[5]&Value_Buf[6])
& && &if(Low_Freq & Sample_Period*time_peak & High_Freq) //Sample_Period*time_peak计算峰峰值之间的时间
& && &{& && && && && && && && && && && && && && && &//在限定时间内才算有效步伐
& && &&&Valley = Value_Buf[Mid_Test];
& && &&&Flag_Find_Peak = S
& && &&&Flag_Start_Compare = S
& && &else& && && && && && && && && && && && && && &//若不在限定时间内则算无效,需重新开始
& && &&&Flag_Find_Peak = S
&&if(Start == Flag_Start_Compare )
& & Discrepency = Peak-V
& & //得到Discrepency后,开始进行迈步检测
& & if( Discrepency & 100)
& && &if( Search_Mode == Mode )& && & //搜索模式,判断是否为短暂的行为
& && &&&trans_step++;
& && &&&if( 5 == trans_step )& && &//若检测到连续的五次迈步,则进入确认模式
& && && & Mode = Confirm_M
& && && & trans_step = 0;
& && && & stop_test = 0;
& && &if( Confirm_Mode == Mode )& && && && &//确认模式
& && &&&if( TRUE == First_Confirm_Mode )& &//第一次进入确认模式,需加上5此检测迈步
& && && & step = step + 5;
& && && & First_Confirm_Mode = FAILURE;& && &&&
& && &&&else
& && && & step++;
& & if(Discrepency &= 100)& && && && && &//若差值过小,则说明不是正常迈步
& && &stop_test++;
& && &if( 5 == stop_test )& && && && &&&//连续五次检测阈值过小,则重新进入搜索模式
& && &&&First_Confirm_Mode = TRUE;
& && &&&Mode = Search_M
& && &&&trans_step = 0;
& && &&&stop_test = 0;
& & Flag_Start_Compare = S
&&if (800 == time_peak)
& & First_Confirm_Mode = TRUE;
& & Mode = Search_M
& & trans_step = 0;
& & stop_test = 0;
& & time_peak = 0;
/****************************************************************************
* 名& & 称: First_Order_Filter()
* 功& & 能: 一阶惯性滤波
* 出口参数: 滤波的数值
****************************************************************************/
int16_t First_Order_Filter()
&&Current_Result =&&Result_T
& & & & & & & & & & & & & & & &
&&Trans = Filter_Param_1 * Current_R
&&Trans = Trans + Pre_R
&&Filter_Result&&= (int16_t)T & & & & & & & & & & & & & & & & & & & & & & & & //送D/A输出
&&Pre_Result = Filter_Param * T
&&return (Filter_Result);
/****************************************************************************
* 名& & 称: AD_Sample()
* 功& & 能: 一阶惯性滤波
* 出口参数: 滤波的数值
****************************************************************************/
int16_t AD_Sample()
&&int16_t ax, ay, az,
&&MPU6050_GetRawAccelGyro(&ax, &ay, &az);
&&ax = ax&&3;
&&ay = ay&&3;
&&az = az&&3;
&&if(ax&0) ax = -
&&if(ay&0) ay = -
&&if(az&0) az = -
&&sum = (ax + ay + az)&&1;
&&return (sum);
没发主程序,因为主程序只有一些初始化,然后就是死循环了,死循环里面什么都没做
新手213123 发表于
//定时器T3中断处理函数
#pragma vector = T3_VECTOR
__interrupt void T3_ISR(void)
果然你在中断 __interrupt void T3_ISR(void) 里面做太多事了 !
其中最慢的是 UartSendString(strTemp, strlen(strTemp));& &
由你的 sprintf( )可算出 strTemp 有 59
& &UartSendString( ) 是类似 Serial.print( ),
只是 Serial.print( ) 有串口缓存区,
只要缓存区没满会立即返回, 真正送出的动作不会占用 CPU 的时间,
但是 UartSendString( ) 则是自己 byte by byte 送给 UART (串口)寄存器 !
如果你是用波特率 9600, 每送出一 char 要大约 1.05 ms,
送出 59 个就花掉了 60
如果你用波特率 115200, 则大约也要 6ms 左右!
可以先试着把事情移出 ISR( ),
改放到 loop( ) 内,
在 ISR( ) 内设定一个 flag 通知在 loop( ) 内要做采集相关工作,
int hasJob = 0;&&// 有事要做 !
__interrupt void T3_ISR(void)
& & IRCON = 0x00;& && && &&&//清中断标志, 也可由硬件自动完成
& & if(Count_20ms++ &= Sample_Period)& && &&&//取10时正好20ms,考虑到AD采样,应适当减少。
& & {& && && && && &
& && &LED1 = ~LED1;
& && &Count_20ms = 0;
& && &hasJob = 1; // 通知 loop 内的程序码 !
} // ISR()
当然, 在 loop( ) 内要检查 flag 并清除以免重复做, 类似这样:
&&if(hasJob != 0) {
& & hasJob = 0;
& & // do 采集相关工作 ...
tsaiwn 发表于
果然你在中断 __interrupt void T3_ISR(void) 里面做太多事了 !
其中最慢的是 UartSendString(strTemp ...
不过如果你的中断来得太快,
可能会有漏掉的情况(因为来不及处理),
你有估计过中断大约多久一次吗?
tsaiwn 发表于
不过如果你的中断来得太快,
可能会有漏掉的情况(因为来不及处理),
你有估计过中断大约多久一次吗?
谢谢!我一直以为是ad转换最浪费时间,没想到是串口最费。我的中断是例程里面考过来的。据说进入10次为20ms。不过我现在放弃用中断来处理了,我把这些都放到主程序里面,问题就解决了!谢啦!
新手213123 发表于
谢谢!我一直以为是ad转换最浪费时间,没想到是串口最费。我的中断是例程里面考过来的。据说进入10次为20 ...
(1)& & & & Congratulations
(2)进入10次为20ms, 那意思是每 2ms 进入一次
& &问题是, 你原先的写法,
& &即使你用波特率 115200,
& &则大约也要 6ms 左右才有办法从 UartSendString( ) 返回,
& &其他你做的估计大约 0.5ms 可做完,
& &可是在该 6.5ms 内无法产生中断(因为中断内是禁止中断的)!
& &这意思是说,
& &本来是每 2ms 中断一次,
& &但是当&&if(Count_20ms++ &= Sample_Period) 成立之时,
& &会有大约 6.5ms 不会有中断(因为在忙着做UartSendString( ) 的事情) !!
&&注意, 在这 6.5ms 中, 连 millis( ) 也不会变化,
&&因为 millis( ) 是靠中断才能改变, 既然中断被禁止, millis( ) 就不会变化了 !
tsaiwn 发表于
(1)& & & & Congratulations
(2)进入10次为20ms, 那意思是每 2ms 进入一次
& &问题是, 你原先的写法,
好深奥!我以前一直怕中断里面进中断。那这样的话,之前那个一直出现0会是什么原因呢?
tsaiwn 发表于
(1)& & & & Congratulations
(2)进入10次为20ms, 那意思是每 2ms 进入一次
& &问题是, 你原先的写法,
还有一个问题是,怎么估算程序运行的时间?谢谢
新手213123 发表于
好深奥!我以前一直怕中断里面进中断。那这样的话,之前那个一直出现0会是什么原因呢?
之前因为你在中断内做太多事,
导致太长时间没有中断, 那样取样就错了,
其实应该不只会出现 0,
你那些不是 0 的答案应该也都不太正确 !
新手213123 发表于
还有一个问题是,怎么估算程序运行的时间?谢谢
因为 UNO 和大部分板子用 16MHz clock,
这样就是 16 个machine clock 要 1 us,
通常 C 语言的一个句子大约 4 个指令 到 10 个machine clock
例如 byte x = 65;&&这句要 2 个machine clock,
又如 unsigned long kk = ;&&这句要 8 个machine clock
(因为 long 占用 4 个 bytes);
函数调用大约 4 个 clock, 如果有参数要额外时间,
又如果函数返回要把 value 放入 variable&&也要时间,
不过都只是多几个 clock,
但是调用 analogRead( ) 一次大约要 108 us&&( 因为要等 A to D 完成!)
请注意, 108us 是很久喔!
Serial 传送虽然很慢, 但只要你没有把串口的缓存区用满,
可以当作它不花 CPU 的时间(因为每个 char 大约花 3 us),
但是, 一旦你会把串口的缓存区用满,,
那多出的 char 无法送入缓存区, CPU 必须用 while( ) 等待无法做其他事,
这时(假设波特率9600)等于 CPU 要等待 1.1 ms 才送出一个 char !!
请注意, 1 ms = 1024 us 喔 !
有了这些概念
就可以估算出大略时间
如果要比较准
可在前后各调用一次 micros( ) 相减查知 !
Powered by

我要回帖

更多关于 mpu6050 dmp 的文章

 

随机推荐