stm32 mpu6050 stm32例程程序

播放列表加载中...
正在载入...
分享视频:
嵌入代码:
拍下二维码,随时随地看视频
stm32读取MPU-6050 DMP数据效果
上 传 者:
内容介绍:
stm32读取MPU-6050 DMP数据效果
Channel Me 精选
我来说点啥
版权所有 CopyRight
| 京网文[0号 |
| 京公网安备:
互联网药品信息服务资格证:(京)-非经营性- | 广播电视节目制作经营许可证:(京)字第403号
<img src="" width="34" height="34"/>
<img src=""/>
<li data-vid="">
<img src=""/><i data-vid="" class="ckl_plays">
<li data-vid="">
<img src=""/><i data-vid="" class="ckl_plays">
<img src="///img/blank.png" data-src=""/>
<img src="///img/blank.png" data-src="http://"/>
<li data-vid="" class="cfix">
src="///img/blank.png" data-src=""/>
<i data-vid="" class="ckl_plays">
<li data-vid="" class="cfix">
src="///img/blank.png" data-src=""/><i data-vid="" class="ckl_plays">
没有数据!
{upload_level_name}
粉丝 {fans_count}
{video_count}
{description}采用stm32f103CB硬件I2C1/2(自制硬件)中断/DMA访问,四轴开源程序,DMP,PCB外框图纸库文件,USBToVCOM代码下位机-电子产品世界论坛
采用stm32f103CB硬件I2C1/2(自制硬件)中断/DMA访问,四轴开源程序,DMP,PCB外框图纸库文件,USBToVCOM代码下位机
摸着石头,终于过了河,看各种论坛好多帖、资料、调试经验,然后实践中获得成功飞行。不过,各种专业知识、各种公式、各种计算转换、各种理论一窍不通,路~还有好长好长~~~要走啊!!!
如果想即时了解问题的请加QQ群:(加群分享更多代码、图纸、资料。一套真正能飞的资料(NRF24L01、硬件IIC、互补滤波、IMU、卡尔曼、串级PID、USBToVCOM))
内容如题,今天刚搞出来的,只是陀螺仪的一些参数没来的及调试。
本贴原地址:
1.下面的9.02、9.24的用的I2C1访问MPU的是I2C2访问MPU6050。
2.无论哪一个i2c都需要这个函数复位总线, && i2cdevResetBusI2cX(); 否则会出现总线不受控,无效的状态。
3.四轴PCB外框图纸FLY-2.zip里包括.DWG和.DXF的文件,用AutoCAD画的图纸,.DXF的文件可以直接导入AD6.9PCB中,注意选择的时候要选mm,不是inch哦,要想编辑外框的话,可以打开.DWG文件画好图纸后另存为2002版的DXF格式就可以导入PCB中了,外框设计很简单。。。。。
4.FLY-1_PCBLIB.zip文件为小四轴用的PCB元件库,版本是AD6.9用的,FLY-1_PCB.zip是小四轴的pcb文件,同样用软件AD6.9绘制的。
5.代码是用sourceinsight 3.5 编辑的,在文件si-prj下有工程,直接打开了就看,这款编辑软件相当好使,无论是分析移植别人的源码,还是自己写代码都比较NB,&可随意查找整个工程文件连接字符。
6.BT_USB_0.1_2.10_02.rar代码是四轴下位机,配合匿名上位机软件,直接用USB口上传数据,速度很快且比较稳定,关于USB转串口请看以下“USB传串口”。
调试串级PID:
USB转串口:
要看大四轴的,请关注:
有视频哦~(还能看。。。。你懂的!)
以下为代码打包文件、四轴pcb文件、pcb库文件、pcb板外框图纸,回复可见,谢谢!
大四视频:
关键词:&&&&&&&&&&&&
在单步调试的时候,初始化程序里IIC有的时候会死机,因为单步运行的时候由于速度较慢根本检测不到管脚的迅速变化,只需要Reset下就可以了。角速度量程要选大点,因为小四周的震旦惯性很小,故频率就高,变化的角速度就很快,所以要选大点的量程;不然在摆动的时候测出来的数据会不动,停在某个角度的。
程序直接可以用sourceinsight打开,在si-prj文件里的工程;其实有很多程序文件编辑器,slickedit也比较好使;
四轴的ROLL,PITCH,YAW的部分算法程序;
//二阶毕卡法
void IMUupdate(float* Roll, float* Pitch, float* Yaw,
float gx, float gy, float gz,
float ax, float ay, float az, float* fusionDt)
#ifdef IMUMpu_Set
float delta_2=0;
float gx, gy, gz, ax, ay,
float Fgx, Fgy, F // estimated gravity direction
float norm = 0.0f;
float halfT;
float vx, vy,
float ex, ey,
const static float FACTOR = 0.002;
// 先把这些用得到的值算好
float q0q0 = q0*q0;
float q0q1 = q0*q1;
float q0q2 = q0*q2;
float q0q3 = q0*q3;
float q1q1 = q1*q1;
float q1q2 = q1*q2;
float q1q3 = q1*q3;
float q2q2 = q2*q2;
float q2q3 = q2*q3;
float q3q3 = q3*q3;
getInitMpu(&gx, &gy, &gz, &ax, &ay, &az);
/*归一化测量值,加速度计和磁力计的单位是什么都无所谓,因为它们在此被作了归一化处理*/
//normalise the measurements
norm = invSqrt(ax*ax + ay*ay + az*az);
norm = sqrt(ax*ax + ay*ay + az*az);
vx = 2*(q1q3 - q0q2);
vy = 2*(q0q1 + q2q3);
vz = q0q0 - q1q1 - q2q2 + q3q3;
//现在把加速度的测量矢量和参考矢量做叉积,把磁场的测量矢量和参考矢量也做叉积。都拿来来修正陀螺。
// error is sum of cross product between reference direction of fields and direction measured by sensors
ex = (ay*vz - az*vy);
ey = (az*vx - ax*vz);
ez = (ax*vy - ay*vx);
// integral error scaled integral gain
exInt = exInt + ex*Ki;
eyInt = eyInt + ey*Ki;
ezInt = ezInt + ez*Ki;
// adjusted gyroscope measurements
gx = gx + Kp*ex + exI
gy = gy + Kp*ey + eyI
gz = gz + Kp*ez + ezI
halfT = SysTickUser / 2000;
*fusionDt = SysTickUser / 1000;
*fusionDt = 0.002;
gx = gx + ex*FACTOR/halfT;
//校正陀螺仪测量值
用叉积误差来做PI修正陀螺零偏
gy = gy + ey*FACTOR/halfT;
gz = gz + ez*FACTOR/halfT;
delta_2=(2*halfT*gx)*(2*halfT*gx)+(2*halfT*gy)*(2*halfT*gy)+(2*halfT*gz)*(2*halfT*gz);
q0 = (1-delta_2/8)*q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
// 整合四元数率
四元数微分方程
四元数更新算法,二阶毕卡法
q1 = (1-delta_2/8)*q1 + (q0*gx + q2*gz - q3*gy)*halfT;
q2 = (1-delta_2/8)*q2 + (q0*gy - q1*gz + q3*gx)*halfT;
q3 = (1-delta_2/8)*q3 + (q0*gz + q1*gy - q2*gx)*halfT;
// integrate quaternion rate and normalise,四元数更新算法,一阶龙格-库塔法
q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
q3 = q3 + (q0*gz + q1*gy - q2*gx)*halfT;
// normalise quaternion
norm = invSqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
norm = sqrt(q0*q0 + q1*q1 + q2*q2 + q3*q3);
由四元数计算出Pitch
Yaw,乘以57.3是为了将弧度转化为角度,陀螺仪x轴为前进方向
*Pitch = asin(2 * q2 * q3 + 2 * q0 * q1) * 57.295780; //俯仰角,绕x轴转动
= -atan2(2 * q1 * q3 - 2 * q0 * q2, -2 * q1 * q1 - 2 * q2* q2 + 1) * 57.295780; //滚动角,绕y轴转动
= atan2(2 * q1 * q2 + 2 * q0 * q3, -2 * q2 * q2 - 2 * q3 * q3 + 1) * 57.295780;
//偏航角,绕z轴转动
= asin(-2 * q1 * q3 + 2 * q0* q2)*57.295780; // pitch
*Roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)*57.295780; // roll
= -atan2(2 * q1 * q2 + 2 * q0 * q3, -2 * q2 * q2 - 2 * q3 * q3 + 1)*57.295780;
//偏航角,绕z轴转动
if(*Yaw & -180 ){*Yaw = *Yaw + 360;}
if(*Yaw & 180 ){*Yaw = *Yaw - 360;}
程序里运用了匿名四轴的上位机的接口程序,可以直接用匿名的上位机通信。
看看 ,好专业!
楼主& 咱们的论坛是支持代码插入功能的
哈哈,不经常发帖,不会用啊!
匿名不能发帖!请先 [
Copyright (C) 《电子产品世界》杂志社 版权所有MPU6050的数据处理疑问_stm32吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:9,289贴子:
MPU6050的数据处理疑问收藏
菜鸟我最近在调试这个6050,我先把程序的一些设置给大家说下,大家帮我看看吧~!拜托了陀螺仪:灵敏度 16.4 LSB/(°/s)
量程+/- 2000°/s加速度仪:灵敏度 16384 LSB/g 量程+/- 2g问题来了,我先把6050放在桌面上,采集回来的数据如图:上图中大家看AZ=0.9g还能理解 因为重力加速度在可是当我把6050片子以Y轴进行180度来个底朝天旋转,大家请看图:为什么AY达到了3.8个g呢?而AZ也到了2.9个g?但是我选的量程才+/-2g啊?这是什么情况啊
坐等大神前来支招
mpu6050的输出是16位补码形式的,第一位是符号位,0便是正,1是负,从0000到ffff,其中0000-7fff是表示正的0-2g,8000-ffff为负的0-2g你是把得到的值直接除了Sensitivity得到的吧
楼主,你好,我最近正在学用STM32写MPU6050,可是进展不是很好,希望能有一份好的例程学习,可以把你的完整的源程序发给我吗?我的邮箱
楼主是如何将原始数据转换成角速度和加速度的??能开源么
楼主 求你的程序
我读出来的数据更坑 拯救一下我 行不
LZ那个量程是怎么设定的啊。。。
楼主,请问原始数据应该乘以灵敏度还是除以灵敏度才得到真正的加速度或者角速度啊?
请问mpu6050得到的数据通过模拟i2c之后怎么通过串口输出?这些数据具体是怎样的?
楼主!能给一份代码吗?我到现在还没测出值来!一直显示0,。。。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或mpu6050程序
stm32 - 下载频道
- CSDN.NET
&&&&mpu6050程序
mpu6050程序
MPU-6050 模块 整合3轴陀螺仪 3轴加速器 姿态模块 用stm32调试可用
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
开发技术下载排行

我要回帖

更多关于 stm32的mpu6050程序 的文章

 

随机推荐