热搜关键词: 电路基础ADC数字信号处理封装库PLC

pdf

四轴开发日志

  • 1星
  • 2016-01-28
  • 1.22MB
  • 需要2积分
  • 3次下载
标签: 四轴

四轴

MPU9250

MPU9250

四轴飞行器开发全程记录,以及上位机

文档内容节选

四旋翼飞控项目日志 作者:WZY 前言 大四下学期完成主体程序,大四毕业暑假加入操作系统,希望大家共同学习,共同进步 20138 时间 2013 年2 月2 日115737 项目进展了这么久第一次写日志,总结一下这一段时间的经验首先,我通过李想的 stm32 教学视频对 stm32 进行了简单的了解,发现 stm32 用起来比 51 都方便,原来一直被arm 难学误导了,单片机只是工具,真正编算法才是难点,所以以后在做项目时不应该过分考 虑单片机是否好用这个问题,只要适合项目的单片机就应该拿来用 李想视频里编译环境是 MDK,所以在编程时一直使用 MDK 编译,感觉和学 51 时用的 keil 一模一样,比较好上手由于项目所要做的第一步是要做姿态解算,所以在初步了解 stm32 原理以后,就开始从 MPU6050 传感器读数据MPU6050 是一个集成了加速度计和陀螺仪的 传感器,使用 I2C 和单片机进行通信,总体来说读取数据还是比较简单的但是也遇到一些 比较烦人的问......

四旋翼飞控项目日志
½者:WZY
前言
大四下学期完成主½程序,大四毕业暑假加入操½系统,希望大家共同学习,共同进步。
2013.8
时间
2013
2
2
11:57:37
项目进展了这么久第一次写日志,
总结一下这一段时间的经验。
首先,
我通过李想的
stm32
教学视频对
stm32
进行了简单的了解,发现
stm32
用起来比
51
½方便,原来一直被“arm
难学”误导了,单片机只是工具,真正编算法才是难点,所以以后在做项目时不应该过分考
虑单片机是否½用这个问题,只要适合项目的单片机就应该拿来用。
李想视频里编译环境是
MDK,所以在编程时一直½用 MDK
编译,感觉和学
51
时用的
keil
一模一样,比较½上手。由于项目所要做的第一步是要做姿态解算,所以在初步了解
stm32
原理以后,就开始从
MPU6050
传感器读数据。MPU6050 是一个集成了加速度计和陀螺仪的
传感器,½用
I2C
和单片机进行通信,总½来说读取数据还是比较简单的。½是也遇到一些
比较烦人的问题,卡了½久。一个是变量类型搞错了
这是一段读取
MPU6050
陀螺仪
x
½数据的程序,先通过
I2C
½数把陀螺仪
X
½数据的½
8
½和高
8
½读取出来,
分别放入
BUF[0]和 BUF[1]中,
在通过移½把两个数据合成一个数据传
G_X
变量,G_X 是一个
short
型变量,而
imu_measure.gx
是一个
double
型变量,编译器
编译是自动把
G_X
½成
double
型除以
16.4
赋值给
imu_measure.gx。
曾经犯过一个错误就是
BUF
数组数据相合后直接除以
16.4
然后赋值给
imu_measure.gx,结果通过串口传回来的
数据就出现了错误。以后要避免这种错误。
在新添加文件后要记着把文件添加进工程,否则编译会出错。
至于为什么除以
16.4,参考《MPU-6050
寄存器映射》第
32
MPU6050
初始化时把
Full Scale Range
设½为 ±2000°/s,
所以灵敏度为
16.4 LSB/°/s,
所以在读出寄存器值的基础上除以
16.4
就是角速度。
而对于加速度,设½为±8g,灵敏度为
4096,所以在读出值的基础上除以 4096
就是加速
度,单½为
g,再乘以 9.8
单½就是
m/s^2,所以 8192/9.8=835.066,除以这个值就是加速度
(m/s^2)
。同理,在理解
MPU6050
初始化的设½时,参考这本手册即可。
要设½为+-4g 即
0000100=0x08
还有一个就是
extern
变量的½用。正确的用法是在初始化的地方定义(½数外定义,如
果在½数内则会是局部变量)然后在
External_Variable.h
文件中用
extern
关键字再定义一遍
(注意,这里不要赋值)
,告诉编译器,这个变量在其他地方已经定义过,直接½用即可。
然后需要用到全局变量的文件开头进行#Include
“External_Variable.h”,就可以了。
MPU6050
传感器初始化时,½用
I2C
总线½数即可,例如:
Single_Write(MPU6050_Addr,PWR_MGMT_1, 0x00);
//解除休眠状态
分别写入
MPU6050
地址,寄存器地址,和写入的值即可。出现一个问题就是
MPU6050
I2C
地址在手册上写的是
7
½固定,
0x68 1101000)
½有的例程上给的是直接写入
0x68,
实际在½用过程中写入
0xD0(11010000)才有反应,即 7
为固定½加一½硬件设½的地址
½(BIT0=0)。
MPU6050
初始化后就可以不停的读取传感器值进行姿态解算了。在姿态解算前,我先
对四元数进行了初始化,
即飞控板在静止状态下通过加速度计解算欧拉角,
再通过四元数公
式计算(即½数
quat_init())。其实感觉这里不初始化也可以,因为姿态解算速度很快,第
一次的值对以后½响并不大。
随后就开始真正的姿态解算了,首先要对读取的传感器值进行移动均值滤波。定义了
Filter_ACC
结构½,先把读取值加到这个结构½变量里,每加一次,积分标记½加
1。½定
时器中断触发。姿态解算周期到来时,进入
if(IMUupdate_flag == TRUE){}里面求平均值并对
变量清零,完成移动均值滤波。
滤波过后,就开始用
IMUupdate()½数进行解算,这个½数是参考
展开预览

猜您喜欢

评论

likuya
可以学习下。
2019-07-17 23:46:43
登录/注册

意见反馈

求资源

回顶部

推荐内容

热门活动

热门器件

随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
×